Помощь - Поиск - Пользователи - Календарь
Полная версия: Универсальная программа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Selena
Помогите, пожалуйста, не как не могу сообразить как это сделать.
Задача такая:
Дана матрица А[1..4,1..4]. Найти min элемент в 3 строке и max в 4 столбце.

Я сделала так что можно найти min элемент не только в 3 сроке, а в любой другой строке. Тоже касается и max элемента только по столбцам. А мне нужна, чтобы программа была универсальной. То есть еще сделать так, чтобы в этой же программе можно было найти min элемент в любом столбце, а max в любой строке. Как это сделать?
Вот то что сделала.


Program zadacha;
Uses WinCrt;
Type
 mas2=array[1..10,1..10] of integer;
Var
 A:mas2;
 min3,max4:integer;

Procedure FormMatr(na,ma:Byte;Pa,Qa:integer;Var Aa:mas2);
  var i,j:Byte;
  Begin
   For i:=1 to na do
     For j:=1 to ma do
      Aa[i,j]:=Random(Qa-Pa)+Pa;
  End;

Procedure VyvodMatr(na,ma:Byte;Var Aa:mas2);
  Var i,j:Byte;
  Begin
   For i:=1 to na do
    begin
     For j:=1 to ma do
      Write(Aa[i,j]:3,' '); writeLn('');
    end;
  End;

Function MinMax(Aa:mas2;na,priz,nomer:Byte):Integer;
 Var i,j:Byte; min3k,max4k:integer;
 Begin
   min3k:=Aa[nomer,1];
    For j:=1 to na do
     If Aa[nomer,j]<min3k then min3k:=Aa[nomer,j];

   max4k:=Aa[1,nomer];
    For i:=1 to na do
    If Aa[i,nomer]>max4k then max4k:=Aa[i,nomer];

  Case priz of
   0: minmax:=min3k;
   1: minmax:=max4k;
  end;
 End;

Begin
 Randomize;
 FormMatr(4,4,10,30,A);
 WriteLn('Матрица А'); WriteLn;
 VyvodMatr(4,4,A); Writeln;
 min3:=minmax(A,4,0,3);
 max4:=minmax(A,4,1,4);
 WriteLn('max4=',max4:3,' min3=',min3:3);
End.

volvo
To: Selena
если я правильно тебя понял, то тебе нужно что-то вроде этого?
function min_max(Aa: mas2; is_min: boolean;
         size_stolb, size_str,
         find_stolb, find_str: integer): integer;
var
  mm_i, mm_j: integer;
  i, j: integer;
begin
  mm_i := 1; mm_j := 1;
  for i := 1 to size_stolb do
    for j := 1 to size_str do
      if is_min then begin
        if (Aa[mm_i, mm_j] > Aa[i, j]) and
          ((find_stolb = 0) or (i = find_stolb)) and
          ((find_str = 0) or (j = find_str)) then begin
            mm_i := i; mm_j := j
          end
      end
      else begin
        if (Aa[mm_i, mm_j] < Aa[i, j]) and
          ((find_stolb = 0) or (i = find_stolb)) and
          ((find_str = 0) or (j = find_str)) then begin
            mm_i := i; mm_j := j
          end
      end;
  min_max := Aa[mm_i, mm_j];
end;

одной и той же функцией находишь и мин. и макс. значение любого столбца/строки матрицы... Тогда твой вызов:
 min3:=minmax(A,4,0,3);
 max4:=minmax(A,4,1,4);
 WriteLn('max4=',max4:3,' min3=',min3:3);

можно заменить на:
 min3 := min_max(A, true, 4, 4, 3, 0);
 max4 := min_max(A, false, 4, 4, 0, 4);
 WriteLn('max4=',max4:3,' min3=',min3:3);

(true значит, что ищем минимум, false - максимум, затем идут 2 числа - размерность матрицы, а потом - в какой строке искать, и в каком столбце...)

Если не то - уточняй, что нужно, и желательно с примером, как должна вызываться твоя функция...
volvo
To: klem4, опять торопишься?
Цитата
То есть еще сделать так, чтобы в этой же программе можно было найти min элемент в любом столбце, а max в любой строке.
Как это сделать твоими функциями, можно узнать?
Selena
А как это можно сделать с Case Of?
Препод наш сказал что мне нужно сделать это с Case Of.
Selena
Подскажите как это сделать с Case Of
volvo
Замени тот If что стоял у меня на это:
case is_min of
  true:
      begin
        if (Aa[mm_i, mm_j] > Aa[i, j]) and
          ((find_stolb = 0) or (i = find_stolb)) and
          ((find_str = 0) or (j = find_str)) then begin
            mm_i := i; mm_j := j
          end
      end
  false:
      begin
        if (Aa[mm_i, mm_j] < Aa[i, j]) and
          ((find_stolb = 0) or (i = find_stolb)) and
          ((find_str = 0) or (j = find_str)) then begin
            mm_i := i; mm_j := j
          end
      end;
end;
Selena
Я не провельно сформулировала вопрос.
Мне нужно, чтобы при помощи priz можно выбрать любой столбец или строку, как для максимального, так и для минимального элемента.
Т.е можно было бы задать поиск максимального и минимального элементов в той строке или столбце, в которой мне нужно. Препад посмотрел мою задачу и сакал сто надо ввести для этого еще один priz1. Я только не могу понять. Мне что ли предется еще один делать цикл по столбцам, чтобы найти в нужном мне столбце max, и по строком чтобы в нудной мне строке найти min элемент?
Надеюсь Вы меня поймете.
volvo
To: Selena
объясни мне тогда, чем твой priz и priz1 будут отличаться от моего find_stolb и find_str? Только названием? Ну, так поменяй название. Я не пойму, тебе надо "шашечки или ехать"?

Переформулируем вопрос: Чем та функция, которую я привел, НЕ устраивает? Она не ищет min в какой-то строке? Или max? То же самое со столбцами? Case ... Of теперь тоже присутствует. Что еще надо?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.