1.読み込み、四則演算、結果の出力 _______________________________________ プログラムの形 -------------- program name(input,output); {name:プログラム名 input:データ入力をする} output:データ出力をする} var a,b,c: integer; {変数宣言 integerは整数型} begin {動作を示す文(ブロック)の開始} read(a,b); {キーボードから入力 文と文の間は「;」で区切る} writeLn(a,b); {データを出力して改行する} c := a+b; {加算(+)  代入は「:=」で行う} c := a-b; {減算(-)} c := a*b; {積算(*)} c := a div b; {整数の除算(div) 実数の除算は「/」を使う} c := a mod b {整数の剰余(mod) 実数で余りを出すには式を使う} end. {動作を示す文(ブロック)の終了}                {プログラムの終わりに「.」を付ける} 整数型(integer) ---------------  小数点のない数字の列。範囲は-2147483648〜2147483647。(C言語のlong型と同じ)  16進数を使う時には、前に「$」を付ける。範囲は$00000000〜$ffffffff。 Pascalで使える文字 ------------------ 英字  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 数字 0 1 2 3 4 5 6 7 8 9 特殊記号 + - * / = < > [ ] . , : ; ↑ ( ) < > <= >= := .. and array begin case const div do downto else end file for function goto if in label mod nil not of or packed procedure program record repeat set then to type until var while with (Delphiでは _ も可)  処理系によって使えない文字がある時には、代用表現で置き換える事が可能    基準表現  代用表現      ↑ @ [ (. ] .) { (* } *)  名前:プログラムや変数などを表すのに名前を用いる。     英字で始まり、英字と数字の列で構成。(Delphiでは _ も使用可)     文字数は 16文字まで判別。 (Delphiでは 63文字まで)     予約語(特殊記号の綴り記号)は使ってはいけない。     途中に、空白や改行があってはダメ。(空白や改行は分離符(separator)の為) 三角形の面積を計算しよう ------------------------  三辺の長さが与えられた三角形の面積は、ヘロンの公式を用いて計算出来る。 __________________    area = V s(s-a)(s-b)(s-c) s = (a+b+c)/2 program triangle(input,output); var a,b,c,s,area: real; {変数宣言 real は実数型} begin read(a,b,c); {入力 a,b,c} writeLn(a,b,c); {出力 a,b,c} s := (a+b+c)/2.0; {計算 実数計算なので定数も実数にしておく} area := sqrt(s*(s-a)*(s-b)*(s-c)); {平方根の関数は sqrt()} writeLn(area) end. 実数型(real) ------------  有効桁数16桁以内で、その絶対値が0か,10^-78〜10^75の範囲にあるもの。  数字列の途中に小数点「.」を置くか、指数表現(1E6 , 0.123E-10等)にする。 変数の宣言 ----------  プログラムで使用する変数は、すべて使用する前に、その名前と型を変数宣言部で  宣言しなければならない。 var 変数名,・・・,変数名:型名; ・・・ 変数名,・・・,変数名:型名; 2.繰り返し _______________________________________ for文 -----  for 制御変数:=初期値 to 終値 do ・・・  制御変数の値を初期値から始めて、1ずつ増やしながら終値になるまで  ・・・ を繰り返す。  ・・・ は1文だけなので、2文以上にする時には、begin〜end で複合文にする。  for 制御変数:=初期値 downto 終値 do ・・・  制御変数の値を初期値から始めて、1ずつ減らしながら終値になるまで  ・・・ を繰り返す。  何回繰り返すかわかっている場合に利用する。 定数宣言 --------  プログラムで使用する定数名は、すべて使用する前に、その名前とそれが表す値とを  定数定義部で定義しておかなければならない。  const 名前=定数; ・・・; 名前=定数;  定数定義部は変数宣言部よりも前になければならない。 while文 -------  while 条件式 do ・・・  条件式を評価し、その結果が真(true)であれば、・・・を実行し、  再び条件式を評価しその結果が真であれば・・・ と、 結果が偽(false)になるまで繰り返す。  ・・・ は1文だけなので、2文以上にする時には、begin〜end で複合文にする。 関係演算子 ----------  = a = b a と b は等しい  <> a <> b a と b は等しくない <= a <= b a は b より小さいか等しい < a < b a は b より小さい > a > b a は b より大きい >= a >= b a は b より大きいか等しい 二項演算子 ---------- 演算子 演算 被演算子の型  結果の型  ----------------------------------------------------------------------------- + 加算 整数型,実数型 両方被演算子が共に整数型の時,整数型。以外,実数型。 - 減算 整数型,実数型 両方被演算子が共に整数型の時,整数型。以外,実数型。 * 乗算 整数型,実数型 両方被演算子が共に整数型の時,整数型。以外,実数型。 / 除算 整数型,実数型 実数型 div 除算 整数型 整数型 mod 剰余 整数型 整数型 代入文 ------  変数 := 式  変数が実数型の時には、式の値は実数型でも整数型でもよいが、  変数が整数型の時には、式の値は整数型でなければならない。   変換関数    trunc(e) 実数型の値になる式eの値の小数点以下を切り捨て、整数部を取り出す    round(e) 式eの値を四捨五入してeの値に最も近い整数型の値にする repeat文 --------  repeat ・・・; ・・・; ・・・ until 条件式  repeatとuntilの間の文の列(begin〜endは必要無し)を、  条件式が真になるまで繰り返し実行する。  文の列は、必ず1回は実行される。  (※C言語の do〜while()とは逆なので注意!!) 算術演算の標準関数 ------------------  関数   意味   引数xの型  関数値の型 ---------------------------------------------  abs(x)  絶対値  整数型    整数型 実数型    実数型  sqr(x)  平方   整数型    整数型            実数型    実数型  sqrt(x) 平方根  整数型(x>=0) 実数型            実数型(x>=0)  //  ln(x) 自然対数 整数型(x>0) 実数型            実数型(x>0) //  exp(x) 指数   整数型 実数型            実数型 //  sin(x) 正弦 整数型[rad] 実数型            実数型[rad] //  cos(x) 余弦   整数型[rad] 実数型            実数型[rad] //  arctan(x) 逆正接  整数型 実数型[rad]            実数型 // --------------------------------------------- 3.選択 _______________________________________ if文 ----  if 条件式 then 文  もしも条件式が真ならば 文を実行する。  文は1文だけなので、2文以上にする時には、begin〜end で複合文にする。  if 条件式 then 文1 else 文2  もしも条件式が真ならば 文1を実行し、         偽ならば 文2を実行する。  文は1文だけなので、2文以上にする時には、begin〜end で複合文にする。 論理演算子 ----------  not 否定   not b1 b1が真ならば偽、b1が偽ならば真  and 論理積  b1 and b2 b1,b2がともに真のとき真、その他は偽  or 論理和  b1 or b2 b1,b2がともに偽のとき偽、その他は真 論理関数 --------  論理値を返す関数。  odd(x) xが奇数のとき真、偶数のとき偽を返す関数 演算子の優先順位 ----------------  (1) not  (2) 乗法演算子 *,/,div,mod,and  (3) 加法演算子 +,-,or  (4) 関係演算子 =,<>,<,<=,>,>=  順序を明確にしたいときには、括弧 ( , ) を使う 4.配列 _______________________________________ 配列変数宣言 ------------  var a: array [1..1000] of integer;  これにより、整数型変数 a[1] , a[2] , ... , a[1000] が使用出来るようになる。  これは、    const maxN = 1000;    var a: array [1..maxN] of integer;  としても可。  添字の取り得る値は、「下限..上限」のように書く。 部分範囲型 ----------  下限..上限  整数型のような順序型の値の、限られた範囲の値しか取らない変数があるときは  上限、下限の定数で指定することが出来る。    var N: 1..1000; など 2次元配列 ----------  var a: array [1..maxX,1..maxY] of real;  変数として、a[1,1], a[1,2], a[1,3], ・・・, a[1,maxY] , ・・・ , a[maxX,maxY] が  使用出来る。 論理型 ------  真(true)か偽(false)かのいずれかの真理値をとる型。  標準の定数名 true 及び false で表される。(false < true)  変数宣言では、 var a: Boolean; のように記述する 型定義 ------  型名=型表記 型表記 ------  type 型定義; ・・・; 型定義;  type index = 1..9;  var a: array[index] of integer; i,j: index;  のように出来る  ※ 配列は型が同じであれば、丸ごと代入できる      a: array [1..10] of integer; b: array [1..10] of integer;    ではダメだが、      a,b: array [1..10] of integer;     又は、      type vector = array [1..10] of integer;      var a,b: vector;    の場合には、      a := b    で丸ごと代入する事が出来る 5.関数 _______________________________________ 関数宣言(function) ------------------  function 関数名(仮引数の宣言;・・・;仮引数の宣言): 結果の型  ブロック(定数定義部,型定義部,変数宣言部,手続き関数宣言部,実行文部)  関数は、ある機能としてまとめる際に利用する。  ある計算等を行い、結果の値を返す事が出来る。その場合には、「関数名」を変数  とみたてて代入する。  仮引数並びや関数ブロック内で宣言や定義した名前は、その関数ブロック内でのみ  有効である。(局所的(local))  関数ブロック内に、更に関数宣言する事も出来る。(入れ子)  この場合、外で有効だった名前は、そのブロック内でも有効となる。  仮引数に、関数引数も使える。一般形は以下の通り。    function 関数名(仮引数の宣言;・・・;仮引数の宣言): 結果の型  例:function sample(function f(t:real): real; a,b: integer): real;  関数引数の仮引数がない(指定しない)場合には、function f:real となる。 関数呼出し(function designator)では、宣言と同じ型・個数・順序で指定する。 列挙型(enumeration type) ------------------------  (名前,・・・,名前)  各名前は定数名。先頭から順に、0,1,2,・・・と整数型の順序数が与えられる。    例:type weekday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat);  関係演算子(<,<=,=,<>,>=,>)は使用出来る。  列挙型の値には以下の標準関数が適用出来る。    ord(x) xの順序数。結果は整数型。 ord(Sun)は0、ord(Thu)は4を返す。    pred(x) xの前者(predecessor),xよりも対応する順序数が1だけ小さい値。     結果は列挙型。 pred(Tue)はMonを返す。 pred(Sun)は誤り。    succ(x) xの後者(successor),xよりも対応する順序数が1だけ大きい値。         結果は列挙型。 succ(Thu)はFriを返す。 succ(Sat)は誤り。 case文 ------  case 式 of   定数,・・・,定数: 文;      ・・・ ;   定数,・・・,定数: 文 end  式を評価し、その値と一致する定数の右側にある文が実行される。  選択式と選択定数は同じ型でなければならない。  同じ値を表すものが2つ以上あってはならない。  選択式の値が、選択定数のうちのどれか1つと等しくなければならない。 write(),writeLn()引数 ---------------------  e  e:式 e:width width:出力する桁数  式のみの場合の基準値(default) eの型   widthの基準値 -----------------------    整数型    12    実数型    20    論理型    10    文字列型   要素数  整数型:10進数で表現。負の場合にはマイナス記号も含める。      LENwidth: 文字数が収まるように欄の幅が広がる  実数型:符号,1桁,小数点,1桁,'E',指数部符号,指数部2桁,の最低8桁が出力。      LEN 5: 'TRUE' or 'FALSE' 前に余分な空白が付く  文字列型:文字列を出力。      LENwidth: 第1文字目から第width文字目までを出力 6.手続き _______________________________________ 手続き(procedure) -----------------  procedure 手続き名(仮引数の宣言;・・・;仮引数の宣言)  ブロック  手続きは、関数と同様、ある機能としてまとめる際に利用する。結果値は返さない。  手続き宣言部は変数宣言部の後で、実行文部の前になければならない。 手続き呼出し文(procedure statement)では、宣言と同じ型・個数・順序で指定する。 変数引数(var) -------------  変数引数仕様(variable parameter specification)    var 名前,・・・,名前:型名  元のプログラムより値を受け継ぎ、値を操作後、そのまま値を返す。  これにより複数の値を返す事が出来る。 例:procedure sample(var a: real; k,l: integer; var s: integer); 名札(label) -----------  名札宣言部(label declaration part)    label 名札,・・・,名札;  名札宣言部は、ブロックのどの宣言部よりも前になければならない。  そのブロックの中の文の、どれかに付ける。ブロック内の手続きや関数内にはダメ。  名札は、0から9999までの数字列。名札の後には : を付けて指定する。 goto文 ------  goto 名札  goto文は、それ以降の処理を続けるプログラム内の位置を指定するための文。  if文,while文,repeat文,for文の中の文に付けられたものであってはならない。  (外側へのジャンプは良いが、内側へのジャンプはダメ) 文 --  単純文 : 代入文、手続き呼び出し文、goto文、空文(何もしない)  条件文 : if文、case文  繰返し文: repeat文、while文、for文  構造文 : 複合文(begin〜end)、条件文、繰返し文、with文 7.文字、文字列、集合 _______________________________________ 文字 ----  文字は、'と'で囲まれる。  処理系内部ではコード化されている。ASCII,JIS,EBCDIC etc.  文字型は順序型である。  文字の大小順序     'A'<'B'<・・・<'Z'     'a'<'b'<・・・<'z' '0'<'1'<・・・<'9'     空白' 'は、これらよりも小さい ファイル --------  Pascalでは、同じ型の要素の列からなる構造をファイル(file)と呼ぶ。  ファイル型(file type)   :同じ型の要素の列  テキストファイル(textfile):要素が文字であるファイル    論理関数 eoln :テキストファイルには、1行の終りを示す行末の印(end of line          component)があるが、空白として読み込まれてしまう。          これは、空白か行末の印かを区別するための標準の論理関数。  論理関数 eof :ファイルの終わりに達したかどうかを調べる標準の論理関数。 文字型(character type) ----------------------  型名:char  文字型の値とは、文字1字を値として取る。  文字型の定数:文字1文字をアポストロフィで囲んだもの。'a' , 'B' , '0' etc         アポストロフィそのものは、'''' である。 集合型(set type) ----------------  set of 基底型  集合型は、ある型の値の部分集合を値とする型。  もとになる型を基底型(base type)という。基底型は順序型でなければならない。  例:var letter: set of alphabet; 集合 ----  集合は、基底型の     式 または 式..式  の形(要素表記)をコンマで区切って並べ、全体を [ と ] でくくって表す。  [] は要素が1つもない集合つまり空集合を表す。  例:letter := ['A'..'Z'] 集合型に対して使用出来る関係演算子 ----------------------------------  = <> 等しい、等しくない  <= >= 包含関係 a <= b : aがbに含まれている事を表す  in 要素関係 e in T : eがTの要素であるとき真、要素でないとき偽 集合演算子 ----------  + 和集合  - 差集合 * 共通部分 順序関数(ordinal function) --------------------------  ord(x) 順序型の式xを引数として取り,xの値の順序数を結果として返す。        結果の型は整数型。 (対応しているコード体系のコード値を返す)  chr(x) 整数型の式xを引数として取り,その順序数に対応する文字を返す。        結果の型は文字型。 文字列型(string type) ---------------------  要素の型が文字型である配列型を詰め込み、おのおのの要素の文字を切れ目なく  つないだものを文字列型という。添字の型は下限が1で上限は1より大きい部分範囲型  例:type string = packed array [1..maxLength] of char  packed は、記憶域を節約するように詰め込み指示を行う。(ただし速度低下する) 配列 ----  以下は同じ配列型を示す。     array [1..5,-10..10,index] of integer array [1..5,-10..10] of array [index] of integer array [1..5] of array [-10..10,index] of integer array [1..5] of array [-10..10] of array [index] of integer  また、以下の同じ。 packed array [1..10,index] of char packed array [1..10] of packed array [index] of char 8.レコード、ポインタ _______________________________________ レコード型(record type) -----------------------  record    欄名,・・・,欄名: 型表記; ・・・ ; 欄名,・・・,欄名: 型表記 end  いくつかの型のデータを一組にまとめたものをレコード型という。    レコード要素:「欄名,・・・,欄名: 型表記」    欄の並び  :recordとendの間に指定するもの    固定部   :レコード要素1つか、2つ以上をセミコロンで区切って並べた物 型表記(type denoter) --------------------  integer,real,Boolean,charといった標準の型名、型定義により定義した型名、  列挙型"(名前,・・・,名前)"、部分範囲型"定数..定数"、  配列型"array [添字の型,・・・,添字の型] of 要素の型"、集合型"set of 順序型"、  レコード型"record 欄の並び end"、  のように基本的に書き下した型など、型を示すために書くものを型表記という。 レコード変数(record variable) -----------------------------  レコード型を値としてとる変数を、レコード変数という。  各欄は、点記法(dot notation)と呼ばれる表記法を用いる。    pay[i] の customNo欄 は pay[i].customNo    pay[i] の date欄 の day欄 は pay[i].date.day    欄表記:レコード型の変数の要素である欄を書き表したもの with文 ------  with レコード変数 do 文  with レコード変数,・・・,レコード変数 do 文  with文は、withの後のレコード変数に対して、文内では、その欄名だけを指定する  だけでその欄名の前に「レコード変数.」を指定したのと同じことを意味する。  この時の欄名を欄表記名(field designator identifier)という。    例:var a: record i,j: integer end; b: record i,k: integer end;    のとき with a do      with a,b do i := j → with b do    は、 i := j      b.i := a.j    を意味する。  欄表記名をfor文の制御変数として用いる事は出来ない。 リスト構造(list structure) --------------------------  リスト構造とは、要素に、その要素をつなぐための欄(つなぎ欄(link field))を  加え、それを用いて要素をつなぎ合わせたデータ構造。  1列につないだものを線形リスト(linear list)という。  つなぎ欄のとり得る値の型を、ポインタ型(pointer type)、  ポインタ型の値をとる変数を、ポインタ変数(pointer variable)、といい、  その値をポインタ(pointer)という。  ポインタが実際に何かを指しているときその値を指示値(identifying value)という。  ポインタが何も指していないことを表すのに、値 nil を用いる。  ポインタ変数は、その値で指す変数の型をあらかじめ決めておく必要がある。  この型を、被指示型(domain type)という。  指示値が指し示す変数を対象変数(referenced variable)という。  指示値と対象変数は、標準手続き new でしか作る事が出来ない。  作りだした変数は、 標準手続き dispose で消滅させることができる。  これらの変数を、動的変数(dynamic variable)という。    例:type ptr = ↑item ; {リスト構造なので自分自身のポインタを示す} item = record next: ptr; {次へのポインタを示す} word: real; {データ} end;  ポインタ型の定義の被指示型だけは、その型名の定義よりも先に現れてもよい、と  いう例外が設けられています。  実際にポインタ変数が指している対象変数は、p を ptr型のポインタ変数とすると  (var p:ptr;の時)、「p↑」で表す。 標準手続き new と dispose -------------------------  new(p)    p はポインタ変数。p の被指示型をもつ対象変数を新たに作りだし、  この対象変数を指す指示値を p に与える。  dispose(q)    q はポインタ変数。作りだした対象変数を指す指示値をそのポインタ型から消去する。 9.再帰 _______________________________________ 再帰呼び出し(recursive function) --------------------------------  再帰呼び出し:手続きや関数では、その中で自分自身を呼び出す事が出来る。  停止条件  :最終的に、再帰呼び出しを行わなくなる条件を設定する必要がある。  例:整数の出力    (1) nが10以上かどうか調べる    (1.1) 10以上であれば n←n div 10 として再び(1)に行く     (1.2) 9以下であれば(2)へ行く    (2) n mod 10 を出力する    procedure outputPositiveNumber(n: integer); begin if n > 9 then outputPositiveNumber(n div 10); write(n mod 10:1) end 10.ファイル _______________________________________  ファイル:プログラムで処理した結果を、以後の処理に備えて、磁気ディスク装置       あるいは磁気テープ装置といった外部記憶装置に、名前を付けて保存して       おいたり、大量のデータを処理するのに利用する。  順ファイル(sequential file):先頭から順番にしかアクセス出来ないファイル。       読むか書くかのいずれかしか出来ない。モード(mode)で区別する。  検査モード(inspection mode):読み込み可状態  生成モード(generation mode):書き込み可状態  出力ファイルとして出力し始める際には、要素が1つもない状態から始める。  ファイル変数:個々のファイル名はファイル型(file type)の変数として宣言する。  バッファ(buffer):ファイルの要素の型をもつ記憶場所。       ファイル変数↑ でアクセスでき、これをバッファ変数という。       ファイルの入出力は、このバッファ変数を介して行う。  実際には、更にジョブ制御文を作成して定義しなければならない。 ファイル型(file type) --------------------- file of 要素の型  例:program merge(inFile1,inFile2,outFile,output);    var inFile1,inFile2,outFile: file of integer; 標準手続き reset ---------------- reset(f) f:ファイル変数  ファイルfを先頭に位置するように設定し、最初の要素をバッファ変数 f↑に読み込む  ファイルfのモードは「検査」になり、eof(f)はfalseになる  入力ファイルを扱う時は、まず最初にこの手続きをしなければならない。 標準手続き rewrite ------------------ rewrite(f) f:ファイル変数  ファイルfを空にする。 f↑は全面的不定となるので注意  ファイルfのモードは「生成」になり、eof(f)はtrueになる  出力ファイルを扱う時は、まず最初にこの手続きをしなければならない。 標準関数 eof ------------ eof(f) f:ファイル変数  ファイルfの空でない最後の要素を越えたとき true 、そうでなければ falseを返す  ファイルfが空のときには常にtrueである 標準手続き get -------------- get(f) f:ファイル変数(検査モード)  eof(f)がfalseの時、ファイルfの次の要素を f↑に読み込む  次の要素が存在しなければ f↑は全面的不定となり、eof(f)はtrueとなる 標準手続き put -------------- put(f) f:ファイル変数(生成モード)  eof(f)がtrueの時、f↑の値をファイルfの最後に追加する  eof(f)はtrueのまま変わらない 標準手続き read , write -----------------------  read(f,v1,v2,・・・,vn) write(f,p1,p2,・・・,pn)  f:ファイル変数 v1,v2,・・・,vn:変数(文字型/整数型/実数型) p1,p2,・・・,pn:e、e:totalWidth、e:totalWidth:fracDigits =============================================================================== Object Pascal =============================================================================== 型宣言 ------  型→単純型    文字列型    構造化型    ポインタ型    手続き型    クラス参照型    型名  単純型 --+-- 順序型 --+-- 部分範囲型 | +-- 列挙型 | +-- 順序型名 --+-- Integer -32768〜32767 | +-- Shortint -128〜127 | +-- Longint -2147483648〜2147483647 | +-- Byte 0〜255 | +-- Word 0〜65535 | +-- Cardinal 0〜65535 | +-- Boolean 1byte 0(False) 1(True) | +-- ByteBool 1byte 0:False 他:True | +-- WordBool 2bytes 0:False 他:True | +-- LongBool 4bytes 0:False 他:True | +-- Char 1文字のASCII文字 | 範囲 有効桁数 サイズ +-- 実数型 --+-- Real 2.9e-39〜1.7e38 11 - 12 6 +-- Single 1.5e-45〜3.4e38 7 - 8 4 +-- Double 5.0e-324〜1.7e308 15 - 16 8 +-- Extended 3.4e-4932〜1.1e4932 19 - 20 10 +-- Comp (-2の63乗)+1〜(2の63乗)-1 19 - 20 8  順序型では次の標準関数が利用可    Ord(x) xの順序数を返す Pred(x) xの前者の値を返す Succ(x) xの後者の値を返す Low(x) 順序型の範囲内で最下位の値を判定する(最低値を返す) High(x) 順序型の範囲内で最上位の値を判定する(最高値を返す)  値型キャスト    値型キャストにより、式の型が別の型に変わります。順序型orポインタ型      型名 → ( → 式 → ) →  変数型キャスト    変数型キャストにより、ある型の変数参照が別の型の変数参照に変わります。      型名 → ( → 変数参照 → ) →      変数参照 → as → 型名 →  実数型の Single,Double,Extended,Comp は、80x86浮動小数点モデルでのみ可。  ソフトウェア浮動小数点モデルではエラーになる(Realのみ可能)。  文字列型    文字列型は予約語 string を使って宣言する。      string → → [ → 符号なし整数 → ]    定数の最大サイズは 1 から 255 。(指定しない場合は 255)    各文字へアクセスする場合には、インデックス番号(1〜)を使う。    + = <> < > <= >= の演算子が使用可。    次の標準関数が利用可。 Length(s) 文字列 s の長さを返す      High(s) 文字列の宣言されたサイズを返す Low(s) 0を返す  構造化型 --+-- 配列型 → array → [ → 添字型 → ] → of → 型 → +-- ファイル型 → file { → of → 型 } → +-- オブジェクト型 → class{→ヘリテージ}{→リスト}→ end → +-- レコード型 → record{→フィールドリスト}→ end →        +-- 集合型 → set of → 順序型 →  構造化型は1個以上の値を保持する。ネスト可能。最大サイズは 65520 Bytes。  型の前に「packed」指定可能。  ポインタ型    ポインタ型は基本型の変数をポイントする値です。ポインタ型の変数には変数の    メモリアドレスが保持されます。      ポインタ型 → ^ → 基底型 →    ポインタ変数には次の手続きまたは関数を使って値を代入できます。      New(p) アプリケーションヒープに動的変数のための新しいメモリ領域を          割り当て、その領域のアドレスをポインタ変数に格納する      @演算子 すでに識別子を持っている変数を含めて、既存の変数が手続きか          関数のエントリポイントを保持しているメモリ領域をポインタ変数          が指し示すようにする      Ptr() ポインタ変数を特定のメモリアドレスに向ける p = Ptr(seg,off) GetMem()指定されたサイズの新しい動的変数を作成し、そのブロックの          アドレスをポインタ変数に置く    予約語 nil はポインタ値を表す定数で、何もポイントしていないことを意味する  手続き型    手続き型を使うと手続きや関数を変数に代入し、それらをパラメータとして渡す    ことが出来ます。      手続き型 → procedure {→仮引数リスト}→ → function {→仮引数リスト}→ : → 結果の型 →    手続き型宣言で使うパラメータ名は、宣言内容に対して特別な意味を持たない。    手続き型の値を返す関数は宣言できない。ただし、Pointer型の関数結果を使って    手続きまたは関数のアドレスを返し、その後手続き型に型キャストできる。    関数結果は、文字列・実数・整数・char・論理・ポインタ・列挙 のみ可能。  オブジェクト参照型    オブジェクト参照型(クラス参照型)は、予約語 class of にクラス名を続けた    シーケンスを使って定義する。オブジェクト参照型の変数は実行時に設定でき、    宣言で指定されたクラスまたはその下位クラスを参照できる。      クラス参照型 → class of → オブジェクト型名 →  (構造化型)オブジェクト型    オブジェクト型は決められた個数のコンポーネントからなる構造です。    コンポーネントとして可能なクラスは次のものです。      ・フィールド  特定のデータ型のインスタンス      ・メソッド   オブジェクト型宣言内で宣言される手続きまたは関数      ・プロパティ    他の型とは異なり、オブジェクト型はプログラムまたはユニットの最も外側の    スコープの型宣言部でだけ宣言できる。      オブジェクト型 → class {→ヘリテージ}{→コンポーネントリスト}→ end → {↑可視性リスト↓}      可視性指定子 → published → public protected private      ヘリテージ → ( → オブジェクト型名 → ) →      コンポーネントリスト{→フィールド定義}{→メソッド定義} →                          {→プロパティ定義}      フィールド定義 → 識別子リスト → : → 型 → ; →      メソッド定義 → メソッド頭部 → ; → メソッド指令 →      メソッド頭部{→class}→手続き頭部→ →関数頭部 → → コンストラクタ頭部 →            → デストラクタ頭部 →      メソッド指令{→virtual;} {→cdecl;}{→export;}{→abstract;}            {→dynamic;}             {→message→整数定数;}    オブジェクト型は別のオブジェクト型からコンポーネントを継承できます。    継承は推移します。T3がT2を継承、T2がT1を継承 → T3はT1を継承    下位クラスは上位クラスによって定義された全てのコンポーネントを無条件に    含みます。下位クラスは新しいコンポーネントを追加出来ます。(削除は不可)    定義済みのオブジェクト型 TObjectは全てのオブジェクト型に対して最上位の    オブジェクトです。全てこれから派生されます。    オブジェクト型はすべての上位オブジェクト型と代入の互換性があります。 手続き(Procedure) -----------------  手続き宣言 → 手続き頭部 → ; → サブルーチンブロック → ; →  手続き頭部 → procedure → 識別子 {→仮引数リスト}→              → 限定メソッド名  サブルーチンブロック{→near;} →→ ブロック →            {→far;} → external 指令 {→export;} → asm ブロック {→interrupt;} → forward            {→ inline指令 }    手続きを使うと、メインプログラムブロック内に別のブロックをネストさせる事    が出来ます。手続き文で実行されます。 関数(Function) --------------  関数宣言 → 関数頭部 → ; → サブルーチンブロック → ; →  関数頭部 → function → 識別子 {→仮引数リスト}→ : → 結果の型             → 限定メソッド名  結果の型 → 型名 → → string    functionは値を計算して返すブロックを定義します。 単純型、複合型など、古いスタイルのオブジェクト、テキスト型のファイル    またはfile of型のファイルを除いて、どの型も返せる。    オブジェクト型を返すには、オブジェクトポインタを使用する。    返り値は、関数の名前、または Result変数に代入する事で返せる。 exports節 ---------  予約語 exports は DLL(ダイナミックリンクライブラリ)内で使い、DLLによって  エクスポートされる手続きと関数を示します。 文字列 ======  文字列 → 引用符付き文字列 → → 制御文字列 ↓ ↑←←←←←←←←←  文字列は単引用符(’)で囲んで1行で書きます。最大 255文字。  #文字の後に 0 から 255までの符号無し整定数を続けると、対応するASCII値の文字が  表される。複数の制御文字を入れる場合にはセパレータを入れてはいけない。 '' ... ヌル文字列 '''' ... 「'」 コメント ========  コードのブロックの用途がわかるようにしたいときに、説明のためのコメントを  中カッコ({ 〜 })またはアスタリスクとカッコ((* 〜 *))で囲んで挿入する。  1行の最大長は 126 文字なので注意。 コンパイラ指令 ==============  コンパイラ指令を使うとコンパイラのデフォルトの動作をカスタマイズできます。  特別な構文を持つコメントで、コメントを記述出来る場所ならどこでも使用可。  ほとんど[オプション(O)|プロジェクト(P)]で指定出来るもの。 定数宣言 ========  定数は変更できない値を表す識別子。定数宣言 → 識別子 → = → 定数 → ; →  定数は予約語の const を使って宣言する。 ダイナミックリンクライブラリ(DLL) ======================================  ダイナミックリンクライブラリ(DLL)は他のDLLまたはアプリケーションによって使わ  れるコードやリソースが入った実行可能モジュール(拡張子.DLL)です。  Windows環境では、DLLにより複数のアプリケーションがコードやリソースを共有でき  ます。  .DLLファイルは実行時にアプリケーションと同じディレクトリにないといけません。 例外処理 ========  Delphiは堅固なアプリケーションを作成する機構を備えており、作成したアプリケー  ションはエラーを一貫した方法で処理するため、アプリケーションは可能ならエラー  から回復し、必要ならばシャットダウンを実行でき、データとリソースも失われない。 識別子 ======  識別子には大文字と小文字の区別はありません。  長さは任意だが、意味のあるのは最初の63文字だけ。  英字または下線記号(_)で始めなくてはならない。  2文字目以降には、英字、数字、下線記号のいずれかを使わなくてはならない。  空白を入れてはならない。  限定識別子:同じ識別子のインスタンスが複数ある場合、名前の競合が起こらない        ようにするのに利用する。「.」で区分けして利用する。 ラベル ======  ラベルはgoto文の飛び先をマークする 0 から 9999 の範囲の数字の列。  識別子をラベルとしても使える。 数 ==  整数型や実数型の定数である数を表すには、通常の10進数表記を使う。  16進表記は「$」を最初に付ける。  指数表記は「E」または「e」を使う。 予約語 ======  and as asm array begin case class const constructor destructor div do downto else end except exports file finally for function goto if implementation in inherited inline initialization interface is label library mod nil not object of or packed procedure program property raise record repeat set shl shr string then to try type unit until uses var while with xor 手続きと関数 ============  数学ルーチン ------------    Abs(X) Xの絶対値を返す X:整数/実数型 R:整数/実数型    ArcTan(X) Xのアークタンジェントを返す X:実数型 R:実数型 Cos(X) Xのコサインを返す(Xは[rad]) X:実数型 R:実数型 Exp(X) eのX乗を返す(e:自然対数の底) X:実数型 R:実数型 Frac(X) Xの小数部を返す(X-Int(X)) X:実数型 R:実数型 Int(X) Xの整数部を返す X:実数型 R:実数型 Ln(X) Xの自然対数を返す(Ln(en)=n) X:実数型 R:実数型 Pi 円周率を返す -- R:実数型 Sin(X) Xのサインを返す(Xは[rad]) X:実数型 R:実数型 Sqr(X) Xの2乗を返す(X*X) X:実数型 R:実数型 Sqrt(X) Xの平方根を返す X:実数型 R:実数型  コンソールルーチン ------------------    AssignCrt(f) テキストファイルをCRTウィンドウと関連付 f:var Text R:-- ClrEol カーソルを移動せずにカーソル位置から -- R:--           行の終わりまでの文字を消去 ClrScr 画面をクリアし,カーソル左上へ戻す -- R:-- CursorTo(X,Y) カーソルを仮想画面指定位置へ移動 X,Y:整数型 R:-- DoneWinCrt CRTウインドウがまだ破棄されて -- R:--           いなければ,CRTウインドウを破棄 GotoXY(X,Y) カーソルを仮想画面指定位置へ移動 X,Y:Byte R:-- (古) InitWinCrt CRTウインドウがまだ作成されて -- R:--           いなければ,CRTウインドウを作成 KeyPressed キーボードが押されているか検査 -- R:Boolean ReadBuf(B,C) CRTウインドウの行を入力 B:PChar,C:Word R:Word ReadKey キーボードから文字を読出(ASCII) -- R:Char ScrollTo(X,Y) 仮想画面の位置(X,Y)を左上へ X,Y:Integer R:-- WhereX 現在のカーソル位置のX座標を返す -- R:Byte (古) Cursor.X + 1 に相当 WhereY 現在のカーソル位置のY座標を返す -- R:Byte (古) Cursor.Y + 1 に相当 WriteBuf(B,C) CRTウインドウに文字のブロックを書込 B:PChar,C:Word R:-- WriteChar(C) CRTウインドウに1文字書込 C:Char R:--  日付時刻ルーチン ---------------- Date 現在の日付を返す -- R:Date DateTimeToStr(T) 時刻形式の値を文字列に変換 T:TDateTime R:String DateTimeToString(S,F,T) S:var string R:-- 時刻形式の値を文字列に変換 F:const string 形式文字列を使用 T:TDateTime DateToStr(T) 日付形式の値を文字列に変換 T:TDateTime R:String DayOfWeek(T) 現在の曜日を返す T:TDateTime R:Integer(1-7) DecodeDate(T,Y,M,D) T:TDateTime R:-- 指定した日付を分解する Y,M,D:var Word DecodeTime(T,H,M,S) T:TDateTime R:-- 指定した時刻を分解する H,M,S:var Word EncodeDate(Y,M,D)日付形式で生成 Y,M,D:Word R:TDateTime EncodeTime(H,M,S)時刻形式で生成 H,M,S:Word R:TDateTime FormatDateTime(F,T) F:const string R:string 日付と時刻を指定形式にする T:TDateTime Now 現在の日付と時刻を返す -- R:TDateTime StrToDate(S) 文字列を日付形式に変換 S:const string R:TDateTime StrToDateTime(S) 文字列を日付時刻形式に変換 S:const string R:TDateTime StrToTime(S) 文字列を時刻形式に変換 S:const string R:TDateTime Time 現在の時刻を返す -- R:TDateTime TimeToStr(T) 時刻形式を文字列に変換 T:TDateTime R:String  動的割り当てルーチン -------------------- Dispose(P) 動的変数を破棄 P:var Pointer R:-- Free オブジェクトのインスタンスを破棄 -- R:-- FreeMem(P,S) 指定したサイズの動的変数を破棄 P:var Pointer,S:Word R:-- GetMem(P,S) 指定したサイズの動的変数を生成 P:var Pointer,S:Word R:--            そのブロックのアドレスを変数に入れる New(P) 新しい動的変数を生成し、それ P:var Pointer R:-- を指すようにポインタ変数を設定 P: R:Pointer MaxAvail ヒープ内にある最大の連続未使用 -- R:Longint ブロックのサイズを返す MemAvail ヒープ内の全未使用メモリ量を返す -- R:Longint  ファイル管理ルーチン --------------------    ChangeFileExt(F,E) ファイル名の拡張子を変更 F,E:const string R:string DateTimeToFileDate(T)Delphi日付形式を DOS日付 T:TDateTime R:Longint 形式に変換 DeleteFile(F) ファイルを削除する F:const string R:Boolean DiskFree(D) ドライブの空き領域を返す D:Byte R:Longint    DiskSize(D) ドライブのサイズを返す D:Byte R:Longint ExpandFileName(F) 完全限定パス名を返す F:string R:string ExtractFileExt(F) ファイル拡張子だけを返す F:string R:string    ExtractFileName(F) ファイル名だけを返す F:string R:string    ExtractFilePath(F) パス名を返す F:string R:string FileAge(F) ファイルのタイムスタンプを返す F:string R:Longint FileCreate(F) ファイルを生成する F:string R:Integer FileClose(H) ファイルをクローズする H:Integer R:-- FileDateToDateTime(F)DOSの日付形式をDelphi日付 F:Longint R:TDateTime 形式に形式に変換 FileExists(F) ファイルが存在するか確認 F:string R:Boolean FileGetAttr(F) ファイルの属性を取得 F:string R:Integer FileGetDate(H) ファイルのDOS日付時刻取得 H:Integer R:Longint FileRead(H,B,C) ファイルから読込 H:Int,B:var,C:Li R:Longint FileSearch(N,D) ファイルを検索 N,D:const string R:string FileSeek(H,O,M) 現在のファイル位置を変更 H,M:Int,O:Long R:Longint FileSetAttr(F,A) ファイルの属性を設定 F:c string A:Int R:Integer FileSetDate(H,A) ファイルのDOS日付時刻設定 H:Integer,A:Long R:-- FileOpen(F,M) ファイルオープン(内部ルーチン)F:string,M:Int R:Integer FileWrite(H,B,C) ファイルへ書込 (内部ルーチン)H:Int,B:con,C:Li R:Longint FindClose(S) FindFirst/Nextを終了 S:var TSearchRec R:-- FindFirst(P,A,S) ファイル検索(最初) P:str,A:Word,S:↑R:Integer FindNext(S) ファイル検索(次) S:var TSearchRec R:Integer RenameFile(O,N) ファイル名の変更 O,N:const string R:Boolean  浮動小数点変換ルーチン ---------------------- FloatToDecimal(R,V,P,D) R:TFloatRec,V:Extend -- 浮動小数点値を10進値に変換 P,D:Integer FloatToStrF(V,F,P,D) V:Ext,F:TFloatFormat R:string 浮動小数点値を文字列に変換 P,D:Integer FloatToStr(V) 浮動小数点値を文字列に変換 V:Extended R:string FloatToText(B,V,F,P,D) B:PChar,V:Extended R:Integer 指定した浮動小数点値を F:TFloatFormat 10進値に変換 P,D:Integer FloatToTextFmt(B,V,F) B:PChar,V:Extended R:Integer 指定した浮動小数点値を F:PChar 10進値に変換 FormatFloat(F,V) F:const string R:string 浮動小数点値をFormatで指定 V:Extended する文字列形式に変換 StrToFloat(S) 文字列を浮動小数点値に変換 S:const string R:Extended TextToFloat(B,V) B:PChar R:Boolean ヌルで終わる文字列を var Extended 浮動小数点値に変換  フロー制御ルーチン ------------------ Break for文,while文,repeat文を終了 -- R:-- Continue for文,while文,repeat文を継続 -- R:-- Exit 現在のブロックをすぐに終了 -- R:-- Halt[(E)] プログラムを停止しOSに戻す (E:Word) R:-- RunError[(E)] プログラムを停止 (E:Byte) R:--  入出力ルーチン -------------- AssignFile(f,S)外部ファイルの名前をファイル変数に代入 f:var,S:String R:-- ChDir(S) カレントディレクトリの変更 S:String R:-- CloseFile(f) 開いているファイルを閉じる f:var R:-- Eof(f),Eof[(F)]ファイルが終わりかどうか検査 f:var,F:Text R:Boolean Erase(f) 外部ファイルを削除 f:var R:-- FilePos(f) ファイルの現在のファイル位置を返す f:var R:Longint FileSize(f) ファイルの現在のサイズを返す f:var R:Longint GetDir(D,S) 指定ドライブのカレントディレクトリを返す D:Byte,S:varStr R:-- IOResult 最後に実行された入出力操作状態を返す R:Integer MkDir(S) サブディレクトリを作成 S:String R:-- Rename(f,N) 外部ファイルの名前を変更 f:var,N:s/PChar R:-- Reset(f[,R]) 既存ファイルを開く f:var[,R:Word] R:-- Rewrite(f[,R]) 新しいファイルを作成して開く f:var[,R:Word] R:-- RmDir(S) 空のサブディレクトリを削除 S:String R:-- Seek(f,N) 指定コンポーネントに現在ファイル位置移動 f:var,N:Longint R:-- Truncate(f) 現在ファイル位置でファイルを切り捨てる f:var R:--  メモリ管理ルーチン ------------------    AllocMem(S) ヒープにブロックを割り当てる S:Cardinal R:Pointer ReAllocMem(P,C,N) P:Pointer            ヒープの再割り当てを行う C,N:Cardinal R:Pointer  その他のルーチン ---------------- AddExitProc(P) ランタイムライブラリの終了手続きリストに P:TProcedure R:-- 手続きを追加する Exclude(S,I) 集合Sから要素Iを削除する S:set of T,I:T R:-- FillChar(X,C,V)指定した値で指定数の連続バイトを X:var,C:Word R:--            パディングする(埋める) V:Byte/Char Hi(X) Xの上位バイトを返す X:整数/Word R:Byte Include(S,I) 集合Sに要素Iを追加する S:set of T,I:T R:-- Lo(X) Xの下位バイトを返す X:整数/Word R:Byte Move(S,D,C) SからDへ Cバイトをコピーする S,D:var,S:Word R:-- ParamCount コマンドラインからのパラメータ数を返す -- R:Word ParamStr(I) コマンドラインからのパラメータを返す I:Word R:String Random(A) 乱数を返す(0<=X