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

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

Форум «Всё о Паскале» _ Задачи _ нахождение минимального элемента матрицы в виде функции

Автор: ulika 19.04.2010 0:50

9. Сформировать двумерный массив Z размером 3 x 11 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл. Вычислить сумму положительных элементов строки, в которой находится минимальный элемент матрицы Z (оформить нахождение минимального элемента в виде функции). Вывести на экран и в файл полученную сумму и номер строки

Автор: ulika 19.04.2010 1:23

матрицу сформировала, как минимум находить знаю, не могу вспомнить как функцию применять и оформлять

Автор: Client 19.04.2010 1:55

function get_min : integer;  
begin
//тут поиск мин числа
get_min := минимум ;
end;

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

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

Автор: ulika 19.04.2010 23:31

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

Добавлено через 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.




Прикрепленные файлы
Прикрепленный файл  progr.txt ( 716 байт ) Кол-во скачиваний: 270

Автор: Lapp 20.04.2010 0:13

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 20.04.2010 0:36

массив закрытый, 3 строки и 11 столбцов. а можно из первого варианта функции выудить элемент и номер строки?
по оформлению - у меня таб вон как далеко переводит курсор к примеру.

Автор: Lapp 20.04.2010 1:06

Цитата(ulika @ 19.04.2010 21:36) *
массив закрытый,
Массив - не дверь, закрытым не бывает )). Открытый масси - это способ передачи var-параметров, когда заранее не знаешь размера массива.

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

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

Автор: ulika 20.04.2010 1:11

спасибо))
все понятно)
не буду передавать матрицу в массив. а про закрытый я на форуме прочитала просто что открытый - это с нуля нумерация, вот и решила что закрытый это с единицы. lol.gif

Автор: Lapp 20.04.2010 1:29

Цитата(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 20.04.2010 1:39

еще раз спасибо) как напишу прогу обязательно выложу, может кому-нибудь пригодится)))

Автор: ulika 21.04.2010 0:05

 
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 26.04.2010 10:39

ulika, ты через что копировала прогу? через Word? smile.gif Посмотри, что стало с кавычками. Исправь, пожалуйста..