Вывод данных в output - Free Pascal
Формулировка задачи:
Здравствуйте, столкнулся со следующей проблемой. По заданию программа должна отсортировать данные, полученные из входного файла, по возрастанию или убыванию, после чего вывести результат в текстовый файл. Выбор варианта сортировки - по возрастанию или убыванию, - определяется клавишами 8 и 2 соответственно. При нажатии любой другой клавиши программа должна повторно запросить выбор сортировки. Проблема состоит в том, что повторный запрос поступает только при первой попытке ввода числа, не являющегося 2 или 8. При второй попытке файл всё равно сортируется, но данные ставятся в произвольном порядке, хотя такого быть не должно. Пожалуйста, подскажите, в чём проблема.
type mass = array[1..10000000] of longint; var a: mass; i, j, k, p, n: integer; f1, f2: text; function compare(a, b: integer): boolean; begin if p=2 then compare := a < b; if p=8 then compare := a > b; end; procedure sortbuble(var a: mass; l, r: longint); var i, j, k: longint; begin for i := 1 to n - 1 do for j := 1 to n - i do if compare(a[j], a[j + 1]) then begin k := a[j]; a[j] := a[j + 1]; a[j + 1] := k end; end; begin writeln('Сортировка "пузырьком"'); writeln('Выберите порядок сортировки:'); writeln('2- по убыванию, 8 - по возрастанию'); readln(p); if (p<>2) and (p<>8) then begin writeln ('Вы выбрали неправильный порядок сортировки'); readln(p); end; assign(f1, 'input.txt'); reset(f1); n := 0; while not eof(f1) do begin inc(n); read(f1, a[n]); end; close(f1); sortbuble(a, 1, n); assign(f2, 'output.txt'); rewrite(f2); for i := 1 to n do write(f2, ' ', a[i]); close(f2); writeln('Файл отсортирован.'); end.
Решение задачи: «Вывод данных в output»
textual
Листинг программы
while not (p in [2,8]) do begin writeln ('Вы выбрали неправильный порядок сортировки'); readln(p); end;
Объяснение кода листинга программы
- Объявлена переменная
p
. - Запущен цикл while, который выполняется до тех пор, пока значение переменной
p
не будет в списке [2,8]. - Внутри цикла выводится сообщение
Вы выбрали неправильный порядок сортировки
. - Внутри цикла выполняется функция readln, которая считывает значение переменной
p
. - Цикл while выполняется до тех пор, пока значение переменной
p
не будет в списке [2,8].