完全平方数の判定

C++C++Beginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、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 フォルダを右クリックし、「新しいファイル」を選択します。
  3. ファイル名を main.cpp と入力し、Enter キーを押します。

次に、プログラムに必要なライブラリを追加しましょう。主に 2 つのライブラリが必要です。

  • 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.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 に格納します。
    • その数が完全平方数であることを示すメッセージを表示します。
    • 元の数を得るために乗算する 2 つの同一の整数を表示します。
  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++ プログラミングスキルを身につけることができます。