Дан вектор Vn заполненный произвольно натуральными числами.Нужно переписать этот вектор в файл .txt и, внимание, отсортировать его прямо в файле, больше не обращаясь ни к каким массивам — Pascal(Паскаль)

uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
    n,i:byte;
    mn,mn1,x:integer;
    f,g:text;
    s:string;
begin
clrscr;
randomize;
assign(f,'1.txt');
rewrite(f);
{создаем массив и пишем в файл}
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln(f,'Ishodnyj massiv:');{первая строка файла}
for i:=1 to n do
 begin
  a[i]:=random(10000)+1;
  write(f,' ',a[i]);
 end;
close(f);
assign(g,'2.txt');
rewrite(g);
reset(f);
mn:=0;{начальный минимум, меньше нет}
for i:=1 to n do{сколько чисел в массиве}
 begin
  reset(f);{открываем}
  mn1:=maxint;{текущий минимум}
  readln(f,s);{пропучкаем первую строку}
  while not eof(f) do{пока не конец файла}
   begin
    read(f,x);{читаем числа}
    if (x<mn1)and(x>mn) then mn1:=x;{если меньше текущего минимума, но больше предыдущего
                                     это новый текущий минимум}
   end;
  close(f);{закрываем, открываем, пропускаем строку}
  reset(f);
  readln(f,s);
  while not eof(f) do
   begin
    read(f,x);
    if x=mn1 then write(g,' ',x);{все равные текущему минимуму перепишем в дополнительный файл}
   end;
  close(f);{закроем}
  mn:=mn1;{новый общий минимум}
 end;
close(g);
append(f);{открываем для дозаписи}
reset(g);
writeln(f,'');{дописываем в файл отсортированный массив}
writeln(f,'Otsortirovannyj massiv:');
while not eof(g) do
 begin
  read(g,x);
  write(f,' ',x);
 end;
close(f);
close(g);
erase(g);{уничтожаем вспомогательный файл}
write('Файл отсортирован!');
readln
end.

Leave a Comment

81 − 75 =