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