next up previous contents
Next: 6 値の型変換 Up: algorism_out Previous: 4 変数

Subsections


5 制御構造

(教科書p.32)

プログラムの流れを変える ``制御構造をあわらす命令''を使用する。 制御構造を表す命令には、``if'', ``while'', ``case'', ``for''などがある。

5.1 if 文

以下は、``if文''の典型的な記述法である。 ほぼどの言語も同じである。 もし、[条件文] が成り立てば、``処理1''を実行し、成り立たなければ、 ``処理2''を実行。

\includegraphics[width=6cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Algorism/Fig/if_basic1.eps}

条件を複数設定するには、以下の様にする。 もし[条件文1] が成り立てば ``処理1''を実行し、 成り立たなければ次の[条件文2]を判断する。``elsif''は複数つなげてもよい。

"[条件文1] が成りたつ" と言うのは、"[条件文1] $=$ true" を示し ている。

"[条件文1] が成りたたない" と言うのは、"[条件文] $=$ false" を示し ている。

\includegraphics[width=6cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Algorism/Fig/if_basic2.eps}

例えば、年齢を読み込み、20歳以上なら ``あなたは大人です''、20歳未満なら ``あなたは子供です。''と表示するプログラムを作る。

------------program Start ---------
printf ("あなたの年齢を入力して下さい。\n")
a = gets.chomp             # 変数をキーボードより入力。shompは改行を取る命令
nenrei = a.to_i            # 文字変数を整数に変換
if nenrei > 19 then
   printf("%d歳なので、あなたは大人です。\n", nenrei)
else
   printf("%d歳なのであなたは子供です。\n",nenrei)
end
------------Program End ----------

条件が2つ以上あった場合はどうするか? 例えば、テストの得点を入力し、60点未満は「あなたは不可デス。」、60点から 79点までは「あなたは良です。」、80点以上なら「あなたは優デス。」と 表示 させるプログラムを作ってみる。

------------program Start ---------
printf ("テストの得点を入力して下さい。\n")
a = gets.chomp
ten = a.to_i
if ten < 60 then
   printf("%d点なので、「不可」です。\n", ten)
elsif  (ten >= 60) & (ten < 70) 
   printf("%d点なので、「可」です。\n",ten)
elsif  (ten >= 70) & (ten < 80)
   printf("%d点なので、「良」です。\n",ten)
else
   printf("%d点なので、「優」です。\n",ten)
end
------------Program End ----------

5.1.1 練習

  1. 上記のプログラムを改良し、 ``秀''の判断をできるプログラムを書け。
  2. 教科書p.53 問4.4 の練習問題を解いてみよ。

5.2 for文

for文は、オブジェクトに記述された方法で ``処理''の内容を繰り返す。
\includegraphics[width=8cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Algorism/Fig/for_ruby.eps}
例えば、1から10までの和を求めるプログラムをつくる。
-------------------------------
                              # sum は合計をあわらす変数で
sum = 0                       #     初期値をゼロに設定 
for n in 1..10 do            # n: 変数、1..10 は n を
                              #     1から10まで変化させるオブジェクト
  sum = sum + n               # sum に順次nの値を加え、その結果をさらに 
                              #    sumに置き換えている。
 print sum, "\n"              # 計算経過の表示    
end                                 

print "合計は ", sum, "です。\n"
--------------------------------
メソッド定義を利用して、a から bまでの和を求めるプログラムに書き換える。 a, bはメソッド内で使用する変数でると考える。

-----------------------------------
def wasan(a,b)
  sum = 0
  for n in a..b do
    sum = sum + n   
#   print sum, "\n"             # ==> コメントアウトしておく           
  end                                 
  print "合計は ", sum, "です。\n"
end

wasan(1,100)
wasan(1,50)
wasan(30,150)
-----------------------------------
このように書き換えると、劇的にプログラムの生産性があがる。 メソッドの練習の詳細はセクション9で行う。

5.2.1 練習

  1. 50!を求めるプログラムを作れ。
  2. メソッド定義を用いて、与えた変数の階乗を求めるプログラムを作れ。

5.3 while文

while $\sim$ do $\sim$ end 文の構造は、以下の様になっている。
\includegraphics[width=10cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Algorism/Fig/while_basicalg.eps}
条件が真である限り do $\sim$ end 間を実行しつづける。 例えば、``while''文を用いて 1 から 100 までの和を求めるプログラムを作る。
-------------------------------
sum = 0                              # 初期値
n = 1                                # 初期値
while n < 101 do
  sum =  sum + n  
  print "sum=", sum, "\n"
  n = n + 1
end
print "合計は ", sum, "です。\n"
-------------------------------

5.3.1 練習

``while''文を用いて作った 1 から 100 までの和を求めるプログラムをメソッ ド定義を使って書き直せ。

5.4 case文

``case'' 文は変数の値(内容)に応じて、条件分岐する。
\includegraphics[width=14cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Algorism/Fig/case.eps}
上記の構文で、``変数2''や ``変数3''は、それぞれ複数を指定してもよい。 例として、くだものの値段を表示するプログラムを作ってみます。
りんご 100円
みかん 30円
かき 50円
いちご 250円
であるとし、それぞれの値段を表示するプログラムを作成する。

------------program Start ---------
printf("くだものを選択して下さい。\n")
printf("1.りんご、   2.みかん、   3.かき、   4.いちご \n")
a = gets.chomp
kuda = a.to_i
case kuda
  when 1
     printf("りんごは、100円です。\n")
  when 2
     printf("みかんは、30円です。\n")
  when 3
     printf("かきは、50円です。\n")
  when 4
     printf("いちごは、250円です。\n")
else 
 printf("そんなのありません。\n")
end
------------Program End -----------

5.4.1 練習

以下のような血液型による性格判断プログラムを作成せよ。
A型: 細かく、きちっとしている
B型: 柔軟である
AB型: 合理的で能率よくものごとを処理する
O型: 親しみやすく性格も表裏がない

実行例
血液型を入力して下さい。
1. A型, 2. B型, 3. AB型, 4. O型
2
あたなは、柔軟性のある性格です。


next up previous contents
Next: 6 値の型変換 Up: algorism_out Previous: 4 変数

平成22年12月28日