C++
 Computer >> コンピューター >  >> プログラミング >> C++

参照渡しを使って3つの数値を循環的に入れ替えるC++プログラム

C++では、参照渡し(コール・バイ・リファレンス)を利用することで、3つの数値を循環順序で入れ替えることができます。具体的には、関数 cyclicSwapping() に3つの変数のアドレスを渡し、関数内で元の変数の値を直接書き換えることで、循環的な入れ替えを実現します。

循環入れ替えの仕組み

このプログラムでは、x・y・z の3つの値が以下の手順で循環的に移動します。

  • 一時変数 temp に y の値を保存する
  • y に x の値を代入する
  • x に z の値を代入する
  • z に temp(元の y の値)を代入する

その結果、「x の値は y へ、y の値は z へ、z の値は x へ」という流れで、3つの値が循環的に入れ替わります。

サンプルプログラム

参照渡しを使用して数値を循環順序で入れ替えるプログラムは以下の通りです。

#include<iostream>
using namespace std;
void cyclicSwapping(int *x, int *y, int *z) {
    int temp;
    temp = *y;
    *y = *x;
    *x = *z;
    *z = temp;
}
int main() {
    int x, y, z;

    cout << "Enter the values of 3 numbers: "<<endl;
    cin >> x >> y >> z;

    cout << "Number values before cyclic swapping..." << endl;
    cout << "x = "<< x <<endl;
    cout << "y = "<< y <<endl;
    cout << "z = "<< z <<endl;

    cyclicSwapping(&x, &y, &z);

    cout << "Number values after cyclic swapping..." << endl;
    cout << "x = "<< x <<endl;
    cout << "y = "<< y <<endl;
    cout << "z = "<< z <<endl;

    return 0;
}

実行結果

上記プログラムの実行結果は以下の通りです。

Enter the values of 3 numbers: 2 5 7
Number values before cyclic swapping...
x = 2
y = 5
z = 7

Number values after cyclic swapping...
x = 7
y = 2
z = 5

プログラムの解説

上記のプログラムでは、関数 cyclicSwapping() がポインタ(参照渡し)を使って3つの数値を循環順序で入れ替えています。入れ替え処理には一時変数 temp が使われており、その該当コードは以下の通りです。

void cyclicSwapping(int *x, int *y, int *z) {
    int temp;
    temp = *y;
    *y = *x;
    *x = *z;
    *z = temp;
}

main() 関数では、まずユーザーから3つの数値を入力してもらい、入れ替え前の値を表示します。その後、cyclicSwapping() 関数を呼び出して数値を入れ替え、入れ替え後の値を表示します。該当するコードは以下の通りです。

cout << "Enter the values of 3 numbers: "<<endl;
cin >> x >> y >> z;

cout << "Number values before cyclic swapping..." << endl;
cout << "x = "<< x <<endl;
cout << "y = "<< y <<endl;
cout << "z = "<< z <<endl;

cyclicSwapping(&x, &y, &z);

cout << "Number values after cyclic swapping..." << endl;
cout << "x = "<< x <<endl;
cout << "y = "<< y <<endl;
cout << "z = "<< z <<endl;

まとめ

このように、ポインタを使った参照渡しを活用すれば、関数の外にある変数の値を直接操作できます。値渡しでは関数内の変更が呼び出し元に反映されませんが、参照渡しを使うことで、循環的な入れ替えのような複数の変数への変更を1つの関数で簡潔に実現できます。

  1. 再帰を使用して自然数の合計を求めるC++プログラム

    自然数とは、1から始まる正の整数のことです。自然数の列は以下のように表されます。1, 2, 3, 4, 5, 6, 7, 8, 9, 10……本記事では、再帰(リカージョン)を利用して、最初のn個の自然数の合計を求めるC++プログラムを紹介します。再帰とは、関数が自分自身を呼び出すことで問題を段階的に解決していく手法です。サンプルコード以下は、再帰を使って最初のn個の自然数の合計を計算するC++プログラムの例です。#include <iostream> using namespace std; int sum(int n) {    if(n == 0) &nb

  2. 【C++】2つの数値を交換(スワップ)するプログラムの書き方

    2つの数値を交換(スワップ)するC++プログラムを作成する方法は、主に2つあります。1つ目は一時変数(temp変数)を使用する方法で、2つ目は第3の変数を使わない方法です。ここでは、それぞれの方法についてサンプルコード付きで詳しく解説します。一時変数を使って2つの数値を交換するプログラムまず、一時変数を使って2つの数値を交換する基本的なプログラムを見てみましょう。サンプルコード#include <iostream>using namespace std;int main() {   int a = 10, b = 5, temp;   tem