-
正方形に内接する八角形の辺の長さを求めるC++プログラム
このチュートリアルでは、与えられた正方形に内接する八角形の辺の長さを求めるC++プログラムについて解説します。問題設定としては、正方形の一辺の長さが与えられ、その中に内接できる最大の八角形の辺の長さを求めることが課題となります。正方形と八角形の辺の長さの関係を幾何学的に導くことで、八角形の辺の長さを求める次の公式が得られます。八角形の辺の長さ = 正方形の一辺 ÷ (√2 + 1)この公式は、正方形に最大の正八角形を内接させたとき、八角形の各辺と正方形の各辺の間に生じる角度の関係から導出されます。正方形の一辺の長さを (√2 + 1) で割るだけで、八角形の一辺を簡単に求めることができます。サ
-
3つの数値の中から最小値を見つけるC++プログラムの解説
このチュートリアルでは、与えられた3つの要素の中から最小の要素を見つけるC++プログラムについて解説します。3つの整数が与えられ、それらを互いに比較することで、最も小さい値を特定するのが本プログラムの目的です。条件分岐(if-else文)を組み合わせることで、シンプルかつ効率的に最小値を求めることができます。プログラムの考え方最小値を求める基本的な手順は以下の通りです。1. まず「a」が「b」と「c」の両方以下であるかを判定します。条件を満たせば「a」が最小値です。2. 次に「b」が「a」と「c」の両方以下であるかを判定します。条件を満たせば「b」が最小値です。3. いずれの条件も満たさない場
-
C++で行列の各行・各列の合計を求めるプログラム
このチュートリアルでは、与えられた行列について、各行と各列の合計を求めるC++プログラムを解説します。ここでは、A×Bのサイズの行列が与えられたと仮定します。課題は、行列のすべての要素を走査し、各行および各列ごとの合計値を計算することです。アルゴリズムの考え方行の合計を求める場合は、外側のループで行番号を固定し、内側のループでその行の各要素を順番に加算していきます。1行分の合計を出力したら、合計用の変数を0にリセットして次の行へ進みます。列の合計を求める場合は、ループの役割を入れ替えます。外側のループで列番号を固定し、内側のループでその列に属する各要素を加算します。サンプルコード#includ
-
C++で級数 (1×1) + (2×2) + (3×3) + … + (n×n) の合計を求めるプログラム
このチュートリアルでは、級数 (1*1) + (2*2) + (3*3) + (4*4) + (5*5) + … + (n*n) の合計を求めるC++プログラムについて解説します。 この問題では、nの値が与えられます。私たちのタスクは、最初の項から順番にすべての項を加算していき、級数全体の合計を求めることです。 実装例 #include <iostream> using namespace std; // 級数の合計を計算する関数 int calc_sum(int n) { int i; int sum = 0; &
-
C++で級数(1/a + 2/a² + 3/a³ + … + n/aⁿ)の合計を求めるプログラム
級数の合計を求めるC++プログラムこのチュートリアルでは、次の級数の合計を求めるC++プログラムについて解説します。1/a + 2/a2 + 3/a3 + … + n/anこの問題では、aとnの値が与えられます。第1項から第n項までのすべての項を順番に足し合わせることで、級数全体の合計を計算するのが課題です。解法のアプローチ各項は「i / ai」という形で一般化できます。そこで、forループでiを1からnまで変化させながら、pow関数を使ってaのi乗を求め、各項の値を合計変数に加算していきます。サンプルコード#include <iostream> #include <math
-
1/1! + 2/2! + 3/3! + … + n/n! の級数の合計を求めるC++プログラム
このチュートリアルでは、級数「1/1! + 2/2! + 3/3! + 4/4! + … + n/n!」の合計を求めるC++プログラムについて解説します。nの値が与えられ、最初の項から順番にすべての項を足し合わせて、級数全体の合計を求めることが目標です。考え方各項は「i / i!」という形をしています。そこで、階乗の値を保持する変数を用意し、ループのたびに新しい値を掛けて更新しながら、その項を合計に加算していきます。階乗を毎回ゼロから計算し直す必要がないため、時間計算量はO(n)と非常に効率的です。例#include <iostream> using namespace std;
-
C++で級数 23+45+75+… の最初のN項の合計を求める方法
このチュートリアルでは、級数 23 + 45 + 75 + … の最初のN項までの合計を求めるC++プログラムについて解説します。具体的には、値Nが与えられたとき、第1項から第N項までのすべての項を順番に足し合わせ、級数全体の合計を求めることが課題となります。級数の合計を求める公式この問題を数学的に解くと、級数の合計は次の公式で表すことができます。Sn = (2n(n+1)(4n+17) + 54n) / 6この公式を使えば、各項を1つずつ足していく反復処理を行わなくても、O(1)の計算量で瞬時に合計を求められます。Nが大きくなっても高速に動作するのが大きなメリットです。実装例#include
-
級数 1 + 1/2² + 1/3³ + … + 1/nⁿ の合計を求めるC++プログラム
このチュートリアルでは、級数「1 + 1/22 + 1/33 + … + 1/nn」の合計を求めるC++プログラムについて解説します。 具体的には、値 n が与えられたときに、第1項から第n項までの各項を順番に足し合わせ、級数全体の合計を計算するのが目的です。 アルゴリズムの考え方 アプローチはシンプルです。1からnまでの各整数 i に対して「1 / ii」を計算し、その結果を合計用の変数に加算していきます。べき乗の計算には、math.h(C++では cmath)ヘッダーに含まれる pow() 関数を利用します。 サンプルコード #include <iostream> #inclu
-
C++で学ぶオブジェクト指向プログラミングの基本概念
オブジェクト指向プログラミング(OOP)とは、オブジェクトとクラスを中心にプログラムを構築する手法のことです。継承、ポリモーフィズム(多態性)、データ隠蔽など、現実世界の概念をモデル化しており、データとそのデータを操作する関数をひとつのまとまり(単一の実体)として結び付けることで、データへの不正なアクセスや利用を制限することを目的としています。オブジェクト指向プログラミングの基本概念は以下の6つです。クラス(CLASS)オブジェクト(OBJECTS)カプセル化(ENCAPSULATION)ポリモーフィズム(POLYMORPHISM)継承(INHERITANCE)抽象化(ABSTRACTION)
-
C++で学ぶ基本のグラフィックプログラミング入門
C++は汎用性の高いプログラミング言語です。C++を使えば、基本的な図形の描画、スタイリッシュなフォントによる文字表示、色付けといった初歩的なグラフィックスも作成できます。グラフィックプログラミングは、ターミナルやコマンドプロンプトから直接行うこともできますし、DevC++コンパイラをダウンロードして開発環境を整える方法もあります。graphics.hライブラリのインストールターミナルでグラフィックプログラミングを行う場合は、GCCコンパイラにgraphics.hライブラリを追加する必要があります。以下のコマンドを順番に入力してください。>sudo apt-get install bui
-
関係代数の基本演算子まとめ!選択・射影・直積・和・差・改名を例題付きで解説
関係代数(Relational Algebra)とは関係代数は手続き型問い合わせ言語の一つで、複数のリレーション(表)に対して演算を順次適用し、その結果として新しいリレーション(1つの表)を得るために用いられます。データベース理論の根幹をなし、SQLの動作を理解する上でも欠かせない重要な概念です。本記事では、次の3つのリレーション(表)を使用して、基本的な演算子を具体的に見ていきます。表1:course(コース)course_idname1コンピュータサイエンス2情報技術3機械工学表2:students(学生)出席番号名前住所年齢1Ramデリー182Rajuハイデラバード204Faizデリー2
-
シェルスクリプトの基本演算子まとめ|算術・関係・論理・ビット・ファイルテストを解説
シェル(Shell)とは、プログラマがコマンドを実行し、オペレーティングシステムと直接対話するためのインターフェースです。シェルスクリプトは、シェルに実行させたいコマンド群を記述したものを指します。 シェルにも変数があり、それらを操作するための演算子が用意されています。シェルスクリプトには、主に以下の5種類の基本演算子が存在します。 算術演算子(Arithmetic Operators) 関係演算子(Relational Operators) 論理演算子(Boolean Operators) ビット演算子(Bitwise Operators) ファイルテスト演算子(File Test Ope
-
ベル数とは?C++で集合を空でない部分集合に分割する方法の数を求める
ベル数(Bell number)とは、n個の要素からなる集合を、空でない部分集合(少なくとも1つの要素を含む集合)に分割する方法の総数を表す数です。本記事では、n個の要素からなる集合が与えられたとき、その集合を空でない部分集合に分割する方法が何通りあるかを求めるプログラムをC++で実装します。具体例入力 : 3 出力 : 5解説 − 3つの要素からなる集合 {1, 2, 3} を考えてみましょう。分割の仕方は次の5通りあります。{{1}, {2}, {3}}{{1}, {2, 3}}{{1, 2}, {3}}{{2}, {1, 3}}{{1, 2, 3}}ベル数の定義と漸化式ベル数 bell(
-
最良優先探索(Best First Search)とは?仕組みとアルゴリズムを解説
最良優先探索(Best First Search)は、次に訪問するノードを決定するグラフ走査手法の一つです。探索の各段階で「どのノードが最も有望か」を評価関数によって判断し、有望度の高いノードから順に訪問していきます。この手法は、ヒューリスティック探索(発見的探索)やインフォームド探索(情報に基づく探索)と呼ばれるカテゴリに分類されます。ゴールまでの距離やコストなどの追加情報を活用することで、無駄な探索を減らし、効率的に解を見つけられる点が特徴です。優先度付きキューによる実装最良優先探索では、各ノードのコスト(評価値)を優先度付きキュー(プライオリティキュー)に格納します。優先度付きキューは、
-
C++で2次元バイナリ配列の最良集合点(ベストミーティングポイント)を求めるアルゴリズムを解説
この問題では、0と1の値のみを持つ2次元バイナリ配列が与えられます。1はグループメンバーの家を表しています。グループのメンバーは集まって会合を開きたいと考えており、共通の集合場所へ移動する距離の合計を最小化する必要があります。集合場所はどこでも構いませんが、ただし誰かの家であることはできません。最小距離を求めるためには、「マンハッタン距離」と呼ばれる公式を使用します。2点間の距離は次のように定義されます。dist(p1, p2) = |p2.x − p1.x| + |p2.y − p1.y|概念をより明確にするために、具体例を見てみましょう。例入力: &nbs
-
C++で非連結グラフに対するBFS(幅優先探索)を実装する方法
非連結グラフとは非連結グラフ(disconnected graph)とは、グラフ内の1つ以上の頂点が他の頂点と辺でつながっておらず、どこかの頂点から出発しても到達できない頂点が存在するグラフのことです。このようなグラフは、複数の「連結成分(connected component)」に分かれている状態と捉えることができます。通常のBFSでは不十分な理由単純な幅優先探索(BFS: Breadth First Search)が正しく機能するのは、グラフが連結している場合、すなわちグラフ内のすべての頂点がある1つの頂点から到達できる場合だけです。非連結グラフでは、開始頂点から到達できない頂点が必ず存在
-
【C++】偶数・奇数の順序を保ちながら並べ替えて作れる最大の数
問題の概要 この問題では、数値の配列が与えられ、それらを並べ替えることで作れる最大の数を求めます。ただし、並べ替えには重要な制約があります。それは「偶数同士の相対的な順序」と「奇数同士の相対的な順序」は、元の配列のまま変更してはならないというものです。 具体例を使って理解を深めましょう。 入力 : {17, 80, 99, 27, 14, 22} 出力 : 801799271422 偶数と奇数の順序 : 偶数 : 80 14 22 奇数 : 17 99 27 この例では、配列内で最も大きい数は99ですが、奇数の順序では17が先に現れるため、99を先頭に置くことはできません。そこで、まず偶数の
-
C++で実装するバイナリ挿入ソート(二分挿入ソート)の解説とサンプルコード
バイナリ挿入ソートとはバイナリ挿入ソート(Binary Insertion Sort)は、挿入ソートの一種で、要素を挿入すべき正しい位置を探す際に二分探索(バイナリサーチ)を利用するソートアルゴリズムです。通常の挿入ソートは、配列内でその要素が属するべき位置を見つけ、そこへ要素を挿入していくことで整列を行う手法です。一方、二分探索は、配列の中央の値と比較しながら範囲を絞り込んでいくことで、目的の位置や要素を効率的に見つける探索手法です。二分探索の計算量は対数時間 O(log n) であるため、挿入位置の探索にかかる時間も線形探索から対数オーダーへと大幅に削減されます。ただし、要素のシフト処理自
-
C++で次の数値の2進表現を求めるアルゴリズムと実装方法
はじめにこの問題では、ある数値の2進表現が与えられ、その次の数値、すなわち与えられた数値に1を加えた結果の数値の2進表現を求めることが求められます。2進表現とは、数値の基数を2に変換し、0と1のみを用いて数値を表現することです。例えば、14の2進表現は「1110」です。ここでは、2進形式で表された数値nが与えられ、n+1の2進表現を求める必要があります。この問題を解くためには、2進数の加算の基礎を理解しておく必要があります。2進形式で0や1に1を加えるとどうなるかを見てみましょう。0 + 1 = 11 + 1 = 10具体例実際の例で問題の解き方を確認してみましょう。入力:010010111出
-
C++で1つ前の数値の2進表現を求める方法
この記事では、ある数値の2進表現が与えられたときに、そこから1を引いた結果となる「1つ前の数値」の2進表現を求める方法について解説します。2進表現とは2進表現(バイナリ表現)とは、数値の基数を2に変換し、0と1のみを使って数値を表す方法です。例えば、23の2進表現は 10111 となります。本記事の課題では、数値 n が2進形式で与えられ、n-1 の2進表現を求めることが目標になります。2進数の減算の基本この問題を解くためには、2進数の減算の基礎知識が必要です。2進形式で0または1から1を引くとどうなるかを見てみましょう。0 − 1 = 1(次の桁から1を借りる)1 − 1 = 0具体例以下の