-
C++でスパース行列(疎行列)かどうかを判定するプログラム
スパース行列(疎行列)とは、行列の要素の大部分が0で占められている行列のことです。言い換えれば、行列に含まれる要素の半分以上が0である場合、その行列はスパース行列と呼ばれます。例として、次のような行列を考えてみましょう。1 0 2 5 0 0 0 0 9この行列には5つの0が含まれています。0の個数が全要素数(9個)の半分を超えているため、この行列はスパース行列だと言えます。それでは、与えられた行列がスパース行列かどうかを判定するC++プログラムを見ていきましょう。サンプルコード#include<iostream> using namespace std; int main ()
-
C++で標準偏差を計算するプログラムの作り方
標準偏差(Standard Deviation)とは、データの中の数値が平均値からどの程度ばらついているかを示す統計量です。分散の平方根として定義され、分散は「各データと平均との差を二乗した値の平均」を意味します。標準偏差が小さいほどデータは平均付近に集中し、大きいほど広く散らばっていることを表します。 ここでは、C++を使って標準偏差を計算するプログラムを紹介します。 サンプルコード #include <iostream> #include <cmath> using namespace std; int main() { &nbs
-
C++で構造体を使って従業員情報を格納・表示する方法【初心者向け解説】
C++における構造体(struct)とは構造体(structure)とは、異なるデータ型の項目をひとつにまとめたデータ集合です。整数や文字列、浮動小数点数など、型の異なる複数のレコードを扱う複雑なデータ構造を作成する際に非常に役立ちます。C++では、struct キーワードを使って構造体を定義します。構造体の基本的な定義例は以下の通りです。struct employee { int empID; char name[50]; float salary;};こ
-
C++で行列を関数に渡して2つの行列を乗算するプログラムの解説
行列(マトリックス)とは、数値を行と列の形式で長方形状に配置した配列のことです。線形代数における基本的なデータ構造であり、科学技術計算やグラフィックス処理など、さまざまな分野で利用されています。例として、3行4列の「3×4行列」は次のように表されます。8 6 3 5 7 1 9 2 5 1 9 8この記事では、2つの行列を関数に渡すことで乗算を実行するC++プログラムを紹介します。サンプルプログラム#include<iostream> using namespace std; void MatrixMultiplication(int a[2][3],int b[3][3]) {
-
C++で行列が可逆(正則)かどうかを判定するプログラムの書き方
行列が可逆(逆行列を持つ)かどうかは、行列式を求めることで判定できます。行列式が0以外であれば、その行列は可逆です。逆に、行列式が0になった場合は、行列は可逆ではありません。 例を見てみましょう。 与えられた行列: 4 2 1 2 1 1 9 3 2 この行列の行列式:3 したがって、この行列は可逆です。 可逆性を判定するプログラム例 以下は、行列が可逆かどうかを判定するC++プログラムの完全なコードです。 #include<iostream> #include<math.h> using namespace std; int determinant( int ma
-
C++で正方行列の行列式を計算する方法|再帰呼び出しによる実装例
行列式とは?正方行列の行列式(determinant)は、行列の要素の値から求められるスカラー値です。行列Aの行列式は「det(A)」と表記され、幾何学においては、その行列が表す線形変換のスケーリング係数(面積・体積の拡大率)と考えることができます。2次の正方行列の場合は、「ad − bc」という公式で簡単に計算できます。以下に具体例を示します。行列: 3 1 2 7 行列式 = 3 × 7 − 1 × 2 = 21 − 2 = 19 よって、この行列の行列式は 19 です。行列式を計算するC++プログラム以下は、キーボードから入力した任意のサイズの正方行列に対して、
-
C++で2つの行列の乗算可能性を判定するプログラム
2つの行列が「乗算可能(multiplicable)」であるとは、それらを掛け合わせることができることを意味します。行列の乗算が成立するのは、1つ目の行列の列数が、2つ目の行列の行数と一致する場合のみです。乗算可能性の条件例を挙げて確認してみましょう。行列1の行数 = 3 行列1の列数 = 2 行列2の行数 = 2 行列2の列数 = 5この場合、行列1の列数(2)と行列2の行数(2)が一致しているため、行列1と行列2は乗算可能です。乗算可能性をチェックするC++プログラム以下に、2つの行列が乗算可能かどうかを判定するC++プログラムを示します。#include<iostream>
-
二分木の先行順(プレオーダー)走査を再帰的に実行するC++プログラム
二分木の先行順走査とは木の走査(トラバーサル)はグラフ走査の一種であり、木に含まれるすべてのノードをそれぞれ一度だけ訪れて処理を行うことを指します。二分探索木における先行順走査(プレオーダー走査)では、「根 → 左部分木 → 右部分木」の順序で各ノードを訪問するのが特徴です。次のような二分木を例に考えてみましょう。この二分木に対する先行順走査の結果は 6 4 1 5 8 となります。ここからは、この先行順走査を再帰的に実行するC++プログラムを紹介します。C++による実装例#include<iostream> using namespace std; struct node {
-
【C++】二分木の中順走査(Inorder Traversal)を再帰的に実装する方法
木の走査(Tree Traversal)は、グラフ走査の一種であり、木に含まれるすべてのノードをそれぞれ一度だけ訪問(チェックまたは出力)する操作です。二分探索木における中順走査(Inorder Traversal、通りがけ順とも呼ばれます)では、「左の子 → 根 → 右の子」の順序で各ノードを訪問します。 二分木の中順走査の具体例を見てみましょう。次のような二分木が与えられたとします。 この二分木に対する中順走査の結果は次のとおりです。 中順走査の結果:1 4 5 6 8 それでは、中順走査を再帰的に実行するC++プログラムを見ていきましょう。 サンプルコード #include<i
-
与えられた二分木の後順(ポストオーダー)再帰走査を実行するC++プログラム
木構造の走査(トラバーサル)はグラフ走査の一種であり、木の中の各ノードを正確に一度だけ訪問して確認・出力する操作を指します。二分探索木の後順走査(ポストオーダー走査)では、木の各ノードを「左 → 右 → 根」の順序で訪問します。二分木の後順走査の例を以下に示します。次のような二分木が与えられたとします。この場合、後順走査の結果は次のようになります。後順走査の出力:1 5 4 8 6後順再帰走査を行うC++プログラム後順(ポストオーダー)再帰走査を実行するプログラムは以下の通りです。#include<iostream> using namespace std; struct node
-
C++でヒープソートアルゴリズムを使って10個の要素の配列をソートする方法
ヒープソートは、二分ヒープ(バイナリヒープ)と呼ばれるデータ構造に基づいたソートアルゴリズムです。二分ヒープには2種類あります。最大ヒープでは各親ノードの子ノードが親の値以下になり、最小ヒープでは各親ノードの子ノードが親の値以上になるように構成されます。本記事では、最大ヒープを利用したヒープソートをC++で実装し、10個の要素を持つ配列を昇順に並べ替える手順を詳しく解説します。 ヒープソートの手順(具体例) まず、ソート前の10個の要素からなる元の配列は次の通りです。 207154101590237725 この配列に対してmax-heapify操作を適用し、二分最大ヒープを構築します。配列と
-
【C++入門】動的計画法(DP)で階乗を効率的に計算する方法
正の整数 n の階乗(n!)は、1×2×3×…×n として定義されます。負の数に対する階乗は定義されていないため、存在しません。本記事では、動的計画法(Dynamic Programming)を活用して、指定された整数の階乗を効率的に求める C++ プログラムを紹介します。 階乗と動的計画法の考え方 階乗は「n! = n × (n-1)!」という漸化式で表せるため、小さい値から順に結果を配列に保存しながら計算する動的計画法と非常に相性が良い問題です。すでに計算した結果を再利用することで、無駄な再計算を避けられます。 アルゴリズム 処理の流れは以下の通りです。 開始 fact(int n
-
C++で二分木の前順走査(プレオーダー)をスタックにより非再帰的に実装するプログラム
木の走査(ツリートラバーサル)はグラフ走査の一種で、木に含まれるすべてのノードをそれぞれ一度だけ訪問して確認・出力する処理のことです。二分探索木における前順走査(プレオーダー走査)では、「根(Root)→ 左部分木(Left)→ 右部分木(Right)」という順序でノードを訪問します。 本記事では、再帰呼び出しを使わずスタックを活用して前順走査を非再帰的に実装するC++プログラムを、コード例とともにわかりやすく解説します。 前順走査の例 たとえば、次のような二分木が与えられたとします。 この木に対する前順走査の結果は次のとおりです。 前順走査の結果:5 3 2 4 8 9 非再帰的な前順走査
-
C++のstrchr()関数とは?文字列から文字を検索する方法をわかりやすく解説
C++には、文字列操作を簡単に行うための標準ライブラリ関数が数多く用意されています。その中のひとつが strchr() 関数です。strchr() は、指定した文字列の中から特定の文字が最初に現れる位置を検索し、その位置へのポインタを返す関数です。この関数を使用するには、ヘッダーファイル <cstring> をインクルードする必要があります。strchr()関数の構文strchr() 関数の構文は以下のとおりです。char *strchr( const char *str, int c )各引数の意味は次のとおりです。str: 検索対象となる文字列(C言語形式のヌル終端文字列)c:
-
C++におけるstrcat()とstrncat()の使い方と違い
C++には、文字列を連結するための関数としてstrcat()とstrncat()があらかじめ用意されています。どちらも<cstring>ヘッダで定義されている標準的な文字列操作関数ですが、動作には重要な違いがあります。本記事では、それぞれの構文・使い方・実行例をわかりやすく解説します。 strcat()とは strcat()は、コピー元(ソース)の文字列を、コピー先(デスティネーション)の文字列の末尾に追加するための関数です。戻り値としては、連結後のコピー先文字列へのポインタが返されます。strcat()の構文は以下の通りです。 char *strcat(char *dest, c
-
C++のstrncat()関数とは?文字列連結の基本をわかりやすく解説
strncat()関数とはC++のstrncat()関数は、文字列を連結するために使用される関数です。コピー元の文字列(src)から指定した文字数だけを、コピー先の文字列(dest)の末尾に追加し、コピー先の文字列へのポインタを返します。この関数を使用するには、ヘッダーファイル<cstring>をインクルードする必要があります。strncat()の構文char * strncat ( char * dest, const char * src, size_t num );上記の構文では、コピー元の文字列srcは、最大num文字までコピー先の文字列destの末尾に追加されます。追加処
-
C++のstrpbrk()関数とは?使い方とサンプルコードを解説
strpbrk()はC++の標準ライブラリ(<cstring>ヘッダ)に含まれる文字列関数の一つです。2つの文字列を受け取り、第1引数の文字列(str1)の中に、第2引数の文字列(str2)に含まれるいずれかの文字が最初に出現する位置を探します。一致する文字が見つかった場合は、その文字へのポインタを返します。見つからなかった場合や、終端のNULL文字(ヌルターミネータ)に到達した場合はNULLを返します。なお、この関数は終端のNULL文字自体を比較対象にはしません。strpbrk()の構文char *strpbrk(const char *str1, const char *str
-
C++ STLのsinh()関数の使い方を徹底解説
sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin
-
C/C++の三項演算子(条件演算子)の基本と使い方
3つのオペランド(被演算子)を必要とする演算子は「三項演算子」と呼ばれます。C言語では ? : の記号で表され、「条件演算子」とも呼ばれています。三項演算子を使うと、コードの行数を削減でき、簡潔で読みやすいプログラムを書くことができます。三項演算子の構文式1 ? 式2 : 式3まず式1が評価され、その結果が真(非ゼロ)であれば式2が実行され、偽(ゼロ)であれば式3が実行されます。if-else文を1行で書けるため、簡単な条件分岐に便利です。C言語での三項演算子の例サンプルコード1#include <stdio.h> int main() { int a = -1;
-
C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説
cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引