質問<1539>2004/1/4
(問い)n個の値a[0],a[1].....a[n-1]が与えられたとき、 a[i]の順位rを求めるプログラムをかけ。 ただし、順位=(自分より大きいものの個数+1)である。 お願いします。
お便り2004/1/30
from=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