Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Простенькая программа на C (http://www.tehnari.ru/f42/t99130/)

Sopel 29.10.2014 13:17

Простенькая программа на C
 
Вложений: 1
Всем доброго времени суток. Нужна помощь.
Написать программу по условию задачи №1 . При вводе числа x надо сделать отсев недопустимых значений (типа избежать деления на ноль)
Вот мой код программы. Просьба либо исправить, либо указать на ошибки, либо сказать что правильно, если оно так. Заранее спасибо.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265
int main (void)
{ double a,x;
do {printf ("X=");
scanf ("%lf", &x);
}
while (x<=0 || sin(x*PI/180)==0);

a=(1/tan(x*PI/180)-exp(sqrt(x)))/(log(abs(5*x))+1/(atan(x)*180/PI*atan(x)*180/PI));
printf("%.5lf\n", a);
system("pause");
return(0);
}

Vladimir_S 29.10.2014 16:40

Ошибок, конечно, куча.
Прежде всего, зачем все эти x*PI/180? У Вас же там не чистая тригонометрия, а и другие функции (экспонента, логарифм, арктангенс), следовательно, аргумент должен задаваться сразу и исключительно в абсолютных единицах, каковым в тригонометрии соответствуют радианы. Если же вы непременно хотите аргумент задать в градусах, то потрудитесь сделать перевод всюду, и под экспонентой, и под логарифмом, и под арктангенсом, а проще ввести еще переменную, например, z=x*PI/180 и уже формулу строить от z. Но, повторяю, это чушь: никто никогда градусной меры под арктангенс, логарифм или экспоненту не ставит! Поэтому еще раз: все эти PI/180 надлежит просто выкинуть!
Это: while (x<=0 || sin(x*PI/180)==0); вообще непонятно что и зачем - какой-то невразумительный цикл без тела...
Для того, чтобы не возникло ошибки, следует исключить значения
x = k*PI, k = 0, ±1, ±2, ±3...
потому что в этих точках котангенс не определён, а кроме того, при х=0 неопределён еще и логарифм.

Sopel 29.10.2014 20:23

Спасибо большое
А этот невразумительный цикл - это цикл с постусловием (тело выше условия)

Vladimir_S 29.10.2014 21:14

Цитата:

Сообщение от Sopel (Сообщение 1074274)
А этот невразумительный цикл - это цикл с постусловием (тело выше условия)

А, да - и впрямь. Извините.


Часовой пояс GMT +4, время: 17:16.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.