Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на тему "Функции"

Автор: kvadrat 20.05.2008 18:54

Условие:
Прикрепленное изображение

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

Вот пока что знаю набросал:

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 20.05.2008 21:29

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

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

Автор: kvadrat 20.05.2008 22:51

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

Абсолютных величин, это что такое?

Автор: kvadrat 20.05.2008 23:36

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

Автор: klem4 21.05.2008 16:17

Цитата
Абсолютных величин, это что такое?


Модуль числа ( |3| = |-3| = 3)

Автор: kvadrat 21.05.2008 23:59

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

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 23.05.2008 0:51

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

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

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

Как реализовать эту формулу в паскале?

Автор: sintanial 23.05.2008 1:54

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

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


Ну если клем4 был прав, то максимальный должен быть столбец в каждой матрице а у тебя считает полностью сумму всех эллементов

Автор: sintanial 23.05.2008 2:24

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


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 23.05.2008 3:02

Блин немогу добиться чтобы матрица вводилась строго 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 23.05.2008 3:06

Ну во первых ты вводишь матрицу 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 23.05.2008 3:14

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 23.05.2008 3:39

У тебя в коде очень много неправильного. Щас сделаю правельно

Автор: sintanial 23.05.2008 4:22

Вот я написал. Однако почему то не вычисляется 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.