26 ноября 2018 г. 18:38

Расчет транспортной задачи методом максимального элемента.

qt, Qt, QT, Qt Creator, Qt 5.8

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_3_clicked()//Yj(K1)
{
    double a, b, c;
    QString A;
    QString B;
    A = ui->lineEdit->text();
    a = A.toDouble();
    B = ui->lineEdit_5->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_15->setText(QString::number(c));//Y1(K1)
    A = ui->lineEdit_2->text();
    a = A.toDouble();
    B = ui->lineEdit_6->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_13->setText(QString::number(c));//Y2(K1)
    A = ui->lineEdit_3->text();
    a = A.toDouble();
    B = ui->lineEdit_7->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_11->setText(QString::number(c));//Y3(K1)
    A = ui->lineEdit_4->text();
    a = A.toDouble();
    B = ui->lineEdit_8->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_12->setText(QString::number(c));//Y4(K1)
}

void MainWindow::on_pushButton_4_clicked()//qj
{
    double b, c;
    QString B;
    B = ui->lineEdit_5->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_9->setText(QString::number(c));//q1
    B = ui->lineEdit_6->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_10->setText(QString::number(c));//q2
    B = ui->lineEdit_7->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_14->setText(QString::number(c));//q3
    B = ui->lineEdit_8->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_16->setText(QString::number(c));//q4
}


void MainWindow::on_pushButton_7_clicked()//Yj(K2)
{
    double a, b, c;
    QString A;
    QString B;
    A = ui->lineEdit_9->text();
    a = A.toDouble();
    B = ui->lineEdit_15->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_17->setText(QString::number(c));//Y1(K2)
    A = ui->lineEdit_10->text();
    a = A.toDouble();
    B = ui->lineEdit_13->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_18->setText(QString::number(c));//Y2(K2)
    A = ui->lineEdit_14->text();
    a = A.toDouble();
    B = ui->lineEdit_11->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_22->setText(QString::number(c));//Y3(K2)
    A = ui->lineEdit_16->text();
    a = A.toDouble();
    B = ui->lineEdit_12->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_24->setText(QString::number(c));//Y4(K2) 

}

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


Виртуальный хостинг со скидкой 10 процентов
Виртуальный хостинг со скидкой 10 процентов
EVILEG предлагает надёжный хостинг со скидкой 10% на виртуальный хостинг и 5% на VPS
4

День добрый!

Помните пример, что дал вам в статье.

Если немного модифицировать метод кнопки, то можно проработать поиск максимальных переменных и расчёт новых значений на них.

void Widget::onCalculateButtonClicked()
{
    // Создаём вектор из всех полей ввода, которе требуется проверить
    std::vector<QLineEdit*> lineEdits = {ui->lineEdit_1, ui->lineEdit_2, ui->lineEdit_3, ui->lineEdit_4};
    // Создаём вектор для сохранения значений из полеей ввода
    std::vector<double> values;

    // Попытаемся получить значения из всех полей ввода, если текст в них возможно сконвертировать в число
    for (const QLineEdit* lineEdit : lineEdits)
    {
        bool ok = false;
        double value = lineEdit->text().toDouble(&ok);
        if (ok)
        {
            values.push_back(value);
        }
    }

    // Отсортируем зхначения от максимального к минимальному
    std::sort(values.begin(), values.end(), [](const auto& a, const auto& b) { return a > b; });

    std::vector<double> stepTwoValues;
    // Скопируем три максимальных переменных из отсортированного вектора
    std::copy(values.begin(), values.begin() + 3, std::back_inserter(stepTwoValues));

    // Произведём расчёты и вставим расчитанные переменные в новый вектор
    std::vector<double> stepTwoResults;
    for (const auto& value : stepTwoValues)
    {
        // Выполняем расчёты и добавляем в новый вектор
        stepTwoResults.push_back(value);
    }

    // Повторяем алгоритм для новых расчётов
}

1
    // Создаём вектор из всех полей ввода, которое требуется проверить
    std::vector<QLineEdit*> lineEdits = {ui->lineEdit_1, ui->lineEdit_2, ui->lineEdit_3, ui->lineEdit_4};
    // Создаём вектор для сохранения значений из полей ввода 
    std::vector<double> values; 
Спасибо! Если я правильно понял, то в коде написано создание нескольких векторов и занесение информации в один вектор? В последней строке указано, что создается один вектор, в котором будет хранится информация из всех предыдущих? Как указать созданному вектору, что информация после обработки из него должна поступить в другой новый вектор?
0

Можно скопировать из одного вектора в другой, например

std::copy(values.begin(), values.end(), std::back_inserter(anotherVector));
1

Понял. Буду пробовать. Спасибо!

0

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
22 июля 2019 г. 7:26
Pavel K.

Qt - Тест 001. Сигналы и слоты

  • Результат:68баллов,
  • Очки рейтинга-1
o
22 июля 2019 г. 6:26
oksik193

C++ - Тест 001. Первая программа и типы данных

  • Результат:80баллов,
  • Очки рейтинга4
ВД
21 июля 2019 г. 23:33
Влад Долгов

C++ - Тест 001. Первая программа и типы данных

  • Результат:40баллов,
  • Очки рейтинга-8
Последние комментарии
21 июля 2019 г. 6:03
Евгений Легоцкой

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные сист…
20 июля 2019 г. 14:41
Андрей Янкович

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
20 июля 2019 г. 9:31
Михаиллл

Вот так qDebug()<<"position:"<<event->scenePos();
20 июля 2019 г. 8:49
Михаиллл

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Сейчас обсуждают на форуме
22 июля 2019 г. 8:41
BlinCT

Вот только что нашел в инете, у человека такая же ошибка. Вроде бы таже самая проблема https://stackoverflow.com/questions/37633709/how-to-create-qtquick-window-outside-the-main-thread…
22 июля 2019 г. 3:58
Евгений Легоцкой

Добрый день! Нужен совет сообщества по разработке функционала проверки орфографии. Одна из идей - добавить проверку орфографии при наборе текста статей. Полагаю, что наиболее аде…
22 июля 2019 г. 3:01
Евгений Легоцкой

Возможно, если при сохранении файла установить права доступа на файл. Что-то такое должно быть у QFile
22 июля 2019 г. 3:01
Евгений Легоцкой

Я отрисовываю квадрат в его локальной системе координат от верхнего левого угла (-30,-30) до его правого нижнего угла (30,30). Поэтому мне нужно указать размеры объекта через boundingRect()…
20 июля 2019 г. 11:04
Михаиллл

Так и с ресурсами работает QImage image(":/Images/Images/1.png");
Ищу работу?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

EVILEG
О нас
Услуги
Присоединяйтесь к нам
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB