Определить, является ли данная целочисленная квадратная матрица ортонормированной - PascalABC.NET
Формулировка задачи:
Определить, является ли данная целочисленная квадратная матрица ортонормированной, то есть такой, в которой скалярное произведение каждой пары различных строк равно нулю, а скалярное произведение каждой строки на себя равно единице.
Разбить задачу на подзадачи таким образом, чтобы решение каждой подзадачи описывалось подпрограммой, а основная программа состояла бы из последовательности вызовов подпрограмм. Размеры матриц задать константами.
Листинг программы
- const
- n=2;
- var
- i,j,k,skal:integer;
- o:boolean;
- mas:array [1..n,1..n] of integer;
- procedure vvod(i,j:integer);
- begin
- writeln('Введите ',n*n,' элементов матрицы:');
- for i:=1 to n do
- for j:=1 to n do
- read(mas[i,j]);
- readln;
- end;
- procedure vis(i,j:integer);
- begin
- writeln('Исходная матрица:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write(mas[i,j]:2);
- writeln;
- end;
- end;
- function alg(i,j,k,skal:integer; var o:boolean):integer;
- begin
- var
- o:=true;
- repeat
- j:=1;
- repeat
- skal:=0;
- for k:=1 to n do
- skal:=skal+mas[i,k]*mas[j,k];
- if ((i=j) and (skal<>1)) or ((i<>j) and (skal<>0)) then
- o:=false;
- j:=j+1;
- until not(o) or (j=n+1);
- i:=i+1
- until not (o) or (i=n+1);
- end;
- procedure viv(o:boolean);
- begin
- if o=true then
- writeln ('Ортонормированна')
- else
- writeln ('Не ортонормированна');
- readln;
- end;
- begin
- vvod(i,j);
- vis(i,j);
- alg(i,j,k,skal,o);
- viv(o);
- end.
Вот прога без подпрограмм
Листинг программы
- const n=2;
- var matrix:array[1..n,1..n] of integer;
- o:boolean;
- i,j,k,skal:integer;
- begin
- writeln('Введите ',n*n,' элементов матрицы:');
- for i:=1 to n do
- for j:=1 to n do
- read(matrix[i,j]);
- readln;
- writeln('Исходная матрица:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write(matrix[i,j]:2);
- writeln;
- end;
- writeln;
- i:=1;
- o:=true;
- repeat
- j:=1;
- repeat
- skal:=0;
- for k:=1 to n do
- skal:=skal+matrix[i,k]*matrix[j,k];
- if ((i=j) and (skal<>1)) or ((i<>j) and (skal<>0)) then o:=false;
- j:=j+1
- until not(o) or (j=n+1);
- i:=i+1
- until not (o) or (i=n+1);
- if o=true then writeln ('Ортонормированна')
- else writeln ('Не ортонормированна');
- readln
- end.
Решение задачи: «Определить, является ли данная целочисленная квадратная матрица ортонормированной»
textual
Листинг программы
- const
- n=2;
- var
- skal:integer;
- o:boolean;
- mas:array [1..n,1..n] of integer;
- procedure vvod;
- var i,j:integer;
- begin
- writeln('Введите ',n*n,' элементов матрицы:');
- for i:=1 to n do
- for j:=1 to n do
- readln(mas[i,j]);
- end;
- procedure vis;
- var i,j:integer;
- begin
- writeln('Исходная матрица:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write(mas[i,j]:4);
- writeln;
- end;
- end;
- function alg:integer;
- var i,j,k:integer;
- begin
- o:=true;
- i:=1;
- repeat
- j:=1;
- repeat
- skal:=0;
- for k:=1 to n do
- skal:=skal+mas[i,k]*mas[j,k];
- if ((i=j) and (skal<>1)) or ((i<>j) and (skal<>0)) then o:=false;
- j:=j+1;
- until not(o) or (j=n+1);
- i:=i+1
- until not (o) or (i=n+1);
- end;
- procedure viv;
- begin
- if o then writeln ('Ортонормированна')
- else writeln ('Не ортонормированна');
- end;
- begin
- vvod;
- vis;
- alg;
- viv;
- end.
Объяснение кода листинга программы
Список действий в коде:
- Ввод данных о матрице (размерность и сами значения)
- Вывод исходной матрицы
- Проверка ортонормированности матрицы с помощью алгоритма, основанного на свойстве ортонормированности (используется внутреннее представление матрицы)
- Вывод результата проверки
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д