Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение минимального элемента матрицы в виде функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ulika
9. Сформировать двумерный массив Z размером 3 x 11 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. Вычислить сумму положительных элементов строки, в которой находится минимальный элемент матрицы Z (оформить нахождение минимального элемента в виде функции). Вывести на экран и в файл полученную сумму и номер строки
ulika
матрицу сформировала, как минимум находить знаю, не могу вспомнить как функцию применять и оформлять
Client
function get_min : integer;  
begin
//тут поиск мин числа
get_min := минимум ;
end;

begin
//...
min := get_min;
// и дальше что надо
end.

Если в функции искать само значение, то можно сразу вычислить сумму положительных элементов строки.
А можно вернуть номер строки мин элемента в матрцие, и по уже известному номеру, посчитать что надо
ulika
вот так я вижу программу, только по-прежнему не могу понять как пользоваться функцией((
извините за неправильное оформление, прочитала правила, но не совсем получается строго им следовать)

Добавлено через 4 мин.
program kontrolnaya;
const N1=5;N2=11;
var i,j,c,sum:integer;
mas:array[1..N1,1..N2]of integer;
f:text;

function get_min:integer;
begin
min:=mas[1,1];
for i:=1 to N1 do
for j:=1 to N2 do
if mas[i,j]<min then
begin
get_min:=mas[i,j];
c:=i;
end;
end;

begin
randomize;
assign (f,'matrica.txt');
rewrite(f);
for i:=1 to N1 do
begin
for j:=1 to N2 do
begin
mas[i,j]:=random(201)-100;
write (mas[i,j]:5);
write(f,mas[i,j]:5);
end;
writeln;
writeln(f);
end;

// не знаю как вызвать номер строки где находится минимум, потом считаю сумму//

sum:=0;
i:=//номер строки//
for j:=1 to N2 do
sum:=sum+mas[i,j];
close(f);
read(mas[i,j],sum);
end.

Lapp
ulika, оформить функцию несложно, но с точки зрения ПРОГРАММИРОВАНИЯ не вполне ясно, какие параметры тебе нужно передать в эту функцию. По идее, нужно передавать матрицу, но тогда возникает вопрос о ее размерности и о том, знаешь ли ты об открытых массивах. Прояснишь?

Если не передавать массив, то все предельно просто. Примерно так:
function MinRow: integer;  // исправлено
var
i,j,x,y: integer;
begin
x:=1;
y:=1;
for i:=1 to N1 do for j:=1 to N2 do if mas[i,j]<mas[x,y] then begin
x:=i;
y:=j
end;
MinRow:=x
end;


Потом делаешь:
i:= MinRow; //номер строки//

И все )).

Цитата(ulika @ 19.04.2010 20:31) *
прочитала правила, но не совсем получается строго им следовать)
А с чем конкретно проблема? blink.gif
ulika
массив закрытый, 3 строки и 11 столбцов. а можно из первого варианта функции выудить элемент и номер строки?
по оформлению - у меня таб вон как далеко переводит курсор к примеру.
Lapp
Цитата(ulika @ 19.04.2010 21:36) *
массив закрытый,
Массив - не дверь, закрытым не бывает )). Открытый масси - это способ передачи var-параметров, когда заранее не знаешь размера массива.

Цитата
а можно из первого варианта функции выудить элемент и номер строки?
Боючь, что нет. Там у тебя стоит присвоение минимума самой функции, что в корне неверно в данном случае (поскольку функция должна возвращать номер строки с минимумом). А если это исправлять - как раз и получится, что я написал (кстати, я там пропустил тип функции - исправлю).

Цитата
по оформлению - у меня таб вон как далеко переводит курсор к примеру.
А ты не пользуйся табами вообще. Это атавизм. Они тебе много крови попортят.. )) Когда-то они экономили место (на дискете 180КБ)), а сейчас что экономить? smile.gif
ulika
спасибо))
все понятно)
не буду передавать матрицу в массив. а про закрытый я на форуме прочитала просто что открытый - это с нуля нумерация, вот и решила что закрытый это с единицы. lol.gif
Lapp
Цитата(ulika @ 19.04.2010 22:11) *
прочитала просто что открытый - это с нуля нумерация, вот и решила что закрытый это с единицы. lol.gif
smile.gif ясно, я не врубился сразу )). Да, у открытых действительно нумерация с нуля, но это побочный эффект, а не признак )).

На всяк случай: вот так можно избежать привязки к только одному массиву (что делает использование функции бессмысленным):
var
mas: array[1..N1,1..N2]of integer; // два массива
mas2: array[1..M1,1..M2]of integer; // разных

...

function MinRow(a: array of integer; m,n: integer): integer; //размер массива не объявлен (открытый массив)
var
i,j,x,y: integer;
begin
x:=0;
y:=0;
for i:=0 to m-1 do for j:=0 to n-1 do begin if a[i*n+j]<a[x*n+y] then begin //пересчитываем индекс
x:=i;
y:=j
end;
MinRow:=x+1
end;

...

i:= MinRow(mas,N1,N2); //нажодим строку с минимумом в mas
j:= MinRow(mas2,M1,M2); //нажодим строку с минимумом в mas2
...


В таком виде функцию можно применять к разным массивам любой размерности.

P.S.
Исправил..
ulika
еще раз спасибо) как напишу прогу обязательно выложу, может кому-нибудь пригодится)))
ulika
 
program kontrolnaya;
uses crt;
const N1=3;N2=11;
var
i,j,sum:integer;
mas:array[1..N1,1..N2]of integer;
f:text;

function MinRow: integer; {функция нахождения номера строки с минимальным
var элементом матрицы}
i,j,x,y: integer;
begin
x:=1;
y:=1;
for i:=1 to N1 do
for j:=1 to N2 do
if mas[i,j]<mas[x,y] then
begin
x:=i;
y:=j
end;
MinRow:=x;
end;

begin
clrscr;
randomize;
assign (f,'matrica.txt');
rewrite(f);
writeln(‘isxodnaya matrica’);

for i:=1 to N1 do { формируем двумерный массив 3 x 11 с помощью генератора
begin случайных чисел }
for j:=1 to N2 do
begin
mas[i,j]:=random(201)-100;
write (mas[i,j]:5); { вывод элементов массива на экран и в файл}
write(f,mas[i,j]:5);
end;
writeln;
writeln(f);
end;

i:= MinRow; {вызов функции}
sum:=0;

for j:=1 to N2 do {нахождение суммы}
sum:=sum+mas[i,j];

writeln (‘summa=’,sum:5); { Вывод на экран и в файл полученную сумму и номер строки}
writeln(f,sum:5);
write (‘nomer stroki’,i:2);
write (f,i:2);

close(f);
readln;
end.

.
Lapp
ulika, ты через что копировала прогу? через Word? smile.gif Посмотри, что стало с кавычками. Исправь, пожалуйста..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.