Считать матрицу из текстового файла, сформировать из нее вектор, отсортировать и изменить его по условиям - 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.

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

  1. Переменная f устанавливается в значение text, что позволяет работать с текстовым файлом.
  2. Создается массив a размером 100x100, который будет использоваться для хранения данных матрицы.
  3. Создается массив b размером 1000, который будет использоваться для временного хранения данных матрицы во время сортировки.
  4. Создаются переменные m, n, k, i, j, p и x, которые будут использоваться для работы с матрицей и вектором.
  5. Создается строка s, которая будет использоваться для чтения строк из файла.
  6. Создается логическая переменная t, которая будет использоваться для контроля за правильностью чтения данных.
  7. Открывается файл matrix.txt для чтения.
  8. Считывается первая строка файла и сохраняется в переменной s.
  9. Устанавливается счетчик m в значение 0, что указывает на то, что матрица еще не была прочитана.
  10. Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
  11. Считывается вторая строка файла и сохраняется в переменной s.
  12. Устанавливается счетчик n в значение 0, что указывает на то, что матрица еще не была прочитана.
  13. Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
  14. Создается массив b размером 1000, который будет использоваться для временного хранения данных матрицы во время сортировки.
  15. Считывается первая строка файла и сохраняется в переменной s.
  16. Устанавливается счетчик m в значение 0, что указывает на то, что матрица еще не была прочитана.
  17. Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
  18. Считывается вторая строка файла и сохраняется в переменной s.
  19. Устанавливается счетчик n в значение 0, что указывает на то, что матрица еще не была прочитана.
  20. Проверяется, достигнут ли конец файла. Если нет, то продолжается чтение файла.
  21. Закрывается файл f.
  22. Выводится сообщение Исходная матрица.
  23. Выводится сообщение Вектор из элементов матрицы по 1 разу.
  24. Выводится сообщение Отсортированный вектор.
  25. Выводится сообщение Новая матрица.
  26. Открывается файл new_matr.txt для записи.
  27. Записывается первая строка матрицы в файл.
  28. Записывается вторая строка матрицы в файл.
  29. Закрывается файл f.

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

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