Taishel73
Қар. 27, 2018, 5:38 Т.Ж.

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

qt, Qt, QT, Qt Creator, Qt 5.8

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. }
  10.  
  11. MainWindow::~MainWindow()
  12. {
  13. delete ui;
  14. }
  15.  
  16. void MainWindow::on_pushButton_3_clicked()//Yj(K1)
  17. {
  18. double a, b, c;
  19. QString A;
  20. QString B;
  21. A = ui->lineEdit->text();
  22. a = A.toDouble();
  23. B = ui->lineEdit_5->text();
  24. b = B.toDouble();
  25. c = a * b;
  26. ui->lineEdit_15->setText(QString::number(c));//Y1(K1)
  27. A = ui->lineEdit_2->text();
  28. a = A.toDouble();
  29. B = ui->lineEdit_6->text();
  30. b = B.toDouble();
  31. c = a * b;
  32. ui->lineEdit_13->setText(QString::number(c));//Y2(K1)
  33. A = ui->lineEdit_3->text();
  34. a = A.toDouble();
  35. B = ui->lineEdit_7->text();
  36. b = B.toDouble();
  37. c = a * b;
  38. ui->lineEdit_11->setText(QString::number(c));//Y3(K1)
  39. A = ui->lineEdit_4->text();
  40. a = A.toDouble();
  41. B = ui->lineEdit_8->text();
  42. b = B.toDouble();
  43. c = a * b;
  44. ui->lineEdit_12->setText(QString::number(c));//Y4(K1)
  45. }
  46.  
  47. void MainWindow::on_pushButton_4_clicked()//qj
  48. {
  49. double b, c;
  50. QString B;
  51. B = ui->lineEdit_5->text();
  52. b = B.toDouble();
  53. c = 1 - b;
  54. ui->lineEdit_9->setText(QString::number(c));//q1
  55. B = ui->lineEdit_6->text();
  56. b = B.toDouble();
  57. c = 1 - b;
  58. ui->lineEdit_10->setText(QString::number(c));//q2
  59. B = ui->lineEdit_7->text();
  60. b = B.toDouble();
  61. c = 1 - b;
  62. ui->lineEdit_14->setText(QString::number(c));//q3
  63. B = ui->lineEdit_8->text();
  64. b = B.toDouble();
  65. c = 1 - b;
  66. ui->lineEdit_16->setText(QString::number(c));//q4
  67. }
  68.  
  69.  
  70. void MainWindow::on_pushButton_7_clicked()//Yj(K2)
  71. {
  72. double a, b, c;
  73. QString A;
  74. QString B;
  75. A = ui->lineEdit_9->text();
  76. a = A.toDouble();
  77. B = ui->lineEdit_15->text();
  78. b = B.toDouble();
  79. c = a * b;
  80. ui->lineEdit_17->setText(QString::number(c));//Y1(K2)
  81. A = ui->lineEdit_10->text();
  82. a = A.toDouble();
  83. B = ui->lineEdit_13->text();
  84. b = B.toDouble();
  85. c = a * b;
  86. ui->lineEdit_18->setText(QString::number(c));//Y2(K2)
  87. A = ui->lineEdit_14->text();
  88. a = A.toDouble();
  89. B = ui->lineEdit_11->text();
  90. b = B.toDouble();
  91. c = a * b;
  92. ui->lineEdit_22->setText(QString::number(c));//Y3(K2)
  93. A = ui->lineEdit_16->text();
  94. a = A.toDouble();
  95. B = ui->lineEdit_12->text();
  96. b = B.toDouble();
  97. c = a * b;
  98. ui->lineEdit_24->setText(QString::number(c));//Y4(K2) 

}

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


mainwindow.ui
2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

4
Evgenii Legotckoi
  • Қар. 28, 2018, 2:41 Т.Қ.
  • Жауап шешім ретінде белгіленді.

День добрый!

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

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

  1. void Widget::onCalculateButtonClicked()
  2. {
  3. // Создаём вектор из всех полей ввода, которе требуется проверить
  4. std::vector<QLineEdit*> lineEdits = {ui->lineEdit_1, ui->lineEdit_2, ui->lineEdit_3, ui->lineEdit_4};
  5. // Создаём вектор для сохранения значений из полеей ввода
  6. std::vector<double> values;
  7.  
  8. // Попытаемся получить значения из всех полей ввода, если текст в них возможно сконвертировать в число
  9. for (const QLineEdit* lineEdit : lineEdits)
  10. {
  11. bool ok = false;
  12. double value = lineEdit->text().toDouble(&ok);
  13. if (ok)
  14. {
  15. values.push_back(value);
  16. }
  17. }
  18.  
  19. // Отсортируем зхначения от максимального к минимальному
  20. std::sort(values.begin(), values.end(), [](const auto& a, const auto& b) { return a > b; });
  21.  
  22. std::vector<double> stepTwoValues;
  23. // Скопируем три максимальных переменных из отсортированного вектора
  24. std::copy(values.begin(), values.begin() + 3, std::back_inserter(stepTwoValues));
  25.  
  26. // Произведём расчёты и вставим расчитанные переменные в новый вектор
  27. std::vector<double> stepTwoResults;
  28. for (const auto& value : stepTwoValues)
  29. {
  30. // Выполняем расчёты и добавляем в новый вектор
  31. stepTwoResults.push_back(value);
  32. }
  33.  
  34. // Повторяем алгоритм для новых расчётов
  35. }

    Taishel73
    • Қар. 29, 2018, 2:05 Т.Ж.
    1. // Создаём вектор из всех полей ввода, которое требуется проверить
    2. std::vector<QLineEdit*> lineEdits = {ui->lineEdit_1, ui->lineEdit_2, ui->lineEdit_3, ui->lineEdit_4};
    3. // Создаём вектор для сохранения значений из полей ввода
    4. std::vector<double> values; 
    Спасибо! Если я правильно понял, то в коде написано создание нескольких векторов и занесение информации в один вектор? В последней строке указано, что создается один вектор, в котором будет хранится информация из всех предыдущих? Как указать созданному вектору, что информация после обработки из него должна поступить в другой новый вектор?
      Evgenii Legotckoi
      • Қар. 29, 2018, 2:48 Т.Қ.

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

      1. std::copy(values.begin(), values.end(), std::back_inserter(anotherVector));
        Taishel73
        • Қар. 30, 2018, 3:47 Т.Ж.

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

          Пікірлер

          Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
          Кіріңіз немесе Тіркеліңіз