Определение полного квадрата

C++C++Beginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь определять, является ли заданное число полным квадратом на языке C++. Полный квадрат - это число, которое можно представить в виде произведения целого числа на само себя. Например, 1, 4, 9, 16 и 25 - это полные квадраты, так как они могут быть выражены как 1×1, 2×2, 3×3, 4×4 и 5×5 соответственно.

Мы создадим программу на C++, которая использует функцию sqrt() из стандартной библиотеки для вычисления квадратного корня числа и определения, является ли оно полным квадратом. В этом практическом занятии (лабораторной работе) вы познакомитесь с основными концепциями программирования на C++, включая функции, условные операторы и математические операции.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp/BasicsGroup -.-> cpp/data_types("Data Types") cpp/BasicsGroup -.-> cpp/operators("Operators") cpp/ControlFlowGroup -.-> cpp/conditions("Conditions") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/user_input("User Input") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/StandardLibraryGroup -.-> cpp/math("Math") subgraph Lab Skills cpp/data_types -.-> lab-96130{{"Определение полного квадрата"}} cpp/operators -.-> lab-96130{{"Определение полного квадрата"}} cpp/conditions -.-> lab-96130{{"Определение полного квадрата"}} cpp/output -.-> lab-96130{{"Определение полного квадрата"}} cpp/user_input -.-> lab-96130{{"Определение полного квадрата"}} cpp/files -.-> lab-96130{{"Определение полного квадрата"}} cpp/math -.-> lab-96130{{"Определение полного квадрата"}} end

Создание нового файла на C++ и подключение необходимых библиотек

На этом шаге мы создадим новый файл на языке C++ и подключим необходимые библиотеки для нашей программы.

Сначала создадим новый файл с именем main.cpp в директории проекта:

  1. В WebIDE нажмите на значок проводника в левой боковой панели.
  2. Щелкните правой кнопкой мыши по папке project и выберите "Новый файл".
  3. Назовите файл main.cpp и нажмите Enter.

Теперь добавим необходимые библиотеки в нашу программу. Нам нужны две основные библиотеки:

  • iostream: Эта библиотека предоставляет функциональность для операций ввода и вывода.
  • cmath: Эта библиотека содержит математические функции, в том числе функцию sqrt(), которую мы будем использовать.

Добавьте следующий код в файл main.cpp:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    cout << "\nWelcome to the Perfect Square Checker Program\n\n";

    // We will add more code here in the next steps

    return 0;
}

Этот код:

  • Подключает необходимые библиотеки.
  • Использует namespace std, чтобы не нужно было писать std:: перед функциями стандартной библиотеки.
  • Создает базовую функцию main(), которая выводит приветственное сообщение.
  • Возвращает 0, чтобы показать, что программа выполнилась успешно.

Сохраните файл, нажав Ctrl+S или выбрав "Сохранить" в меню "Файл".

Реализация функции проверки на полный квадрат

Теперь мы создадим функцию, которая определяет, является ли число полным квадратом. Полный квадрат имеет целочисленный квадратный корень. Например, 16 - это полный квадрат, так как его квадратный корень равен ровно 4.

Добавьте следующую функцию перед функцией main() в файле main.cpp:

bool isPerfectSquare(int number) {
    // Calculate the square root of the number
    double squareRoot = sqrt(number);

    // Convert the square root to an integer
    int intSquareRoot = static_cast<int>(squareRoot);

    // A number is a perfect square if squaring its integer square root gives the original number
    return (intSquareRoot * intSquareRoot == number);
}

Понятно, как работает эта функция:

  1. Функция принимает целочисленный параметр number и возвращает булево значение (true или false).
  2. Мы используем функцию sqrt() из библиотеки cmath для вычисления квадратного корня входного числа.
  3. Мы преобразуем квадратный корень в целое число с помощью static_cast<int>(), которое удаляет любую дробную часть.
  4. Если число является полным квадратом, то при умножении целого квадратного корня на самого себя получится исходное число.
  5. Функция возвращает true, если число является полным квадратом, и false в противном случае.

