Помощь - Поиск - Пользователи - Календарь
Полная версия: нахождение минимального элемента матрицы в виде функции
Форум «Всё о Паскале» > 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 Посмотри, что стало с кавычками. Исправь, пожалуйста..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.