質問<1539>
「「プログラムについて」」
日付 2004/1/4
質問者 インテル


(問い)n個の値a[0],a[1].....a[n-1]が与えられたとき、
a[i]の順位rを求めるプログラムをかけ。
ただし、順位=(自分より大きいものの個数+1)である。
お願いします。

お便り
日付 2004/1/30
回答者 naoya


C言語とBASICの二つでいちおう書いてみました。
C言語のほうは動作確認をしましたが、BASICのほうは確認していません。
多分動くと思いますけれど・・・。本当はa[k](k = 0,1,2,...,n-1)の値を入力させるほうがいいのでしょうが、
ここでは三次関数の値を入れています。

まず順位を求める配列rnk[k](k = 0,1,2,...,n-1)に順位の初期値0を与え、
2変数i, jを用いて二重ループを回してa[i] < a[j]となったらrnk[i]を一つ
増やすことで順位を求めます。

<C言語>
#include <stdio.h>

#define MAX 10

/*
順位を求める関数rank()
a[]に順位を求めたい値の入った配列
rnk[]にa[]の順位が入る
nは配列の要素の個数を指定する
*/

void rank(int a[], int rnk[], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
rnk[i] = 1; /* 順位の初期値は1 */

for (j = 0; j < n; j++)
if (a[i] < a[j])
rnk[i]++; /* 自分より大きい値があった */
}
}

/* テストルーチン */
int main(void)
{
int a[MAX], rnk[MAX], i;

for (i = 0; i < MAX; i++)
a[i] = (i-3)*(i-5)*(i-7);
/* a に適当な値を代入する */

/* 順位を rnk に求める */
rank(a, rnk, MAX);

/* 順位を表示 */
for (i = 0; i < MAX; i++)
printf("a[%d] = %4d :rank = %d\n",
i, a[i], rnk[i]);

return 0;
}

<BASIC>
C言語版と同じことをしているので、コメントはCのほうを参照(;^_^A
150-190までが順位を求めるところです。

100 dim a(10), rnk(10)
110 for i=0 to 9
120 a(i) = (i-3)*(i-5)*(i-7)
140 next i
150 for i=0 to 9
155 rnk(i) = 1
160 for j=0 to 9
170 if a(i) < a(j) then rnk(i) = rnk(i) + 1
180 next j
190 next i
200 for i=0 to 9
210 print "a[";i;"]:rank="rnk(i)
220 next i