Массивы и файлы - 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.
Объяснение кода листинга программы
Список действий в коде:
- Запросить у пользователя натуральное число, кратное 40.
- Создать файл f и открыть его для записи.
- Разделить число n на 20 и использовать полученное значение для цикла.
- В цикле (для каждого значения i от 1 до k) создать два вложенных цикла, в которых записать в файл f случайные числа от 1 до 10 с шагом 1 и -1 соответственно.
- Закрыть файл f.
- Открыть файл g и перезаписать его содержимое из файла f.
- Разделить размер файла f на 40 и использовать полученное значение для цикла.
- В цикле (для каждого значения i от 0 до k-1) установить начальное значение переменной p равным i*40, затем прочитать из файла f в переменную a числа, начиная с позиции p и с шагом 10, и записать их в файл g.
- Закрыть файл g.
- Открыть файл g и вывести его содержимое в формате по 4 символа с новой строкой каждые 20 строк.
- Закрыть файл g.