この記事は Hello World あたたたた Advent Calendar 2025 の記事です。
今回は Pascal で「Hello World あたたたた」を実装して解説していきます。
そもそも「Hello World あたたたた」が何かは 1日目の記事 をご覧ください。
コーディング例
OnlineGDBで、実際に動かしてみることができます。
program Atatata;
{$APPTYPE CONSOLE} //for Delphi
uses
SysUtils;
var
hako: string;
running: Boolean;
char: string;
begin
Randomize;
hako := '';
running := True;
while running do begin
if Random(2) = 0 then char := 'あ' else char := 'た';
Write(char);
hako := hako + char;
if pos('あたたたた', hako) > 0 then begin
Writeln;
Writeln('お前はもう死んでいる');
running := False;
end;
end;
end.
実行例
コードと文法の解説
変数の宣言
Pascal はvar句に、型を明示して変数を宣言します。
var
hako: string;
running: Boolean;
char: string;
-
変数名:型名; - Pascal は、文の終わりに必ず
;が必要。
ただし、endの直前は省略できる
変数の初期化
Pascal は、変数の宣言と別に 初期化が必要です。
begin
hako := '';
running := True;
- 代入は
:= - 文字および文字列は
''で囲む
繰り返し(while)
条件が True の間ずっと処理を繰り返す。
while running do
// 繰り返したい処理
-
runningがTrueなら繰り返す - 条件が
Falseになったらループを抜ける - 複数の文を繰り返す場合は、
beginendで囲む
while running do begin
// 繰り返したい文1
// 繰り返したい文2
end;
条件判定(if / else)
普通にif文。
if x = 0 then
char := 'あ'
else
char := 'た';
-
=は「等しいかどうか」(代入ではない) -
if文は全体で1文のため、最後にだけ';'
文字の出力(Write)
Pascal の Write は改行しない、Writeln は改行する。
Write(char);
- 改行しない → 文字が横に並んで出力される
文字列の連結
Pascal の文字列は + でつなげられる。
hako := hako + char;
- 前の文字列に後ろの文字を追加する
文字列を含む判定
pos関数で 文字列にサブ文字列が始まる位置が求められる。
position := pos(substring, string)
- 含む場合
1以上の数値、含まない場合は0
if pos(substring, string) > 0 then
//含む場合の処理
else
//含まない場合の処理
乱数生成
Pascal はSysUtilsモジュールにRandom関数を持っている。
uses
SysUtils;
begin
Randomize; //乱数のランダマイズ
x := Random(2); // 0 or 1
-
Random(N)は N未満の整数をランダムに返す 関数 - この例では 0 → あ、1 → た という形で使用
Pascal について
Pascalは、1970年にスイスの計算機科学者ニクラウス・ヴィルト(Niklaus Wirth)によって開発された高水準のプログラミング言語です。プログラミング教育のためのツールとして設計され、構造化プログラミングの概念を広く普及させました。
歴史
- 起源(1960年代後半): ALGOL 60をベースに、より洗練された言語(ALGOL W)として構想されました。
- 誕生(1970年): フランスの数学者ブレーズ・パスカルにちなんで「Pascal」と命名され、最初のコンパイラが公開されました。
- 普及(1970年代〜1980年代): 大学での情報科学教育の標準言語となり、AppleのMacintosh用ソフトウェア開発やゲーム開発など、実用的な商用分野でも広く採用されました。
- 進化(1990年代以降): Object Pascalへと拡張され、Windows向けの統合開発環境「Delphi」の核となりました。2025年現在も、オープンソースの「Free Pascal」や「Lazarus」を通じて、マルチプラットフォーム開発に活用されています。
主な特徴
- 構造化プログラミングの推進: if-then-elseやwhileなどの制御構造を重視し、論理的で読みやすいプログラムを書くことを促します。
- 厳密な型付け(Strong Typing): 変数の型を明示的に宣言する必要があり、誤ったデータの代入をコンパイル時に検知できるため、信頼性の高いコード作成が可能です。
- 高い可読性: 文法が整理されており、英語の文章に近い記述が可能です。これは初心者がプログラミングの基本概念を学ぶのに非常に適しています。
- 効率的なコンパイル: 構文がシンプルなためコンパイル速度が速く、かつてのリソースが限られたコンピュータ環境で大きな利点となりました。
- 豊富なデータ型: 基本的な数値型のほか、列挙型、部分範囲型、レコード型など、複雑なデータを整理するための多彩な型をユーザーが定義できます。
2024年初頭に開発者のニクラウス・ヴィルト氏が逝去しましたが、彼がPascalに込めた「シンプルで規律ある設計思想」は、Ada、Modula-2、Javaなど多くの後継言語に多大な影響を与え続けています。
個人的なコメント
自分が初めて触れた高級言語は Fortranで、その次が Pascalでした。当時、Turbo Pascal(Delphi)で Windowsアプリ/ツールをたくさん作りました。
