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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 19:30   #1
art_d
Пользователь
 
Регистрация: 30.09.2010
Сообщений: 22
По умолчанию Поиск элементов в массиве С

Ф-ия ищет сначало самый большой элемент в строке, потом в той колонке, где находится этот элемент ищет наименьший элемент колонки. Программа вылетает с ошибкой, помогите ее найти
Код:
Код:

int index(int rind, int kol, int m[5][10])
{
 int i,min;
  int maxElementsIndex[rind];
  int maxElementsValues[rind];
 
  for (int i=0; i<rind; i++)
  {
    maxElementsValues[i] = m[i][0];
    maxElementsIndex[i] = 0;
    for (int j=0; j<kol; j++)
      {
      if (m[i][j] > maxElementsValues[i])
        {  
         maxElementsValues[i] = m[i][j];
         maxElementsIndex[i] = j;
        }
       }
////////////////
min=maxElementsValues[i];
  for (int i=0; i<rind; i++)
  {
  
  if(min>m[i][maxElementsIndex[i]])
    min=m[i][maxElementsIndex[i]];
   }   
    printf("%4d", min);  
      
      

   }
art_d вне форума Ответить с цитированием
Старый 28.11.2011, 18:32   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Первое, что бросается в глаза -- второй вложенный цикл. Он тоже по i, как и внешний.
Ты уверен, что так и должно быть? И вообще -- нужен ли он там?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 28.11.2011, 18:42   #3
art_d
Пользователь
 
Регистрация: 30.09.2010
Сообщений: 22
По умолчанию

а как еще реализовать поиск по колонне?
art_d вне форума Ответить с цитированием
Старый 28.11.2011, 18:58   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Давай начнем с того, что именно должно быть на выходе?
Я так понимаю, некий вектор (читай -- набор) минимальных по столбцам элементов? Или еще и индексы соответствующих максимальных элементов по строкам?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 28.11.2011, 19:07   #5
art_d
Пользователь
 
Регистрация: 30.09.2010
Сообщений: 22
По умолчанию

В массиве найти число, которое будет наибольшим в своей строке, но наименьшим в своем столбце одновременно.
Моя идея - ищем наибольший элемент строки, находим элемент на 1-ой строке и j-ом столбце, далее проверяем, является ли этот элемент наименьшим в j-ой строке, если нет, то переходим на след. строку
Пока застрял на поиске наименьшего в столбце.
art_d вне форума Ответить с цитированием
Старый 28.11.2011, 19:15   #6
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

хех. вот тяжело было сказать, что надо найти седловые точки?

Код:
bool saddle(int Array[5][10], int rows, int columns, int idxrow, int idxcolumn)
{
    int max, min;
    max = min = Array[idxrow][idxcolumn];
    for (int i = 0; i < rows; i++)
        if (max > Array[i][idxcolumn])
            return false;
    for (int j = 0; j < columns; j++)
        if (min < Array[idxrow][j])
            return false;
    return true;
}
Вот тебе функция, которая проверяет, удовлетворяет ли элемент массива Array[idxrow][idxcolumn] обоим условиям сразу.
Тебе осталось в основной процедуре в двойном цикле пробежать по всей матрице и
Код:
if (saddle(Array[5][10], rows, columns, i, j))
    cout << "Седловая точка: Array[" << i << "][" << j << "]" << "  " << Array[i][j] << endl;
ЗЫ Вроде, не напутал ничего
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 28.11.2011 в 19:41.
Mandrivnyk вне форума Ответить с цитированием
Старый 14.12.2011, 23:09   #7
art_d
Пользователь
 
Регистрация: 30.09.2010
Сообщений: 22
По умолчанию

Код:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<time.h>

bool  index(int rind, int kol, int m[][10], int i, int j);


int main()
{
    srand(time(NULL));
    int z,y,i,j,x,rind,kol,ind,m[5][10],m1[5][10];   
getch();
 x=0; 
ind=0;

system("cls");  
  printf("viberute razmer martici:\n\n");  
    printf("1. [5x10]\n");
    printf("2. [4x7]\n"); 
    fflush(stdin);

 do {
scanf("%d%*c", &x);
switch(x)
  
  {       
     case 1:  rind=5, kol=10 ,ind=1; 
              break;
    case 2: rind=4,kol=7,ind=1; 
             break;
       default: printf("povtorite\n"); getch();   
        break;    
            }
            }
 while(ind!=1);
ind=0;
 do {       
 printf("viberite metod:\n\n"); 
    printf("1. Automatisks\n");
    printf("2. Manuals\n");
    fflush(stdin); 
  scanf("%d%*c", &x);
   switch(x)
 {
        case 1:  ind=1;
 for(i=0; i<rind; i++)
 {
         for (j=0; j<kol; j++)
           {
              m[i][j]=rand()%12; 
              printf("%4d", m[i][j]);
            }     
            printf("\n"); 
}

             break;

 case 2:  ind=1;  for(i=0; i<rind; i++)
 {
         for (j=0; j<kol; j++)
           {
           printf("vvedite element[%d][%d]\n",i,j);
             fflush(stdin); 
              scanf("%d%*c",&x) ;    
               m[i][j]=x; 
           
            } 
}
system("cls");
 for(i=0; i<rind; i++)
 { 
 for (j=0; j<kol; j++)
           {
              printf("%4d", m[i][j]);
            } 
            printf("\n");
}
             break;
        default: printf("vvedite es4o raz\n"); getch();
        }
        } 

          for (int i = 0; i < rind; i++)
            for (int j = 0; j < kol; j++)
            {
          index(rind, kol, m, i, j);
          }
          //if (index(rind, kol, m, i, j))
          
          //  printf("%4d", m[i][j]);
            
          
            }
            
            


if (index(rind, kol, m, i, j))
printf("%4d", m[i][j]);
else
printf("netu");
 getch();                        

return 0;
}

//////////////////////////////////////

bool  index(int rind, int kol, int m[][10], int idxrow, int idxcolumn)
  { 
   int max, min;
    max = min = m[idxrow][idxcolumn];
    for (int i = 0; i < rind; i++)
        if (max > m[i][idxcolumn])
            return false;
    for (int j = 0; j < kol; j++)
        if (min < m[idxrow][j])
            return false;
    return true;

}
Не ищет нужный элемент, где ошибся?
Изначальное задание, найти седловую точку для массива 5х10 или 4х7 (выбирает пользователь)
art_d вне форума Ответить с цитированием
Старый 05.01.2012, 21:08   #8
art_d
Пользователь
 
Регистрация: 30.09.2010
Сообщений: 22
По умолчанию

есть идеи?
art_d вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск столбца с макс. суммой элементов в двумерном массиве. oRik24 Помощь студентам 3 21.06.2011 13:20
Задача на зачёт. Поиск элементов в 1-мерном массиве oRik24 Помощь студентам 7 16.06.2011 11:04
поиск максимальных элементов в массиве radiokarazinec Общие вопросы Delphi 1 26.12.2010 12:53
C++ поиск повторяющихся (строковых) элементов в массиве danslash Помощь студентам 5 29.03.2010 01:35
ДЭЛФИ 2 задачи для зачета(поиск элементов в массиве) Archetype Помощь студентам 12 10.12.2009 18:18