Задача. Дан текстовый файл, содержащий целые числа. Скопировать элементы этого файла в квадратную матрицу размером n×n (если элементов файла недостает, заполнить оставшиеся элементы матрицы нулями). Поменять местами столбцы с максимальным и минимальным произведением ненулевых элементов.

 

Решение
type mas2=array[1..20, 1..20] of integer;

{Формирование массива заданного размера с помощью файла}
procedure create(var T: Text; var n: byte; var a: mas2);
var i, j: byte;
begin
     write('Введите размер матрицы: '); readln(n);
     for i:=1 to n do
         for j:= 1 to n do
             a[i, j]:= 0; {начальная инициализация всей таблицы нулями}
     reset(T);
     i:=1;
     while not seekeof(T) and (i<=n) do
     begin
        j:=1;
        while not seekeof(T) and (j<=n) do
        begin
            read(T, a[i, j]);
            j:= j+1;
        end;
        i:=i+1
     end
end;

{вывод таблицы на экран}
procedure print(const n: byte; const a: mas2);
var i, j: byte;
begin
      for i:=1 to n do
      begin
        writeln;
        for j:=1 to n do
           write(a[i, j]:5);
      end;
      writeln
end;

{процедура, решающая задачу из условия}
procedure solution(const n: byte; var a: mas2);
var i, j, jmin, jmax, p, min, max, vsp: integer;
begin
  p:=1;
  for i:=1 to n do
    if a[i, 1] <> 0 then p:=p*a[i, 1]; {вычислили произведение элементов первого столбца}
  jmin:=1;
  jmax:=1;
  min:=p;
  max:=p;
  for j:=2 to n do
  begin
    p:=1;
    for i:=1 to n do
      if a[i, j] <> 0 then p:=p*a[i, j]; {вычислили произведение элементов j-го столбца}
    if pmax then begin max :=p; jmax:=j end;
  end;
  
  for i:=1 to n do
  begin
    vsp:=a[i, jmin];
    a[i, jmin]:=a[i, jmax];
    a[i, jmax]:=vsp;
  end;
  end;
  
  var T: Text; a: mas2; n: byte; s: string;
  
  begin
      write('Введите имя файла: '); readln(s);
      assign(T, s);
      create(T, n, a);
      writeln('Исходная матрица: ');
      print(n, a);
      solution(n, a);
      writeln;
      writeln('=============================================================');
      writeln;
      writeln('Результирующая матрица: ');
      print(n, a);
  end.

Результат работы программы

Пусть исходный файл имеет имя 1.txt, содержится в той же папке, что и 
текст программы и содержит следующие данные

23 -7
0
1
-1
13
14 2 1 1 1 9 -5
1 2 0 0 0 13 6 7 8 9
-1 -2 -5
9

Приведем работу программы для нескольких разных n

Введите имя файла: 1.txt
Введите размер матрицы: 3
Исходная матрица: 

   23   -7    0
    1   -1   13
   14    2    1

=============================================================

Результирующая матрица: 

    0   -7   23
   13   -1    1
    1    2   14


Введите имя файла: 1.txt
Введите размер матрицы: 4
Исходная матрица: 

   23   -7    0    1
   -1   13   14    2
    1    1    1    9
   -5    1    2    0

=============================================================

Результирующая матрица: 

   -7   23    0    1
   13   -1   14    2
    1    1    1    9
    1   -5    2    0


Введите имя файла: 1.txt
Введите размер матрицы: 6
Исходная матрица: 

   23   -7    0    1   -1   13
   14    2    1    1    1    9
   -5    1    2    0    0    0
   13    6    7    8    9   -1
   -2   -5    9    0    0    0
    0    0    0    0    0    0

=============================================================

Результирующая матрица: 

   13   -7    0    1   -1   23
    9    2    1    1    1   14
    0    1    2    0    0   -5
   -1    6    7    8    9   13
    0   -5    9    0    0   -2
    0    0    0    0    0    0


Введите имя файла: 1.txt
Введите размер матрицы: 10
Исходная матрица: 

   23   -7    0    1   -1   13   14    2    1    1
    1    9   -5    1    2    0    0    0   13    6
    7    8    9   -1   -2   -5    9    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0

=============================================================

Результирующая матрица: 

   -7   23    0    1   -1   13   14    2    1    1
    9    1   -5    1    2    0    0    0   13    6
    8    7    9   -1   -2   -5    9    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0
    0    0    0    0    0    0    0    0    0    0



Рейтинг ресурсов УралWeb

 

© Шестаков А.П., 2010
Сайт создан в системе uCoz