Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2009, 22:33   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию седловая точка

Добрый вечер....
Не могу понять как написать pascal поиск в двумерном массиве седловой точки.
Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот.
Помогите мне реализовать этот поиск....
Заранее вам огромное спасибо!!!!))))
tanek вне форума Ответить с цитированием
Старый 26.09.2009, 22:38   #2
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Засунуть в цикл вот такую последовательность:

1. Ищем минимальный элемент в строке. (запоминаем индексы)
2. Смотрим индекс этого элемента и ищем максимальный элемент в столбце.
3. Если этотже элемент оказался максимальным в столбце, то выводим его.
4. *Следующая строка*
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 26.09.2009, 22:49   #3
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

вот как я начала:
Код:
temp:=a[i,j];
for i:=1 to line do
  for j:=1 to colum do
  begin
     if (temp>a[i,j+1]) then
       max=a[i,j+1];
     if (temp<a[i,j+1]) then
       min=temp;
  end;
Так? я вас правильно поняла?
А как тогда дальше, не поможете?
tanek вне форума Ответить с цитированием
Старый 26.09.2009, 23:41   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

При первом приближении это выглядит вот так. Можно посидеть поуменьшать код, но это ты сам.
Как выяснилось получить массив с "седловой" точкой очень не простая задача. Я минут десять тыкал и получил всего пару таких массивов.
Такчто тестируй )

Код:
Var
  A : Array [1..5, 1..5] Of Integer; // Массив.
  x, y, z : Integer; // Переменые циклов.
  Min, Max : Integer; // Минимальное и максимальное значение.
  InMin, InMax : Integer; // Индексы минимального(в строке) и максимального(в столбце) элемента.

Begin
//Заполним массив и выведем его не экран.
Randomize;
For x := 1 To 5 Do
  Begin
    For y := 1 To 5 Do
      Begin
        A[x,y] := 10 + Random(90);
        Write(A[x,y], ' ');
      End;
    Writeln;
  End;

// Найдём "седловую точку"
Writeln;
For x := 1 To 5 Do
  Begin
    // Для начала найдём минимальный элемент в строке.
    // и для наглядности выведем их индексы и значения.
    Min := A[x,1];
    InMin := 1;
    For y := 2 To 5 Do If A[x,y] < Min Then
      Begin
        Min := A[x,y];
        InMin := y;
      End;
    Writeln(x, '. Stroka');
    Writeln('Minimum = ', Min, ' , a ego nomer = [', x, ',' , InMin, ']');

    // Теперь найдём индекс максимального элемента по столбцу с номером InMin.
    Max := A[1, InMin];
    InMax := 1;
    For z := 2 To 5 Do If A[z, InMin] > Max Then
      Begin
        Max := A[z, InMin];
        InMax := z;
      End;
      Writeln('Dla stolbca:');
    Writeln('Maximum = ', Max, ' , a ego nomer = [', InMax, ',' , InMin, ']');

    // Проверим является ли эта точка "седловой".
    If (x = InMax) Then Writeln('True') Else Writeln('False');
    Writeln;
  End;

Readln;
End.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 27.09.2009, 05:31   #5
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Код:
program Project30;
{$APPTYPE CONSOLE}
var
   i, j: integer;
   n, m: integer;
   a: array [1 .. 100, 1 .. 100] of integer;
   minrow, maxrow: integer; //номера минимального и максимального элементов в строке
   mincol, maxcol: integer; //номера минимального и максимального элементов в столбце
begin
   readln(n, m);
   for i := 1 to n do begin
      for j := 1 to m do read(a[i, j]);
      readln;
   end;
   for i := 1 to n do begin
      //находим минимальный и максимальный элементы в строке
      minrow := 1;
      maxrow := 1;
      for j := 1 to m do begin
         if a[i, minrow] > a[i, j] then minrow := j;
         if a[i, maxrow] < a[i, j] then maxrow := j;
      end;
      //проверяем столбцы минимального и максимального элемента в строке
      //мы можем сделать это в одном цикле, т.к в столбце мин. элем. нам нужен
      //только макс. элем., а в столбце макс. элем. только мин.элем
      mincol := 1;
      maxcol := 1;
      for j := 1 to m do begin
         if a[mincol, maxrow] > a[j, maxrow] then mincol := j;
         if a[maxcol, minrow] < a[j, minrow] then maxcol := j;
      end;
      //ответ
      if mincol = i then writeln(i, ' ', maxrow);
      if maxcol = i then writeln(i, ' ', minrow);
   end;
end.
megachuhancer вне форума Ответить с цитированием
Старый 27.09.2009, 05:55   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Вот, может, поможет, хотя и «не на том» языке.

По крайней мере, можно испытать и сравнить.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 02.10.2009, 02:35   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Наглядный пример

А главное, что ввод матриц — прямо в клетки таблиц.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 02.10.2009, 02:45   #8
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Вот есть такая вот процедурка, может поможет.
Код:
procedure nomera(a:matr;k:integer);
var
 max,min,i,j:integer;
begin
for i:=1 to n do
 begin
 min := 1;
 for j:=1 to N do
  if a[i,j]<a[i,min] then min := j;
 max := 1;
 for k:=1 to n do
   if a[k,min]<a[max,min] then max := k;
 if max = i then writeln('Точка matr[',max,',',min,'] седловая');
 end;
end;
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точка пересечения отрезков Witaliy Помощь студентам 5 25.12.2011 13:15
точка доступа WiFi Bayazet Компьютерное железо 3 12.12.2009 03:09
Простая точка Alex Cones Общие вопросы Delphi 4 09.06.2009 13:11
Точка с запятой Xanex Общие вопросы C/C++ 1 02.05.2009 14:31
Точка на полигоне? Роман Радер Общие вопросы Delphi 14 12.02.2007 17:08