![]() |
Top > 授業 > Delphi プログラミング >Lesson 4 Lesson 4(2004/09/06) |
![]() |
![]() |
![]() |
![]() 1.Lesson 4 では次の点を学習することを目指します。 ・手続き (procedure) ・関数 (function) ・手続き/関数のパラメータ(値/変数パラメータ) 2.この Lesson 4 では、手続きないし関数を使った短いプログラムを集めています。次のLesson 5 では手続きや関数を使ったやや長めのプログラムを用いる予定です。Lesson 5 までで、プログラミングの基本的な事項は学んだことになると思います。つまり Lesson 5 以降には、自分でイメージした作業を実行させるプログラムを、自分で最初から作れるはずだ、ということです。 3.値パラメータと変数パラメータについては、Delphi のヘルプなどで両者の違いを確認しておくこと。パラメータは「引数(ひきすう)」と呼ばれることもあります。変数パラメータを実引数、値パラメータを仮引数と呼ぶこともあります。 4.サンプルプログラムを眺め、練習問題を試してください。 5.サンプルプログラムはダウンロードしてください(クリック)。ダウンロードしたファイル(lesson4.exe)はDelphi7\Source に置いてクリックして解凍してください。5つのサンプルプログラム P401〜P405が出てきます。5つとも、結果として同じ動作をするプログラムです。最初の P401 のプログラムに順次、手続き、関数を導入して書き換える、という形で P402〜P405 のプログラムを書き換えています。 |
![]() a.このプログラムは、PaintBox に8個の円と8個の正方形を描く ・描く円と正方形の一は中心点からの距離と角度(ラジアン)から決めている ・Pi は円周率のπである。Delphi の中で予め定義された定数である b.ラジアンについて プログラミングでは角度をラジアンで表すことが多いです。Delphi の場合も、組み込み関数のSin、Cos がラジアンで動きます。確か2πで360度だったと思いますが…。確認しておいてください。 c.関数 Round Round(x) は実数xの一番近い整数値を与える関数です。y := Round(x);とすれば、x を四捨五入した整数値が y だと理解すればよいです。Trunc(x) との違いを各自で確認しておいてください。 練習問題 1.定数 CenterXY の値を変えるとどのような変化が生じるかを試し、CenterXY の働きを確認せよ。 2.定数 Cdist と Sdist の値を変えるとどのような変化が生じるかを試し、両定数の働きを確認せよ。 3.Rad := Pi/4.0*Int(i); の 4.0 を 8.0 に書き換えるとどのような変化が生じるかを試せ。 |
![]() a.このプログラムは、P401 を「パラメータのない手続き」を使って書き換えている このプログラムでは、手続きTForm1.StartBtnClickの中身を、円を描く手続きDrawCirclesと矩形を描く手続きDrawSquaresに分けています。手続きTForm1.StartBtnClickの主プログラムは次の4行だけになりました。 begin DrawCircles; DrawSquares; end; この2つの手続き(DrawCircles、DrawSquares)にはパラメータはありません。TForm1.StartBtnClickの中身を2つに区分しただけです。このようなこともよくやります。区分しただけですから何の意味もありませんが、P401 に比べれば中身は整理されていると思います。 b.グローバル変数/定数とローカル変数/定数 TForm1.StartBtnClickで定義した定数、変数は(TForm1.StartBtnClick内では)グローバルであり、下位手続きであるDrawCircles、DrawSquaresの中でも有効です。DrawCircles、DrawSquaresの中で定義した変数は逆にローカルであり、その手続きの中でしか有効ではありません。 練習問題 1.(1)2つの手続き DrawCircles、DrawSquares のうち片方を { } で囲むと何が変わるかを、各自確認せよ。(プログラミングをしている過程で特定の命令を無効にしてみる場合に、よくこのようにします。) 【例】 begin {DrawCircles;} DrawSquares; end; 2.2つの手続きの各々で変数 i (integer) の宣言を削除するとどうなるかを、各自確認せよ。 3.変数 Gxy、x、y、Rad の宣言を各々の手続きの中に入れるとどのような変化があるか(ないか)を、各自確認せよ。 4.PaintBox に「円と正方形を描く」という文字を表示する手続きを、プログラムに新たに書き加えよ。 |
![]() a.このプログラムは、P401 を「値パラメータのある手続き」を使って書き換えている 本プログラムの変数i(for i := 0 to 7 do DrawCircle(i);)の値が手続きの中では変数 id に代入される。 練習問題 1.手続き内で定義した変数、定数を本プログラムに移すとどうなるかを試せ。 2.何れかの手続きの末尾に次の文を入れると結果がどう変わるかを試せ。変化の理由を考えよ。 if id = 1 then i := 2; |
![]() a.このプログラムは、P403 に加えて変数パラメータのある手続き( GetPositions )を利用している ・手続き DrawCircles と DrawSquares の中で手続き GetPositions を呼び出している。呼び出される手続きは原則として、呼び出す手続きより前に置くことに注意。 ・GetPositions には、描く図形の順番(id)と距離(Cdist/Sdist)を 与える。GetPositions ではそのidを変数 i、距離を dist : reaL; として受け取る。 ・GetPositions は描く図形の2つの座標(4つの値、x1, y1, x2, y2)を本プログラム(TForm1.StartBtnClick)返す.本プログラムはx1, y1, x2, y2をそれぞれ、Gxy[1,1], Gxy[1,2], Gxy[2,1], Gxy[2,2]として受け取る。 練習問題 1.手続き GetPositions の中の末尾に次の文を入れると何がおこるかを試し、その理由を考えよ。 x2 := 100; 2.手続き DrawCircles だけで使う、GetPositions と同様の働きをする手続きを新たに作れ。 3.上記2で新たに作った手続きが円の色も返すようにプログラムを書き換えよ。 |
![]() a.このプログラムは、 P403 に加えて関数(PosX, PosY)を導入している (異なる点は次のb) ・関数 PosX と PosY は、それぞれ、描く図形のx座標、y座標を与える。関数が「変数パラメータのある手続き」と似た働きをすることに注意。 ・例えばPosX[function PosX(i: integer; dist : reaL) : integer;]は描く順番 i と距離 dist を受け取り、整数値のPosXを返す。 練習問題:円や正方形(矩形)の色を与えるような関数をプログラムに加え、プログラムを書き換えよ |
![]() 次回の Lesson 5 では、今回勉強した「手続き」と「関数」を、別のプログラムで再度練習します |