Почему программка выдает 4312 заместо 4321 ??? В чем я ошиблась??
Почему программка выдает 4312 заместо 4321 ??? В чем я ошиблась??
procedure swap(var a, b: real);
var t: real;
begin
t := a; a := b; b := t;
end;
var a, b, c, d: real;
begin
writeln('Введите четыре числа ');
readln(a, b, c, d);
if (a lt; b) then swap(a, b);
if (b lt; c) then swap(b, c);
if (d lt; a) then swap(d, a);
if (a lt; d) then swap(a, d);
writeln(a, b, c, d)
end.
Задача: Напишите функцию, которая переставляет 4 числа в порядке убывания.
Скажите пожалуйста
Не верно находится самое наибольшее число, рассматриваются не все варианты.
Необходимо поменять программу.
var a, b, c, d: real;
begin
writeln('Введите четыре числа ');
readln(a, b, c, d);
// отыскиваем наибольшее число, заносим в а
if (a lt; b) then swap(a, b);
if (a lt; c) then swap(a, c);
if (a lt; d) then swap(a, d);
// ищем максимальное из оставшихся, заносим в b
if (b lt; c) then swap(b, c);
if (b lt; d) then swap(b, d);
// разыскиваем наибольшее из c и d
if (c lt; d) then swap(c, d);
writeln(a,' ', b,' ', c,' ', d)
end.
Введите четыре числа
15 25 13 19
25 19 15 13
Программка работает так , как ее запрограммировал программер, а не как он хотел.
С процедурой swap нет проблем. Давайте осмотрим метод шаг за шагом.
Вводятся 4 числа: 1,2,3,4
a = 1; b = 2; c = 3; d = 4
Далее программка делает 4 шага:
1) a lt; b? (1 lt; 2) =gt; true (правда) =gt; результат: 2134
2) b lt; c? (1 lt; 3) =gt; true (истина) =gt; результат: 2314
3) d lt; a? (4 lt; 2) =gt; false (ересь) =gt; итог: 2314
4) a lt; d? (2 lt; 4) =gt; true (правда) =gt; итог: 4312
Каковой результат? В самом синтаксисе ошибок никаких нет. Ошибка в вашем алгоритме.
Что сделать? Исправить метод
-
Вопросы ответы
Статьи
Информатика
Статьи
Математика.
Физика.
Математика.
Разные вопросы.
Разные вопросы.
Математика.
Разные вопросы.
Математика.
Физика.
Геометрия.