Построение вектора из элементов матрицы - Free Pascal
Формулировка задачи:
Помогите найти в чем проблема
Пусть дана матрица А(n*n). Постройте вектор, каждый элемент которого равен наибольшему количеству равных элементов в соответствующей строке матрицы А. Воспользуйтесь функцией, которая определяет это количество в i-строке матрицы А
program qwe;
const
nmax=20;
type
tVec=array [1..nmax] of integer;
tMas=array [1..nmax,1..nmax] of integer;
function MaxEq(m: tmas; n, r: integer): integer;
var
i, j, c,p: integer;
b: tVec;
begin
for i:=1 to n do begin
b[i]:=1;
for j:=i+1 to n do if m[r,i]=m[r,j] then inc(b[i]);
end;
c:=b[1];
for i:=2 to n do if b[i]>c then c:=b[i];
MaxEq:=c;
end;
var
n,m, i, j: integer;
a: tMas;
v: tVec;
begin
Write('Введите размерность:');
ReadLn(n,m);
WriteLn('Введите элементы матрицы:');
for i:=1 to n do
begin
for j:=1 to m do
Read(a[i,j]);
end;
writeln('Матрица*');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4 );
writeln;
end;
writeln('Вектор');
for i:=1 to n do begin
v[i]:=MaxEq(a,n,i);
end;
for i:=1 to n do begin
if v[i]=1 then v[i]:=0;
write(v[i]:4)
end; WriteLn;
end.Решение задачи: «Построение вектора из элементов матрицы»
textual
Листинг программы
program qwe;
type
tVec=array of integer;
tMas=array of tvec;
function MaxEq(m: tmas; i:dword): dword;
procedure swap( var a, b:integer );
var
temp : integer;
begin
temp := a;
a := b;
b := temp;
end;
procedure BubbleSort( var a: array of integer );
var
n, newn, i:integer;
begin
n := high( a );
repeat
newn := 0;
for i := 1 to n do
begin
if a[ i - 1 ] > a[ i ] then
begin
swap( a[ i - 1 ], a[ i ]);
newn := i ;
end;
end ;
n := newn;
until n = 0;
end;
var
v:tvec;
j,p:dword;
t:integer;
begin
SetLength(v,length(m));
for j:=0 to length(v) do v[j]:=0;
BubbleSort(m[i]);
t:=m[0,i]; j:=1; p:=0;
while j<>length(m) do
begin
if m[i,j-1]=m[i,j] then inc(v[p]) else inc(p);
inc(j);
end;
BubbleSort(v);
MaxEq:=v[length(v)-1]+1;
end;
var
n, i, j: integer;
// m:dword;
a: tMas;
v: tVec;
begin
randomize;
// Write('Введите размерность:');
// ReadLn(n,m);
n:=8;
SetLength(a,n);
SetLength(v,n);
WriteLn('Введите элементы матрицы:');
for i:=0 to n-1 do
begin
SetLength(a[i],n);
for j:=0 to n-1 do
/// Read(a[i,j]);
a[i,j]:=Random(3);
end;
writeln('Матрица*');
for i:=0 to n-1 do
begin
for j:=0 to n-1 do
write(a[i,j]:4 );
writeln;
end;
writeln('Вектор');
for i:=0 to n-1 do begin
v[i]:=MaxEq(a,i);
end;
for i:=0 to n-1 do begin
if v[i]=1 then v[i]:=0;
write(v[i]:4)
end; WriteLn;
readln;
end.
Объяснение кода листинга программы
Список действий в коде:
- Объявление типов данных для матрицы и вектора.
- Создание функции для поиска максимального элемента в строке матрицы.
- Создание процедуры для перестановки элементов в матрице.
- Создание процедуры для сортировки элементов в матрице.
- Инициализация вектора нулями.
- Сортировка элементов в матрице с помощью процедуры BubbleSort.
- Инициализация переменных для цикла.
- Проход по всем элементам матрицы и добавление единицы к индексу максимального элемента в соответствующем векторе.
- Сортировка элементов в каждом векторе с помощью процедуры BubbleSort.
- Вывод максимальных значений вектора.
- Ввод размера матрицы и заполнение ее элементами.
- Вывод матрицы на экран.
- Вычисление максимальных значений в каждой строке матрицы и запись их в вектор.
- Вывод значений вектора на экран.
- Ввод данных для матрицы и вектора.
- Завершение работы программы.