Напишите программу, которая сортирует массив целых чисел в порядке возрастания (неубывания). Размер...

Тематика Информатика
Уровень 10 - 11 классы
сортировка массива массив целых чисел файл input.txt файл output.txt порядок возрастания размер массива неизвестен исходные данные вывод отсортированного массива Free Pascal 2.6.2
0

Напишите программу, которая сортирует массив целых чисел в порядке возрастания (неубывания). Размер массива заранее неизвестен. Исходные данные записаны в файл input.txt , отсортированный массив нужно вывести в файл output.txt .

Входные данные

Первая строка входного файла input.txt содержит размер массива. Во второй строке записаны все элементы массива, разделённые пробелами.

Выходные данные

Программа должна вывести в файл output.txt все элементы отсортированного массива в одной строке, разделив их пробелами.

Примеры

входные данные

5

5 1 4 2 3

выходные данные

1 2 3 4 5

Free Pascal 2.6.2

avatar
задан 2 месяца назад

3 Ответа

0

Для решения задачи на языке программирования Free Pascal, нам потребуется выполнить несколько основных шагов:

  1. Чтение данных из файла input.txt.
  2. Преобразование данных в массив целых чисел.
  3. Сортировка массива.
  4. Запись отсортированного массива в файл output.txt.

Пример кода на Free Pascal для выполнения данной задачи:

program SortArray;

uses
  SysUtils, Classes;

var
  inputFile, outputFile: TextFile;
  size: Integer;
  numbers: array of Integer;
  i: Integer;
  numberStr: string;
  numList: TStringList;

procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
  Lo, Hi, Pivot, T: Integer;
begin
  Lo := iLo;
  Hi := iHi;
  Pivot := A[(Lo + Hi) div 2];
  repeat
    while A[Lo] < Pivot do Inc(Lo);
    while A[Hi] > Pivot do Dec(Hi);
    if Lo  Hi;
  if Hi > iLo then QuickSort(A, iLo, Hi);
  if Lo < iHi then QuickSort(A, Lo, iHi);
end;

begin
  // Чтение данных из файла input.txt
  AssignFile(inputFile, 'input.txt');
  Reset(inputFile);
  ReadLn(inputFile, size);
  SetLength(numbers, size);
  
  // Чтение элементов массива
  ReadLn(inputFile, numberStr);
  CloseFile(inputFile);

  numList := TStringList.Create;
  try
    numList.DelimitedText := numberStr;
    for i := 0 to size - 1 do
    begin
      numbers[i] := StrToInt(numList[i]);
    end;
  finally
    numList.Free;
  end;

  // Сортировка массива
  if size > 1 then
    QuickSort(numbers, 0, size - 1);

  // Запись отсортированного массива в файл output.txt
  AssignFile(outputFile, 'output.txt');
  Rewrite(outputFile);
  for i := 0 to size - 1 do
  begin
    if i > 0 then
      Write(outputFile, ' ');
    Write(outputFile, numbers[i]);
  end;
  WriteLn(outputFile);
  CloseFile(outputFile);
end.

Пояснение к коду:

  1. Чтение данных из файла input.txt:

    • Открываем входной файл input.txt и читаем первую строку, содержащую размер массива.
    • Инициализируем массив numbers с размером, полученным из первой строки.
    • Читаем вторую строку, содержащую элементы массива, разделённые пробелами.
  2. Преобразование данных в массив целых чисел:

    • Используем TStringList для разделения строки с числами на отдельные элементы.
    • Преобразуем каждую строку в целое число и сохраняем в массив numbers.
  3. Сортировка массива:

    • Используем алгоритм быстрой сортировки (QuickSort) для сортировки массива. Этот алгоритм выбран за его эффективность и простоту реализации.
  4. Запись отсортированного массива в файл output.txt:

    • Открываем файл output.txt для записи.
    • Записываем отсортированные элементы массива, разделяя их пробелами.

Этот код выполняет все необходимые шаги для чтения, сортировки и записи массива согласно условиям задачи.

avatar
ответил 2 месяца назад
0

program SortArray;

var size, i, j, temp: integer; arr: array of integer; inputFile, outputFile: text;

begin Assign(inputFile, 'input.txt'); Assign(outputFile, 'output.txt'); Reset(inputFile); Rewrite(outputFile);

Readln(inputFile, size); SetLength(arr, size); for i := 0 to size - 1 do

Read(inputFile, arr[i]);

for i := 0 to size - 2 do

for j := i + 1 to size - 1 do
  if arr[i] > arr[j] then
  begin
    temp := arr[i];
    arr[i] := arr[j];
    arr[j] := temp;
  end;

for i := 0 to size - 1 do

Write(outputFile, arr[i], ' ');

Close(inputFile); Close(outputFile); end.

avatar
ответил 2 месяца назад
0

Пример решения на языке программирования Free Pascal:

program SortArray;

var
  input, output: Text;
  n, i, j, temp: Integer;
  arr: array of Integer;

begin
  Assign(input, 'input.txt');
  Reset(input);
  Assign(output, 'output.txt');
  Rewrite(output);

  Readln(input, n);
  SetLength(arr, n);
  for i := 0 to n-1 do
    Read(input, arr[i]);

  for i := 0 to n-2 do
    for j := i+1 to n-1 do
      if arr[i] > arr[j] then
      begin
        temp := arr[i];
        arr[i] := arr[j];
        arr[j] := temp;
      end;

  for i := 0 to n-1 do
    Write(output, arr[i], ' ');

  Close(input);
  Close(output);
end.

Эта программа считывает массив из файла input.txt, сортирует его по возрастанию и записывает отсортированный массив в файл output.txt.

avatar
ответил 2 месяца назад

Ваш ответ

Вопросы по теме