2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 C++
Сообщение09.02.2011, 16:50 


20/02/10
9
у меня проблема... 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 
Заслуженный участник


04/05/09
4587
Что значит "выплёвывает"?

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:03 


20/02/10
9
не производит вычислений
а компилирует всё нормльно

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:09 
Заслуженный участник


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

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:35 


20/02/10
9
я пробовал и как a*a писать, всё равно

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:41 
Заслуженный участник


04/05/09
4587
dfyz2005 в сообщении #411032 писал(а):
я пробовал и как a*a писать, всё равно
ОК. Если Вам нравится такая дискуссия, то по-моему, у Вас в программе ошибка.

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:44 


20/02/10
9
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 
Заслуженный участник


04/05/09
4587
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 


20/02/10
9
а спасибо))просто та книга по которой занимаюсь, немного не понятна

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:48 
Заслуженный участник


04/05/09
4587
Для константы $\pi$ в файле math.h определён макрос M_PI. Лучше использовать его.

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

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

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:51 


20/02/10
9
спасибо)) а как вывод лучше сделать?

 Профиль  
                  
 
 Re: C++
Сообщение09.02.2011, 17:54 
Заслуженный участник


04/05/09
4587
dfyz2005 в сообщении #411045 писал(а):
спасибо)) а как вывод лучше сделать?
Добавить разделители, например:
Код:
cout<<A<<" "<<B<<" "<<C<<endl;

 Профиль  
                  
 
 Re: C++
Сообщение11.02.2011, 11:36 


21/03/06
1545
Москва
Цитата:
Для константы в файле math.h определён макрос M_PI. Лучше использовать его.

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

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

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

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

 Профиль  
                  
 
 Re: C++
Сообщение11.02.2011, 23:52 


17/01/09
119
e2e4 в сообщении #411775 писал(а):
Макросы - пережитки Си. Для Си++ const double ИМХО академически правильнее.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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



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

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


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

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