Пример 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: