
Почему программа выдает 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 < b) then swap(a, b); if (b < c) then swap(b, c); if (d < a) then swap(d, a); if (a < 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 < b) then swap(a, b);
if (a < c) then swap(a, c);
if (a < d) then swap(a, d);
// ищем максимальное из оставшихся, заносим в b
if (b < c) then swap(b, c);
if (b < d) then swap(b, d);
// ищем максимальное из c и d
if (c < 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 < b? (1 < 2) => true (истина) => результат: 2134
2) b < c? (1 < 3) => true (истина) => результат: 2314
3) d < a? (4 < 2) => false (ложь) => результат: 2314
4) a < d? (2 < 4) => true (истина) => результат: 4312
Каков итог? В самом синтаксисе ошибок никаких нет. Ошибка в вашем алгоритме.
Что сделать? Исправить алгоритм



В предоставленной программе ошибка заключается в неправильном порядке выполнения обменов чисел в процедуре swap
. В результате обменов чисел в неправильном порядке, программа выводит неверный результат.
Для того чтобы переставить 4 числа в порядке убывания, вам необходимо выполнить обмены в следующем порядке:
- Найти наибольшее число среди a, b, c, d и поместить его на первое место (переменную a).
- Затем найти второе по величине число из оставшихся трех чисел и поместить его на второе место (переменную b).
- Затем найти третье по величине число и поместить его на третье место (переменную c).
- Наименьшее число поместить на четвертое место (переменную d).
Исправим программу:
pascalprocedure 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 < b) then swap(a, b); if (a < c) then swap(a, c); if (a < d) then swap(a, d); if (b < c) then swap(b, c); if (b < d) then swap(b, d); if (c < d) then swap(c, d); writeln(a, b, c, d); end.
Теперь программа должна корректно переставить 4 числа в порядке убывания и вывести правильный результат.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili