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

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

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

> Условный оператор
cxt
сообщение 19.03.2005 19:05
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Помогите, пожалуйста, решить задачу. 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.


Что в коде неправильно?

Сообщение отредактировано: cxt - 19.03.2005 19:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
volvo
сообщение 19.03.2005 19:13
Сообщение #2


Гость






Перепиши код немного по-другому:
Код
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
сообщение 19.03.2005 20:36
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


volvo
Если значение суммы допустим 10

x = 2
y = 3
z = 5

x должен быть 4 , а у меня получаутся 5,5 blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.03.2005 20:42
Сообщение #4


Гость






smile.gif Ну а на это я просто не обратил внимания:
Код
x:=y+z/2;

Вот тут и есть основная ошибка: приоритет операции сложения ниже, чем у деления, так что тебе придется везде скобочки-то добавить...
 К началу страницы 
+ Ответить 
cxt
сообщение 19.03.2005 21:38
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


volvo

Большое спасибо smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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