Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача с использованием оператора case

Автор: Zharatustra 26.09.2007 23:55

Очень нужна ваша помощь. Программа заключается в том что z надо расчитать по формуле b^10(10-ab), если 0<ab<10 или по формуле 44a^12, если ab>10. В программе должен быть использован оператор case. Вот текст этой программы с использованием оператора if.

 
program n1;
uses crt;
var a,b,c,z: real;
begin
clrscr;
write ('A,B,C= ');
readln(a,b,c);
if (b=0) or (a=0) then
writeln ('Danniy vvedenie nekorrektno')
else
if (0<a*b) and (a*b<10) then
z:=(exp(10*ln(b)))*(10-a*b)
else
z:=44*(12*ln(a));
writeln (z:7:3,z);
readln
end.


Автор: мисс_граффити 27.09.2007 0:07

если a и b - real, то сделать "в лоб" не получится. Только через округление...
Грубо говоря, вот так:

case trunc(a*b) of
0..10: z:={первое значение};
10..MaxInt: z:={второе значение};
else
writeln('error!');
end;

Автор: volvo 27.09.2007 0:17

Юля, это тоже будет некорректно...

Оно даже не скомпилируется, но (даже если на это не обращать внимание, сделать 11 .. MaxInt) представь ситуацию когда
a = -0.1 и b = 0.2 ... По какой ветке пойдем?

Автор: мисс_граффити 27.09.2007 0:18

 if (b=0) or (a=0) then 

никогда не сравнивай действительные числа через "="
тем более что в данной программе это вообще не нужно. тебе надо проверять, чтобы они были одного знака... либа оба больше 0, либо оба меньше.

Добавлено через 6 мин.
Отправила еще не видя прошлого сообщения. Про знаки написала...
Про 11 вместо 10 - упустила...
Компилируется (TP7).

можно так (целых 2 case поюзать!):
case ((a*b>0) and (a*b<10)) of
true: z:=1;
false: z:=2;
end;

Автор: Zharatustra 7.10.2007 20:58

Спасибо, это именно то что мне надо!!!!!!!! Громадное спасибо!!!