Условие:
Немогу понять что такое норма и что обозначает та формула в конце, помогите разобраться плиз.
Вот пока что знаю набросал:
program wersdfg;
function f1(i,j:integer):integer;(p:array[1..m,1..n] of real):real;
begin
writeln('vvedite elementi matrici');
for i:=1 to n do begin
write(i:2, '-я строка: ');
for j:=1 to n do read(p[i,j]);
end;
const m=4;n=3;
var a,b,c:array[1..m,1..n] of real;i,j:integer;
begin
readln(f1(i,j,p));
end.
на сколько я понял, речь идет об l-норме:
Требуется найти столбец с максимально суммой абсолютных величин значений.
Как я понял тут должны быть 2 функции, первая производит ввод матрицы постолбцово, вторая находит столбец сума элементов которого больше всех. Так?
Извиняюсь за случайно созданую ту тему, вот мой вариант решения но оно выводит совсем не то! помогите исправить ошибки пажалусто
program ersdf;
uses crt;
function max(s:real;i,j:integer):real;
var a:array[1..4,1..3] of real;
begin
for i:=1 to 4 do
begin
for j:=1 to 3 do
begin
s:=s+abs(a[i,j]);
max:=s;
end;
end;
end;
function mat(n,m:integer):real;
var i,j:integer; a:array[1..4,1..3] of real;
begin
writeln('vvod matrici:');
m:=3;
n:=4;
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
end;end;
end;
var a,b,c:real;
i,s,j:integer;s1,s2,s3,vmax:real;m,n:integer;
begin
clrscr;
a:=mat(m,n);
readln(a);
s1:=max(s,i,j);
b:=mat(m,n);
readln(b);
s2:=max(s,i,j);
c:=mat(m,n);
readln©;
s3:=max(s,i,j);
if s1>s2 then vmax:=s1 else vmax:=s2;
if s3>vmax then vmax:=s3;
writeln('max=',vmax);
end.
Ну я думаю так : Сначало поэлементно складываешь элементы одного столбца, все элементы делаешь по абсолютной величине, на паскале функция abs(a[i,j]);, потом элементы второго столбца так же складываешь, суммы запоминаешь в две переменные, и пусть сумма первого столбца будет называться max. ТОгда делаешь условие, если вторая переменная больше первой то max присваеиваешь вторую, а если нет то остается прежняя без изменений. Потом считаешь сумму 3 столбца, если сумма 3 больше max тогда max присваиваешь 3 и т.д. Потом так же делаешь со второй матрицей и так же заводишь переменную max1 и делаешь почти то же самое что и вначале я написал только уже с матрицами а не со столбцами. Просто присваиваешь max1 значение функции от первой матрице b значение второй матрице и сравниваешь, если b>max1 тогда b:=max1. И так же с третьей запоминаешь её в b и сравниваешь =) !
Вот переделал функцию. Я писал тут, и не проверял, может где ошибся !. Но вроде правельно
function max(s:real;i,j:integer):real;
var a:array[1..4,1..3] of real;
max1:real;
begin
j:=1;
max1:=0;
repeat
for i:=1 to 4 do
s:=s+abs(a[i,j]);
if s>max1 then
max1:=s;
inc(j)
until j<>3 do
end;
max:=max1;
end;
Блин немогу добиться чтобы матрица вводилась строго 4 на 3 вроде всё как положено прописываю
function mat(n,m:integer):real;
var i,j:integer; a:array[1..4,1..3] of real;
begin
n:=4;
m:=3;
writeln('vvedite elementi matrici');
for i:=1 to n do begin
write(i:2, '-яya stroka : ');
for j:=1 to n do read(a[i,j]);
readln;
end;
Ну во первых ты вводишь матрицу 4 на 4 а не 4 на 3
for i:=1 to n do
begin
write(i:2, '-яya stroka : ');
for j:=1 to n do
read(a[i,j]);
А надо
for i:=1 to n do
begin
write(i:2, '-яya stroka : ');
for j:=1 to m do
read(a[i,j]);
function mat(n,m:integer):real;
var i,j:integer; a:array[1..4,1..3] of real;
begin
n:=4;
m:=3;
writeln('vvedite elementi matrici');
for i:=1 to n do begin
write(i:2, '-яya stroka : ');
for j:=1 to m do read(a[i,j]);
readln;
end;
У тебя в коде очень много неправильного. Щас сделаю правельно
Вот я написал. Однако почему то не вычисляется s1,s2,s3 если им передавать значение функции( наверно что то в функции напутал, но уже спать хочу не могу найти ошибку, попробуй завтра сам разобрать, может поймешь де я ошибся), а если без функции делать то все отлично вроде считается =). Короче подумай с функцией max- я что то в ней не так сделал( что то не так описал, либо в конце не правильно присвоил значение функции) =)
Type matr=array[1..4,1..4] of real ;
function max(const a:matr):real;
var s,max1:real; i,j:integer;
begin
j:=1;
max1:=0;
repeat
begin
s:=0;
for i:=1 to 4 do
s:=s+abs(a[i,j]);
if s>max1 then
max1:=s;
inc(j)
end;
until j>3;
max:=max1;
end;
function mat(var a:matr):real;
var i,j:integer;
begin
writeln('vvod matrici:');
for i:=1 to 4 do
for j:=1 to 3 do
read(a[i,j]);
end;
var a,b,c:matr;
i,s,j:integer;
s1,s2,s3,max1,vmax:real;
m,n:integer;
begin
mat(a);
s1:=max(a);
mat(b);
s2:=max(b);
mat©;
s3:=max©;
if s1>s2 then
vmax:=s1
else
vmax:=s2;
if s3>vmax then
vmax:=s3;
writeln('max=',vmax);
end.