ICTメディア編集U 2025年11月28日
プログラミング練習2(条件分岐: if文を用いた閏年判定プログラムの作成)
ここでは、If文とよばれる条件分岐を用いた,うるう年判定のプログラムの作成について簡単に説明します。
演習課題(条件分岐:if文;閏年判定)
作成プログラム:閏年判定プログラム
[プログラム処理の整理]
うるう年判定のプログラムを作成しようと考えた場合,まず,与える入力事項と得たい出力事項を決め,プログラム上の処理を考えます.
・ 西暦の年号を数値で入力し,出力はその年号がうるう年であるかどうかを表示することとしましょう.
・ 判定は判定ボタンを作って,それを押したら判定が出力されるようにしましょう.
・ うるう年は,西暦の年号が,4で割りきれかつ100で割りきれないか,または400で割り切れれば,その年はうるう年ということになります.それ以外は,うるう年でないことになります.そこで,この判定にif文を使うことになります.
入力:西暦の年号(数値)
判定ボタン:ボタンを押すことで判定結果を出力する.
出力:「うるう年である」,「うるう年でない」
(プログラムの終了ボタンも用意する)
[プログラムの作成]
では、うるう年判定のプログラムを作成しましょう。
1. ずは「新しいプロジェクト」を開いて,各自のフォルダ「Z:\Documents\Visual Studio 2017\Projects」(もしくは、c:\Users\*****\source\reposなど)に,プロジェクト名:「uru-hantei」で,「Visual Basic ディスクトップ」「Windowsフォームアプリケーション」で作成します.
2. 「フォーム」のウインドウ左上部の表示文字を「Form1」から「うるう年の判定プログラム」に変更します.これは,Form1のプロパティウインドウで,Textを書き変えます.
3.
フォームに文字の入力部分,表示部分,判定のボタンなどを,ツールを使って配置していきます.文字入力は,「TextBox」を用い,文字表示は「Label」を用います.判定のボタンは,「Button」を用いましょう.「TextBox」や「Label」も設置方法は,Buttonと同じです.プロパティウインドウのText部分を書き変えて,以下に示すフォーム例のように作成してみましょう.
l 文字入力:TextBox
l 文字表示:Label
l イベントの開始など:Button
まず,ツールボックスから「Label」を選んで西暦、年とうるう年かどうか表示するところをフォームに配置します。プロパティウインドウで,文字を書きかます.次に,年を入力する部分をフォームに配置します。このように文字や数値を入力させる部分には,TextBoxのツールを使います.さらに判定するボタン,終了のボタンをフォームに配置します。

4. うるう年判定のプログラムをコードを用いて書いていきます。まず,はじめに,入力値を変数(プログラム上でわかりやすい文字に置き換えた,その文字や記号)に割り当てるため,その記号を決めます.入力される西暦の年号を整数の「toshi」という文字に設定します.まず,以下のように,この文字はどのような形の中身(数値や文字など)が入るのかを含めて,変数の型宣言を行います.型宣言は,サブプログラムよりも前にします.
Dim toshi As Integer
入力値(西暦の年号)は,TextBox1(中身は,TextBox1.Text)に入力されますが,これは,文字列であるため数値として,このtoshiという変数に代入する(イコールを使って,右側に示すものを左側の中身として置き換える)必要があります.
そのため,文字列を数値に変換する関数命令である:Val( )を用います.これは,カッコ内の示す文字列を数値に変換するものです.
l TextBox1に入力された文字列は,TextBox1.Textという名前で呼び出すことができます.
注意:Visual Basic では、テキストボックスに数が入力されても、文字列としか認識されません。そのため、文字列を数値に変換する関数(Val)を用いて、入力したものが数値として扱えるようにすることができます。
toshi = Val(TextBox1.Text)

