0

そのため、1 からユーザーが入力する特定の数値までの一連の乱数を生成する必要があるプログラムを作成していました。次に、生成された乱数によって、1 から N までの各数字がヒットしたおおよその確率を特定します。だから私のコードのために: -

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
printf("Enter a number");
int input;
scanf("%d",&input);
getRandomIntFrom0ToK(input);
return 0;
}

void getRandomIntFrom0ToK (int K)
{
int i;
int j;
int a[2][K+1];
int b[999][999]; 
int counter=0;

srand(time(NULL));

for (i=0;i<K;i++) //Here I am storing the random numbers and indexes of each number 
{
   a[0][i] = i;
   a[1][i]=rand()%K;

}

for(i=0;i<K;i++)//In another array transferring the indexes from the first array
{
    b[0][i]=a[0][i];
}
for(i=0;i<K;i++)//Setting the second column of array b to 0
{
    b[1][i]=0;

}


for(i=0;i<K;i++)//Running two for loops to check in array a if any of the values from the index are equal to any of the random numbers in the second column
{
    for(j=0;j<K;j++)
    {

        if(a[0][i]==a[1][j])//If they are then make the index of array b corresponding to the number equal to 0+1, I will eventually add a certain probability but for now I just want to see that it works
        {
            b[1][i]=b[1][i]+1;

        }
    }
}//Up till here if I run the program, it works

/*for(i=0;i<K;i++)
{
    printf("%d\n",b[0][i]);
}*/

}

したがって、問題は、b 配列の printf ステートメントを含めると、プログラムが機能しないことです。私のコードが非常に非効率的であることはわかっていますが、何が間違っているのかを知りたいだけです。最終的に私がやりたいことは、b 配列の両方の列を出力して、(1/K*100) を使用して行う数値と対応するパーセンテージを画面に出力することです。ありがとう、どんな種類の助けも大歓迎です。

4

1 に答える 1

0

2 つの問題: プロトタイプの欠落とスタック領域の過度の使用。

OPはgetRandomIntFrom0ToK(input);最初に宣言せずに呼び出します。おそらく大きな問題ではありません。この問題は、典型的な警告を引き起こすことを物語っています。したがって、コンパイラの警告が無視されるか、完全に有効になっていないことを意味します。

void getRandomIntFrom0ToK (int K);
int main(void) {
  ...
  getRandomIntFrom0ToK(input);
  return 0;
}

OP は大きな変数を作成します。これはおそらく問題です。興味深いことに、OPの投稿にはもっと小さいもので十分です。コンパイラーは、printf("%d\n",b[0][i])値が読み取られず、代入されるだけであるため、この変数を最適化する可能性があります。この変数は数百万バイトの長さであるため、その存在 (または存在しない) は、スタック領域のコード操作に重大な結果をもたらす可能性があり、多くの場合、malloc().

void getRandomIntFrom0ToK (int K) {
  ...
  // b is maybe millions of bytes
  // int b[999][999]; 
  // Code only uses b[0][...] and b[1][...] 
  int b[2][999]; 

が本当に必要な場合は、スペースを提供するためにb[999][999]を使用することをお勧めします。malloc()

于 2013-11-18T19:33:50.667 に答える