dimanche 19 janvier 2020

Delphi infinite loop

The program should read a list and extract a random line from the list. The problem I have is when i have more extractions that the list lines. The program crashes. How can I make it repeat lines in the random sequence and don't crash? Here is a link for the files. https://drive.google.com/open?id=1TVx4cEGhdd0OiM60fq7FkykyBx496Fo-

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Button3: TButton;
    Edit4: TEdit;
    Memo2: TMemo;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{procedura de salvare a fisierului cu subiecte extrase}
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Lines.SaveToFile(Edit2.Text);
end;

{procedura de incarcare a fisierelor}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
{incarc din fisierul cu subiecte a carui nume este dat in edit1}
Memo1.Lines.LoadFromFile(Edit1.Text);
{incarc din fisierul cu subiecte extrase deja, a carui nume este dat in edit2}
Memo2.Lines.LoadFromFile(Edit2.Text);
{depun numarul de ordine al subiectului in memo1}
for i:=0 to Memo1.Lines.Count-1 do
Memo1.Lines[i]:=IntToStr(i+1)+'. '+Memo1.Lines[i];
end;

procedure TForm1.Button3Click(Sender: TObject);
var s:string;
    i:integer;
    atribuit:boolean;
begin
Randomize; {pornesc generatorul de numere aleatoare}
atribuit:=true; {indicator al atribuirii anterioare a unui subiect}
while atribuit=true do
begin
{citesc aleator o linie din fisierul cu subiecte}
s:=Memo1.Lines[Random(Memo1.Lines.Count-1)];
atribuit:=false;
for i:=0 to Memo2.Lines.Count do
if Pos(s,Memo2.Lines[i])>0
 then atribuit:=true;    {subiectul a fost atribuit anterior}
end;
{am gasit un subiect neatribuit}
Edit4.text:=Edit3.Text+': '+s;
Memo2.Lines.Add(Edit4.text); {il adaug la memo2 impreuna cu numele stud.}
end;

end.



Aucun commentaire:

Enregistrer un commentaire