IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите довести программу до совершенства, Программа для вычисления значений
Борец с Паскалем
сообщение 23.08.2007 1:58
Сообщение #1


Гость






Привет!
Мне нужно довести мою прогу до ума. По идее после ввода чисел в переменные должно происходить вычисление по формуле но иногда прога отваливатся изза ошибок. Вот я и не могу понять почему и можно ли сделать так чтобы при ошибке прога перезапускалась. Мне кажется все дело в генераторе. Возможно с значениями которые он генерирует не всегда возможно вычисление. Кроме того есть проблемы с выводом. Какие параметры вывода лучше поставить? Имеется ввиду чтоб выглядело приемлемо а то 3.00 при отображении целого числа както дико.


uses Crt;
var x,y,z,q,h,e:real;
begin
Writeln('Для выполнения программы необходимы 3 произвольных числа для переменных X,Y,Z');
Writeln('Нажмите 1 для ввода данных, нажмите 2 для генерации произвольных чисел.'); //как зделать так чтобы после выбора не нужно блыо нажимать ентерб чтоб сразу по нажатию на клавишу шло по сценарию
read(q);
Clrscr;
if q=1 then
begin
writeln('Введите X');
readln(x);
Clrscr;
writeln('Введите Y');
readln(y);
Clrscr;
writeln('Введите Z');
readln(z);
Clrscr;
Writeln('Установлено:');
Writeln(' X=',x:8:3);
Write(' Y=',y:8:3);
Write(' Z=',z:8:3);
End
else
begin
randomize;
x:= random (20);
y:=random(20);
z:=random(20);
Clrscr;
Write('Установлено:');
Write(' X=',x:8:3);
Write(' Y=',y:8:3);
Writeln(' Z=',z:8:3);
end;
Writeln('Вычисляю значение');
e:=exp(3*ln(cos(x)-sin(y)))/sqrt(sin(x)/cos(x))+exp(2*ln(ln(x+y+z))); //правильно ли описан тут корень из tg(x) - >sqrt(sin(x)/cos(x))
Writeln('');
Writeln('Ответ: ',e:8:3);
Writeln('');
h:=0;
if(x>-1)and(x<15) then h:=(5*x)-(3*y);
if(x>15) then h:=x+2*abs(y);
if(x=15) or (x<=-1) then h:=y*2;
Writeln('Значение h:=',h:8:3);
readln;
End.

 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 23.08.2007 8:51
Сообщение #2


Гость






Цитата
как зделать так чтобы после выбора не нужно блыо нажимать ентерб чтоб сразу по нажатию на клавишу шло по сценарию


Writeln('Нажмите 1 для ввода данных, нажмите 2 для генерации произвольных чисел.');
q := Ord(ReadKey) - Ord('0');

{ ... далее - по тексту }



P.S. Только q надо описать не как Real, а как Integer...

Добавлено через 12 мин.
Цитата
К сожалению я не знаю как это сделать

Смотреть, какие ошибки могут возникать при вычислении выражения, и предотвращать:

...
Repeat { <--- добавить это в начале }

Writeln('Для выполнения программы необходимы 3 произвольных числа для переменных X,Y,Z');

... { Здесь - ввод данных }

error := false;
if (cos(x) - sin(x)) <= 0 then begin
Writeln('Некорректный параметр для Ln'); error := true;
end
else
if cos(x) < 0.0001 then begin { не надо сравнивать с 0 вещественное число }
WriteLn('Деление на 0'); error := true;
end
else { вроде больше ошибок быть не должно, вычисляем... }
e:=exp(3*ln(cos(x)-sin(y)))/sqrt(sin(x)/cos(x))+exp(2*ln(ln(x+y+z)));

Until not error;

Writeln('');
Writeln('Ответ: ',e:8:3);
Writeln('');
...


Ну, а Repeat/Until - для того, чтобы запрашивать данные, пока программа не завершится без ошибок...

Сообщение отредактировано: volvo - 23.08.2007 8:53
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"