復習;制御構造命令
・制御構造命令を中心とした簡単な復習
簡単なプログラムの流れ、変数、代入命令、簡単な計算などはだいじょうぶでしょうか?
これらがきちんと分かっていないと、残念ながら次のステップは理解ができません。
不安な部分があれば何回でもその部分戻って確認及びしっかりと理解をしましょう。
まずは、どこがわかっていないかをきちんと自分で見つけることがとってもとっても大切です。
また、乱数の使い方、グラフィックスの座標系と、コントロールの移動についても、正しく理解しておきましょう。
必要に応じて参照すればよいので、これらについては正確に覚えておく必要はないとおもいます。
○プログラムの基本的な構造
- プログラムは1行1行順次実行される。大原則として、書かれている上から順番に実行される。これが基本です。
- この授業では、ボタンを作り、この中にプログラムを書いていくというのを原則としています。
- プログラムは、まず自分がコンピュータにさせたいことが何であるかをきちんと論理的に組み立てます。
- これをVBの命令で表現し、文法に従って、上から順に書いていきます。
- 変数は、何らかの数字などを記憶しておく場合に利用します。
- 「=」は代入命令で、右側の結果を左側の変数などに記憶させる、つまり代入する命令です。
- 但し、「=」は条件式で利用すると「等しいか?」という意味になります。
- 書く場所によって意味が変わりますが、いい加減に判断されるわけではありません。
- 変数は、代入するだけでなく、現在記憶している数値などを参照することもできます。
- 加減乗除の計算は、+-*/で表現します。これは通常の算数と殆ど同じです。
- x=1 : y=2 : z=x+y の3行のプログラムは、変数xに1が代入され→変数yに2が代入され、変数xとyが記憶している内容を足し算した結果を変数zに代入されることになります。
- 割り算の余りを求めるModという演算も使えるようにしておきましょう。
- 変数は、自由にいくつでも使うことができます。どのような時にどのように変数を使うのかは、ある程度の慣れが必要かもしれません。少なくとも何らかの数値を次々と計算するなどして扱っていく場合には、変数にすべきです。
○制御構造命令
- プログラムは1行1行順次実行される。大原則として、書かれている上から順番に実行される。これが基本です。
- 制御構造命令とは、単純に上から下へという順番ではなくなるプログラム命令です。
- Visual Basicにおける制御構造命令は、If文、For文、Do文などがあります。この3つについては、それぞれきちんと理解しておきましょう。
- If文とSelect文は条件分岐といわれる命令です。
つまり、特定の条件によって、プログラムの実行先が分岐します。よって実行はプログラムの下の方の行に飛んでいきます。但しいずれも分岐が終了するところは一箇所で、戻ってきます。
- For文、Do文はループ(繰り返し)といわれる命令です。
つまり、特定のプログラムを繰り返し処理する際に利用され、実行が上に戻ってきます。
特にループ処理のFor文、Do文において、一行一行実行されるというのを忘れてしまう人がいますので注意しましょう。
- いずれの制御構造でも、ブロックと呼ばれる部分があります。分岐した先の処理や、繰り返し処理をする部分などをブロックと呼ぶことがあります。
ブロックは単に一塊のプログラムを意味し、何もしたくなければ何も書かなくてもOKです。一方で、したいことでかつ正しい命令であれば、何行書いてもどのような命令を書いてもOKです。
これにより、例えばFor文の中にFor文を書くなどの二重ループといったプログラムを書くことができます。勿論For文の中にIf文やDo文を書いてもよいし、それらのブロックの中で更にSelect文やFor文を書いてもOKです。
- 制御構造命令を理解するには、一行一行どの順番で実行されていくのかをきちんと自分で追っていく必要があります。自分がコンピュータになったつもりで、「ここでこのように計算されて変数に代入されるでしょ、次に今この変数にはXXXが入っていて、このIf文ではこれと比べるのだから、条件にあっていて、ここに分岐するよね」などと追っていくわけです。ループでも同じですし、二重ループでも全く同じです。ブロックがどこかをきちんと把握しておけば、二重ループも理解できるようになるはずです。
- 制御構造命令を使ったプログラムを作成するのは、慣れが必要です。よって間違いも多くなりますので、作成したら必ず上記のように自分で一行一行追っていきましょう。
- 制御構造命令は、基本的に全て条件を設定します。
If文、Do文においては同じ形式によって条件式を書きます。
一方For文では、明示的に条件式そのものは書きません。しかし、終了値を書いたりと、少し書き方が違いますが、一種の条件を記載することを意味します。
またSelect文では、条件の書き方がかなり違ってCase部分に場合のみを書きます。
- 一般的な条件式は非常に簡単で、等しい(=)とか大きい、小さいなどです。
注意すべきは、比較演算子(=,<,>など)の左右に書く二つの物しか比較できないことです。
複雑な条件にする場合は、複数の単純な条件を、And、Orなどでつないでいく必要があります。
- 具体的には、駄目な例として「0<a<10」などがあります。これは「0<a And a<10」と二つの条件式に分割して、これをAndでつなげてあげる必要があります。比較演算子は左右二つしか比べられない決まりですので。
制御構造命令は複雑に見えますが、一つ一つは実は非常に単純です。
文法をきちんと確かめながら、基本に忠実に!
○グラフィックス
- 座標系が通常の数学と少し違いますので、注意しましょう。
- 原点が左上で、下方向にY軸正方向です。X軸は通常と同じです。
- コントロール(PictureBoxなど)には、LeftやTopプロパティと言う、フォームウィンドウ内での位置を示すものがあります。
- このプロパティを変更すると、位置が変わります(移動します)。
- 例えば、PictureBox1.Left=0とすると、このピクチャーボックスはウィンドウの左に移動します。
- また、これらのプロパティを参照すると、現在の位置が分かります。
- 例えば、x=PictureBox1.Leftとすると、xには、このピクチャーボックスの位置(フォームウィンドウ左端から、ピクチャーボックス左側までの距離)が代入されます。
- これらのプロパティを少しずつ変化させると、あたかも移動するように見せることができます。
- 競争ゲームの例
- PictureBoxを動かす例として競争ゲームを勉強しました。
- ここでは競争の対象として2台、つまりPictureBoxを二つとします。
- 全体の流れは次のようになります。
- スタート位置につく
- 競争スタート
- すごろくのように、さいころを振ってその目の数分だけ進む
- d1=Int(Rnd(1)*6)+1 : d2=Int(Rnd(1)*6)+1 と二つサイコロを振る
- 2台同時はプログラムではできないので、1台が進んだらすぐに1台が進むようにする
- 目の数分だけ進むには、現在位置に目を足したものに移動すればよい
つまり、例えばPictureBox1.Left = PictureBox1.Left + d1
- 2番目のPictureBox1.Leftは現在位置、これにサイコロの目を足して、
1番目のPictureBox1.Leftに代入、つまりこの位置に移動させる
- どちらかがゴールするまで繰り返す
- 何回でゴールするかはわからないので、For文ではなく、Do-While を使う
- 終了条件は、どちらかがゴールを超えるまでとする
- Leftではゴールに到達したかではなく、ゴールを完全に超えたかになってしまうので、
PictureBox1.Left+PictureBox1.Widthがゴールを超えたかとする
- パラシュートの場合
- 上記では左から右に動かしていたものを、上から下に動かすようにすればよい
- 上下の位置はTopプロパティを使えばよい
いずれにしてもプログラムは、一つ一つは難しくありません。
しかし、一つ一つを適当に理解していると、全くプログラムは書けません。
何が理解できていて何が理解できていないのか、それを自分で早く知ることが一番大事です。
また、プログラムの作成においては、どのように処理すればよいのか、じっくりと考えて工夫し、アイデアを産み出すことが必要です。そしてこの際に以下に論理的にきちんと考えられるかが重要となります。感覚的になんとなくというのでは絶対にプログラムは作成できません。
各種命令などが理解できていたとすれば、後は小さな問題を数多く自分の力のみでプログラムしてみると、プログラミング能力が身に付きます。是非たくさん練習してください。
[「C班」プログラミング基礎のTopに戻る]