Tosainu Lab

これはひどい・・・

  • 2013/05/28

どーもです。

 

とある電子系学科のC言語プログラミングの授業の小テスト模範解答より転載。

 

その1

1個120円の商品の個数を入力し、個数が5個より少ないときは割引なし、50個未満の時は1割引、50個以上の時は2割引とした時の値段を計算するプログラム。

#include<stdio.h>
int main(void)
{
  int kosuu, waribiki, nedan;

printf(“商品の個数は?”); scanf(“%d”, &kosuu);

if(kosuu < 5) { waribiki = 0; } else if(kosuu < 50) { waribiki = 1; } else { waribiki = 2; }

printf(“%d 割引。 \n”, waribiki); nedan = (int)( kosuu * 120 * ( 10 - waribiki ) * 0.1 );

printf(“金額は %d円 です。 \n”, nedan);

return 0; }

 

その2

お釣りの金額を入力し、100円、50円、10円がそれぞれ何枚か計算するプログラム。

#include<stdio.h>
int main(void)
{
  int oturi;
  int coin_100=0, coin_50=0, coin_10=0;

printf(“お釣りの金額を入力してください:”); scanf(“%d”, &oturi);

if(oturi >= 100) { coin_100 = oturi / 100; oturi = oturi % 100; } if(oturi >= 50) { coin_50 = oturi / 50; oturi = oturi % 50; } if(oturi >= 10) { coin_10 = oturi / 10; }

puts(“コインの枚数は, ”); printf(“100円が%d枚\n”, coin_100); printf(“50円が%d枚\n”, coin_50); printf(“10円が%d枚\n”, coin_10);

return 0; }

 

これは許せない・・・

 

まず変数名。

ローマ字変数kosuu、waribikiなどは論外。oturiなんてローマ字(笑)じゃないですか!

これが英語系の授業も持っている先生とは思えない変数名ですね・・・

そしてローマ字(笑)変数名の中にcoinなんていう結構まともな変数名を混ぜているのも統一性なくて許せないですね。

 

そして、変数の扱い方。

例えば2番めのプログラム、

  • おつりが1000円を超えるとき
  • 1円の処理
  • 入力された値が負のとき

などの処理はどうなっているのでしょうか?

このプログラムで使われている変数型はint型。これは-2147483648 ~ 2147483647の値を格納することができます。

2147483647が入力されたらどうなるのでしょうか?100円玉21474836枚となんの躊躇もなく表示してくるのでしょうか?

負の数が入力されたらどうなるのでしょうか?お釣り-何枚とかでてくるのでしょうか?

プログラムを正しく動かすためにも、考えられるすべての場合に対処できるようにしなくてはいけません。

少なくともこのプログラムには

  • 入力された値が適切なものか判断する処理
  • ↑のような値が入力された時に再び値を入力するようにするなどの処理
  • 1円や他の硬貨、紙幣についても計算する処理

などが必要だと僕は思います。

 

最後に、

プログラムに日本語使うな

これはとさいぬの「2バイト文字不要論(仮)」と関係があります。

日本語などの2バイト文字はちょくちょくバグを引き起こします。

僕自身、この学校に入学し課外演習の1つとしてプログラムをガリガリ書いていましたが、日本語はコメントの中にあってもバグを引き起こしたことがありました。

そのプログラムはコメントを消すことで完璧に動作しました。

 

UIの部分に日本語を使うのは仕方ないとは思いますが、コードの中に日本語を含む2バイト文字を入れるのは僕は納得できませんね。

予想できないバグを発生させ、開発を困難にさせます。

 

 

僕はこの授業を取らなくて本当に良かったと思っています。

いくらなんでもこれはひど過ぎます。

電気科のプログラミングはこんなものだったのですか、残念です。