【第4章】配列(執筆中)

【配列の宣言】


 入力したデータを配列に保存し、再利用するプログラムを考えてみましょう。配列の宣言は変数の宣言と同じく、Dimを使います。書き方は
   Dim 配列名(サイズ) As データ型
です。配列名のつけ方の規則は変数の場合と同じです。サイズは正の整数で指定します。添え字は 0 からスタートすることに注意してください。データ型は変数の宣言の場合と同じです。たとえば
   Dim Num(4) As Integer
とすると、Num(0)、Num(1)、Num(2)、Num(3)、Num(4)の5つの整数型データを扱える配列Numが使用できるようになります。

 では、10人の生徒のテストの点数を入力し、平均点を求めて成績一覧を表示するプログラムを作ってみましょう(図4-1.)。この程度の仕事ではコンピュータを使う意味はあまりありませんが、ここではVB2022の配列の使い方を覚えるということでよろしくお願いします。
 出席番号は1~10とします。したがって出席番号=配列添え字+1になります。


図4-1.テストの得点


 プログラムは図4-2.のようになります。


図4-2.テストの平均点を求め成績一覧を表示するプログラム


 4行目は配列の宣言です。Tokuten(0)~Tokuten(9)の10個の要素をもつ配列Tokutenが定義されました。
 8行目のHeikinは計算した平均点を代入する変数です。平均点は小数になる可能性があるので実数型Singleで宣言します。
 10~15行目のForブロックで点数入力と入力した点数を合計をとる変数に加算し配列に保存することを10回繰り返します。
 17行目で入力した10人のテストの点数の平均を求めます。
 19~21行目のForブロックでは入力して保存した10人のテストの点数の一覧を表示します。
 そして23行目で計算した平均点を表示して終わります(図4-3.)。


図4-3.実行結果


【連結演算子】

 ↑のプログラムの11行目に出てくる & ですが、これは連結演算子とよばれ、String型とInteger型など異なる型のデータを連結する演算子です。連結演算子としては + もあるのですが、+ はString型どうしだけの連結にのみ使えます(異なるデータ型を + で連結しようとすると実行時エラーになります)。異なる型のデータを連結するときは & を使わなくてはなりません



【第3章】繰り返し制御文

 VB2022の繰り返し制御文はいろいろあります。

【For~Nextループ】

繰り返し回数が決まっているFor制御文の使い方はTiny Basic for Windowsと同じです。For制御文を使って、1からNまでの自然数の和を求めるプログラムを作ってみました(図3-1.)。1からNまでの自然数の和は少年時代のガウスのように
   N×(N+1)÷2
とやる方が早いのですが、ここではVB2022のプログラムを習得するため
   1+2+3+・・・・+N
でやってみることにします。


図3-1.For~Next制御文を含むプログラム例


 4行目では変数の使用宣言と同時に初期値を代入しています。
 5行目では同じデータ型の複数の宣言を1ステートメントで行なっています。
 VB2022の文法としては可能なのですが、5行目は注釈が入れにくくプログラムがわかりにくくなる原因になるので、筆者としてはあまりおすすめしません。
 11~13行目がForブロックです。書き方はTiny Basic for Windowsと同じです。

【Do~Loop】

 条件が成立するまでの(回数が決まっていない)繰り返しでは、VB2022ではDo制御文を使います。Tiny Basic for WindowsのWhile~Wend制御文に似た書き方をしますが、VB2022のDo制御文は繰り返し終了条件の書き方がいろいろあります。Do制御文の基本的な書き方はこうなります。

  Do    繰り返しの始まり
     繰り返される処理
  Loop   繰り返しの終わり

これを使って簡単なクイズのプログラムを作ってみます(図3-2.)思い切り筆者の趣味全開なサンプルで申し分けありません💦ちなみに、日本で最初に開通した鉄道は東京~横浜なので正解は4です。


図3-2.クイズのプログラム


 このプログラムを実行すると図3-3.のように正解しても終わらず永久ループになります。これはDo~Loopの繰り返し終了条件が書かれていないからです。


図3-3.クイズのプログラム実行結果(永久ループ)


