Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на тему "Функции"
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kvadrat
Условие:
Нажмите для просмотра прикрепленного файла

Немогу понять что такое норма и что обозначает та формула в конце, помогите разобраться плиз.

Вот пока что знаю набросал:
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.
klem4
на сколько я понял, речь идет об l-норме: Изображение

Требуется найти столбец с максимально суммой абсолютных величин значений.
kvadrat
Цитата
Требуется найти столбец с максимально суммой абсолютных величин значений.

Абсолютных величин, это что такое?
kvadrat
Как я понял тут должны быть 2 функции, первая производит ввод матрицы постолбцово, вторая находит столбец сума элементов которого больше всех. Так?
klem4
Цитата
Абсолютных величин, это что такое?


Модуль числа ( |3| = |-3| = 3)
kvadrat
Извиняюсь за случайно созданую ту тему, вот мой вариант решения но оно выводит совсем не то! помогите исправить ошибки пажалусто
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.

kvadrat
Цитата(klem4 @ 20.05.2008 20:29) *

на сколько я понял, речь идет об l-норме: Изображение

Требуется найти столбец с максимально суммой абсолютных величин значений.

Как реализовать эту формулу в паскале?
sintanial
Ну я думаю так : Сначало поэлементно складываешь элементы одного столбца, все элементы делаешь по абсолютной величине, на паскале функция abs(a[i,j]);, потом элементы второго столбца так же складываешь, суммы запоминаешь в две переменные, и пусть сумма первого столбца будет называться max. ТОгда делаешь условие, если вторая переменная больше первой то max присваеиваешь вторую, а если нет то остается прежняя без изменений. Потом считаешь сумму 3 столбца, если сумма 3 больше max тогда max присваиваешь 3 и т.д. Потом так же делаешь со второй матрицей и так же заводишь переменную max1 и делаешь почти то же самое что и вначале я написал только уже с матрицами а не со столбцами. Просто присваиваешь max1 значение функции от первой матрице b значение второй матрице и сравниваешь, если b>max1 тогда b:=max1. И так же с третьей запоминаешь её в b и сравниваешь =) !

Цитата
Извиняюсь за случайно созданую ту тему, вот мой вариант решения но оно выводит совсем не то! помогите исправить ошибки пажалусто


Ну если клем4 был прав, то максимальный должен быть столбец в каждой матрице а у тебя считает полностью сумму всех эллементов
sintanial
Вот переделал функцию. Я писал тут, и не проверял, может где ошибся !. Но вроде правельно

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;

kvadrat
Блин немогу добиться чтобы матрица вводилась строго 4 на 3 вроде всё как положено прописываюmad.gif
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;
sintanial
Ну во первых ты вводишь матрицу 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]);
kvadrat
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;

Теперь после ввода четвёртой строки он просит ещё чёто ввести, только затем следующюю матрицу.

Нажмите для просмотра прикрепленного файла
sintanial
У тебя в коде очень много неправильного. Щас сделаю правельно
sintanial
Вот я написал. Однако почему то не вычисляется 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.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.