Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу локальный минимум
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
shama shama вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.06.2012
По умолчанию локальный минимум - 08.10.2012, 07:50

Элемент двумерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером (n × n) найти максимум среди всех локальных минимумов.
cpp Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  int kol(0), z(0), max(0),k(0),l(0),c(0),c1(0);
  int n=StrToInt(Edit1->Text);
  StringGrid1->ColCount=n;
  StringGrid1->RowCount=n;

    for ( int i=0; i<n; i++)                    //ищут минимумы по углам
      for (int j=0; j<n; j++)
       { if (i==0) c=0;
          else c=n-1;
          if (j==0) c1=0;
           else c1=n-1;
           { for (l=j;l<j+1;l++)
               for (k=i;k<i+1;k++)
                {if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l+c][k+c1]) && (j!=l+c) && (i!=k+c1))
                  z++;}

 if ((i==0)&&(j!=0)) c=0;                                          //ищет минимумы по краям сторон, насчет правильности этого цикла не уверен
          else c=n-1;
          if ((j==0)&&(i!=0)) c1=0;
           else c1=n-1;
           { for (l=j;l<j+1;l++)
               for (k=i;k<i+1;k++)
                {if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l+c][k+c1]) && (j!=l+c) && (i!=k+c1))
                  z++;}


          if ((i!=0)&&(j!=0))                                           //ищет в середине
           for (k=i; k<i-1; k--)
            for (l=j; l<j-1; l--)
             { if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l][k]) && (i!=k) && (j!=l));
               z++;
             }
       }

          if ((z==3) || (z==5) || (z==8))
          {
            kol++;
            if (StringGrid1->Cells[j][i]>max)
            max=StrToInt(StringGrid1->Cells[j][i]);
          }
       }
  Edit2->Text=IntToStr(kol);
  Edit3->Text=IntToStr(max);
}
помогите пожалуйста исправить ошибки
Ответить с цитированием
  (#2 (permalink)) Старый
wanja wanja вне форума
Member
 
Сообщений: 585
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 08.05.2005
По умолчанию 08.10.2012, 08:54

Кстати, если будешь сравнивать вот так:
StringGrid1->Cells[j][i]<StringGrid1->Cells[l+c][k+c1]


То сравнение будет посимвольное, а не численное.
А чем проверять i==0 и j==0, не проще ли сделать циклы i==1;i<n-1 ?
Ответить с цитированием
  (#3 (permalink)) Старый
shama shama вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.06.2012
По умолчанию 09.10.2012, 07:10

если я буду приравнивать i к единице,то он не будет проверять граничные элементы,а в них то вся и загвоздка
Ответить с цитированием
  (#4 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 27.11.2012, 10:00

Лучше создать массив на две размерности больше, края проинициализировать максимальными числами, вписать внутрь исходный массив и проверять только способом "ищет в середине". Задачи не меняются из года в год, но постоянно все создают себе трудности с лишними проверками и алгоритмами...
Ответить с цитированием
Пользователь сказал cпасибо:
No_Name_5 (13.12.2015)
  (#5 (permalink)) Старый
No_Name_5 No_Name_5 вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.12.2015
По умолчанию 13.12.2015, 00:34

Цитата:
Сообщение от FataLL Посмотреть сообщение
Лучше создать массив на две размерности больше, края проинициализировать максимальными числами, вписать внутрь исходный массив и проверять только способом "ищет в середине". Задачи не меняются из года в год, но постоянно все создают себе трудности с лишними проверками и алгоритмами...
Спасибо FataLL Большое! Все никак не мог придумать эффективного метода как проверить крайние элементы массива, а тут умную мысль такую толкнул, что я даже зарегистрировался на данном сайте))
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Минимум яркости при питании от батарей riddon Батареи и питание 0 11.03.2012 12:04
Нужно найти минимум заданной функции в одном из участке The_Fall Visual Basic 1 14.04.2011 21:53
Найти минимум из 3 чисел, которые вводятся с клавиатуры stella_diurn Haskell 1 28.11.2010 23:42
Поменять местами минимум и максимум sexygirl Prolog 2 28.04.2010 18:56
Минимум в списке blackfey Prolog 6 09.02.2010 16:37
Дан список. найти минимум списка czeh87 Lisp 11 24.09.2009 00:06
Локальный диск Rusik-ab Накопители 1 26.03.2008 20:59
Написать функцию, ищущую минимум в заданном списке списков Zanoza Lisp 4 08.05.2007 21:56
Как подсчитать минимум среди сумм модулей элементов диагоналей DaRkMaN Вопросы начинающих программистов 5 04.04.2005 20:42
Найти программу на asse находящую минимум и максимум Anonymous Assembler 3 16.09.2003 11:26



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов