ソースコードの説明.

順位付け負のデータ版

ゴルフ(Golf)のスコアのように小さい値の方が順位高い場合の順位付けについて考える.

ゴルフのスコアの範囲を -20 ~ +36 とする. Cでは負の値を添字とする配列は認められないので, 次のようにスコアに対し添字をバイアス(bias:かたより)して考える.

Pascal構造化BASIC, FORTRAN77などでは, 配列の部分範囲指定ができるため, このようなバイアスは考えなくても良い, 部分範囲指定ができないのはCの欠点の一つ.

ソースコード

源文件

/*
 *---------------------------------
 *      順位付け_負のデータ版
 *---------------------------------
 * Great by liang@Ryukyus
 * Compiler : gcc i686-apple-darwin10-gcc-4.2.1 (Mac OS X 10.6.6)
 * Date : 23/02/2011
 */

#include <stdio.h>
#define Num 10
#define Max 36
#define Min -20
#define Bias 1-(Min)       /* 最小値を配列要素の1に対応させる */


int main(void){
  int a[]={-3,2,3,-1,-2,-6,2,-1,1,5};
  int i,juni[Max + Bias + 1];

  for(i=Min + Bias; i<=Max + Bias; i++){
    juni[i]=0;
  }


  for(i=0; i<Num; i++){   /* 各得点に対応する添字の配列の内容を+1 */
    juni[a[i] + Bias]++;
  }

  juni[0]=1;              /*  */
  for(i=Min + Bias; i<=Max; i++){
    juni[i] = juni[i] + juni[i-1];
  }

  printf("得点\t順位\n");
  for(i=0; i<Num; i++){
    printf("%d\t%d\n",a[i],juni[a[i] + Bias - 1]);
  }
  return 0;
}

実行結果

得点      順位
-3        2
2         7
3         9
-1        4
-2        3
-6        1
2         7
-1        4
1         6
5         10
Chapter1 @ 目録 @ HomeWork List @ 昭亮's Homepage