Простенькая программа на 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); } |
Ошибок, конечно, куча.
Прежде всего, зачем все эти 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 неопределён еще и логарифм. |
Спасибо большое
А этот невразумительный цикл - это цикл с постусловием (тело выше условия) |
Цитата:
|
Часовой пояс GMT +4, время: 17:16. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.