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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2012, 23:47   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию Qt ошибка при выполнении

Помогите пожалуйста. Уже голову сломала, не могу найти ошибку.
Идея в том, что программа получает рандомный шаблон. Из списка значений которые можно подставить выбирает одно и подставляет. И так до тех пор пока список значений не закончится. Затем программа берёт новый шаблон. и т.д. Записывается всё это в QStringList, который в свою очередь записывается в вектор. Все эти операции продолжаются в зависимости от числа, введённого пользователем.

После небольшой проверки выяснялось, что если ввести значение группы - 2 во всех комбобоксах, то всё прекрасно работает. Если же ввести хоть одно не равное двум, то программа осиливает около 30 вариантов и падает.
Пожалуйста, очень прошу, помогите разобраться!
А то на отладке работает работает без проблем и потом неожиданно слетает!
PinkPink вне форума Ответить с цитированием
Старый 10.05.2012, 23:47   #2
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию

Вот основной алгоритм:
Код:
bool flagok=true;//защита от шаблонов без генерируемых полей
        matrix B;
        row A;
       // for(int i=0;i<spinbox->text().toInt();i++){B.push_back(A);}//добавим в матрицу списки
       // записываем в файл шапку
        QFile file("tempfile.txt");
        file.open(QIODevice::ReadWrite | QIODevice::Text);
        QTextStream out(&file);
        out << ttextbox->toPlainText();
        out << "\n";
        file.close();

        //(осуществляем поиск по бд для выбранного шаблона, выписываем все шаблоны в массив строк
        QStringList list, listoftempone,listoftempsome;
        int numberofgroup, numberoffield;
        QString stemp,timestemp;
        QString numberofgroupstr;
        int a,b,c;//a - номер текущей группы, b - количество шаблонов для текущей группы, c -  номер шаблона для тек.группы
        for(int i=0;i<spinbox->text().toInt();i++)//цикл по количеству заданий
        {
         a=((reinterpret_cast<QComboBox*>(ttablew->cellWidget(i,1))->currentText()).remove(0,7)).toInt();
         //получили номер выбранной группы
         list=tempstr(a);//получили список шаблонов для данной группы
         b=list.size();//получаем количество шаблонов для текущей группы
         c=qrand()%(b);
          stemp = list[c];//случайным образом берём один из шаблонов
        list[c]=list[b-1];//присваиваем последний шаблон,тому который используем
         list.pop_back();//а последний удаляем
         listoftempone=listofgenfield();//заполняем список полей для одного значения
         listoftempsome=listofgenfieldsome();//для нескольких значений

        for(int j=0;j<spinbox2->text().toInt();j++)//цикл по количеству вариантов
        {
            timestemp = stemp;
           for(int l=0;l<timestemp.size()-6;l++)
            {

               if((listoftempone.size()==0)||(listoftempsome.size()==0)||((l==timestemp.size()-1)&&(!flagok)))//если мы использовали все поля для этого шаблона берём следующий шаблон
               {
                   if(list.size()==0)//если мы пробежались по всем имеющимся шаблонам
                   {list=tempstr(a); }//формируем список шаблонов заново

                   b=list.size();//получаем количество шаблонов для текущей группы
                   c=qrand()%(b);
                    stemp = list[c];//случайным образом берём один из шаблонов
                  list[c]=list[b-1];//присваиваем последний шаблон,тому который используем
                   list.pop_back();//а последний удаляем*/
                   listoftempone=listofgenfield();//заполняем список полей для одного значения
                   listoftempsome=listofgenfieldsome();//для нескольких значений
                   timestemp = stemp;
               }
               flagok=false;//если флажок ложный, то генерируемых полей - нет
                if((timestemp[l]=='*') && (timestemp[l+1]=='*') && (timestemp[l+2]=='*') && (timestemp[l+4]=='*') && (timestemp[l+5]=='*') && (timestemp[l+6]=='*'))
                {//ищем сочетание ***-***
                    flagok=true;
                    numberofgroupstr = timestemp.mid(l+3,1);//если нашли вылавливаем значение между звёздочками
                    bool ok;
                    numberofgroup=numberofgroupstr.toInt(&ok);//преобразовываем это значение в число
                    if(numberofgroup==1)
                    {
                        numberoffield = randnumber(0,listoftempone.size()-1);
                        numberofgroupstr = listoftempone[numberoffield];//получаем сгенерированное значение
                        listoftempone[numberoffield] = listoftempone[listoftempone.size()-1];//тому что вставляли присваиваем значение последнего
                        listoftempone.pop_back();//а последнее удаляем, таким образом удаляется то, что уже использовали
                    }
                    else
                    {
                        numberoffield = randnumber(0,listoftempsome.size()+1);
                        numberofgroupstr = listoftempsome[numberoffield];//получаем сгенерированное значение
                    listoftempsome[numberoffield] = listoftempsome[listoftempsome.size()-1];//тому что вставляли присваиваем значение последнего
                    listoftempsome.pop_back();
                    }//а последнее удаляем, таким образом удаляется то, что уже использовали
                    timestemp.replace(l,7, QString::fromLocal8Bit(numberofgroupstr.toAscii()));//заменяем маску на значение
                    numberofgroup=0;
                    l=l+numberofgroupstr.size();
                  }
                }
           A<<timestemp;
            }
        B.push_back(A);
        A.clear();
        }
PinkPink вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при выполнении программы ST@LKER Общие вопросы C/C++ 8 03.12.2011 22:38
Ошибка при выполнении запроса dima_r SQL, базы данных 6 14.04.2011 17:47
Ошибка при выполнении 123cmp Помощь студентам 4 22.01.2011 23:45
Ошибка при выполнении макроса rlev Microsoft Office Excel 8 22.02.2010 12:41
Ошибка при выполнении запроса Шани БД в Delphi 4 27.07.2007 13:04