これを図3-4.のように、正解が出るまで解答入力を繰り返し、正解になったら「正解です」と表示してプログラムの実行終了になるようにしてみます。


図3-4.クイズのプログラム実行結果(正解が出たら終わり)


 繰り返し終了条件の書き方はいろいろあります。図3-5.の方法は繰り返しに入る前に条件判定をする方法(条件先判定)です。Tiny Basic for WindowsのWhile~Wend制御文と同じです。

  Do While 条件
     処理A
  Loop

 この場合、条件が成立している間、処理Aを繰り返します。このプログラムで条件は
   Whilie kaitou <> seikai
なので、「解答が不正解である間、解答入力を繰り返す」ということになります。



図3-5.クイズのプログラム(Do Whilieで終了条件)


 繰り返し終了条件は、繰り返しの終わりに書くこともできます(条件後判定)。↑のプログラムは図3-6.のように書いても実行結果は同じです。


図3-6.クイズのプログラム(Loop Whilieで終了条件)


 条件先判定と条件後判定の違いは、先判定では繰り返しに入る前に条件がすでに成立していれば繰り返し部分は1回も実行されないのに対し、後判定り場合は条件の成立/不成立に関わらず、繰り返し部分は最低1回は実行されることです。条件が成立した時は繰り返し部分の処理は実行してはいけないという場合、条件先判定にするようにしましょう。

 Do制御文で繰り返し条件の書き方は Do While/Loop Whileの他にDo Until/Loop Untilという書き方もあります(図3-7.、図3-8.)。

  Do Until 条件
    処理A
  Loop

  Do 条件
    処理A
  Loop Until 条件

 どちらの場合も条件が成立するまで処理Aを繰り返します。条件先判定/後判定についてはWhileの場合と同じです。


図3-7.クイズのプログラム(Do Untilで終了条件)



図3-8.クイズのプログラム(Loop Untilで終了条件)


【Exit】

 Exit制御文は繰り返し、サブルーチン、プロシジャから抜ける制御文です。

  Do 条件
     処理A
  Exit Do
     処理B
  Loop
     処理C

 この例だと、処理Aまで実行したところで条件の成立/不成立に関わらず処理Bは実行せず処理Cへ移ります。↑のクイズなら正解が出たところで繰り返しから離脱というようにすることも可能です(図3-9.)。


図3-9.クイズのプログラム(正解になったら繰り返しから離脱)


 Exit制御文はDoだけでなくForにも使えます。キーボードから入力された自然数が素数か素数ではないかを判定するプログラムを作ります。素数とは2以上の自然数で1とその数の他に約数を持たないもののことです。ここでは入力された自然数Numを2からNum-1の自然数で割った余りを求め、その余りがすべて0でなければ素数とする、という方法を採択します(図3-10.)。


図3-10.素数判定のプログラム


 素数かどうかの判定としてBoolean型変数のSosuuを用意します。この変数は初期値Trueにしておきます。
 14行目で入力された自然数Numを2以上Num-1以下の自然数で割った余りを求め15行目で余りが0かどうかを判定しています。ここで余りが0ならこの時点でNumは素数ではないということになるので、この後の割り算と余り判定は必要ないので16行目のでFor~Nextブロックから抜けます。この繰り返しが最後まで実行されて余りが0になることが1回もなければ素数です。実行結果は図3-11.のようになります。


図3-10.素数判定のプログラム実行結果


 前章とこの章でVB2022の選択分岐、繰り返しの制御文について学びました。昔のBASIC(1980年代に全盛を極めたMicrosoft BASIC)では、制御文はこんなに充実していませんでした。いきおいマルチステートメントや無条件ジャンブのGOTO文を多用せざるを得ず、グチャグチャでわかりにくいプログラム(スバゲティプログラムといわました)になってしまうのを避けようがありませんでした。VB2022では選択分岐、繰り返しの制御文が充実し、マルチステートメントもGOTO文も必要なくなり、わかりやすい構造化プログラムが可能になりました。

【第2章】分岐制御文


【If制御文】

 判断分岐のIf~ElseIf~Else~End If制御文の使い方はTiny Basic for Windowsと同じです(図2-1.)。


