Считать матрицу из текстового файла, сформировать из нее вектор, отсортировать и изменить его по условиям - Pascal
Формулировка задачи:
Уважаемые.
Напишите, пожалуйста, программу.pas.
Считать матрицу из текстового файла. Из ее элементов, представленных по одному разу, сформировать
вектор. Этот вектор пересортировать по возрастанию. Заменить элементы заданной матрицы номерами
индексов этого нового вектора и записать в новый файл.
Например, дана матрица:
33 8 21 2 15
14 15 8 16 11
Получим из нее вектор:
33 8 21 2 15 14 15 8 16 11
Оставим по одному вхождению каждого элемента:
33 8 21 2 15 14 16 11
Пересортируем:
2 8 11 14 15 16 21 33
Индексы сортированного вектора:
1 2 3 4 5 6 7 8
Подставляем в новую матрицу:
8 2 7 1 5
4 5 2 6 3
Решение задачи: «Считать матрицу из текстового файла, сформировать из нее вектор, отсортировать и изменить его по условиям»
textual
Листинг программы
var f:text; a:array[1..100,1..100] of integer; b:array[1..1000] of integer; m,n,k,i,j,p,x:integer; s:string; t:boolean; begin assign(f,'matrix.txt');//файл в папке с программой reset(f); //если в файле не указаны размеры матрицы, определим их m:=0; //количество строк while not seekeof(f) do begin readln(f,s); inc(m); end; reset(f); n:=0;//количество столбцов while not eoln(f) do begin read(f,x); inc(n); end; //читаем матрицу reset(f); writeln('Исходная матрица'); for i:=1 to m do begin for j:=1 to n do begin read(f,a[i,j]); write(a[i,j]:4); end; writeln; end; close(f); writeln('Вектор из элементов матрицы по 1 разу'); k:=1; b[k]:=a[1,1]; for i:=1 to m do for j:=1 to n do begin t:=true; p:=1; while(p<=k)and t do if a[i,j]=b[p] then t:=false else inc(p); if t then begin inc(k); b[k]:=a[i,j]; end; end; for i:=1 to k do write(b[i]:4); writeln; writeln('Отсортированный вектор'); for i:=1 to k-1 do for j:=i+1 to k do if b[i]>b[j] then begin x:=b[i]; b[i]:=b[j]; b[j]:=x; end; for i:=1 to k do write(b[i]:4); writeln; writeln('Замена элементов матрицы их номерами в отсортированном массиве'); for i:=1 to m do for j:=1 to n do begin t:=false; p:=1; while(p<=k)and not t do if a[i,j]=b[p] then t:=true else inc(p); if t then a[i,j]:=p; end; writeln('Новая матрица'); for i:=1 to m do begin for j:=1 to n do write(a[i,j]:4); writeln; end; assign(f,'new_matr.txt'); rewrite(f); for i:=1 to m do begin for j:=1 to n do write(f,a[i,j]:4); writeln(f); end; close(f); end.
Объяснение кода листинга программы
- Переменная
f
устанавливается в значениеtext
, что позволяет работать с текстовым файлом. - Создается массив
a
размером 100x100, который будет использоваться для хранения данных матрицы. - Создается массив
b
размером 1000, который будет использоваться для временного хранения данных матрицы во время сортировки. - Создаются переменные
m
,n
,k
,i
,j
,p
иx
, которые будут использоваться для работы с матрицей и вектором. - Создается строка
s
, которая будет использоваться для чтения строк из файла. - Создается логическая переменная
t
, которая будет использоваться для контроля за правильностью чтения данных. - Открывается файл
matrix.txt
для чтения. - Считывается первая строка файла и сохраняется в переменной
s
. - Устанавливается счетчик
m
в значение 0, что указывает на то, что матрица еще не была прочитана. - Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
- Считывается вторая строка файла и сохраняется в переменной
s
. - Устанавливается счетчик
n
в значение 0, что указывает на то, что матрица еще не была прочитана. - Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
- Создается массив
b
размером 1000, который будет использоваться для временного хранения данных матрицы во время сортировки. - Считывается первая строка файла и сохраняется в переменной
s
. - Устанавливается счетчик
m
в значение 0, что указывает на то, что матрица еще не была прочитана. - Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
- Считывается вторая строка файла и сохраняется в переменной
s
. - Устанавливается счетчик
n
в значение 0, что указывает на то, что матрица еще не была прочитана. - Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
- Закрывается файл
f
. - Выводится сообщение
Исходная матрица
. - Выводится сообщение
Вектор из элементов матрицы по 1 разу
. - Выводится сообщение
Отсортированный вектор
. - Выводится сообщение
Новая матрица
. - Открывается файл
new_matr.txt
для записи. - Записывается первая строка матрицы в файл.
- Записывается вторая строка матрицы в файл.
- Закрывается файл
f
.