Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2010, 19:40   #1
Krezol
 
Регистрация: 12.02.2010
Сообщений: 6
По умолчанию с++,градусы и минуты

Как бы задачка элементарная,но вот почему-то идея не как не приходит...
вот текст:
"Даны длины катетов прямоугольного треугольника. Найти его острые углы, вывести в градусной мере с точностью до минут."

Код:
#include <stdio.h>			      
#include <math.h>		
#include <conio.h>               
void main (void){

float	a,b,c;
float angle1,angle2,minute1,minute2;       

printf ("A=");
scanf ("%f", &a); //1 катет
printf ("B=");	        
scanf ("%f", &b); //2 катет				  	   

c=pow(a*a+b*b,0.5);        //гипотенуза 
angle1=(atan(a/b))*180/3.14159;     //угол №1  
minute1=(int)60*(angle1-floor(angle1));      //количество минут для 1 угла
angle2=90-angle1;       //угол №2  
minute2=(int)60*(angle2-floor(angle2));  //количество минут для 2 угла

printf ("A=%.2f  B=%.2f  C=%.2f\n",a,b,c);
printf ("\n1) Angle=%.0f-%.0f\n",angle1,minute1);
printf ("\n2) Angle=%.0f-%.0f\n",angle2,minute2);
getch();}
собственно проблема в вычислении минут для углов...значение минут получаются на 1 градус больше...
к примеру: вводим катеты 5 и 5,прога выдает 1 угол 45(что нормально),а 2 угол 45-60(что =46 градусов),хотя должны быть оба по 45...
если не сложно,наставьте на путь истинный)...
Krezol вне форума Ответить с цитированием
Старый 17.02.2010, 20:16   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

используйте константу PI, а не пишите число ПИ и все должно получится

код работает в MVS2008
Код:
#include <stdio.h>		
#include <conio.h>
#define _USE_MATH_DEFINES		      
#include <math.h>	

void main (void){

float	a,b,c;
float angle1,angle2,minute1,minute2;       

printf ("A=");
scanf ("%f", &a); //1 катет
printf ("B=");	        
scanf ("%f", &b); //2 катет				  	   

c=pow(a*a+b*b,(float)0.5);        //гипотенуза 
angle1=(atan(a/b))*180/M_PI;     //угол №1  
minute1=60*(angle1-floor(angle1));      //количество минут для 1 угла
angle2=90-angle1;       //угол №2  
minute2=60*(angle2-floor(angle2));  //количество минут для 2 угла

printf ("A=%.2f  B=%.2f  C=%.2f\n",a,b,c);
printf ("\n1) Angle=%.0f-%.0f\n",angle1,minute1);
printf ("\n2) Angle=%.0f-%.0f\n",angle2,minute2);
getch();}
counter вне форума Ответить с цитированием
Старый 17.02.2010, 20:26   #3
Krezol
 
Регистрация: 12.02.2010
Сообщений: 6
По умолчанию

Спасибо огромное)
Krezol вне форума Ответить с цитированием
Старый 17.02.2010, 20:28   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

...или вычисляйте PI с max. возможной для данного языка точностью:
const double PI = 4.*atan(1.);

Да и float на double я бы поменял. Не та задача, чтобы байты экономить...
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование радиан в градусы. KARUSHEV Помощь студентам 3 28.08.2009 17:47
Градусы Цельсия в градусы Форингейта SgsBot Общие вопросы C/C++ 7 19.11.2008 21:19
Перевод радиан в градусы =XAM= Помощь студентам 15 17.03.2008 11:54
Есть ли функция для cos параметр которого не радианы, а градусы? Gromsky Помощь студентам 6 14.03.2008 16:26