2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Помогите исправить код
Сообщение18.09.2012, 19:32 
Используется синтаксис 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 
Пробельчик между int и _tmain забыли.
P.S. Удивительное дело! Оказывается, для кого-то сложнее скопировать текст программы, чем сделать скриншот, сохранить его, залить на... и т.д.
P.P.S. В следующий раз все-таки не поленитесь скопировать текст программы :wink: (обрамив его славным тегом syntax).

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

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

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

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

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

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 
Спасибо за замечания
Исправил прогу на такую
Используется синтаксис 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 
А про это вам забыли упомянуть.

Точка с запятой после заголовка функции 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 
Цитата:
Точка с запятой после заголовка функции 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 
1. Забыли про stdio.h.
2. Убрать точку с запятой в конце строчки с _tmain.
3. Не инициализирована переменная x.
4. Формат для печати double - "%lf". Буква l (L маленькая) нужна.

 
 
 
 Re: Помогите исправить код
Сообщение18.09.2012, 21:50 
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 
Аватара пользователя

(Оффтоп)

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 
можно еще маленький вопрос
а где написать еще одну другую программу после этой с другими переменными?
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Неудивительно. Один файл компилируется в не более чем один файл.

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

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

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

 
 
 [ Сообщений: 21 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group