Лабораторная работа № 3

Тема: «Ипользование вспомогательных функций и вывод нескольких чисел c помощью одного элемента управления»

Пример 1: программа, которая находит заданное количество совершенных чисел, и выводит их на экран с помощью элемента textEdit

Совершенными называются числа, которые равны сумме всех своих делителей, не включая само число, например: 6 = 1+2+3.

Для решения задачи будем проверять все натуральные числа, начиная с 1 (но 1 не считается совершенным числом). Совершенных чисел совсем не много, поэтому, чтобы не ждать слишком долго окончания выполнения программы, огра­ничим поиск числом 10 4.

Создайте проект на базе класса QDialog.

Спроектируйте окно программы как показано на рисунке. В качестве элемента для вывода результа­та используем элемент textEdit.

Для проверки одного числа добавим в класс, описывающий окно программы, объявление функции IsPerfect(). Передите в режим редактирования прог­раммы (Edit) и откройте файл dialog.h. Вставьте в класс Dialog объявление функции:

bool IsPerfect(int);

Откройте файл dialog.cpp и напишите определение функции. Файл должен выглядеть так, как показано ниже.

#include "dialog.h"

#include "ui_dialog.h"

#include <QTextCodec>

Dialog::Dialog(QWidget *parent):

QDialog(parent),

ui(new Ui::Dialog)

{

ui->setupUi(this);

adjustSize();

}

Dialog::~Dialog()

{

delete ui;

}

bool Dialog::IsPerfect(int n)

{

int sum = 0;

// проверяем все возможные делители:

for (int del = 1; del <= n/2; ++del)

   if (n % del == 0) sum += del;

// если проверяемое число делится на очередной делитель, добавляем его к сумме

 

if (n == sum) return true;

return false;

}

 

Добавьте слот для кнопки «Найти» и напишите код, показанный ниже.

void Dialog::on_pushButton_clicked()

{

QTextCodec* codec = QTextCodec::codecForName("UTF-8");

QTextCodec::setCodecForCStrings(codec);

int kol = ui->lineEdit->text().toInt(); // считали нужное количество

int counter = 0; // количество уже найденных чисел

int m = 1; // проверяемое число

QString text= "Совершенные числа:\n";

while (counter < kol) // пока не найдено нужное количество чисел

{

   if (IsPerfect(m)) // если очередное число - совершенное

   {

       text += QString::number(m)+'\n';

/* выполняем преобразование числа в строку и добавляем к тексту (и символ
 перехода на новую строку) */

       counter++; // увеличиваем счетчик

   }

   m++; // берем следующее число

   if (m > 1e4) // если число стало слишком большим

   {

       text += "Поиск закончен";

       break;

   }

}

ui->textEdit->setText(text); // выводим текст в окно

}



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



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