-
整数と浮動小数点数を入力として受け取り、その合計を返すC++プログラム
ここでは、整数 a と浮動小数点数 b の2つの値を標準入力から受け取り、それらの合計を標準出力に表示する方法を解説します。 例えば、入力が a = 10、b = 56.23 である場合、出力は「Sum: 66.23」になります。 解決のためのアプローチ この問題を解くには、以下の手順に従います。 結果を標準出力デバイスに表示するには、挿入演算子(<<)を使用します。 標準入力から値を受け取るには、抽出演算子(>>)を使用します。 ポイント:暗黙の型変換 C++では、int型とfloat型を加算すると、整数側が自動的に浮動小数点数へ変換されます。そのため、明示的なキ
-
【C++入門】条件分岐を使って数字を英単語に変換するプログラムの書き方
数字を単語に変換するプログラムとは 0から9までの1桁の数字 d を受け取り、それに対応する英単語に変換するプログラムを考えてみましょう。例えば、d = 9 が入力された場合、出力は Nine になります。また、0〜9の範囲外の値が入力された場合には、範囲外であることを示す適切なメッセージを返すようにします。 例えば、入力が d = 3 であれば、出力は Three となります。 解決のためのアルゴリズム この問題は、条件分岐(if-else文)を使うことで簡単に解決できます。手順は以下のとおりです。 solve() という関数を定義し、引数として数字 d を受け取ります。 d が 0 未
-
【C++入門】指定した範囲の数字を英語の単語に変換して出力する方法
この記事では、2つの整数 a と b が与えられたとき、その範囲内のすべての数字を対応する英単語に変換して順番に出力するC++プログラムを紹介します。 例えば、数字「5」であれば「Five」と出力します。範囲の開始値と終了値の間にある各数値に対して、この変換処理を繰り返し適用します。 問題の例 入力として a = 2、b = 6 が与えられた場合、期待される出力は以下のようになります。 Two Three Four Five Six 解決のアプローチ この問題は、以下の手順で解くことができます。 範囲チェック: 数値 d が 0 未満または 9 より大きい場合は、「Beyond range
-
C++で4つの整数から最大値を求める方法:自作関数を使った実装例
この記事では、4つの整数 a、b、c、d の中から最大の数を見つけるC++プログラムを紹介します。ポイントは、標準ライブラリに頼らず、自分で関数を作成するところにあります。 まず、2つの数を引数として受け取り、そのうち大きい方を返す max() 関数を定義します。この関数を組み合わせて使うことで、4つの数すべての最大値を効率的に求めることができます。 例えば、入力が a = 75、b = 18、c = 25、d = 98 の場合、出力は 98 となります。 解決の手順 x と y を引数に取る関数 max() を定義します。 x と y のうち大きい方を返します。 4つの数 a、b、c、d
-
ポインタ(アドレス渡し)を使って加算と減算を同時に求めるC++プログラム
問題の概要 2つの数 a と b があると仮定しましょう。ここで、(a + b) と (a − b) の両方を計算できる関数を定義する必要があります。しかし、C++の関数では return 文で返せる値は最大1つまでという制約があります。 そこで、複数の結果を扱いたい場合には、関数の引数にポインタ型の出力パラメータを用意し、呼び出し側から変数のアドレスを渡す方法が有効です。本記事の問題では、a を a + b の値に、b を a − b の値に更新することを考えます。関数を呼び出す際には、この2つの変数のアドレスを渡す必要があります。 例えば、入力が a = 15、b = 18 だった場合、
-
C++で配列の要素をその場(インプレース)で反転するプログラム
問題概要n個の異なる要素からなる配列が与えられたとき、配列内の要素を反転して表示するプログラムを作成します。ここでのポイントは、単に逆順に表示するだけではなく、配列自体の要素をその場(インプレース)で入れ替えることです。例として、入力が n = 9、arr = [2,5,6,4,7,8,3,6,4] の場合、出力は [4,6,3,8,7,4,6,5,2] となります。アルゴリズムこの問題は、以下の手順で解くことができます。i を 0 から n/2 未満まで 1 ずつ増やしながら、以下を繰り返します。temp に arr[i] の値を退避するarr[i] に arr[n - i - 1] を代入
-
C++でカンマ区切りの文字列から整数を取り出す方法
カンマで区切られた複数の整数が含まれた文字列があるとします。これらの整数を個別に取り出し、それぞれ別の行に表示したい場合があります。このような処理には、C++のstringstream(sstreamライブラリ)を利用すると便利です。 stringstreamは、C++に用意されている文字列ベースのストリームクラスの一つです。抽出演算子(>>)でデータを読み取り、挿入演算子(<<)でデータを書き込み、str()関数で内部の文字列バッファの内容を設定・取得することができます。 例えば、入力が s = 56,9,85,256,47 の場合、出力は次のようになります。 56
-
文字列の長さの取得・連結・先頭文字の交換を行うC++プログラム
2つの文字列 s と t が与えられたとき、次の3行で構成される出力を求めます。1行目には s と t の長さをスペース区切りで、2行目には s と t を連結した文字列を、3行目には先頭の文字を入れ替えた s と t をスペース区切りで表示します。例えば、入力が s = hello、t = programmer の場合、出力は以下のようになります。5 10 helloprogrammer pello hrogrammer解法のアプローチこの問題を解くためには、以下の手順に従います。s の長さを表示し、スペースを1つ出力してから t の長さを表示するs + t(連結した文字列)を表示するtem
-
C++の構造体で学生データを作成し、指定形式で表示するプログラム
問題概要学生の「名(ファーストネーム)」「姓(ラストネーム)」「年齢」「クラス」が、それぞれ別の行に入力として与えられているとします。C++の構造体(struct)を使ってこれらのデータをすべて読み込み、(年齢, 名, 姓, クラス) の形式で表示するプログラムを作成しましょう。ここで、年齢とクラスは整数型(int)、名と姓は文字列型(string)として扱います。たとえば、入力が次のような場合:priyamkundu1610出力は以下のようになります。(16, priyam, kundu, 10)解き方の手順この問題を解くには、以下の手順に従います。string型のfirst_name(名)
-
データ隠蔽とカプセル化で学生情報を管理するC++プログラム
C++では、データ隠蔽(データハイディング)とカプセル化の仕組みを活用することで、外部から直接アクセスできない安全なデータ型を設計できます。ここでは、学生情報を管理するクラスを例に、その実装方法を解説します。学生クラスには、first_name(名)、last_name(姓)、age(年齢)、class(クラス)の4つの項目を持たせますが、これらのメンバー変数は private として宣言し、外部から直接操作できないようにします。その代わりに、get_firstname() / set_firstname()、get_age() / set_age() といったゲッター・セッター関数を定義して
-
【C++】最初の生徒(Kamal)より合計スコアが高い生徒の人数を数えるプログラム
n人の生徒が5教科のテストを受けたとします。最初のスコアはKamalのもので、残りのn-1件は他の生徒のスコアです。各生徒は5教科それぞれの点数を持っており、その中からKamalよりも高い合計スコアを獲得した生徒の人数を数えることを考えます。 ここでは、各生徒のスコアを管理するための Student クラスを定義します。このクラスには、点数を受け取る input() 関数と、5教科の点数から合計点を計算する calculateTotalScore() 関数を実装します。 たとえば、入力が n = 4、scores = [[25,45,32,42,30],[22,25,41,18,21],[37
-
【C++】ボックスクラスの作成、体積計算、未満演算子による比較の実装方法
ボックス(Box)クラスの定義条件ここでは、以下の条件に従ってボックスクラスを定義するC++プログラムを解説します。長さ・幅・高さを表す3つの属性 l、b、h を持つ(これらは private 変数として定義)l、b、h をすべて 0 で初期化する引数なしコンストラクタと、初期値を設定できる引数付きコンストラクタを定義する各属性に対応するゲッターメソッドを定義するボックスの体積を求める calculateVolume() 関数を定義する「<」(未満)演算子をオーバーロードし、現在のボックスが別のボックスより小さいかどうかを判定できるようにする作成されたボックスの個数をカウントする変数を用
-
C++でvectorから指定インデックスの要素を削除する方法:erase()関数の使い方を解説
C++のvectorクラスには、要素を削除するためのerase()関数が用意されています。この関数を使えば、指定したインデックス位置の要素を簡単に取り除けます。ただし、erase()はインデックスを直接受け取るのではなく、削除対象の要素を指すイテレータを渡す必要があります。具体的には「v.begin() + index」という形式で指定します。ここでvはvectorオブジェクト、v.begin()は先頭要素(0番目の要素)を指すイテレータです。これにインデックスを加算することで、目的の位置にある要素へアクセスできます。 削除の流れ 例として、v = [5, 8, 6, 3, 2, 0, 1,
-
C++のset STLで挿入・削除・検索を実装するプログラム
整数型のデータを格納するセット(set)データ構造について考えます。標準入力からn個のクエリが与えられ、各クエリ(各行)には2つの値が含まれています。1つ目は操作の種類を示す番号、2つ目は対象となる要素です。各操作の内容は以下の通りです。挿入(Insert):指定された要素をセットに追加します。削除(Delete):指定された要素をセットから削除します(存在しない場合は何も行いません)。検索(Search):指定された要素がセット内に存在するかを調べ、存在すれば「Yes」、存在しなければ「No」を出力します。問題例たとえば、n = 7、queries = [[1,5],[1,8],[1,3],
-
C++のmap STLを使って学生の出席番号と名前を管理するプログラム
本記事では、C++のmapコンテナ(STL)を使用して、学生の出席番号(整数型)と名前(文字列型)を管理するプログラムを紹介します。標準入力からn個のクエリが与えられます。各クエリ(各行)は基本的に2つの要素で構成され、タイプ1のクエリの場合は3つの要素になります。1番目の要素は操作の種類、2番目の要素は出席番号、そしてタイプ1の場合のみ3番目の要素として名前が与えられます。操作の種類挿入(Insert):指定された出席番号に対応するキーとして、名前をマップに登録します。削除(Delete):指定された出席番号に対応するエントリをマップから削除します(存在する場合)。検索(Search):指定
-
C++でTriangleクラスとIsoscelesクラスを使って継承をテストするプログラム
C++におけるクラス継承の基本動作を、Triangle(三角形)クラスとその子クラスであるIsosceles(二等辺三角形)クラスを作成して確認してみましょう。Triangleクラスには「このオブジェクトは三角形です」と出力する関数を持たせます。一方、Isoscelesクラスには「二等辺三角形であること」を示す関数と、その特徴を説明する関数の2つを定義します。さらに重要なポイントとして、子クラスのオブジェクトから親クラスの関数を呼び出せることも併せて確認します。今回のプログラムでは特別な入力は不要で、各関数を適切な順序で呼び出すだけです。例えば、trgというオブジェクトを生成し、trg.iso
-
C++でRectangleクラスを作成して長方形の面積を計算するプログラム
ここでは、2つの長方形の「縦(長さ)」と「横(幅)」が与えられたとき、クラスを使ってそれぞれの面積を計算する方法を解説します。まず、長さを表す l と幅を表す b という2つの属性を持つ Rectangle クラスを作成します。さらに、その長方形の面積を計算して返す area() 関数を定義します。例えば、入力が (10, 9) と (8, 6) の場合を考えてみましょう。1つ目の長方形は縦10・横9なので、面積は 10 × 9 = 90。2つ目の長方形は縦8・横6なので、面積は 8 × 6 = 48 となります。解決の手順属性 l(長さ)と b(幅)を持つ Rectangle クラスを定義す
-
クラステンプレートを使ってさまざまな型の値を加算するC++プログラム
2つの整数同士、2つの浮動小数点数同士、さらに2つの文字列同士を「足し合わせる」ことのできるクラスを作りたいとします(文字列の場合、加算は文字列の連結を意味します)。入力では最初に操作の回数 n を受け取り、その後の各行には型(int、float、string)と2つのオペランドが与えられます。各行を読み込み、指定された型に応じた演算を実行して結果を出力するのが課題です。たとえば、入力が次のようになっているとします。5 int 5 7 int 6 9 float 5.25 9.63 string hello world string love C++このとき、出力は次のようになります。12 1
-
C++で+演算子をオーバーロードして2つの複素数を加算する方法
実部(real)と虚部(imag)を持つ複素数クラスがあるとします。このクラスに対して、2つの複素数を加算できるように、加算演算子「+」をオーバーロードする必要があります。あわせて、複素数を見やすい形式の文字列として返す関数も定義しておくと便利です。たとえば、入力が c1 = 8 - 5i、c2 = 2 + 3i の場合、期待される出力は 10 - 2i となります。解決の手順「+」演算子をオーバーロードし、引数としてもう一つの複素数 c2 を受け取るようにします実部・虚部がともに0である複素数 ret を定義しますret の実部 := 自身の実部 + c2 の実部ret の虚部 := 自身の
-
C++で学ぶ例外処理:短すぎるユーザー名を検出する独自例外の定義とユーザー名検証プログラム
文字列形式のユーザー名リストが与えられ、いくつかの条件に基づいて各ユーザー名が有効かどうかを判定するプログラムを考えてみましょう。ユーザー名の長さが5文字未満の場合にスローされる独自の例外を定義する必要があります。有効なユーザー名には「Valid」を、無効なユーザー名には「Invalid」を返し、短すぎるユーザー名に対しては例外をスローします。有効なユーザー名の条件は以下の通りです。 ユーザー名は必ず5文字以上の長さであること ユーザー名の中に「w」が2つ連続して含まれていないこと 例えば、入力が unames = ["amit", "to", &