Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Даны числа x, y, z. Вычислите a,b, если


Автор: KPEHDEL 19.9.2010, 13:04
Задание:
Даны числа x, y, z. Вычислите a,b, если
http://ipicture.ru/Gallery/Viewfull/1237841.html

http://ipicture.ru/Gallery/Viewfull/1237857.html

Пишу так:

Код

  var x,y,z,a,b: real;
 begin
 Readln(x,y,z);
 a:=(cos(2)*(x-(pi/6)))/(0.5+sqrt(sin(y)));
 b:=1+(sqr(z)/(3+(sqr(z)/5)));
 Writeln(a:6:4);
 Writeln(b:6:4);
 readln(a,b);
 end.


Всё работает нормально, но если ввести переменные с минусом например: 12 -7.22 8
То вылетит... А надо чтобы работало именно при вводе этих чисел, как сделать?

Автор: Фантом 19.9.2010, 14:04
Цитата(KPEHDEL @  19.9.2010,  13:04 Найти цитируемый пост)
Всё работает нормально, но если ввести переменные с минусом например: 12 -7.22 8
То вылетит... А надо чтобы работало именно при вводе этих чисел, как сделать? 

Вы перепутали функции sqr (возведение в квадрат) и sqrt (извлечение квадратного корня). Соответственно, когда y отрицателен, Ваша программа пытается извлечь корень из отрицательного числа - с очевидными последствиями.

Автор: DarkProg 19.9.2010, 14:04
Цитата(KPEHDEL @  19.9.2010,  13:04 Найти цитируемый пост)
a:=(cos(2)*(x-(pi/6)))/(0.5+sqrt(sin(y)));

Даю намёк на то что одна из функций неверна ;)

P.S. могу поспорить что пытаетесь извлечь корень из отрицательного числа  smile 

Автор: KPEHDEL 19.9.2010, 14:35
Исправил, работает но не правильно)))
Вот код:
Код

var a,b,c: integer;
 begin
 Writeln('Введите двухзначное число');
 Readln(a);
 b:=a div 10;
 c:=a mod 10;
 Writeln('Число образованное от перестановки мест');
 Writeln(c,b);
 read(a);
end.



Автор: Фантом 19.9.2010, 14:40
Цитата(KPEHDEL @  19.9.2010,  14:35 Найти цитируемый пост)

При вводе 12 -7.22 8 должна прога выводить  0.8050 5.0506, а выводит совсем другие цифры...

Естественно. Посмотрите сначала на свою формулу для a, а потом на вот это:
Цитата(KPEHDEL @  19.9.2010,  14:35 Найти цитируемый пост)
a:=(cos(2)*(x-(pi/6)))/ ... 




Автор: KPEHDEL 19.9.2010, 14:58
Исправил вот так:
Код

var a,b,c: integer;
 begin
 Writeln('Введите двухзначное число');
 Readln(a);
 b:=a div 10;
 c:=a mod 10;
 Writeln('Число образованное от перестановки мест ');
 Writeln(c,b);
 read(a);
end.




Выводит всё равно не те числа. А если точнее, то выводит 1.0000 5.0000

Автор: Фантом 19.9.2010, 15:05
Зачем Вы пытаетесь считать косинус 2, а потом его на что-то умножать?

Автор: KPEHDEL 19.9.2010, 15:06
Отредактировал предыдущее сообщение... Посмотрите плз.

Автор: Фантом 19.9.2010, 15:16
По-моему, Вы теперь программы целиком перепутали. smile 

Автор: KPEHDEL 19.9.2010, 15:17
Совершенно верно перепутал smile осталось полтара часа, чтобы на зачёт скинуть девять программ, вот и прыгаю отодной к другой.

Вот терь нужный код,который исправил:
Код

   var x,y,z,a,b: comp;
 begin
 Readln(x,y,z);
 a:=(2*cos(x-(pi/6)))/(0.5+sqr(sin(y)));
 b:=1+(sqr(z)/(3+(sqr(z)/5)));
 Writeln(a:6:4);
 Writeln(b:6:4);
 read(a,b);
 end.
 

Автор: Фантом 19.9.2010, 15:28
Теперь вроде все верно. Только зачем Вы в конце каждой программы ставите ввод только что вычисленных и выведенных на экран результатов?

Автор: KPEHDEL 19.9.2010, 15:54
Чтобы программа после компиляции не закрывалась.

Если всё верно,то почему всё равно выводит не те числа?

Автор: Фантом 19.9.2010, 18:33
Ну, если Вы будете, исправляя одни ошибки, вносить другие, то я за Вами не угонюсь. Зачем нужно было использовать тип comp? Верните real обратно.

Автор: KPEHDEL 20.9.2010, 06:44
\спасибо) Как только набиру 50 сообщений обязательно поставлю плюсик в репу. smile 

Автор: KPEHDEL 24.9.2010, 20:26
....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)