Массивы и файлы - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Сформировать файл f, компоненты которого являются целыми числами. Ни какая из компонент файла не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и так далее. Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: - двадцать положительных, двадцать отрицательных, двадцать положительных, двадцать отрицательных и так далее (предполагается, что число компонент файла f делится на 40). Продолжение из Сортировка массива Столкнулся с тем, что сам массив не правильно сформировал, из-за чего и не хочет работать запись. Вот листинг, подскажите,пожалуйста, где я напортачил.

Решение задачи: «Массивы и файлы»

textual
Листинг программы
var f,g:file of integer;
    n,i,j,k,p,a:integer;
begin
repeat
write('Введите натуральное число, кратное 40 n=');
readln(n);
until(n>0)and(n mod 40=0);
assign(f,'filef');
rewrite(f);
k:=n div 20;
randomize;
for i:=1 to k do
 begin
  for j:=1 to 10 do
   begin
    a:=1+random(20);
    write(f,a);
   end;
  for j:=1 to 10 do
   begin
    a:=-1-random(20);
    write(f,a);
   end;
 end;
reset(f);
writeln('Содержание файла F');
for i:=0 to filesize(f)-1 do
 begin
  read(f,a);
  write(a:4);
  if(i+1)mod 10=0 then writeln;
 end;
writeln;
reset(f);
assign(g,'fileg');
rewrite(g);
k:=filesize(f) div 40;
for i:=0 to k-1 do
 begin
  p:=i*40;
  for j:=p to p+9 do
   begin
    seek(f,j);
    read(f,a);
    write(g,a);
   end;
  for j:=p+20 to p+29 do
   begin
    seek(f,j);
    read(f,a);
    write(g,a);
   end;
  for j:=p+10 to p+19 do
   begin
    seek(f,j);
    read(f,a);
    write(g,a);
   end;
  for j:=p+30 to p+39 do
   begin
    seek(f,j);
    read(f,a);
    write(g,a);
   end;
end;
close(f);
reset(g);
writeln('Файл G');
for i:=0 to filesize(g)-1 do
 begin
  read(g,a);
  write(a:4);
  if(i+1)mod 20=0 then writeln;
 end;
close(g);
end.

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

Список действий в коде:

  1. Запросить у пользователя натуральное число, кратное 40.
  2. Создать файл f и открыть его для записи.
  3. Разделить число n на 20 и использовать полученное значение для цикла.
  4. В цикле (для каждого значения i от 1 до k) создать два вложенных цикла, в которых записать в файл f случайные числа от 1 до 10 с шагом 1 и -1 соответственно.
  5. Закрыть файл f.
  6. Открыть файл g и перезаписать его содержимое из файла f.
  7. Разделить размер файла f на 40 и использовать полученное значение для цикла.
  8. В цикле (для каждого значения i от 0 до k-1) установить начальное значение переменной p равным i*40, затем прочитать из файла f в переменную a числа, начиная с позиции p и с шагом 10, и записать их в файл g.
  9. Закрыть файл g.
  10. Открыть файл g и вывести его содержимое в формате по 4 символа с новой строкой каждые 20 строк.
  11. Закрыть файл g.

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

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