生成随机数i,然后在记录集里Move i。

解决方案 »

  1.   

    //同意bisc
    var
      I: Integer;
    begin
      Randomize;
      I := Random(ADOTable1.RecordCount);
      ADOTable1.RecNo := I; //得一题!
    end;
      

  2.   

    var No: Integer;
    begin
      Randomize;
      No := Random(ADOTable.RecordCount);
      ADOTable.Locate('No',[No],[]);
      ...
    end;
      

  3.   

    to: zswang可以,如果这样做的话,很可能存在重复抽取的问题啊,?
      

  4.   

    自己加以控制:var No: Integer;
        NoSet: Set of Integer;
    begin
      Randomize;
      No := Random(ADOTable.RecordCount);
      if No in NoSet then
     begin
       ADOTable.Locate('No',[No],[]);
        Include(NoSet,No);
      end else
        ...
      end 
      ...
    end;
      

  5.   

    It's wrong!if No in NoSet thenshould be:if No not in NoSet then
      

  6.   

    to xiaoyan21:你把问题阐述不就可以了!
    //参考主  题:  考考大家:如何随机从若干个数据中抽出指定个数据?//Kingron 
    作  者:  Kingron (对CSDN愤怒中……)  
    等  级:    
    信 誉 值:  107 
    所属论坛:  Delphi 
    问题点数:  50 
    回复次数:  91 
    发表时间:  2001-12-9 10:58:59 
       
     
       
    我看看大家对于编程的功底如何?例如从54个牌中,随机抽4张,请写出算法!
    大家不要就直接用4次Random(54)就完事儿啊,再仔细想想?
      
     
     
     回复人: BlueTrees(蜗牛) (  ) 信誉:95  2001-12-9 11:10:21  得分:50  
     
     
      假设数组cards[1..54]存放的是牌的的花色,TCard是花色的类型
    那么可以这样
    procedure get4card(var c1,c2,c3,c4:TCard);
    var
      card:TCard;
      I,J:Integer;
    begin
      for J:=0 to 3 do
      begin
        I:=Radom(53-J)+1;
        card:=Cards[I];
        Cards[I]:=Cards[54-J]
        Cards[54-J]:=card;
      end;
      c1:=Cards[54];
      c2:=Cards[53];
      c3:=Cards[52];
      c4:=Cards[51];
    end;
    可以给分了吧!
     
     
    回复人: zswang(伴水)(* pascal→c *) (  ) 信誉:99  2001-12-10 9:56:35  得分:0  
     
     
      procedure TForm1.FormCreate(Sender: TObject);
    var
      I: Integer;
    begin
      Randomize;
      Memo1.Clear;
      for I := 0 to 53 do Memo1.Lines.Add(IntToStr(I));
    end;function Sortition1(mSource: TStrings; mDest: TStrings;
      mCount: Integer): Boolean;
    var
      I, J: Integer;
    begin
      Result := True;
      try
        mDest.Clear;
        for I := 1 to mCount do begin
          J := Random(mSource.Count);
          mDest.Add(mSource[J]);
          mSource.Move(J, mSource.Count - I);
        end;
      except
        Result := False;
      end;
    end; { Sortition1 }procedure TForm1.Button1Click(Sender: TObject);
    begin
      Sortition1(Memo1.Lines, Memo2.Lines, 4);
    end;回复人: zswang(伴水)(* pascal→c *) (  ) 信誉:99  2001-12-10 10:15:57  得分:0  
     
     
      function Sortition2(mSource: TStrings; mDest: TStrings;
      mCount: Integer): Boolean;
    var
      I, J, K, L: Integer;
      vCnt: Integer;
    begin
      Result := True;
      try
        mDest.Clear;
        vCnt := 0;
        for I := 1 to mCount do begin
          J := Random(mSource.Count - vCnt);
          L := 0;
          for K := 0 to mSource.Count - 1 do
            if mDest.IndexOf(mSource[K]) < 0 then begin
              if L = J then begin
                mDest.Add(mSource[J]);
                Inc(vCnt);
                Break;
              end;
              Inc(L);
            end;
        end;
      except
        Result := False;
      end;
    end; { Sortition2 }
      

  7.   

    数组+循环语句+Random+布尔型变量 可是现不重复抽题