整数を処理する方法について,例を挙げながら述べます。
Lesson 1 では通常の割り算の演算子「/」を説明したが,整数を対象とするときは以下のような便利な演算子があります。
「\」・・・整数同士の割り算。
「Mod」・・・整数同士の割り算の余り。
例えば,以下のように使います。
#prompt Print 30\7 ' 30÷7の整数としての割り算(答え:4) Print 30 Mod 7 ' 30÷7の余り(答え:2) Print 29.6 Mod 7.4 ' 小数は四捨五入で整数にされる(結果は1つ上と同じ)
注:「Mod」は大文字小文字を区別しません。
注:プログラム中に「'」を書くと,そこから行末までがコメント(注釈などを入れておく部分。実行されない)になります。
問17 BASICを用いて,193÷32 の商と余りを計算せよ。
小数の整数部分を取り出す関数があります。(関数なので,大文字小文字は区別されます!)
「Int」・・・〜を超えない最大の整数。
「Fix」・・・〜の端数を切り捨て。
Intの説明は少し分かりにくいですが,以下の例で分かるでしょう。
#prompt Print Fix(8.5) ' 8.5の端数切り捨て(8) Print Fix(-8.5) ' -8.5の端数切り捨て(-8) Print Int(8.5) ' 8.5を超えない最大の整数(8) Print Int(-8.5) ' -8.5を超えない最大の整数(-9)
正の数を与えたときはIntもFixも結果は同じです。しかしInt(-8.5)の場合,これの結果を「-8」だとすると-8は-8.5を超えていますから不適当です。結局「-9」が,-8.5を超えていない整数では最大というわけです。
Intの利点は,数値の扱いが分かりやすいことです。例えば Int(m)=k となる m の範囲は k≦m<k+1 ですが,Fix(m)=k となる m の範囲は
k≦m<k+1 | ( m > 0 ) |
k = 0 | ( m = 0 ) |
k-1<m≦k | ( m < 0 ) |
と,分かりにくくなります。Rnd関数(ヘルプ参照,後々講座中でも扱う予定)を使う場合は特に,FixよりIntの方が便利です。
下にサンプルを載せます。
#prompt Dim A As Double Input A Print "Aの整数部分は:";Int(A) Print "Aの小数部分は:";A-Int(A)
整数部分と小数部分に分けます。しかしこの例では正数ではうまく動きますが負数を入力した場合にうまく動きません(実行してみて下さい)。その修正は章末問題とします。
次は整数の割り算です。上の「\」「Mod」で行ったことと同じことが出来ます。
#prompt Dim Warareru As Double, Waru As Double, Shou As Double, Amari As Double Warareru=30 Waru=7 Shou=Int(Warareru/Waru) Amari=Warareru-Waru*Shou Print "30÷7の商:";Shou Print "30÷7の余り:";Amari
このやり方の利点は,割られる数・割る数が整数でなくても使える点です。例えば
#prompt Dim Warareru As Double, Waru As Double, Shou As Double, Amari As Double Warareru=34.8 Waru=7.6 Shou=Int(Warareru/Waru) Amari=Warareru-Waru*Shou Print "34.8÷7.6の商:";Shou Print "34.8÷7.6の余り:";Amari
<実行結果>
34.8÷7.6の商: 4 34.8÷7.6の余り: 4.4
問18
(1) 数値を入力し,その値の平方根が整数ならばその値を表示し,整数でないならば何もしないプログラムを作成せよ。
(2) (1)に次の機能を追加せよ:「もし入力された値が負なら,『その値の平方根は存在しません』とメッセージを表示する。」
(ヒント)「ある数が整数である」・・・「ある数の小数点以下を取り除いても元の値と同じ」