Например:

  • Для числа 16:
    • sqrt(16) = 4.0
    • Преобразование 4.0 в целое число дает 4
    • 4 × 4 = 16, что равно исходному числу, поэтому 16 - это полный квадрат.
  • Для числа 10:
    • sqrt(10) ≈ 3.16227766
    • Преобразование 3.16227766 в целое число дает 3
    • 3 × 3 = 9, что не равно исходному числу, поэтому 10 не является полным квадратом.

Ваш полный код на данный момент должен выглядеть так:

#include <iostream>
#include <cmath>

using namespace std;

bool isPerfectSquare(int number) {
    // Calculate the square root of the number
    double squareRoot = sqrt(number);

    // Convert the square root to an integer
    int intSquareRoot = static_cast<int>(squareRoot);

    // A number is a perfect square if squaring its integer square root gives the original number
    return (intSquareRoot * intSquareRoot == number);
}

int main() {
    cout << "\nWelcome to the Perfect Square Checker Program\n\n";

    // We will add more code here in the next step

    return 0;
}

Сохраните файл перед переходом к следующему шагу.

Завершение функции main() с вводом и выводом данных от пользователя

Теперь усовершенствуем функцию main() так, чтобы она:

  1. Попросила пользователя ввести число.
  2. Получила ввод от пользователя.
  3. Использовала нашу функцию isPerfectSquare() для проверки, является ли число полным квадратом.
  4. Вывела соответствующее сообщение в зависимости от результата.

Обновите функцию main() следующим кодом:

int main() {
    cout << "\nWelcome to the Perfect Square Checker Program\n\n";

    int userNumber;

    // Prompt the user to enter a number
    cout << "Please enter a positive integer: ";
    cin >> userNumber;

    // Check if the entered number is a perfect square
    if (isPerfectSquare(userNumber)) {
        int squareRoot = static_cast<int>(sqrt(userNumber));
        cout << "\nThe number " << userNumber << " is a perfect square!" << endl;
        cout << "It is equal to " << squareRoot << " × " << squareRoot << endl;
    } else {
        cout << "\nThe number " << userNumber << " is not a perfect square." << endl;
    }

    cout << "\nThank you for using the Perfect Square Checker Program!\n" << endl;

    return 0;
}

Понятно, что делает этот код:

  1. Мы объявляем целочисленную переменную userNumber для хранения ввода пользователя.
  2. Мы просим пользователя ввести положительное целое число с помощью cout.
  3. Мы считываем ввод пользователя с помощью cin и сохраняем его в userNumber.
  4. Мы вызываем нашу функцию isPerfectSquare() с аргументом userNumber.
  5. Если число является полным квадратом:
    • Мы вычисляем его квадратный корень и сохраняем его в squareRoot.
    • Мы выводим сообщение, указывающее, что число является полным квадратом.
    • Мы показываем, какие два одинаковых целых числа нужно умножить, чтобы получить исходное число.
  6. Если число не является полным квадратом:
    • Мы выводим сообщение, указывающее, что число не является полным квадратом.
  7. Наконец, мы выводим благодарственное сообщение и возвращаемся из функции main().

Ваша полная программа должна теперь выглядеть так:

#include <iostream>
#include <cmath>

using namespace std;

bool isPerfectSquare(int number) {
    // Calculate the square root of the number
    double squareRoot = sqrt(number);

    // Convert the square root to an integer
    int intSquareRoot = static_cast<int>(squareRoot);

    // A number is a perfect square if squaring its integer square root gives the original number
    return (intSquareRoot * intSquareRoot == number);
}

int main() {
    cout << "\nWelcome to the Perfect Square Checker Program\n\n";

    int userNumber;

    // Prompt the user to enter a number
    cout << "Please enter a positive integer: ";
    cin >> userNumber;

    // Check if the entered number is a perfect square
    if (isPerfectSquare(userNumber)) {
        int squareRoot = static_cast<int>(sqrt(userNumber));
        cout << "\nThe number " << userNumber << " is a perfect square!" << endl;
        cout << "It is equal to " << squareRoot << " × " << squareRoot << endl;
    } else {
        cout << "\nThe number " << userNumber << " is not a perfect square." << endl;
    }

    cout << "\nThank you for using the Perfect Square Checker Program!\n" << endl;

    return 0;
}

