バケット

プログラミングの授業のTA。
大分脱落者も増えてきているようだけど、
先生曰く「それでも今年は自分で考えてやっている率が高い」
だそうで、言われてみればそうかもしれない。

今日の演習は

ファイルからデータ(年齢の羅列)を読み込んで
それらを昇順に並び替えて別のファイルに出力しなさい。

と言うようなもの。
実際は構造体使ったりなんだけど、要約するとそんな感じ。

で、並び替えってーと、ソート。
どうやりますか?

殆どの学生は(僕も)下のようなものを書いたり、
それを目指していました。


#include <stdio.h>
#define MAX_DATA 5

int main(int argc, char* argv[])
{
  FILE* fp;
  int i, j, temp;

  int ages[MAX_DATA];
  
  fp = fopen("src.txt", "r");
  for (i=0; i<MAX_DATA; i++) {
    fscanf(fp, "%d", &ages[i]);
  }
  fclose(fp);

  // ここから並び替え ----------------

  for (i=0; i<MAX_DATA-1; i++) {
    for (j=0; j<MAX_DATA-1; j++) {
      if (ages[j+1] < ages[j]) {
        temp = ages[j];
        ages[j] = ages[j+1];
        ages[j+1] = temp;
      }
    }
  }

  fp = fopen("dest.txt", "w");
  for (i=0; i<MAX_DATA; i++) {
    fprintf(fp, "%d\n", ages[i]);
  }
  fclose(fp);

  // ここまで並び替え ----------------

  return 0;
}


ところが、質問してきた学生、
それと言ってプログラムは得意では無い感じの彼、
画面を覗いてみると並び替え部分が…


  fp = fopen("dest.txt", "w");
  for (i=0; i<1000; i++) {
    for (j=0; j<MAX_DATA; j++) {
      if (ages[j] == i) {
        fprintf(fp, "%d\n", ages[j]);
      }
    }
  }
  fclose(fp);


うお、アツイ。

…関係ないけど、ブログにソース載せるのはどうしたらいいんだ…。
<pre>使ったらえれぇ行間空くし…。
Class | comments (0) | trackbacks (0)

Comments

Comment Form

icons:

Trackbacks