Матрицы. Тексты программ: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Mikst (обсуждение | вклад) |
Mikst (обсуждение | вклад) Нет описания правки |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
__NOTOC__ | |||
===Общая часть=== | ===Общая часть=== | ||
Во всех задачах будем считать, что матрица описана следующим образом: | Во всех задачах будем считать, что матрица описана следующим образом: | ||
Строка 12: | Строка 13: | ||
for var i:=1 to M do | for var i:=1 to M do | ||
for var j:=1 to N do | for var j:=1 to N do | ||
a[i,j] := Random( | a[i,j] := Random(10); | ||
end; | end; | ||
Строка 116: | Строка 117: | ||
===Поиск сумм в строках=== | ===Поиск сумм в строках=== | ||
<source lang="Delphi">var | |||
a: Matrix; | |||
sums: array [1..SzM] of integer; | |||
begin | |||
var m := 4; | |||
var n := 5; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
for var i:=1 to m do | |||
begin | |||
var sum := 0; | |||
for var j:=1 to n do | |||
sum += a[i,j]; | |||
sums[i] := sum; | |||
end; | |||
writeln('Суммы в строках: '); | |||
for var i:=1 to m do | |||
write(sums[i]:4); | |||
end.</source> | |||
===Поиск произведений в столбцах=== | ===Поиск произведений в столбцах=== | ||
=== | <source lang="Delphi">var | ||
a: Matrix; | |||
products: array [1..SzN] of integer; | |||
begin | |||
var m := 3; | |||
var n := 4; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
for var j:=1 to n do | |||
begin | |||
var p := 1; | |||
for var i:=1 to m do | |||
p *= a[i,j]; | |||
products[j] := p; | |||
end; | |||
writeln('Произведения в столбцах: '); | |||
for var j:=1 to n do | |||
writeln(products[j]:4); | |||
end.</source> | |||
===Наличие нуля в матрице=== | |||
<source lang="Delphi">var | |||
a: Matrix; | |||
HasZero: boolean; | |||
label 1; | |||
begin | |||
var m := 3; | |||
var n := 4; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
HasZero := False; | |||
for var i:=1 to m do | |||
for var j:=1 to n do | |||
if a[i,j]=0 then | |||
begin | |||
HasZero := True; | |||
goto 1; | |||
end; | |||
1: | |||
if HasZero then | |||
writeln('В матрице есть нули') | |||
else writeln('В матрице нулей нет') | |||
end.</source> | |||
===Сумма чисел на главной диагонали=== | ===Сумма чисел на главной диагонали=== | ||
<source lang="Delphi">var | |||
a: Matrix; | |||
sum: integer; | |||
begin | |||
var m := 5; | |||
var n := m; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
sum := 0; | |||
for var i:=1 to m do | |||
sum += a[i,i]; | |||
writeln('Сумма элементов главной диагонали: ',sum); | |||
end.</source> | |||
===Сумма чисел на побочной диагонали=== | ===Сумма чисел на побочной диагонали=== | ||
===Заполнение нулями ниже | <source lang="Delphi">var | ||
===Заполнение нулями | a: Matrix; | ||
sum: integer; | |||
begin | |||
var m := 5; | |||
var n := m; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
sum := 0; | |||
for var i:=1 to m do | |||
sum += a[i,m-i+1]; | |||
writeln('Сумма элементов побочной диагонали: ',sum); | |||
end.</source> | |||
===Заполнение нулями ниже главной диагонали=== | |||
<source lang="Delphi">var | |||
a: Matrix; | |||
sum: integer; | |||
begin | |||
var m := 5; | |||
var n := m; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
for var i:=2 to m do | |||
for var j:=m-i+2 to m do | |||
a[i,j] := 0; | |||
writeln('Преобразованная матрица: '); | |||
PrintMatrix(a,m,n); | |||
end.</source> | |||
===Заполнение нулями выше побочной диагонали=== | |||
<source lang="Delphi">var | |||
a: Matrix; | |||
sum: integer; | |||
begin | |||
var m := 5; | |||
var n := m; | |||
FillMatrixByRandom(a,m,n); | |||
writeln('Исходная матрица: '); | |||
PrintMatrix(a,m,n); | |||
for var i:=1 to m-1 do | |||
for var j:=i+1 to m do | |||
a[i,j] := 0; | |||
writeln('Преобразованная матрица: '); | |||
PrintMatrix(a,m,n); | |||
end.</source> | |||
== Ссылки == | == Ссылки == | ||
[[Программы для начинающих]] | *[[Программы для начинающих]] | ||
*[http://pascalabc.net/ru/programmyi-i-algoritmyi-dlya-nachinayuschih.html Сайт PascalABC.NET: Программы и алгоритмы для начинающих] |
Текущая версия от 15:51, 19 января 2010
Общая часть
Во всех задачах будем считать, что матрица описана следующим образом:
const
SzM = 10;
SzN = 10;
type Matrix = array [1..SzM,1..SzN] of integer;
Кроме того, во всех задачах будем использовать следующие процедуры для заполнения и вывода:
procedure FillMatrixByRandom(var a: Matrix; m,n: integer); // Заполнение случайными
begin
for var i:=1 to M do
for var j:=1 to N do
a[i,j] := Random(10);
end;
procedure PrintMatrix(const a: Matrix; m,n: integer); // Вывод матрицы
begin
for var i:=1 to M do
begin
for var j:=1 to N do
write(a[i,j]:4);
writeln;
end;
end;
Данные участки кода следует писать в начале каждой программы, приводимой в этом пункте.
Заполнение матрицы случайными числами и вывод
var a: Matrix;
begin
var m := 4;
var n := 5;
FillMatrixByRandom(a,m,n);
writeln('Элементы матрицы: ');
PrintMatrix(a,m,n);
end.
Перемена местами двух строк
var a: Matrix;
begin
var m := 5;
var n := 9;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
var k1 := 2; // поменять местами строки с номерами k1 и k2
var k2 := 4;
for var j:=1 to n do
Swap(a[k1,j],a[k2,j]);
writeln('Преобразованная матрица: ');
PrintMatrix(a,m,n);
end.
Поиск минимумов в строках
var
a: Matrix;
mins: array [1..SzN] of integer;
begin
var m := 5;
var n := 9;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var i:=1 to m do
begin
var min := a[i,1];
for var j:=2 to n do
if a[i,j]<min then
min := a[i,j];
mins[i] := min;
end;
writeln('Минимумы в строках: ');
for var i:=1 to m do
write(mins[i]:4);
end.
Поиск максимумов в столбцах
var
a: Matrix;
maxs: array [1..SzN] of integer;
begin
var m := 5;
var n := 9;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var j:=1 to n do
begin
var max := a[1,j];
for var i:=2 to m do
if a[i,j]>max then
max := a[i,j];
maxs[j] := max;
end;
writeln('Максимумы в столбцах: ');
for var j:=1 to n do
write(maxs[j]:4);
end.
Поиск сумм в строках
var
a: Matrix;
sums: array [1..SzM] of integer;
begin
var m := 4;
var n := 5;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var i:=1 to m do
begin
var sum := 0;
for var j:=1 to n do
sum += a[i,j];
sums[i] := sum;
end;
writeln('Суммы в строках: ');
for var i:=1 to m do
write(sums[i]:4);
end.
Поиск произведений в столбцах
var
a: Matrix;
products: array [1..SzN] of integer;
begin
var m := 3;
var n := 4;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var j:=1 to n do
begin
var p := 1;
for var i:=1 to m do
p *= a[i,j];
products[j] := p;
end;
writeln('Произведения в столбцах: ');
for var j:=1 to n do
writeln(products[j]:4);
end.
Наличие нуля в матрице
var
a: Matrix;
HasZero: boolean;
label 1;
begin
var m := 3;
var n := 4;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
HasZero := False;
for var i:=1 to m do
for var j:=1 to n do
if a[i,j]=0 then
begin
HasZero := True;
goto 1;
end;
1:
if HasZero then
writeln('В матрице есть нули')
else writeln('В матрице нулей нет')
end.
Сумма чисел на главной диагонали
var
a: Matrix;
sum: integer;
begin
var m := 5;
var n := m;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
sum := 0;
for var i:=1 to m do
sum += a[i,i];
writeln('Сумма элементов главной диагонали: ',sum);
end.
Сумма чисел на побочной диагонали
var
a: Matrix;
sum: integer;
begin
var m := 5;
var n := m;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
sum := 0;
for var i:=1 to m do
sum += a[i,m-i+1];
writeln('Сумма элементов побочной диагонали: ',sum);
end.
Заполнение нулями ниже главной диагонали
var
a: Matrix;
sum: integer;
begin
var m := 5;
var n := m;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var i:=2 to m do
for var j:=m-i+2 to m do
a[i,j] := 0;
writeln('Преобразованная матрица: ');
PrintMatrix(a,m,n);
end.
Заполнение нулями выше побочной диагонали
var
a: Matrix;
sum: integer;
begin
var m := 5;
var n := m;
FillMatrixByRandom(a,m,n);
writeln('Исходная матрица: ');
PrintMatrix(a,m,n);
for var i:=1 to m-1 do
for var j:=i+1 to m do
a[i,j] := 0;
writeln('Преобразованная матрица: ');
PrintMatrix(a,m,n);
end.