Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornyy_praktikum_po_programmirovaniyu_v_s...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

Пример 4: Программа, которая вычисляет значение арифметического выражения

В этой программе будет показано как можно организовать ввод потоком нес­кольких элементов данных из одного элемента управления. Кроме того программа иллюстрирует использование оператора switch для проверки символов.

С проектируйте диалоговое окно как показано на рисунке. Используйте Label, Line Edit, Push Button, Label и Text Edit.

Для того, чтобы текст надписи переносил­ся на другую строку, в свойствах Label в строке wordWrap установите флажок.

Создайте слот для кнопки и напишите код, приведенный ниже.

#include "dialog.h"
#include "ui_dialog.h"
#include <QtGui>  // обеспечивает математические и многие другие функции
#include <QtextCodec>  // обеспечивает возможность использования кириллицы
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    adjustSize();
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::on_pushButton_clicked()
{
  QTextCodec* codec = QTextCodec::codecForName("UTF-8");
  QTextCodec::setCodecForCStrings(codec);
 // обеспечили возможность вывода текста на русском языке
  double a, b;
  char op;
  QString str = ui->lineEdit->text();  // прочитали выражение
  QTextStream in(&str, QIODevice::ReadOnly);  
// преобразовали строку в поток символов  in

  in >> a; // прочитали первое число
  do
  {
      in >> op;
  } while (op == ' ');  // пропустили пробелы и прочитали знак операции
  in >> b;  // прочитали второе число
  QString message;
  bool flag = true;
  double c=0;
  switch (op) // проверяем знак операции
  {
  case '+': c = a + b; break;
  case '-': c = a - b; break;
  case '*': c = a * b; break;
  case '/': if (b) c = a / b;
      else { flag = false; message = "Второе число должно быть не равно 0";} break;
  case '%': c = int(a) % int(b); break;
  case '^': if (finite(c = pow(a, b))); 
 // проверяем возможность выполнения операции
       else {flag = false; message = "Первое число должно быть неотрицательным";} break;
  default: flag = false; message = "Неверный знак операции";
  }
   if (flag)
    ui->textEdit->setText(QString::number(c));
   else ui->textEdit->setText(message);
}

Задания для самостоятельного выполнения

1. Написать программу на основе класса QDialog, которая решает квадратное уравнение вида для любых a, b, c (программа должна иметь 6 ветвей).

2. Написать программу на основе класса QWidget, которая решает систему двух линейных уравнений.

Указание: см. Касаткин С., Раткевич И., Травова Н. Н. «Лабораторный практикум по курсу “Основы алгоритмизации” в среде Microsoft Visual Studio 2005»

Лабораторная работа № 2 Тема: «Отладка программы»

Для того, чтобы найти логическую ошибку в программе, можно использо­вать вывод отладочных сообщений, например выводить результаты промежуточ­ных вычислений.

В качестве примера создадим программу, которая проверяет, является ли чис­ло степенью двойки. Для вывода результатов промежуточных вычислений исполь­зуем оператор потокового вывода qDebug(). Использование этого оператора аналогично использованию потокового вывода cout.

С оздайте проект на основе диалогового окна и спроектируйте его как показано на рисунке.

Первое окно по умолчанию имеет идентификатор lineEdit, второе — lineEdit_2.

Создайте слот для кнопки «Проверить» и напиши­те код как показано ниже.

#include "dialog.h"
#include "ui_dialog.h"
#include <QtDebug>  //  Обеспечивает работу qDebug()
#include <QtextCodec>  //  Обеспечивает спользование кириллицы
#include <math.h>  //  Обеспечивает работу математических функций
#include <QMessageBox> //  Обеспечивает использование окна сообщений

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    adjustSize();  // 
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::on_pushButton_clicked()
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    QtextCodec::setCodecForCStrings(codec);

    int n = ui->lineEdit->text().toInt(); // считываем целое число
    if ( n >= 0)

    {
        int s = 1;
        while (s < n)
        {
            s *= 2; // вычисляем степень 2
            qDebug() << "Степень 2: "<< s; 
// выводим очередную степень в окно Application Output
        }
 // выводим результат:
        if (s==n) ui->lineEdit_2->setText("Это степень 2");
        else ui->lineEdit_2->setText("Это не степень 2");
    }
    else 
	{
		ui->lineEdit_2->setText("");
        	QMessageBox::critical(this, "Сообщение об ошибке", 
"Число должно быть >= 0"); } }

При использовании окна сообщений QMessageBox первый параметр - указа­тель на родительское окно, второй - заголовок окна, третий - непосредственно со­общение.

Запустите программу (<Ctrl>+<R>), задайте число, нажмите кнопку и пос­мотрите результат работы qDebug() в окне Application Output.

Если по какой-то причине Ваша программа зацикливается, используйте системный монитор (System | Administration | System Monitor). В списке Processes найдите имя Вашего проекта, щелкните по нему правой кнопкой мыши и выберите  «Kill Process».
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]