Здравствуйте! Для одного небольшого проектика нужно написать функцию, которая будет подбирать видеокарту под процессор. Проведя некоторые исследования и собрав кое-какую статистику я нашел оптимальный вариант подбора этих комплектующих. Он заключается в закономерном отношении тестов (определенный бенчмарк) видеокарты к тестам процессора. Написал вроде бы прозрачную функцию, но ведет она себя очень непредсказуемо. Работает она вроде как правильно, даже выдает правильные результаты, но помимо правильных появляются лишние. Если кто-то видит где могут появляться лишние варианты, то помогите. Закончить нужно к понедельнику, а из за этого модуля не могу продолжать работу. Заранее спасибо!
Код
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)
---------------------------------------------
Проблема решена. Ошибка состояла в том, что я добавлял позиции в списки, но перед этим их не чистил. Из за этого появлялись другие результаты, они были не лишними, а вполне обоснованными, просто не правильными.