読者です 読者をやめる 読者になる 読者になる

本履歴

購入した古本の履歴と時々プログラミング

続き

変数省略

ループカウンタの変数はループ内で使ってないなら省略できる。

var i,n:word;begin;...for i:=1to n do ...
var n:word;begin;...for n:=1to n do ...//ループ後、nはループ前のまま!

//ダメなケース
var i,n:word;begin;...for i:=1to n do write(n mod i);
var n:word;begin;...for n:=1to n do write(n mod n);//NG

//ループカウンタ省略+デクリメント
var n:word;begin;...for n:=0to n-1do ...//ついでにdec(n)も

//手続き内のローカル変数宣言
procedure f(n:word);
var i:word;
begin
  for i:=1to n do ...
end;

procedure f(n,i:word);//呼ぶときは、f(n,0)とする
begin
  for i:=1to n do ...
end;

エラーで停止

//レンジを超えて代入
var n:byte;m:word=256;begin;n:=m; //./a.out: value out of range (error #300 at 8049ee0)

//EOF後のreadln
var n:word;begin;repeat readln(n)... until 1=0end.

//出力精度
write(n div 42);
write(n/42:1:0);
write(n/42:1:1div n);//n=0の判定をMIX可

//文字列スライス
var s:string;begin;.. write(s[1..5]);//レンジを超えたらエラー
var s:string;begin;.. write(copy(s,1,5));//copyは空文字を返す

数値+予約語

for i:=1to n do ... //1とtoの間のスペースは省略可
for i:=1to 36#xyz do ... //36#xyzとdoの間のスペースは省略不可

//16進数リテラルは前の予約後にくっつけられる。後ろも予約後がa..fで始まらなければOKっぽい
var n:byte;begin for n:=$eto$f do write(n)end.

//2項演算は数値を前に
n mod 4
3and n

あと一回くらいでネタ尽きる。……だって、……だって。