Вывод данных в 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;

Объяснение кода листинга программы

  1. Объявлена переменная p.
  2. Запущен цикл while, который выполняется до тех пор, пока значение переменной p не будет в списке [2,8].
  3. Внутри цикла выводится сообщение Вы выбрали неправильный порядок сортировки.
  4. Внутри цикла выполняется функция readln, которая считывает значение переменной p.
  5. Цикл while выполняется до тех пор, пока значение переменной p не будет в списке [2,8].

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы