PASCAL HACKS

今日は楽しい楽しい数Cの時間でした。で、今日の内容はWhile文だったのですが、課題があっという間に終わり暇していた俺は素数表示プログラムを書くことにしたのでした。

if文が無い

書こうと思ったはいいが、まだif文を習っていません。習っていない以上if文を使うことはできないでしょう。よってwhile文をif文の代用として使うというテクを使うことにしました。

とりあえずコード

何はともあれコードを乗せてしまおう


program prime;
var i, j, k : integer;
begin
j := 2;
while j <= 100 do begin
k := j;
i := 2;
while (k mod i) <> 0 do begin
i := i + 1;
end;

while i = k do begin
Writeln(i);
i := i + 1;
end;
j := j + 1;
end;
Writeln('end');
end.

まあこんなかんじ。要はwhileの論理条件部分をif文として使いたいわけで、そのためにはwhile文から一回ループしたら即抜けるようにしなければならない。具体的には条件部分に使用した変数の内容を適当に書き換え、一回ループしたら条件を満たさないようにしてやることで実現している。

ただし、適当に書き換えてしまった変数が多重ループのカウンタとして利用されていた場合は動作が不確定になってしまうので一時変数に退避するといった工夫も必要かもしれない。

このあと調子こいてテキストで円を表示するプログラムも書いたのだがコードを印刷するのを忘れた。何かオーバーフローとかに超悩まされたような記憶しかない。