Пятница, 29 Марта 2024, 09:58

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Функция подбора видеокарты по тестам
Функция подбора видеокарты по тестам
masb8ly-GCДата: Воскресенье, 08 Декабря 2013, 14:02 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Здравствуйте! Для одного небольшого проектика нужно написать функцию, которая будет подбирать видеокарту под процессор. Проведя некоторые исследования и собрав кое-какую статистику я нашел оптимальный вариант подбора этих комплектующих. Он заключается в закономерном отношении тестов (определенный бенчмарк) видеокарты к тестам процессора. Написал вроде бы прозрачную функцию, но ведет она себя очень непредсказуемо. Работает она вроде как правильно, даже выдает правильные результаты, но помимо правильных появляются лишние. Если кто-то видит где могут появляться лишние варианты, то помогите. Закончить нужно к понедельнику, а из за этого модуля не могу продолжать работу. Заранее спасибо!
Код
void MainWindow::on_VideoAutoB_clicked()
{
     qreal a;
     QString tmps;
     QList<qreal> AutoReal;

     QSqlQuery Auto1("SELECT Bench,Brend FROM Proc WHERE Name='"+ui->ProcNameCB->currentText()+"'");
     Auto1.first();

     if (Auto1.value(1).toString()=="Intel")
     {
     QSqlQuery query("SELECT Name,Bench FROM Video WHERE Chipset='nVidia'");
     while (query.next())
     {
         QString name = query.value(0).toString();
         a = (Auto1.value(0).toDouble()/query.value(1).toDouble());
         if ((Auto1.value(0).toDouble()<=4500) && (a>=1.8) && (a<=6)) {AutoVideo.append(name); AutoReal.append(a);}
         if ((Auto1.value(0).toDouble()>4500) && (Auto1.value(0).toDouble()<=8000) && (a>=1.5) && (a<=4.5)) {AutoVideo.append(name); AutoReal.append(a);}
         if ((Auto1.value(0).toDouble()>8000) && (a>=1.2) && (a<=2.5)) {AutoVideo.append(name); AutoReal.append(a);}
     }
     }
     if (Auto1.value(1).toString()=="AMD")
     {
     QSqlQuery query("SELECT Name,Bench FROM Video WHERE Chipset='AMD Radeon'");
     while (query.next())
     {
         QString name = query.value(0).toString();
         a = (Auto1.value(0).toDouble()/query.value(1).toDouble());
         if ((Auto1.value(0).toDouble()<=4500) && (a>=1.8) && (a<=6)) {AutoVideo.append(name); AutoReal.append(a);}
         if ((Auto1.value(0).toDouble()>4500) && (Auto1.value(0).toDouble()<=8000) && (a>=1.5) && (a<=4.5)) {AutoVideo.append(name); AutoReal.append(a);}
         if ((Auto1.value(0).toDouble()>8000) && (a>=1.2) && (a<=2.5)) {AutoVideo.append(name); AutoReal.append(a);}
     }
     }
     for (int i=AutoReal.length()-1;i>=0;i--)
     {
         for (int j=AutoReal.length()-2;j>=0;j--)
         {
             if(AutoReal[j]<AutoReal[j+1])
             {
                 qreal tmp=AutoReal[j];
                 AutoReal[j]=AutoReal[j+1];
                 AutoReal[j+1]=tmp;
                 tmps = AutoVideo[j];
                 AutoVideo[j]=AutoVideo[j+1];
                 AutoVideo[j+1]=tmps;
             }
         }
     }
     ui->VideoNameCB->setCurrentText(AutoVideo[(AutoVideo.length()/2)]);
     qDebug() << AutoVideo[AutoVideo.length()/2];
}

Добавлено (08.12.2013, 14:02)
---------------------------------------------
Проблема решена. Ошибка состояла в том, что я добавлял позиции в списки, но перед этим их не чистил. Из за этого появлялись другие результаты, они были не лишними, а вполне обоснованными, просто не правильными.


Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games
Форум игроделов » Программирование » C/C++ » Функция подбора видеокарты по тестам
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг