Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > поиск елементов массива


Автор: irvis 19.5.2006, 09:38
есть массив. мне надо найти самый левый отрицательный элемент массива и самый правый.
пишу так
Код

void main ()
{
    srand (time(NULL));
    int a[40], k, m;
    for (int i=0; i<40; i++)
    {
        a[i]=rand()%41-20;
        cout<<a[i]<<" ";
        if (a[i]<0)
            k=i;// это самый правый        
    }
    for (i=0; i<40; i++)
    {
        if (a[i]<0)
        m=i;// это самый левый
        break;
    }
    cout<<endl;
    cout<<k;
    cout<<endl;
    cout<<m;
    cout<<endl;

}

так вот почемуто самый левый ищется не правильно, вообще пишет не понятное огромное отрицательное число. почему так? 

Автор: Fazil6 19.5.2006, 10:04
все правилтно вроде.
твой код у меня нормально отрабатывает
Код

srand (time(NULL));    
    int a[40], k, m;    
    for (int i=0; i<40; i++)    
    {    
        a[i]=rand()%41-20;    
        std::cout<<a[i]<<" ";    
        if (a[i]<0)    
            k=i;// это самый правый         
    }    
    for (i=0; i<40; i++)    
    {    
        if (a[i]<0)    
            m=i;// это самый левый    
        break;    
    }    
    std::cout<<"\n";    
    std::cout<<k;    
    std::cout<<"\n";    
    std::cout<<m;    
    std::cout<<"\n";
 

Автор: irvis 19.5.2006, 10:10
да уж. выходит это мистика.
у меня m=-858993460 если этот элемент не первый, если первый то пишет правильно  m=0 

Автор: Fazil6 19.5.2006, 10:14
а, ну да канешна
надо ведь скобки
Код

 if (a[i]<0)    {    
            m=i;// это самый левый     
        break;  }  
 

Автор: jonie 19.5.2006, 10:32
коли знаем размер массива то почему не идти сразу с КОНЦА в НАЧАЛО для поиска самого правого ?
типа так
Код

for(int i=sizeof(a)-1;i>=0;i--){
 if(a[i]<0){
  m=i;// это самый правый<0
  break;
 }
}
 
а можно даже одновременно искать и минимум левый и правый...
Код

int left_index=-1,right_index=-1;

for(int i=0;i<sizeof(a);i++){
 if(a[i]<0 && left_index==-1){
  left_index=i;
  if(right_index!=-1) break;
 }
 if(a[sizeof(a)-i-1] <0 && right_index==-1){
  right_index=sizeof(a)-i-1;
  if(left_index!=-1) break;
 }
}
// получили индексы элементов меньше нуля справа и слева...

вроде не ошибся (проверьте хотябы))   

Автор: irvis 19.5.2006, 10:35
спасибо  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)