図2-1.If~ElseIf~Else~End If制御文を含むプログラム例


 VB2022で使用できる比較演算子は図2-2.の通りです。ほぼTiny Basic for Windowsと同じです。下2つのIsとIsNotは現段階では???でかまいません。


図2-2.VB2022の比較演算子


 VB2022で使用できる論理演算子は図2-3.の通りです。こちらもほぼTiny Basic for Windowsと同じです。下2つのAndoAlsoとOrElseは短絡的評価と呼ばれるもので、当カテゴリーの実習では使いません。処理スピードを要求される実務システムを作るようになるまでに使い方を覚えていただければ、と思います。


図2-3.VB2022の論理演算子


【If演算子とIIF関数】

 VB2022ではIfは制御文だけではなく、演算子、関数もあります。↑のプログラムのような3択以上では使い辛いですが、値が2択(条件の真偽により2つのうちどちらかの値を選ぶ)の場合、演算子、関数としてのIfの方がプログラムがすっきりと書けます。
 演算子としてのIf(If演算子)の書き方はこうなります。
    変数=If(条件式,値1,値2)
 条件式が成立すれば変数には値1が代入され、成立しなければ値2が代入されます。関数としてのIf(IIf関数)も書き方は同じです。
    変数=IIf(条件式,値1,値2)
 この場合も条件式が成立すれば変数には値1が代入され、成立しなければ値2が代入されます。
 たとえばキーボードから入力した自然数が偶数か奇数かを判定するプログラム(大した意味はないプログラムですが💦)、If制御文で書くと図2-4.のようになります。


図2-4.偶数奇数・判定(If制御文)


 同じプログラムをIf演算子を使って書くと図2-5.のようになります。


図2-5.偶数奇数・判定(If制御文)


 さらに同じプログラムをIIf関数を使って書くと図2-6.のようになります。


図2-6.偶数奇数・判定(IIf関数)


 Ifブロックが5行になるところ、If演算子、IIF関数を使うと1行で済むことがおわかりいただけたと思います。いずれの場合も実行結果は図2-7.のようになります。


図2-6.偶数奇数・判定実行結果


※[IF演算子とIIは函数の違い]
 If演算子は条件式がTrueの場合、値1を評価し、値2は評価しません。Falseの場合、値2を評価し、値1は評価しません。それに対しIIf関数は条件式の結果に関わらず値1、値2の両方を評価します(プログラミングの世界でいう「評価」とは式の値を求めることをいいます。A=10-(5+2)を評価するとAには3が代入されます)。

【Select制御文】

 条件による選択(分岐)が2択3択程度ならIfでいいのですが、それ以上になるとIfで書くとプログラムがわかりにくくなります。VB2022では多分岐に適したSelect~Case~End Select制御文があります。次のように使います。

   Select Case
    Case 条件1
     処理A
    Case 条件2
     処理B
    Case 条件3
     処理C
    Case Else
     処理Z
   End Select

 Select制御文では、Select Caseの後に書かれた式とCaseの後ろに書かれた条件が比較され、条件が成立した時の処理が選択されます。上の例なら条件1がTrueなら(式が条件1を満たせば)処理Aが実行され、実行後はEnd Selectの後に飛びます(条件2からEnd Selectの直前までは無視されます)。条件1がFalseなら条件2の判定に移ります。条件2が成立すれば処理Bが実行され、その後はEnd Selectの後に飛びます(条件3からEnd Selectの直前までは無視されます)。以下同様に条件3以後の判定に移ります。どの条件も成立しない時はCase Elseになり処理Zが実行されます。Case Else以下の処理は必要なければ省略できます。


図2-7.Select制御文での条件式


 ファミリー向けカラオケ店の料金ご案内のプログラムを作ってみます。このカラオケ店の料金はお客様の年齢により次のようになっているとします。

            一般料金   1000円/時 
   65歳以上     シルバー料金 800円/時
   13歳未満     こども料金  500円/時
   7歳5歳3歳   七五三お祝い 無料
   13歳以上18歳以下 中高生料金  700円/時

 このプログラムをIf制御文を使って書くと図2-8.のようになります。


