C++で作る「ハッピー・ウィメンズデイ」出力プログラム
世界中でお祝いされる「女性の日」。この記事では、その祝福メッセージをC++のコンソールプログラムとして出力する方法をご紹介します。記号「#」で描かれた円の中央に「7 Oct」と「Happy Women's Day」の文字列を表示し、さらにその下にはアスタリスク(*)でリボンのような模様を描く構成になっています。
サンプルコード
#include <iostream>
using namespace std;
int main(){
// デザインのサイズを初期化
int n = 5;
// 円(デザインの上半分)を描画するループ
// 外側のループで高さを制御
for (int i = 0; i <= 2 * n; i++) {
// 内側のループで幅を制御
if (i == n)
cout << " " << "7 Oct";
for (int j = 0; j <= 2 * n; j++) {
// 各点から中心までの距離を計算
float center_dist = sqrt((i - n) * (i - n) + (j - n) * (j - n));
if (center_dist > n - 0.5 && center_dist < n + 0.5)
cout << "#";
else
cout << " ";
}
// Happy Women's Day を表示
if (i == n)
cout << " " << "Happy Women's Day";
cout << endl;
}
// 下半分(リボン部分)を描画するループ
// 外側のループで高さを制御
for (int i = 0; i <= n; i++) {
// パターンの位置調整
// 横線を表示するためのループ
if (i == (n / 2) + 1) {
for (int j = 0; j <= 2 * n; j++)
if (j >= (n - n / 2) && j <= (n + n / 2))
cout << "*";
else
cout << " ";
}
else {
for (int j = 0; j <= 2 * n; j++) {
if (j == n)
cout << "*";
else
cout << " ";
}
}
cout << endl;
}
}
プログラムのポイント
円を描く仕組みはとてもシンプルです。各座標点 (i, j) と中心との距離を三平方の定理(ピタゴラスの定理)を使って計算し、その距離が半径 n の前後 ±0.5 以内であれば「#」を出力します。これにより、文字だけのターミナル上でも滑らかな円を表現できます。下半分のリボン部分は、縦線を描く処理と横線を描く処理を条件分岐で切り替えることで実現しています。
実行結果
上記のコードをコンパイルして実行すると、次のような出力が得られます。

-
C++で十二面体の表面積を計算するプログラム
十二面体とは? 「十二面体(dodecahedron)」という言葉は、ギリシャ語に由来しています。「dodeca」は「12」、「hedron」は「面」を意味します。幾何学における十二面体とは、12枚の平面から構成される3次元の正多面体(プラトンの立体)のことです。 他の立体図形と同様に、十二面体にも以下のような特徴的な性質があります。 20個の頂点 30本の辺 12枚の正五角形の面(五角形は5つの辺を持つ多角形) 以下は十二面体の図です。 問題 一辺の長さが与えられたとき、その十二面体の表面積を求めるプログラムを作成します。ここでいう表面積とは、図形のすべての面が占める空間の総面積のこ
-
C++で学ぶクイックソート(QuickSort)の仕組みと実装方法
クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率