今週の課題の講評

プログラミングの苦手意識の強い学生ほど、 1 行 1 行の解説をおろそかにする傾向がある。 1 行ずつ全てが解説できるようになるようにすることを、 ひとまずの目標としよう。

変数にせっかく切り出した文字列を代入したのに、 その後の計算に活かしていないプログラムが目立った。 これも、変数を何という名前で取ったのか、 プログラムの 1 行解説を始める前に宣言しておくと、 プログラムの解説途中で気づくと考えられる。

レンタルビデオについては、1 教科の成績処理と仕組みが同じである。 仕組みが同じことに気づいた学生は少なかったように見受けられた。

有効数字が間違っているものが多かった。 借りた本数などは、小数点第 1 位までは必要である。 最大 2 桁のものは、平均値も 2 桁用意する。1 から 10 までなら、 整数を 1 桁、小数点を 1 桁用意する。

to_i を四捨五入を含めて使いたい場合、 小数点以下を四捨五入しないので、工夫が必要である。 変数 money に消費税をかけ、四捨五入して値段を打ち出したい場合、

money = money * 1.05
money += 0.5
printf("%d 円\n",money.to_i)

としなければ、四捨五入されない。 実際に数値を具体的に入れ、 演算を行ってみよう。解けたら過去の演習問題で解けるものがあるはずである。

データをどのようなブロックで分けたのか、解説すると、 無駄な入力データなどを減らせることができるが、顧客の英語名や、 無意味な文字列など、 プログラムで使っていないデータまで入力しているものが多かった。

解答例 (配列を使わない場合)

何でもよいのでデータを作り、そこから考えていく。以下に解答例を示す。 もっとよい解答は、学生の作品を見ること。 もちろん配列を使用して解いてもよい。

例えば、返した本数で料金が発生するとして、 領収書のデータは、レジの支払時刻、会員番号、返した本数のデータに関して、 iimori.dat とまとめ、 rental.rb のようなプログラムを作ればよい。 rental_data にデータを読みこみ、本数を取り扱う $3 は honsu にしまう。 人数は ninzu で数えている。

また、カフェの伝票では、テーブル番号、A ランチの注文数、 B ランチの注文数を用意する。伝票のつくりを思い出すこと。 変数 a_lunch, b_lunch にそれぞれのメニューを頼む人数を代入し、 総数を nin, それぞれの値段をかけて求めることができる売上げは total にしまっている。 kuromori.dat とまとめ、 cafe.rb などとすればよい。ちなみに kuromori.dat からは、テーブル 001, 002, 005 が 2 回出現している。新しい客が支払を終えたテーブルにつくことが分かる。

コピー機は、 データを読みこんだら、それを 10 円か 7 円に仕分けることができればよい。 前回の例 copy.dat のように、使用開始時刻、ユーザ、 枚数を記録したデータについて copy.rb とすると求めることができる。copy_data にデータをしまい、 枚数 $3 を copy にしまう。30 枚以上ならば、 7 円をかけて値段の総和をしまう変数 sum にしまい、 それ以外は 10 をかけて値段の総和をしまう変数 sum にしまう。

電車の券売機では、逆方向の距離は負になってしまう。 -1 をかけるなどして、正しい料金を求める必要がある。 変数は、出発場所、行先場所の変数を stop1, stop2 とし、そのパターンを、 データをしまう 1 行 station と比較させる。station の距離だけをとりだし、 それぞれ length1, length2 としてしまい、それらの差を取って、計算を行う。 hanekoshi.rb

本日の講義目次 / 基礎プログラミング I / 2007 年度

Madoka Nishimura <madoka@e.koeki-u.ac.jp>