Для матрицы А (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
5.05.2005 3:43
Алгоритм... Самое простое - пишем функцию, находящую минимум в заданной строке:
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;
и потом в цикле ее вызываем для каждой строки, и запоминаем промежуточный минимум и номер строки, в котором этот минимум встретился. Как только цикл закончится - по уже известному номеру строки находим сумму ее элементов.
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
5.05.2005 15:23
Shaman, я же привел готовую функцию, зачем понадобилось ее исправлять?
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
5.05.2005 16:34
Как я понял это ответ на мою задачу?? что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку 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
5.05.2005 16:38
Ещё вопрос что это за n?? номер строки?? Как я понимаю нам надо сначало найти минимальный элемент и запомнить его номер i и потом приравнять его к n а когда ищим сумму
sum:=0; for j:=1 to 5 do sum:=sum+a[n,j];
volvo
5.05.2005 17:09
Цитата(Shaman @ 5.05.05 12:34)
что то он не пашет у меня не одномерный массив а двух мерный и он выдаёт ошибку Type mismatch и указывает где это в функции и поэтому мне приходиться исправлять
То, что Вам приходится исправлять - а написать самому не хочется? Так пишите...
Цитата(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
5.05.2005 17:15
for i:=1 to 4 do for j:=1 to 5 do begin Write(i,j,': '); readln; end;
Матрицу я как заполнять буду??
Shaman
5.05.2005 17:47
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
5.05.2005 20:30
Гм...
Цитата
... и не надо писать иди учи теория я прочитал про функции наверно больше чем про остальные разделы
Наверно тогда бы ваша программа была бы создана с использованием функций!
А матрицу можно заполнять случайными числами. Сгенерировать их позволит функция random
shaman
6.05.2005 1:56
не народ вообще странный я где нибудь писал что матрицу мне надо заполнять случайными числами??? я вообще просил либо алгоритм либо решение(полное) но так как я понял решения мне не дадут то я прошу хотябы алгоритм или решение задачи любой на матрицы с функцией тока чтоб решение было полное и сама задача (и конечно лучше бы чтоб каждое действие описывалось) или может кто нить подскажет где её взять
Atos
6.05.2005 14:32
Цитата
for i:=1 to 4 do for j:=1 to 5 do begin Write(i,j,': '); readln; end;
Матрицу я как заполнять буду??
Молча!! :D
Вообще-то для того, чтобы её заполнить, надо в неё хоть что-нибудь записать. Например,