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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 17:27   #1
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию Что-то в коде накосячила. Никак не могу найти ошибку. Qt

Код:
void ftask::on_btn1_clicked()//нажали на кнопку "сгенерировать"
{
    int gb=16, ga=22;//верхние и нижние границы генерации
    typedef QStringList row;//в каждой строке список шаблонов,
    typedef QVector<row> matrix;//которые можно применить для соответствующего строке задания

    bool flag = true;
    for (int i = 0; i < spinbox->text().toInt(); i++)
    {
        if(((reinterpret_cast<QComboBox*>(ttablew->cellWidget(i,1)))->currentText())==(QString::fromLocal8Bit("группа не определена"))){flag=false;}
        //сообщение
    }
    if(!flag){ttextbox->insertPlainText(QString::fromLocal8Bit("не для всех заданий выбрана группа"));}
    else
    {
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, listoftemp,timelist;
        int numberofgroup, numberoffield;
        QString stemp;
        int 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();//а последний удаляем*/
         listoftemp=listofgenfield();//заполняем список полей

        for(int j=0;j<spinbox2->text().toInt();j++)//цикл по количеству вариантов
        {
           for(int l=0;l<stemp.size()-6;l++)
            {
               if((listoftemp.size()==0)||(gb==0)||(ga==16))
               {
                   if(list.size()==0)
                   {list=tempstr(a); }//формируем список шаблонов
                   b=list.size();
                   c=qrand()%(b);
                    stemp = list[c];//случайным образом берём один из шаблонов
                  list[c]=list[b-1];//присваиваем последний шаблон,тому который используем
                   list.pop_back();//а последний удаляем
                   listoftemp=listofgenfield();//заполняем список полей
                   gb=16, ga=22;
               }

                if((stemp[l]=='*') && (stemp[l+1]=='*') && (stemp[l+2]=='*') && (stemp[l+4]=='*') && (stemp[l+5]=='*') && (stemp[l+6]=='*'))
                {//ищем сочетание ***-***
                    QString numberofgroupstr = stemp.mid(l+3,1);
                    bool ok;
                    numberofgroup=numberofgroupstr.toInt(&ok);
                    if(numberofgroup==1){numberoffield = randnumber(0,gb+1);}
                    else{numberoffield = randnumber(gb,ga+1);}
                    numberofgroupstr = listoftemp[numberoffield];//получаем сгенерированное значение
                    stemp.replace(l,7, QString::fromLocal8Bit(numberofgroupstr.toAscii()));//заменяем на значение
                    numberofgroup=0;
                    //после чего удаляем выбранное значение из списка для данной группы
                    if(numberofgroup==1){
                        listoftemp[numberoffield]=listoftemp[gb];
                        listoftemp[gb]=listoftemp[listoftemp.size()-1];
                        listoftemp.pop_back();
                        gb--;ga--;
                    }
                    else
                    {
                        ga--;
                        listoftemp[numberoffield] = listoftemp[listoftemp.size()-1];
                        listoftemp.pop_back();//удаляется то, что уже использовали
                    }
                    B[i].push_back(stemp);
                    ttextbox->insertPlainText(QString::fromLocal8Bit((B[i][2]).toAscii()));
                }
            }
        }
        }
        file.open(QIODevice::Append | QIODevice::Text);
        QTextStream outt(&file);
        for(int j=0;j<spinbox2->text().toInt();j++)//цикл по количеству вариантов
        {
            for(int i=0;i<spinbox->text().toInt();i++)//цикл по количеству заданий
            {
                outt<<"\n\n";
                outt<<j+1;
                outt<<QString::fromLocal8Bit(" Вариант\n\n");
                out<<B[i][j];
            }
        }
            stemp.clear();
            list.clear();

file.close();
myDialog *create_dialog = new myDialog;
create_dialog->show();
    }
}
Программа вылетает(
PinkPink вне форума Ответить с цитированием
Старый 01.05.2012, 17:28   #2
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию

наверное где-то с памятью накосячила
PinkPink вне форума Ответить с цитированием
Старый 01.05.2012, 20:21   #3
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
Восклицание

Переделала код. Однако проблема всё равно есть. Правда немного другая. По сути должно выполняться заполнение массива. Где строки количество заданий, а столбцы количество вариантов. Задания есть в каждом варианте.
Почему-то когда я вывожу полученный массив в файл, все варианты совершенно одинаковые.

Код:
void ftask::on_btn1_clicked()//нажали на кнопку "сгенерировать"
{
    typedef QStringList row;//в каждой строке список шаблонов,
    typedef QVector<row> matrix;//которые можно применить для соответствующего строке задания

    bool flag = true;
    //проверяем во всех ли комбобоксах выбрана группа
    for (int i = 0; i < spinbox->text().toInt(); i++)
    {
        if(((reinterpret_cast<QComboBox*>(ttablew->cellWidget(i,1)))->currentText())==(QString::fromLocal8Bit("группа не определена"))){flag=false;}
        // !! прикрутить сюда системное сообщение, которое будет ругаться если не для всех заданий выбрана группа
    }
    if(!flag){ttextbox->insertPlainText(QString::fromLocal8Bit("не для всех заданий выбрана группа"));}
    else
    {
         // если всё хорошо
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;
        QString numberofgroupstr;
        int a,b,c;//a - номер текущей группы, b - количество шаблонов для текущей группы, c -  номер шаблона для тек.группы
PinkPink вне форума Ответить с цитированием
Старый 01.05.2012, 20:23   #4
PinkPink
Пользователь
 
Регистрация: 09.10.2011
Сообщений: 98
По умолчанию

Код:
        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++)//цикл по количеству вариантов
        {
           for(int l=0;l<stemp.size()-6;l++)
            {

               if((listoftempone.size()==0)||(listoftempsome.size()==0))//если мы использовали все поля для этого шаблона берём следующий шаблон
               {
                   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();//для нескольких значений
                   //gb=16, ga=22;
               }

                if((stemp[l]=='*') && (stemp[l+1]=='*') && (stemp[l+2]=='*') && (stemp[l+4]=='*') && (stemp[l+5]=='*') && (stemp[l+6]=='*'))
                {//ищем сочетание ***-***
                    numberofgroupstr = stemp.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();
                    }//а последнее удаляем, таким образом удаляется то, что уже использовали
                    stemp.replace(l,7, QString::fromLocal8Bit(numberofgroupstr.toAscii()));//заменяем маску на значение
                    numberofgroup=0;
                  }
                }
           B[i].push_back(stemp);
            }
        }
        file.open(QIODevice::Append | QIODevice::Text);
        QTextStream outt(&file);
        for(int j=0;j<spinbox2->text().toInt();j++)//цикл по количеству вариантов
        {
            outt<<"\n\n"<<j+1<<QString::fromLocal8Bit(" Вариант\n\n");
            for(int i=0;i<spinbox->text().toInt();i++)//цикл по количеству заданий
            {
                outt<<QString::fromLocal8Bit(" Задание №")<<i+1<<"\n";
                outt<<B[i][j]<<"\n";
            }
        }
            stemp.clear();
            list.clear();

            file.close();
            myDialog *create_dialog = new myDialog;
            create_dialog->show();
        }
    }
Помогите пожалуйста
PinkPink вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку в коде sashmedv Паскаль, Turbo Pascal, PascalABC.NET 2 25.03.2012 08:31
Паскаль, строки. Не могу найти ошибку в коде. Liam_ Помощь студентам 6 11.05.2011 19:29
Не могу найти ошибку в коде написанном на FASM Devil21RUS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 12.12.2010 04:52
не могу найти ошибку в коде pavelstraut Общие вопросы C/C++ 5 24.07.2009 23:20
Не могу найти ошибку в коде! Natasha666 Помощь студентам 1 20.05.2009 09:27