Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача с использованием оператора case
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zharatustra
Очень нужна ваша помощь. Программа заключается в том что 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.                                                                         
 
мисс_граффити
если a и b - real, то сделать "в лоб" не получится. Только через округление...
Грубо говоря, вот так:
case trunc(a*b) of
  0..10: z:={первое значение};
  10..MaxInt: z:={второе значение};
  else
    writeln('error!');
  end;
volvo
Юля, это тоже будет некорректно...

Оно даже не скомпилируется, но (даже если на это не обращать внимание, сделать 11 .. MaxInt) представь ситуацию когда
a = -0.1 и b = 0.2 ... По какой ветке пойдем?
мисс_граффити
 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
Спасибо, это именно то что мне надо!!!!!!!! Громадное спасибо!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.