関数 calculateAmountOfPrize は,業務改善の効果における改善額と短縮期間を,それぞれ improvement と period で受け取り,賞金額を戻り値とする。
改善額が20万円で短縮期間が3日の業務改善と,改善額が5万円で短縮期間が14日の業務改善があった。
この二つの賞金額の合計は何円か。
ここで,改善額と短縮期間の値はそれぞれ0以上とする。
〔プログラム〕
○整数型:calculateAmountOfPrize(整数型:improvement,// 改善額(円) 整数型:period) // 短縮期間(日)
整数型:prize // 賞金額(円)
if(improvement が 100000 より小さい)
if(period が 7 より小さい)
prize ← 500
else
prize ← 1000
endif
else
if(period が 7 より小さい)
prize ← 2000
else
prize ← 5000
endif
endif
return prize
正答3
解説
正解は3です。
図のプログラムは、改善額improvementが100000より小さいかどうかで分岐し、さらに短縮期間periodが7より小さいかどうかで賞金額を決めます。
改善額10万円未満では、期間7日未満が500円、7日以上が1000円です。
改善額10万円以上では、期間7日未満が2000円、7日以上が5000円です。
【計算】
1件目は改善額200000円、短縮期間3日です。
200000は100000より小さくないので、外側のif文はelseの処理に進みます。
periodの3は7より小さいので、prizeは2000になります。
2件目は改善額50000円、短縮期間14日です。
50000は100000より小さいので、外側のif文の処理に進みます。
periodの14は7より小さくないので、elseの処理でprizeは1000になります。
合計は、2000円+1000円=3000円です。
【選択肢別解説】
1:× 1,000円は2件目の賞金額だけです。
1件目の2,000円を加える必要があります。
2:× 1,500円は、500円と1,000円の合計です。
1件目は改善額が10万円以上なので、500円ではなく2,000円です。
3:○ 1件目の2,000円と2件目の1,000円を合計した3,000円です。
4:× 5,500円は、500円と5,000円の合計です。
分岐の条件を取り違えています。
【ポイント】
入れ子になったif文は、外側の条件から順に一つずつ判定します。
「より小さい」は、その値ちょうどを含まない点に注意します。