図2-8.多分岐のあるプログラムをIf制御文で書いた場合


 同じプログラムをSelect制御文を使って書くと図2-9.のようになります。Case 条件式を入れる順番に注意が必要です。ひとつ条件が成立すればそれ以降の条件は無視されるので、たとえばこども料金と七五三お祝いの順番を逆にしてしまうと、7歳、5歳、3歳と入力した場合でもこども料金に流れてしまいます。


図2-9.多分岐のあるプログラムをSelect制御文で書いた場合


 どちらの場合も実行結果は図2-10.のようになります。


図2-10.年齢別料金案内のプログラム実行結果
【第1章】データ型と変数

 これからVB2022でのプログラミングを勉強してゆきましょう。この章から第5章まではVisual Studio Community 2022(以下Visual Studioと略記)のコンソールアプリケーションを作りながらVB2022の文法とIDEとしてのVisual Studioの使い方を覚えてゆきます。

【プロジェクト作成画面を用意する】

 ではインストールしたVisual Studioを起動しましょう(図1-1.)。Visual Studio Installerと間違えないように気をつけてください。


図1-1.VB2022の起動


 起動したら新しいプロジェクトの作成を選びます(図1-2.)。「えっプロジェクト?」と思われたかもしれませんが、現時点ではVB2022ではプログラムのことをプロジェクトという、という理解でかまいません。



図1-2.新しいプロジェクトを作る


 次にどのようなプロジェクトを作るのかを決めます。一番上にプログラミング言語を選ぶプルダウンメニューがあるのでVisual Basic、フラットフォームからWindows、プロジェクトの種類からコンソールを選びます。するとVisual Basicで作れるWindows上で動作するコンソールアプリケーションのテンプレートが出てきますのでコンソールアプリケーション(.NET Framework)を選びます(コンソールアプリケーションと間違えないように注意してください)(図1-3.)。


図1-3.プロジェクトの種類を選ぶ


 プロジェクト名とプロジェクトの保存場所を決めます(図1-3~5.)。プロジェクト名は自分で決めてもいいですが、面倒ならシステムが決めた名前を使うことができます。場所は実際のシステム作成ならこのままでもいのですが、当カテゴリーの実習では少々不便なのでドキュメントの中のVisual Studio 2022に変更します(このフォルダはVisual Studioインストール時に自動作成されています)。現段階ではソリューション(後の章で説明します)はプロジゥクトと同じ場所にあった方が都合が良いので「ソリューションとプロジェクトを同じディレクトリに配置する」にチェックを入れます。
 次のフレームワークとは、「OSとVB2022の間の仲介役」と考えてください。これも詳細は後の章で説明します。ここでは.NET Framework 4.8を選ぶことにします。ここまで全部入れたら「次へ」をクリックします。


図1-3.プロジェクトの保存場所



図1-4.プロジェクトの保存場所を選ぶ



図1-5.プロジェクトの保存場所を決定


 プロジェクト作成(プログラム作成・編集)画面に切り替わります。これからVB2022のプログラムを作って保存し実行してみるのですが、VB2022では、プログラム作成前に「ファイル」→「すべて保存」でプロジェクトを保存(図1-6.)しておくことをお薦めします(この理由はファイルを使うプログラムを作るようになるとわかります)。


図1-6.プログラム作成前にすべて保存


 ではVB2022のプログラムを作りましょう。プログラム作成画面は図1-7.のようになっています。最初から入っているこの4行は編集や削除はしないでください。プログラムはSub Main()End Subの間に書き込みます。手始めにキーボードから上底、下底、高さを入力して台形の面積を求めるプログラムを作ります。プログラムは図1-8.のようになります。キー入力が面倒なら以下のプログラムをコピー&ペーストで入れてください。

   Dim A As Integer
   Dim B As Integer
   Dim H As Integer
   Dim S As Single

   Console.WriteLine("台形の面積")
   Console.Write("上底 : ")
   A = Console.ReadLine()
   Console.Write("下底 : ")
   B = Console.ReadLine()
   Console.Write("高さ : ")
   H = Console.ReadLine()

   S = (A + B) * H / 2

   Console.WriteLine()
   Console.WriteLine("台形の面積=" & S)

   Console.ReadKey()


