2014 dxdy logo

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

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




 
 C++
Сообщение09.02.2011, 16:50 
у меня проблема... C++ выплёвывает часть вычислений, а именно:
A=(b^2+c^2-a^2)/(2*c*b);
B=(c^2+a^2-b^2)/(2*c*a);
C=(a^2+b^2-c^2)/(2*a*b);

 
 
 
 Re: C++
Сообщение09.02.2011, 17:01 
Что значит "выплёвывает"?

 
 
 
 Re: C++
Сообщение09.02.2011, 17:03 
не производит вычислений
а компилирует всё нормльно

 
 
 
 Re: C++
Сообщение09.02.2011, 17:09 
dfyz2005 в сообщении #411011 писал(а):
не производит вычислений
а компилирует всё нормльно
Вы в курсе, что в C/C++ делает оператор ^?

 
 
 
 Re: C++
Сообщение09.02.2011, 17:35 
я пробовал и как a*a писать, всё равно

 
 
 
 Re: C++
Сообщение09.02.2011, 17:41 
dfyz2005 в сообщении #411032 писал(а):
я пробовал и как a*a писать, всё равно
ОК. Если Вам нравится такая дискуссия, то по-моему, у Вас в программе ошибка.

 
 
 
 Re: C++
Сообщение09.02.2011, 17:44 
int a, b, c, A, B, C,gradA,gradB,gradC;
const double pi = 3.1415926535897932384626433832795;
cin >>a>>b>>c;
A=(b^2+c^2-a^2)/(2*c*b);
B=(c^2+a^2-b^2)/(2*c*a);
C=(a^2+b^2-c^2)/(2*a*b);
cout<<A<<B<<C;
A=acos(A);
B=acos(B);
C=acos(C);
gradA=(180/pi)*A;
gradB=(180/pi)*B;
gradC=(180/pi)*C;

cout<<gradA;
cout<<gradB;
cout<<gradC;
getch();
return 0;

-- Ср фев 09, 2011 17:44:19 --

это тело проги

 
 
 
 Re: C++
Сообщение09.02.2011, 17:46 
dfyz2005 в сообщении #411039 писал(а):
int a, b, c, A, B, C,gradA,gradB,gradC;
const double pi = 3.1415926535897932384626433832795;
cin >>a>>b>>c;
A=(b^2+c^2-a^2)/(2*c*b);
B=(c^2+a^2-b^2)/(2*c*a);
C=(a^2+b^2-c^2)/(2*a*b);
cout<<A<<B<<C;
A=acos(A);
B=acos(B);
C=acos(C);
gradA=(180/pi)*A;
gradB=(180/pi)*B;
gradC=(180/pi)*C;

cout<<gradA;
cout<<gradB;
cout<<gradC;
getch();
return 0;

Вот теперь понятно. Все переменные в выражении имеют тип int, поэтому деление - целочисленное, и результат присваиваете переменной типа int. Скорее всего, получается ноль.
Замените int в первой строчке на double.

 
 
 
 Re: C++
Сообщение09.02.2011, 17:47 
а спасибо))просто та книга по которой занимаюсь, немного не понятна

 
 
 
 Re: C++
Сообщение09.02.2011, 17:48 
Для константы $\pi$ в файле math.h определён макрос M_PI. Лучше использовать его.

-- Ср фев 09, 2011 09:49:37 --

В операторах вывода не хватает разделителей между числами.

 
 
 
 Re: C++
Сообщение09.02.2011, 17:51 
спасибо)) а как вывод лучше сделать?

 
 
 
 Re: C++
Сообщение09.02.2011, 17:54 
dfyz2005 в сообщении #411045 писал(а):
спасибо)) а как вывод лучше сделать?
Добавить разделители, например:
Код:
cout<<A<<" "<<B<<" "<<C<<endl;

 
 
 
 Re: C++
Сообщение11.02.2011, 11:36 
Цитата:
Для константы в файле math.h определён макрос M_PI. Лучше использовать его.

Макросы - пережитки Си. Для Си++ const double ИМХО академически правильнее. Хотя, конечно, сам бы я использовал M_PI :).

И еще, что-то уж больно много знаков после запятой перечислено. double такой точности не поддерживает (у него что-то около 15 десятичных знаков мантисса).

-- Пт фев 11, 2011 11:44:51 --

getch() - тоже не C++ функция. Смешивать в программе работу с потоками и Сишные функции консольного ввода/вывода некрасиво.

 
 
 
 Re: C++
Сообщение11.02.2011, 23:52 
e2e4 в сообщении #411775 писал(а):
Макросы - пережитки Си. Для Си++ const double ИМХО академически правильнее.

Для C - тоже. Стандарт 1989 года в 2011 году использовать несколько нерационально.

 
 
 [ Сообщений: 14 ] 


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