Thema: Delphi Array-Problem

Einzelnen Beitrag anzeigen

larsder4

Registriert seit: 13. Feb 2008
Ort: Kellinghusen
24 Beiträge
 
#1

Array-Problem

  Alt 1. Mai 2008, 11:06
Hallo,
wir sollen ein Quiz für die Schule schreiben.

Nun stoße ich jedoch auf ein Problem:

Ich wollte die Reihenfolge der Fragen zufällig in einem Array anordnen und mir davon die ersten 10 Fragen nehmen, die gestellt werden sollen, somit vermeide ich, dass eine Frage doppelt kommt.

Delphi-Quellcode:
private
   zahl: Integer;
   v: Integer;
   Fragenanzahl: Integer;
   frg: Array of Integer;
    { Private-Deklarationen }
zahl ist hierbei meine Randomzahl.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j: Integer;
begin
Randomize;
memo1.Lines.LoadFromFile('Geschifragen.txt');
neue_frage;

Fragenanzahl := Memo1.Lines.Count div 6;
SetLength(frg, Fragenanzahl);

for j := 0 to Fragenanzahl do
frg[j] := 0;

zahl := random(Fragenanzahl);
frg[zahl] := 0;
for i := 1 to Fragenanzahl do
begin
 repeat zahl := random(Fragenanzahl);
 until frg[zahl] = 0;
 frg[zahl] := i;
end;

v := 0;

end;
Soweit klappt das alles auch schon ganz gut.

jetzt kommt aber mein Problem:

Delphi-Quellcode:
procedure TForm1.neue_frage;

begin
Inc(v);

Memo1.Lines[(frg[v]*6)+6] := Memo1.Lines[StrToInt(Memo1.Lines[(frg[v]*6)+6])];
//hier wandel ich die Textdatei ein wenig um, weil in der Textdatei an Stelle der Antworten nur die absolute Zeile der Textdatei steht, wo die jeweilig richtige Antwort zu finden ist

label1.Caption := memo1.Lines[(frg[v]*6)+1];
label2.Caption := memo1.Lines[(frg[v]*6)+2];
label3.Caption := memo1.Lines[(frg[v]*6)+3];
label4.Caption := memo1.Lines[(frg[v]*6)+4];
label5.Caption := memo1.Lines[(frg[v]*6)+5];
end;

procedure TForm1.LabelClick(Sender: TObject);
var
Antwort: string;
begin
Antwort := memo1.Lines[frg[v]*6+6];
if (Sender as TLabel).Caption = Memo1.Lines[((frg[v]*6)+6)] then
begin
 //wenn die Frage richtig beantwortet wird.
end
else
//wenn sie falsch beantwortet wird.
end;
Will ich das Programm jetzt aber compillieren, kommt folgende Fehlermeldung:

Zitat:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: ‚Zugriffsverletzung bei Adresse 0046F95 in Modul ‚Project1.exe’. Lesen von Adresse 00000004’. Prozess wurde angehalten. Mite Einzelne Anweisun oder Start fortsetzen.
Ich habe überhaupt keine Ahnung, was das bedeutet
Er zeigt den Fehler bei allen Zeilen wo
memo1.Lines[frg[v]*6+6] vorkommt.

Sorry, wegen meinem Quellcode. Für Profis muss der katastrophal aussehen
Fehler vermeidet man, indem man Erfahrungen sammelt,
Erfahrungen sammelt man, indem man Fehler macht
  Mit Zitat antworten Zitat