図1-7.プログラムを書き込む場所


【Visual Studioのプログラム作成支援機能①】

 プログラム入力の際、入れたワードの種類により文字色がいろいろ変わりますが、これはプログラム作成を支援するVisual StudioのIDEとしての機能です。
 画面左に表示される連番は行番号で、デバッグの際にプログラムのどこでどのようなエラーが発生したかを示すときに使われます。


図1-8.プログラムを書き込んだところ


 では、VB2022の文法を少しずつ覚えてゆきましょう。

【VB2022のプログラムの書き方】

(1)VB2022では、プログラム中に空行を入れることができます。空行は何行入れてもかまいません。まとまった処理ごとに空行を入れるとプログラムがわかりやすくなります。
(2) ' (シングルクォーテーション)を入れると ' から行末までは注記となります。変数の使用目的などを書いておくとプログラムがわかりやすくなります。
(3) : (コロン)で区切ると1行に複数のステートメント(マルチステートメント)を書くことができます。ただマルチステートメントはむやみに使うとプログラムがわかりにくくなるので注意しましょう。
(4)空白(スペース)を入れる時は全角/半角に注意しましょう。ストリング、注記以外で全角空白を使うと文法エラーになります(このエラーはさがすのに苦労します)。

【変数の使用宣言とデータ型】

 5~8行目はDimから始まるステートメントが続いています。ここはプログラム中で使用する変数の宣言(定義)です。VB2022では変数を使う場合、使う前に使用宣言をしておく必要があります。宣言なしで変数を使うと文法エラーになります。変数の宣言は
     Dim 変数名 As データ型
が基本の形です。DimはDimension(「寸法」の意)の省略形です。
 変数名は半角の英字、数字、_、(アンダーバー)の他、日本語(2バイト文字)も使えます。ただし変数名の先頭に数字は使えません。
 VB2022で扱えるデータ型はたくさんあるのですが、当カテゴリーの実習では今のところ次の4つだけ覚えてください(図1-9.)。これらの詳細、他の型は必要になった都度、説明します。

図1-9.VB2022で扱えるデータ型(一部)


【Consoleオブジェクト】

 10行目以降、Consoleというワードがたくさん出てきます。consoleはコンピュータの世界では「操作卓」という意味で、お使いのパソコンのこととお考え下さい。Console.~は操作卓に対する命令(正確にはオブジェクトといいますが、現時点では命令と考えていただいて差支えありません)です。

(1)画面に表示

Console.Write()
( )内の内容を画面に表示します。表示後の改行はしません。

Console.Writeline()
( )内の内容を画面に1行単位で表示します。表示後改行します。( )内が何もないと何も表示せずに改行のみ行ないます。

(2)キーボードから入力

変数 = Console.Readline()
キーボードからの入力内容を変数に代入します。Tiny Basic for Windowsや昔のBASICの Input 変数に相当します。ただし Input ストリング,変数のような書き方はできないのでストリングを表示してからキーボードからの入力の場合は上のプログラムなら11~16行目のようにストリング表示とキーボードからの入力はステートメントを分ける必要があります。

Console.Readkey()
押されたキーのコードを取得します。上のプログラムの23行目では、計算結果を表示後、何かのキーが押されたらプログラムを終了とするために使っています。

【算術演算子】
VB2022で使用できる算術演算子です。Tiny Basic for windowsや昔のBASICと同じです(図1-10.)。

図1-10.VB2022の算術演算子


 演算の優先順位はべき乗→乗除算→加減算です。ただし( )内が最優先になります。

【代入演算子】
VB2022には普通の代入演算子の他に便利な代入演算子があります。ここでは図1-11.に示したものだけ覚えておいてください。


図1-11.代入演算子(一部)


【プログラムの実行】

 プログラムを作成したら実行前に保存はVB2022でも同じです。「ファイル」→「すべて保存図」で保存してください(図1-6.)。
