-1

Builder C++ 6 を使用しています。

次のコードでは、ボタンにランダムな AnsiString 文字を生成する関数が必要ですが、KreirajPOlja()常に得られるのは、図のように生成された文字が 1 つだけの行列 9*9 です。

ここに画像の説明を入力

void __fastcall TForm1::KreirajPolja()
{
                  int tr;

       for(int i=0;i<dim_x;i++)

       for(int j=0;j<dim_y;j++)  {


  Dugme[i][j]->Height=20;
  Dugme[i][j]->Width=Dugme[i][j]->Height;
  Dugme[i][j]->Left=i*Dugme[i][j]->Height;
  Dugme[i][j]->Top=j*Dugme[i][j]->Height;
  Dugme[i][j]->Parent=this;
              tr=PostaviRandom();
  Dugme[i][j]->Caption= NizSlova[tr];



}


    Button1->Caption="submit";
    Button1->Enabled=false;




  Form1->Width=dim_x* 20+5;
   Form1->Height=(dim_y+2)* 20+25;

}
//---------------------------------------------------------------------------


                 int __fastcall TForm1::PostaviRandom(){
                        int k;
                     srand(time(0));
                     k=rand()%sizeof(NizSlova);

                 return k;}   

ここに次のcppコードがあります

        #ifndef Unit1H
        #define Unit1H
//---------------------------------------------------------------------------
     #include <Classes.hpp>


        #include <Controls.hpp>

       #include <StdCtrls.hpp>

        #include <Forms.hpp>

         #include <time.h>

       //--- ------------------------------------------------------------------------

              class TForm1 : public TForm
               {

            __published:    // IDE-managed Components

        TButton *Button1;

       void __fastcall FormCreate(TObject *Sender);

        public:     // User declarations

          TButton*** Dugme;
            TImage *** Slike;
         TEdit *brojac;
       int dim_x, dim_y;
       int vrijeme,kr;
       int BrojSlova, br;
       AnsiString NizSlova;


    __fastcall TForm1(TComponent* Owner);
    void __fastcall KreirajSlova();
    void __fastcall AlocirajProstor();
    void __fastcall BrisiProstor();
    void __fastcall AlocirajProstorZaSlova();
    void __fastcall BrisiProstorZaSlova();


    void __fastcall KreirajPolja();
    virtual   int __fastcall PostaviRandom();
    AnsiString __fastcall DajSlovo();



       };
        //---------------------------------------------------------------------------
        extern PACKAGE TForm1 *Form1;
          //---------------------------------------------------------------------------
             #endif
4

1 に答える 1

2

srandループ内で呼び出さないでください。プログラムの開始時に一度呼び出します。

呼び出すsrandたびに、乱数ジェネレーターをリセットします。毎回同じパラメーターで呼び出すため (コードは 1 秒未満で実行されるため、 の値はtime(NULL)変化しません)、 から同じ結果が得られrand()ます。

srand古い乱数列を意図的に再現したい場合を除き、同じプログラムで複数回呼び出す必要はありません。

于 2013-04-25T20:03:37.877 に答える