완전 제곱수 판별

C++Beginner
지금 연습하기

소개

이 랩에서는 C++ 에서 주어진 숫자가 완전 제곱수인지 판별하는 방법을 배우게 됩니다. 완전 제곱수는 정수를 자기 자신과 곱하여 표현할 수 있는 숫자입니다. 예를 들어, 1, 4, 9, 16, 25 는 각각 1×1, 2×2, 3×3, 4×4, 5×5 로 표현할 수 있으므로 완전 제곱수입니다.

표준 라이브러리의 sqrt() 함수를 사용하여 숫자의 제곱근을 계산하고 완전 제곱수인지 판별하는 C++ 프로그램을 만들 것입니다. 이 랩에서는 함수, 조건문, 수학 연산과 같은 기본적인 C++ 프로그래밍 개념을 소개합니다.

새 C++ 파일 생성 및 필수 라이브러리 포함

이 단계에서는 새로운 C++ 파일을 생성하고 프로그램에 필요한 라이브러리를 포함합니다.

먼저, 프로젝트 디렉토리에 main.cpp라는 새 파일을 생성해 보겠습니다.

  1. WebIDE 에서 왼쪽 사이드바의 탐색기 아이콘을 클릭합니다.
  2. project 폴더를 마우스 오른쪽 버튼으로 클릭하고 "New File"을 선택합니다.
  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;
}

이 코드는 다음과 같습니다.

  • 필요한 라이브러리를 포함합니다.
  • 표준 라이브러리 함수 앞에 std::를 쓰지 않도록 namespace std를 사용합니다.
  • 환영 메시지를 표시하는 기본적인 main() 함수를 생성합니다.
  • 프로그램 실행 성공을 나타내기 위해 0 을 반환합니다.

Ctrl+S 를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.

완전 제곱수 확인 함수 구현

이제 숫자가 완전 제곱수인지 판별하는 함수를 만들 것입니다. 완전 제곱수는 정수 제곱근을 갖습니다. 예를 들어, 16 은 제곱근이 정확히 4 이므로 완전 제곱수입니다.

main.cpp 파일의 main() 함수 위에 다음 함수를 추가합니다.

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. cmath 라이브러리의 sqrt() 함수를 사용하여 입력 숫자의 제곱근을 계산합니다.
  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. userNumber를 인수로 사용하여 isPerfectSquare() 함수를 호출합니다.
  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++ 프로그램을 완성했으므로 컴파일하고 실행할 차례입니다. 컴파일은 사람이 읽을 수 있는 코드를 기계가 실행할 수 있는 프로그램으로 변환합니다.

프로그램 컴파일

메뉴에서 "Terminal"을 클릭하고 "New Terminal"을 선택하여 WebIDE 에서 터미널을 엽니다.

터미널에서 프로젝트 디렉토리로 이동합니다.

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 perfect square!
It is equal to 5 × 5

Thank you for using the Perfect Square Checker Program!

다양한 입력으로 테스트하여 프로그램이 완전 제곱수와 완전 제곱수가 아닌 수를 올바르게 식별하는지 확인할 수 있습니다.

축하합니다! 숫자가 완전 제곱수인지 판별하는 C++ 프로그램을 성공적으로 만들었습니다.

요약

이 랩에서는 숫자가 완전 제곱수인지 판별하는 C++ 프로그램을 성공적으로 만들었습니다. 수행한 작업을 검토해 보겠습니다.

  1. C++ 프로그램에 필요한 라이브러리를 포함하는 방법을 배웠습니다.

    • 입력 및 출력 작업을 위한 iostream
    • sqrt()와 같은 수학 함수를 위한 cmath
  2. 숫자가 완전 제곱수인지 판별하기 위해 수학적 접근 방식을 사용하는 isPerfectSquare() 함수를 구현했습니다.

    • 숫자의 제곱근을 계산합니다.
    • 제곱근의 정수 부분을 제곱한 값이 원래 숫자와 같은지 확인합니다.
  3. main() 함수에서 다음과 같은 사용자 친화적인 인터페이스를 만들었습니다.

    • 사용자에게 숫자를 입력하라는 메시지를 표시합니다.
    • isPerfectSquare() 함수를 사용하여 숫자가 완전 제곱수인지 확인합니다.
    • 결과에 따라 적절한 메시지를 표시합니다.
  4. 프로그램의 기능을 확인하기 위해 다양한 입력으로 프로그램을 컴파일하고 테스트했습니다.

이 랩을 통해 다음과 같은 몇 가지 중요한 C++ 프로그래밍 개념에 대한 실질적인 경험을 얻었습니다.

  • 함수 생성 및 호출
  • 조건문 (if-else) 사용
  • 사용자 입력 및 출력 작업
  • 형식 변환 수행
  • 표준 라이브러리의 수학 함수 사용
  • C++ 프로그램 컴파일 및 실행

다음과 같은 기능을 추가하여 이 프로그램을 더욱 향상시킬 수 있습니다.

  • 사용자가 양의 정수를 입력하도록 보장하기 위한 입력 유효성 검사
  • 프로그램을 다시 시작하지 않고 여러 숫자를 확인할 수 있는 기능
  • 완전 제곱수가 아닌 숫자에 가장 가까운 완전 제곱수 찾기

이러한 기본적인 개념을 계속 연습하고 구축함으로써 더 복잡한 문제에 적용할 수 있는 더 강력한 C++ 프로그래밍 기술을 개발할 수 있습니다.