@desmeoni
newbie

Ошибка range_error, можно ли исправить этот цикл?

Делаю упражнение из книги господина Страуструпа, застрял на этом задании (я начинающий). Необходимо вывести число, которое повторяется в последовательности наибольшее количество раз (мода).
Я сделал цикл, который сравнивает по порядку числа вектора. Он сравнивает их до тех пор, пока число выше не окажется больше текущего (так как я использовал функцию sort()). Затем процесс должен повторяться. Сравнивая переменную moda_loop и moda_loop_2 я нахожу наибольшую моду вектора.

В какой части цикла я должен исправить свою ошибку?

цикл

moda_loop = 0;
  moda_loop_2 = 0;
  sort(i);
  for(zum=0; zum<i.size(); zum++){
    for(zumzum=1; zumzum<i.size(); zumzum++){
      if(i[zum]==i[zumzum]){
        moda_min=i[zum];
        moda_max=i[zum];
        if(moda_min==i[zumzum+1]){
          while(moda==i[b]){
            moda_min=i[zumzum+1];
            b=zumzum+1;
            b++;
            moda_loop++;
          }
        }
        if(moda_min<i[zumzum+1]){
            moda_min=i[zumzum+1];
            if(moda_min==i[zumzum+1]){
              while(moda_min==i[b]){
                moda_max=i[zumzum+1];
                c=zumzum+1;
                c++;
                moda_loop_2++;
              }
            }
          }
        }
      }
    }

  if(moda_loop>moda_loop_2){
    moda_min=moda;
  }
  if(moda_loop<moda_loop_2){
    moda_max=moda;
  }



Общий вид программы

#include <D:\C\std_lib_facilities.h>

int main()
{
  int num, zum, zumzum;
  vector<int> i;
  int c, moda, b, moda_loop, moda_loop_2, moda_min, moda_max;
  int max, min;
  int num_core;
  for(int num_core; cin >> num_core; )
    i.push_back(num_core);


  min = i[0];
  max = i[0];

 for(num = 1; num<i.size(); num++){
    if(max>i[num]) max = i[num];
    if(min<i[num]) min = i[num];
  }

  moda_loop = 0;
  moda_loop_2 = 0;
  sort(i);
  for(zum=0; zum<i.size(); zum++){
    for(zumzum=1; zumzum<i.size(); zumzum++){
      if(i[zum]==i[zumzum]){
        moda_min=i[zum];
        moda_max=i[zum];
        if(moda_min==i[zumzum+1]){
          while(moda==i[b]){
            moda_min=i[zumzum+1];
            b=zumzum+1;
            b++;
            moda_loop++;
          }
        }
        if(moda_min<i[zumzum+1]){
            moda_min=i[zumzum+1];
            if(moda_min==i[zumzum+1]){
              while(moda_min==i[b]){
                moda_max=i[zumzum+1];
                c=zumzum+1;
                c++;
                moda_loop_2++;
              }
            }
          }
        }
      }
    }

  if(moda_loop>moda_loop_2){
    moda_min=moda;
  }
  if(moda_loop<moda_loop_2){
    moda_max=moda;
  }


  cout << "MAX: " << min << '\n';
  cout << "MIN: " << max << '\n';
  cout << "MODA: " << moda;


  return 0;
}

  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@TheCalligrapher
if(moda_min==i[zumzum+1]){

Это уже очевидный вылет за пределы массива. Да и вообще везде, где вы обращаетесь к элементу i[zumzum+1] вы потенциально вылетаете за пределы массива.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы