Помощь - Поиск - Пользователи - Календарь
Полная версия: Условный оператор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
cxt
Помогите, пожалуйста, решить задачу. smile.gif

Задача
Если сумма трех попарно различно действительных чисел x,y,z меньше единицы то наименьшее из этих трех чисел заменить полу суммой двух других в противном случае заменить меньшее из x y полу суммой двух оставшихся значений



Код

Program xxx;
Var
a,x,y,z:real;
begin
writeln(‘Введите значение x y z ‘);
readln(x,y,z);
a:=x+y+z;
if (a<1) then
if (x<y) and (x<z) then x:=y+z/2;
if (y<x) and  (y<z) then y:=x+z/2;
if (z<y) and  (y<x) then z:=y+x/2
else
if (x<y) and (x<z) then x:=y+z/2;
if (y<z) and  (y<z) then y:=x+z/2;
writeln(x);
writeln(y);
writeln(z);
end.


Что в коде неправильно?
volvo
Перепиши код немного по-другому:
Код
Program xxx;
Var a,x,y,z:real;
begin
 writeln(‘Введите значение x y z ‘);
 readln(x,y,z);
 a:=x+y+z;
 if (a<1) then
   begin
     if (x<y) and (x<z) then x:=y+z/2;
     if (y<x) and  (y<z) then y:=x+z/2;
     if (z<y) and  (y<x) then z:=y+x/2
   end
 else
   begin
     if (x<y) and (x<z) then x:=y+z/2;
     if (y<z) and  (y<z) then y:=x+z/2;
   end;
writeln(x);
writeln(y);
writeln(z);
end.


Все дело в том, что Else относится к последнему открытому If, и у тебя вот тут ошибка:
Цитата
if (z<y) and  (y<x) then z:=y+x/2
else { *** Здесь: этот Else не относится к предыдущему If *** }
if (x<y) and (x<z) then x:=y+z/2;
cxt
volvo
Если значение суммы допустим 10

x = 2
y = 3
z = 5

x должен быть 4 , а у меня получаутся 5,5 blink.gif
volvo
smile.gif Ну а на это я просто не обратил внимания:
Код
x:=y+z/2;

Вот тут и есть основная ошибка: приоритет операции сложения ниже, чем у деления, так что тебе придется везде скобочки-то добавить...
cxt
volvo

Большое спасибо smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.