Visual Basicのコード解説):
· 変数:プログラム上でaaなどの記号で数値などをあつかうものは変数とよばれるもので,後で数値を入れることにより、その値が決まるものです.aaという数値が入る箱を用意してその中に計算した値を入れて置いたり,その値を指定して表示させたりすることに使います.変数の名前(変数名)は任意に付けて良いのですが、次の規則に従ってきめるとよい。
・ 頭の文字は英字とし、文字数は255字(半角)以内とします。
・ ピリオド(.)や型宣言文字は使用できません 。
・ Visual Basicで特別の意味をもつ語、たとえば、 If、Loop等は予約キーワードと呼ばれ、使用できません。
·
変数の型宣言:変数の型宣言は、Dimステートメントで行います。
Dim 変数1, 変数2, … As 変数の型
例)Dim taijyuu, shintyou,
As Integer '変数 taijyuu と shintyou は整数型です。
変数の型宣言は必ず,変数を使用する前に宣言をしておく必要があります.
Visual Basic で使用できる型の一部を以下に示します。
|
型名 |
サイズ |
値の範囲 |
|
整数型 Integer |
2 バイト |
-32768〜32767 |
|
長整数型 Long |
2 バイト |
-2147483648〜2147483647 |
|
単精度浮動小数点型 Single |
4 バイト |
負のとき:-3.402823E38〜-1.401298E-45 正のとき:1.401298E-45〜3.402823E38 |
|
倍精度浮動小数点型 Double |
8 バイト |
負のとき: -7.79769313486231E308〜-4.94065645841247E-308 正のとき: 4.94065645841247E-308〜7.79769313486231E308 |
|
文字型 String |
|
0〜約65,535文字までの文字列 |
|
バリアント型 Variant |
16 バイト |
日付/時間、倍精度少数点数、文字列型 |
l
Val関数: 文字列を数値に変換する関数.Val
( ):カッコ内の文字列を数値に変換する.
例)bb = Val(TextBox1.Text)
(変数bb はテキストボックス1への入力された文字列を数値に変換したものが代入される。)
Toshi = Val(TextBox1.Text)
shintyou = Val(TextBox2.Text)
taijyuu = Val(TextBox3.Text)
· 代入ステートメント: Visual Basicにおける計算式の書き方は、イコール(=)の左側に計算結果を代入する変数などをおき、右側に計算式、定数、変数などを書きます.
例) aa = 5 + 12
(5+12の計算結果17がaaに代入されます.この行以降aaには17が入っていることになります.)
abc = 20 * 100 + 1
(abcには,20かける100に1足した数の2001が入る)
toshi = toshi + 1
(最終的に,toshiは今入っているtoshiの数に,1足したものが入る)
5.さらに,条件分岐:if文のプログラムをコード化していきます.今回,条件分岐は,うるう年か,うるう年でないか,の2つになります.
さて、うるう年とは
この二つの条件のどちらかが成り立つときはうるう年であるとなります。
重要)ここで,「割り切れる」,「割り切れない」の判定には,剰余演算子の「Mod」を使います.Modというのは,数値を割ったあまりを出力する演算子.「剰余」(+,−などと同じに考えてください)
4で割り切れるかを判定する場合には,以下のように剰余算の結果がゼロに等しいかを判定します.(入力された年号(toshi)を4で割ったあまりが0であれば,割り切れている)
toshi Mod 4 = 0
(この場合は,代入ステートメントではなく,ifの条件式として使います)
100で割り切れないことを判定する場合には,以下のように剰余算の結果がゼロよりも大きいを判定すればよくなります.(入力された年号(toshi)を100で割ったあまりが0よりも大きければ,割り切れない)
toshi Mod 100 > 0
400で割り切れるかを判定する場合には,以下のように剰余算の結果がゼロに等しいかを判定します.(入力された年号(toshi)を400で割ったあまりが0であれば,割り切れている)
toshi Mod 400 = 0
重要)上記の判定を「かつ」や「または」という言葉でつないでいる.これは,2つの条件を満たさねばならないときは「かつ」とし,Andで2つの条件を接続することができます.また,どちらか一方が条件を満たせばよい場合には,「または」とし,Orで2つの条件を接続することができます.
ここで書いてあるAndとは A And B つまりAでもありかつBでもあることを意味し、Orとは「または」の意味で A Or B でAかBどちらか一方ということです。
つまりIf( A And B ) Or C と書いたらA と B両方が成り立つか、またはC が 成り立つときIf文の次の行を実行することになります。
If文でこれを調べているのですから
If ((4で割り切れるか?かつ100で割りきれないか?) または400で割り切れるか?) Then
といった意味で書いてあります。
この条件以外はうるう年ではないのでElse以下で"うるう年ではありません"と表示するようにすればよいのです。
ここで,Label3.Textが判定を表示する部分ですから,そこにうるう年かどうかの文字列を代入します.
重要事項の整理
Mod: 値を割ったあまりを出力する演算子 (10 Mod 4は,2という答えになります)
And: Andとは「かつ」を意味し,双方が成り立つことが条件(A And B つまりAでもありかつBでもあることを意味し,A,Bも満たさねばならない)
Or: Orとは「または」を意味し,どちらか一方が成り立つことが条件(A Or B つまりAまたはBであることを意味し,Aか,Bかどちらかを満たせば良いことになる.)
(If文部分のコードの中身)
If ((toshi Mod 4 = 0 And toshi Mod 100 > 0) Or toshi
Mod 400 = 0) Then
Label3.Text = "うるう年です"
Else
Label3.Text = "うるう年ではありません"
End If
6.最後は終了ボタンの設定です.「終了」と表示したボタン2をクリックし,コードには,Endと入力してください.Endコードは,プログラムを入力させます.
Private Sub Button2_Click(ByVal
sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
End
End Sub

7.プログラムを実行して確認してみてください。
うまく行けば文字入力の部分をクリックして年数を入力し、計算ボタンをクリックするとうるう年かどうか判定します。
2000年は,どのような判定になったでしょうか.
例)
100年は4で割り切れて 100で割り切れているのでうるう年ではありません。
104年は4で割り切れて100で割り切れないのでうるう年です。

8.確認が終わったらメニューバーの「ファイル」の「すべて保存」でフォルダに保存しておきましょう.また,メニューバーの「ビルド」で実行形式のファイル:uru-hantei.exeを作成し、このファイルだけで実行できるかを見てみましょう。
今回のプログラムはフォルダにファイルがいくつか入っていますので,保存したい場合には,フォルダごと,コピーしてください.
今回は,簡単なプログラムを作成しましたが,入力された値を計算し,出力したり,計算結果に応じて,出力を変えたりすることは,プログラムの基本ですので,次週以降も他のプログラム作成を行っていきます.時間があれば,以下の自習課題を含めて自分でもプログラムつくってみることに挑戦してください.
加藤のページへ | ICTメディア編集U | 11月28日講義資料の先頭ページへ