質問<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