Программа должна прочитать список и извлечь случайную строку из списка. У меня проблема, когда у меня есть больше извлечений, чем строки списка. Программа вылетает. Как я могу заставить его повторять строки в случайной последовательности и не создавать sh?
Вот ссылка на файлы:
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.