Сохраните файл перед переходом к следующему шагу.

Компиляция и тестирование программы

Теперь, когда мы завершили нашу программу на C++, пришло время скомпилировать и запустить ее. Компиляция преобразует нашу человекочитаемую программу в исполняемую машиной программу.

Компиляция программы

Откройте терминал в WebIDE, нажав на "Terminal" в меню и выбрав "New Terminal".

В терминале перейдите в директорию проекта:

cd ~/project

Скомпилируйте программу с помощью компилятора g++:

g++ main.cpp -o perfect_square_checker

Эта команда сообщает компилятору:

  • Взять наш исходный файл main.cpp
  • Скомпилировать его в исполняемый файл с именем perfect_square_checker

Если компиляция прошла успешно, вы не увидите никакого вывода. Если есть ошибки, прочитайте сообщения об ошибках, исправьте проблемы в вашем коде и попробуйте скомпилировать снова.

Запуск программы

После успешной компиляции программы запустите ее с помощью команды:

./perfect_square_checker

Программа запустится и попросит вас ввести положительное целое число.

Тестирование с различными входными данными

Протестируем нашу программу с различными входными данными, чтобы убедиться, что она работает правильно:

Тестовый случай 1: Полный квадрат

Введите 16, когда программа попросит вас ввести число. Вы должны увидеть вывод, похожий на следующий:

Please enter a positive integer: 16

The number 16 is a perfect square!
It is equal to 4 × 4

Thank you for using the Perfect Square Checker Program!

Тестовый случай 2: Не полный квадрат

Запустите программу снова и введите 10, когда программа попросит вас ввести число. Вы должны увидеть вывод, похожий на следующий:

Please enter a positive integer: 10

The number 10 is not a perfect square.

Thank you for using the Perfect Square Checker Program!

Тестовый случай 3: Полный квадрат

Запустите программу снова и введите 25, когда программа попросит вас ввести число. Вы должны увидеть вывод, похожий на следующий:

Please enter a positive integer: 25

The number 25 is a square square!
It is equal to 5 × 5

Thank you for using the Square Square Checker Program!

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

Поздравляем! Вы успешно создали программу на C++, которая определяет, является ли число полным квадратом.

Резюме

В этом практическом занятии вы успешно создали программу на C++, которая определяет, является ли число полным квадратом. Рассмотрим, что вы достигли:

  1. Вы узнали, как включать необходимые библиотеки в программу на C++:

    • iostream для операций ввода и вывода
    • cmath для математических функций, таких как sqrt()
  2. Вы реализовали функцию isPerfectSquare(), которая использует математический подход для определения, является ли число полным квадратом:

    • Вычислить квадратный корень числа
    • Проверить, равно ли квадрат целой части квадратного корня исходному числу
  3. Вы создали удобный для пользователя интерфейс в функции main(), который:

    • Просит пользователя ввести число
    • Использует функцию isPerfectSquare() для проверки, является ли число полным квадратом
    • Выводит соответствующее сообщение в зависимости от результата
  4. Вы скомпилировали и протестировали свою программу с различными входными данными, чтобы проверить ее функциональность.

В рамках этого практического занятия вы получили практический опыт работы с несколькими важными концепциями программирования на C++:

  • Создание и вызов функций
  • Использование условных операторов (if-else)
  • Работа с вводом и выводом данных от пользователя
  • Выполнение преобразования типов
  • Использование математических функций из стандартной библиотеки
  • Компиляция и запуск программы на C++

Вы можете дополнительно улучшить эту программу, добавив такие функции, как:

  • Валидация ввода, чтобы убедиться, что пользователь вводит положительное целое число
  • Возможность проверять несколько чисел без перезапуска программы
  • Поиск ближайшего полного квадрата к числу, которое не является полным квадратом

Продолжая практиковаться и расширять свои знания на основе этих фундаментальных концепций, вы будете развивать более сильные навыки программирования на C++, которые можно применять для решения более сложных задач.