Скопировать элементы файла в квадратную матрицу размером - PascalABC.NET
Формулировка задачи:
Дан типизированный файл, содержащий символы. Скопировать элементы этого файла в квадратную матрицу размером n×n (если элементов файла недостает, заполнить оставшиеся элементы матрицы символом «точка»). Поменять местами в каждой строке минимальный и максимальный элементы.
Решение задачи: «Скопировать элементы файла в квадратную матрицу размером»
textual
Листинг программы
var f:file of char;
a:array[,] of char;
c:char;
n,i,j,k,jmx,jmn: integer;
begin
//создадим типизированный файл
assign(f,'SPISOK');//файл в папке с программой
rewrite(f);
writeln('Введите в файл не менее 4 символов, окончание ввода 0');
i:=0;
repeat
readln(c);
inc(i);
write(f,c);
until(i>3)and(c='0');
reset(f);
n:=filesize(f);
while frac(sqrt(n))<>0 do n:=n+1;
n:=round(sqrt(n));
setlength(a,n,n);
k:=0;
writeln('Исходная матрица');
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
begin
k:=k+1;
if k<filesize(f) then read(f,a[i,j])
else a[i,j]:='.';
write(a[i,j]:2);
end;
writeln;
end;
close(f);
for i:=0 to n-1 do
begin
jmn:=0;
jmx:=0;
for j:=1 to n-1 do
begin
if a[i,j]<a[i,jmn] then jmn:=j;
if a[i,j]>a[i,jmx] then jmx:=j;
end;
c:=a[i,jmn];
a[i,jmn]:=a[i,jmx];
a[i,jmx]:=c;
end;
writeln('Обмен минимального и максимального в строках');
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
write(a[i,j]:2);
writeln;
end;
end.
Объяснение кода листинга программы
Список действий в коде:
- Создание файла и его открытие для записи.
- Ввод данных в файл с помощью цикла и операции чтения.
- Закрытие файла после ввода всех данных.
- Определение размера файла и вычисление квадратного корня из этого значения.
- Создание квадратной матрицы с помощью операции присваивания и операции чтения из файла.
- Вывод исходной матрицы на экран с помощью двойного цикла и операции вывода.
- Обмен минимального и максимального значения в каждой строке матрицы с помощью двойного цикла и операции обмена значений.
- Вывод обновленной матрицы на экран с помощью операции вывода.
- Закрытие программы.