Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array-Problem (https://www.delphipraxis.net/113017-array-problem.html)

larsder4 1. Mai 2008 11:06


Array-Problem
 
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 :gruebel:
Er zeigt den Fehler bei allen Zeilen wo
Delphi-Quellcode:
memo1.Lines[frg[v]*6+6]
vorkommt.

Sorry, wegen meinem Quellcode. Für Profis muss der katastrophal aussehen :spin:

mkinzler 1. Mai 2008 12:14

Re: Array-Problem
 
Delphi-Quellcode:
for j := 0 to Fragenanzahl-1 do
Delphi-Quellcode:
Memo1.Lines[(frg[v]*6)+5] := Memo1.Lines[StrToInt(Memo1.Lines[(frg[v]*6)+5])];
...
label1.Caption := memo1.Lines[(frg[v]*6)];
label2.Caption := memo1.Lines[(frg[v]*6)+1];
label3.Caption := memo1.Lines[(frg[v]*6)+2];
label4.Caption := memo1.Lines[(frg[v]*6)+3];
label5.Caption := memo1.Lines[(frg[v]*6)+4];

larsder4 1. Mai 2008 12:17

Re: Array-Problem
 
Die erste Zeile in der Textdatei war das Thema, daran lags nicht.
Habe das Problem jetzt aber gelöst :wink:

Danke

alzaimar 1. Mai 2008 12:28

Re: Array-Problem
 
Viel eleganter ist es übrigens, die Fragen zufällig zu mischen (bzw. deren Nummer) und dann einfach die ersten X Fragen zu nehmen.
[edit] Aber Hauptsache, es läuft :thumb: [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz