2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Помогите исправить код
Сообщение18.09.2012, 19:32 
Заблокирован


18/09/12

45
Используется синтаксис C
#include "stdafx.h"
         "math.h"


int _tmain(int argc, _TCHAR* argv[]);
{int x,y,
a=x-1;
b=x+1;
        y=pow(x*a*b*b+1, 1.0/3)/a*b*b*b;
printf("x=%f\t y=%t\n\n",x,y);
                       
        return 0
}
 

Выдает две ошибки-синтаксическая ошибка и отсутствие заголовка функции
хотя вроде код правильный
что сделать?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 19:38 
Заслуженный участник


28/04/09
1933
Пробельчик между int и _tmain забыли.
P.S. Удивительное дело! Оказывается, для кого-то сложнее скопировать текст программы, чем сделать скриншот, сохранить его, залить на... и т.д.
P.P.S. В следующий раз все-таки не поленитесь скопировать текст программы :wink: (обрамив его славным тегом syntax).

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 19:41 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена в Карантин.

Уберите ссылку на картинку и вставьте код в сообщение с помощью тега syntax

После того как исправите сообщение, сообщите об этом в теме Сообщение в карантине исправлено.

 Профиль  
                  
 
 Posted automatically
Сообщение18.09.2012, 20:29 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Карантин» в форум «Программирование»

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:07 
Заслуженный участник
Аватара пользователя


30/01/06
72407
По личной просьбе.

Iby в сообщении #620671 писал(а):

Используется синтаксис C
#include "stdafx.h"
#include "stdio.h"
#include "math.h"

Каждый #include ставится на отдельной строчке, и включает один заголовочный файл. Конкретный набор заголовочных файлов надо подбирать с учётом того, что используется в программе. В данной программе используется ввод-вывод и математика - отсюда хэдеры (заголовочные файлы) "stdio.h" и "math.h". "stdafx.h" нужен для каких-то нестандартных приколов Visual C++, его надо просто оставить и не трогать. То же относится к заголовку _tmain(). Правда, если у вас компилятор ругается, то может быть, надо писать не _tmain(), а main().

Iby в сообщении #620671 писал(а):

Вы должны определить переменные, а потом с ними работать. Например, так:
Используется синтаксис C
        int x,y,a,b;
        a=x-1;
        b=x+1;

Отдельные ; разделяют между собой предложения, как в русском языке точки. Первое предложение - объявление четырёх переменных типа int. Потом идут предложения, осуществляющие вычисления.

Знак = может встречаться и в объявлении переменных, но означает там другое: инициализацию (присваивание начального значения). Хорошим стилем является присваивать начальные значения всем переменным, потому что иначе в них может оказаться "мусор" - какие-то случайные числа. Если их использовать в вычислениях, то программа выдаст непредсказуемый и ненужный результат, от неё обычно нужно другое.
Используется синтаксис C
        int x, y, a=x-1, b=x+1;

Здесь объявляются те же четыре переменные, и делаются те же операции, но они делаются не как отдельные вычисления, а на этапе создания переменных.

Iby в сообщении #620671 писал(а):

Всё это хорошо, но выглядит как вычисления с дробными числами, а переменные у вас объявлены как целые, то есть в результате может получиться не то, что вы ожидаете. Для вычислений с дробными числами, их надо объявлять не int, а double.

Iby в сообщении #620671 писал(а):

Скорей всего, вы имели в виду
Используется синтаксис C
        printf("x=%f\t y=%f\n\n",x,y);

%t не напечатает числа y. Результат вообще будет неопределён, а в Visual C++ напечатается буква t.

Но здесь надо следить за совпадением типов переменных, и способа их печати. У вас они разные, это ошибка (скомпилируется нормально, но не сработает). Варианты: целые переменные:
Используется синтаксис C
        int x, y;
        /* ... */
        printf("x=%d\t y=%d\n\n",x,y);

дробные переменные:
Используется синтаксис C
        double x, y;
        /* ... */
        printf("x=%f\t y=%f\n\n",x,y);


Iby в сообщении #620671 писал(а):

Используется синтаксис C
        return 0;

; опускать нельзя, даже для последнего предложения внутри блока. Это не Паскаль. Можно только после закрывающей фигурной скобки блока, и даже нужно во многих случаях.

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:29 
Заблокирован


18/09/12

45
Спасибо за замечания
Исправил прогу на такую
Используется синтаксис C
#include "stdafx.h"
#include "math.h"


int _tmain(int argc, _TCHAR* argv[]);
{ double x,y,a=x-1,b=x+1;
y=pow(x*a*b*b+1,1.0/3)/a*b*b*b;
printf("x=%f\t y=%f\n\n",x,y);
        return 0;
}
 

Вроде должна работать
но вылезает одна ошибка-ошибка с2447(отсутствует заголовок функции) :?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:34 
Заслуженный участник


27/04/09
28128
А про это вам забыли упомянуть.

Точка с запятой после заголовка функции int _tmain(int argc, _TCHAR* argv[]) не нужна — в определении функции её тело должно идти сразу после заголовка, ничем не разделяясь. А вот если вам просто хочется показать, что будет где-то внизу определена такая функция, чтобы компилятор об этом знал заранее (такое бывает нужно) — тогда пишется заголовок и ;, и конец предложения.

В данном случае компилятор успешно берёт на заметку, что где-то внизу будет _tmain, а потом натыкается на операторные скобки. И тут он удивляется: чьё добро? Иной бы мог поинтересоваться, почему вместо предложения стоит {.

И, Iby, не забивайте на отступы и пробелы между словами и символами — даже если эту программу вам надо написать один раз, а потом выкинуть. Невероятное случается чаще, чем кажется. (Ну, комментарии тоже важны, но здесь можно и обойтись.)

Кстати, в pow(x*a*b*b+1, 1.0/3)/a*b*b*b точно не забыта парочка скобок?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:37 
Заблокирован


18/09/12

45
Цитата:
Точка с запятой после заголовка функции int _tmain(int argc, _TCHAR* argv[]) не нужна — в определении функции её тело должно идти сразу после заголовка, ничем не разделяясь.
хм, если напишу без ;-он выдает ошибку


Цитата:
Кстати, в pow(x*a*b*b+1, 1.0/3)/a*b*b*b точно не забыта парочка скобок?
неа :-)

-- 18.09.2012, 21:40 --

Цитата:
Точка с запятой после заголовка функции int _tmain(int argc, _TCHAR* argv[]) не нужна
да вы правы :D
ее убрал и все заработало :-)
Всем огромное спасибо за помощь
тему можно закрывать)

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:41 
Заслуженный участник


04/05/09
4587
1. Забыли про stdio.h.
2. Убрать точку с запятой в конце строчки с _tmain.
3. Не инициализирована переменная x.
4. Формат для печати double - "%lf". Буква l (L маленькая) нужна.

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:50 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Iby в сообщении #620671 писал(а):
Выдает две ошибки-синтаксическая ошибка и отсутствие заголовка функции

Как-то мало. Формальными ошибками являются отсутствие хэдера #include, неопределённая переменная b, отсутствие ; в предпоследней строке, лишняя точка с запятой при объявлении функции (которая ведет к тому, что следующий код вообще непонятно к чему относится).

Только немножко по поводу:
Используется синтаксис C
int _tmain(int argc, _TCHAR* argv[])
_tmain - милое Майкрософтовское расширение, это такая бяка, которая заменяется на main, если у вас не определен UNICODE, точнее, вся строка заменяется на
Используется синтаксис C
int main(int argc, char *argv[])
 
В противном случае это интерпретируется как
Используется синтаксис C
int wmain(int argc, wchar_t *argv[])


Если вообще непонятно, что это такое, рекомендуется делать пустой проект (только я не помню, как это в вижеле делается). Либо определением функции ставить
Используется синтаксис C
int main(int argc, char *argv[])
Это, к тому же, повышает мультиплатформенность. :D

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 22:05 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

arseniiv в сообщении #620746 писал(а):
А про это вам забыли упомянуть.

Точка с запятой после заголовка функции int _tmain(int argc, _TCHAR* argv[]) не нужна

Проглядел. Давно глазами не компилировал.


Iby в сообщении #620749 писал(а):
хм, если напишу без ;-он выдает ошибку

Какую? Формулировки ошибок лучше приводить как есть, максимально точно, с указанием на номера строк.

На разных компьютерах с разными компиляторами ошибки будут разные, так что не заставляйте окружающих быть телепатами.

venco в сообщении #620753 писал(а):
4. Формат для печати double - "%lf". Буква l (L маленькая) нужна.

Это за пределами моих знаний. Разве float double по умолчанию в ...-функциях не преобразуется?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 22:12 
Заблокирован


18/09/12

45
можно еще маленький вопрос
а где написать еще одну другую программу после этой с другими переменными?
код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include "stdafx.h"
#include "math.h"


int _tmain(int argc, _TCHAR* argv[])
{double x=0,y,a=x-1,b=x+1;
y=pow((x*a*b*b+1),1.0/3)/a*b*b*b;
printf("x=%f\t y=%f\n\n",x,y);

        return 0;
}

int _wmain(int argc, _TCHAR* argv[])
{double x=5,y;
y=pow(x*x*x*x+x*x*x-x*x-x+1,1.0/3)/(x*x*x*x+2*x*x*x-2*x-1);
printf("x=%f\t y=%f\n\n",x,y);
     return 0;
}
 

выдает результат только первой программы :?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 22:16 
Заслуженный участник


27/04/09
28128
Неудивительно. Один файл компилируется в не более чем один файл.

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 22:17 
Заблокирован


18/09/12

45
ммм-а что сделать?

 Профиль  
                  
 
 Re: Помогите исправить код
Сообщение18.09.2012, 22:20 
Заслуженный участник


20/07/09
4026
МФТИ ФУПМ
Переписать программу, добиавить в нее функции.
Создать новый проект.
Посчитать на калькуляторе.

Не знаю, что еще. А вы это зачем программируете?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group