実行はデバッグモードとリリースモード(ビルド)があります。リリース(ビルド)する前にデバッグモードでプログラムの動作を確認しましょう(図1-12.の①)。Debugを選んだら「開始」をクリックします(図1-12.の②)。


図1-12.実行モードを選んで開始


 実行開始すると実行画面(図1-13.)が開き、タイトルが表示された後。上底、下底、高さの入力になります。すべて入力すると計算した台形の面積が表示されます。面積が表示された後。いったん停止します。これはプログラム23行目のConsole.Readkey()が効いているためです。Enterキーを押します。すると何やらずらずらとメッセージが出てきます。これはプログラムがどういう状態で停止したのか(正常に終了したのか実行時エラーで停止しているのか)を示すものです。もう一度Enterキーを押すと実行画面が閉じます。このメッセージが煩わしいという方は、「ツール」→「オプション」→「デバッグ」で「デバッグの停止時に自動的にコンソールを閉じる」に☑を入れます。


図1-13.実行画面


【一度作ったプログラムの呼び出し】

 前に作ったプログラムを呼び出す方法は何通りかあるのですが、いちばん簡単なのはVisual Studioを起動した後、画面左の「最近開いた項目」から作ったプログラム(プロジェクト)を選ぶ方法です(図1-14.)。これで最初に作った台形の面積を求めるプログラムが出てきます(図1-8.)。


図1-14.前に作ったプログラムを呼び出す


 これでプログラムの作成、保存、実行の方法は説明しました。次章からはVB2022でのプログラミングを中心にお話します。
【第0章】実習の準備

【VB2022のインストール要件】
 Visual Basic 2022を使うためには、お使いのパソコンにVisual Studio 2022をインストールする必要があります。インストールするには、以下のシステム要件を満たしている必要があります。
・ARM64 または x64 プロセッサ。クアッドコア以上推奨(ARM 32 プロセッサはサポート対象外)
・RAM4GB 以上(16GB推奨)
・ハードディスク空き容量: 最小850MB、最大210GB(インストールされる機能により異なります。当カテゴリの実習に必要な機能をインストールするには23GB以上の空き領域が必要)
・OS:Windows11またはWindows10
詳細は↓Microsoft社の公式ページをご覧ください。
Visual Studio 2022 製品ファミリのシステム要件

【VB2022インストール手順】

 Visual Studioには学生・個人向けのCommunity、小規模なシステム開発に適したProfessional 。大規模システム開発に適したEnterpriseの3つの版があります。当カテゴリーの実習ではCommunityで充分なのでこれをダウンロードし、インストールすることにします。
 ↓下記Microsoft公式サイトからVisual Studio Community 2022をダウンロードします。
Visual Studio Community


図0-3.VB2022ダウンロードページ


 ダウンロードページが表示されたら左下の「ダウンロード」をクリックします。すると図0-4.の表示に変わりすぐにダウンロードが始まります。


図0-4.ダウンロード開始


 エクスプローラでダウンロードされたVisualStudioSetup.exeをダブルクリックするとインストールが始まります(図0-5.)。

図0-5.ダウンロードされたVB2022インストーラ


 インストーラが開かれたら右下の「続行」をクリックします(図0-6.)


図0-6.インストーラを開いたところ


 次にワークロードの選択画面になります。このVisual Studio Community 2022を何に使うか、決定するところです。ここですべてを選べば最強のIDEが出来あがりますが、その分ハードディスクの容量が必要になるのとインストールに膨大な時間がかかることになります。当カテゴリーの実習で必要なのは
 ・ASP.NETとWeb開発
 ・.NETマルチプラットフォームアプリのUI開発
 ・.NETデスクトップ開発
 ・データの保存し処理
の4つなのでこれだけにチェックを入れて右下の「インストール」をクリックします(図0-7.)


図0-7.ワークロード選択画面


 インストールはお使いのパソコンにもよりますが、3時間~5時間ほどかかります。インストール中に、パソコンで他の作業をやりたくなるところですが、それはおすすめしません。メモリが足りなくなってパソコンがフリーズしたり、作業中のデータが消失したりするトラブルが発生する可能性が高くなります。またインストールにかかる時間がさらに長くなる原因にもなります。

- CafeLog -