Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Shaman
Для матрицы А (4 строки , 5 столбцов) определить сумму элементов строки, содержащей минимальный элемент матрицы. Для определения номера строки, содержащей минимальный элемент, использовать функцию


program matrisa;
var
a:array[1..4,1..5] of Integer; i,j:Byte; sum,min,Nstr:integer;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]); min:=a[1,1];
if min>a[i,j] then min:=a[i,j]; end;
Write(min);
readln;
end;
end.



Помогите у меня тродность в написание функции если кто знает напишите алгоритм и желательно решение
и ещё буду очень признателен если дадите ссылку где можно почитать про функции а то на сайте я прочёл и не очень хорошо понял

Тегами пользуемся для исходников...
volvo
Алгоритм... Самое простое - пишем функцию, находящую минимум в заданной строке:
Function min_row(n: integer): integer;
var i, min: integer;
begin
min := a[1];
for i := 2 to 5 do
if min > a[i] then min := a[i];
min_row := min
end;

и потом в цикле ее вызываем для каждой строки, и запоминаем промежуточный минимум и номер строки, в котором этот минимум встретился. Как только цикл закончится - по уже известному номеру строки находим сумму ее элементов.

А насчет процедур и функций можно прочитать здесь: Руководство по языку B.Pascal 7 & Objects/LR (процедуры и функции)
Shaman
program matrisa;
var
a:array[1..4,1..5] of Integer;
i,j:Byte;
sum,min:integer;
function min_row: integer;
var
n:byte;
begin
min := a[1,1];
for i:= 1 to 4 do
for j:= 1 to 5 do
if min > a[i,j] then
begin
min := a[i,j];
n:=i;
for j:=1 to 5 do min_row:=min_row+a[n,j] ; end;
end;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]);
end;
sum := min_row;
WriteLn(sum); readln; end.



у меня не получаеться где тут ошибка??
volvo
Shaman, я же привел готовую функцию, зачем понадобилось ее исправлять? blink.gif
var
a:array[1..4,1..5] of Integer;

Function min_row(n: integer): integer;
var i, min: integer;
begin
min := a[1];
for i := 2 to 5 do
if min > a[i] then min := a[i];
min_row := min
end;

var
i, min, min_row, curr_min: integer;
begin
min := maxint; { значение, заведомо большее любого другого }
for i := 1 to 4 do begin
curr_min := min_row(i);
if min > curr_min then begin
{ запоминаем минимум и строку, в которой его нашли }
min := curr_min; min_row := i;
end;
end;

sum := 0;
{ суммируем значения только из одной строки... Из той, где найден минимум }
for i := 1 to 5 do s := s + a[min_row, i];
writeln('sum = ', sum)
end.


Все-таки, прочтите теорию...
Shaman
Как я понял это ответ на мою задачу??
что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку Type mismatch и указывает где это в функции и поэтому мне приходиться исправлять

var
a:array[1..4,1..5] of Integer;

Function min_row(n: integer): integer;
var i, min,j: integer;
begin
min := a[1,1];
for i := 1 to 4 do for j:=1 to 5 do
if min > a[i,j] then min := a[i,j];
min_row := min
end;



Дальше ошибка в разделе переменных над переменной min_row
Duplicate indentifier(min_row) приходиться её убирать или менять название
вообщем вот что у меня получилось но опять он не хочет сумму считать

program primer;
var
a: array[1..4,1..5] of Integer; i,min,j,sum,minrow,curr_min: integer;
Function min_row(n:integer): integer; var i,j,min: integer;
begin
min:=a[1,1];
for i:=1 to 4 do
for j:=1 to 5 do
if min>a[i,j] then min:=a[i,j]; min_row:=min
end;
begin
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end; min:=maxint; for i:=1 to 4 do begin
curr_min:= min_row(i);
if min>curr_min then begin min:=curr_min; minrow:=i;
end;
end;
sum:=0;
for i:=1 to 5 do sum:=sum+a[minrow,i];
writeln('sum= ',sum);
readln
end.

Shaman
Ещё вопрос что это за n?? номер строки??
Как я понимаю нам надо сначало найти минимальный элемент и запомнить его номер i и потом приравнять его к n а когда ищим сумму

sum:=0;
for j:=1 to 5 do sum:=sum+a[n,j];

volvo
Цитата(Shaman @ 5.05.05 12:34)
что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку Type mismatch и указывает где это в функции и поэтому мне приходиться исправлять

angry.gif То, что Вам приходится исправлять - а написать самому не хочется? Так пишите...

Цитата(Shaman @ 5.05.05 12:34)
Дальше ошибка в разделе переменных над переменной min_row
Duplicate indentifier(min_row)  приходиться её убирать или менять название

Всё !! Теперь мы меняемся ролями. Теперь Вы будете писАть программы, а я - искать в них ошибки.

1. Функция min_row в Вашем исполнении потеряла смысл. Ей все равно, передам я 1 или 2 или 3 - она ВСЕГДА будет делать одно и то же. Исправляйте.

2. Объясните смысл этой конструкции:
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;

Я смысла в ней не вижу.

3. Программа не написана "под ключ" (кстати, и не БУДЕТ написана - учитесь шаманить самостоятельно) - поэтому для того, чтобы она заработала нужно еще и ввести данные.

Учите теорию.
Guest

for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;


Матрицу я как заполнять буду??
Shaman

program matrisa;
var
a:array[1..4,1..5] of Integer;
i,j,n:Byte;
sum,min:integer;
begin
for i:=1 to 4 do
for j:=1 to 5 do
begin
Write(i,j,': '); readln(a[i,j]); end;
min := a[1,1];
for i:= 1 to 4 do
for j:= 1 to 5 do
if min > a[i,j] then begin
min := a[i,j];
n:=i;
end;
for j:=1 to 5 do sum:=sum+a[n,j];
Write('Min element:',min);
writeln('Summa:',sum);
readln
end.


Может я что то нетак спрашиваю я вот напсал программу без функции мне эту программу надо с функцией сделать а то что вы предлагаете я не очень хорошо понимаю и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы
hiv
Гм...
Цитата
... и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы

Наверно тогда бы ваша программа была бы создана с использованием функций!

А матрицу можно заполнять случайными числами. Сгенерировать их позволит функция random
shaman
не народ вообще странный я где нибудь писал что матрицу мне надо заполнять случайными числами??? я вообще просил либо алгоритм либо решение(полное) но так как я понял решения мне не дадут то я прошу хотябы алгоритм или решение задачи любой на матрицы с функцией тока чтоб решение было полное и сама задача (и конечно лучше бы чтоб каждое действие описывалось) или может кто нить подскажет где её взять
Atos
Цитата
for i:=1 to 4 do for j:=1 to 5 do begin
Write(i,j,': '); readln; end;

Матрицу я как заполнять буду??


Молча!! :D

Вообще-то для того, чтобы её заполнить, надо в неё хоть что-нибудь записать.
Например,
Код
readln(a[i,j])
hiv
Там есть все! И ввод, и вывод матриц.
FAQ: Массивы. Матрицы. Типичные задачи.
volvo
Цитата
и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы
Без теории здесь по-любому не обойтись, так что перечитать придется.

Цитата(shaman @ 5.05.05 21:56)
как я понял решения мне не дадут

Правильно понял...


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