Почему программа выдает 4312 вместо 4321 ??? В чем я ошиблась?? procedure swap(var a, b:...

0 интересует 0 не интересует
80 просмотров

Почему программа выдает 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 числа в порядке убывания. Скажите пожалуйста


спросил от Начинающий (519 баллов) в категории Информатика
оставил комментарий от
0 0

Потому что четыре перестановки недостаточно для сортировки четырех чисел. В чистом обмене таких перестановок требуется до 6, в обмене со слиянием - до 5.

2 Ответы
0 интересует 0 не интересует
ответил от Одаренный (4.0k баллов)

Программа работает так , как ее запрограммировал программист, а не как он хотел.


С процедурой 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

Каков итог? В самом синтаксисе ошибок никаких нет. Ошибка в вашем алгоритме.

Что сделать? Исправить алгоритм

оставил комментарий от Одаренный (4.0k баллов)
0 0

Пузырёк не такая уж и эффективная сортировка

оставил комментарий от Одаренный (4.0k баллов)
0 0

задачи написать сортировку не стояло

оставил комментарий от Одаренный (4.0k баллов)
0 0

Задания вообще здесь нет, только код и вопрос

оставил комментарий от Одаренный (4.0k баллов)
0 0

А, все, вижу

оставил комментарий от Одаренный (4.0k баллов)
0 0

ну тут явно нужно сортировкой делать

0 интересует 0 не интересует
ответил от Отличник (9.7k баллов)

Не правильно находится самое максимальное число, рассматриваются не все варианты.

Нужно изменить программу.

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


...