![]() |
Delphi-Version: 5
Arrays mit Integer-Variablen
Hallo,
ich bin neu hier im Forum und hoffe, dass ich alles richtig mache :). Zu meinem Problem: Ich programmiere jetzt ein Jahr mit Lazarus kleinere Dinge, wie Ampeln, Timer, und BMI Rechner. Doch jetzt komme ich langsam an meine Grenzen: Ein Rechentrainer mit den für mich neuem Integer Zeug und so :).
Code:
Hier soll nun folgendes passieren:
procedure TForm1.Button1Click(Sender: TObject);
var result_a: array[(round_i)] of integer; i:integer; begin for i := 1 to round_i do begin result_a[i]:= a*b; if (c = reuslt_a[i]) then //result_a:= richtig end; end; round_i ist die Anzahl der Runden (Aufgaben), welche ja auch bestimmen soll, wie groß der/das Array sein soll, und ist deshalb als Integer festgelegt. Nun soll beim klicken das Ergebnis mit der Eeingabe c verglichen werden, und wenn richtig soll das im result_a[1] hinterlegt werden. Beim nächsten klicken (bei der nächsten Aufgabe) erneut. Diesmal soll das Ergebnis aber in result_a[2] hinterlegt werden. Und so weiter. Wie mache ich das? SO kommt es nämlich zu einer Fehlermeldung. Und wie kann ich
Code:
passend in die Schleife einfügen?
zahla.caption:=IntToStr(Random(area_n));
zahlb.caption:=IntToStr(Random(area_n)); Ich bin sehr dankbar, für Hilfe!! Liebe Grüße Joel PS ich hoffe, ich habe mein Problem richtig geschildert! Ich kann auch den ganzen Quelltext einfügen :). und ich nutze Lazarus :) |
AW: Arrays mit Integer-Variablen
Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var result_a: array of integer; i:integer; begin SetLength(result_a, round_i); for i := Low(result_a) to High(result_a) do begin result_a[i]:= a*b; if (c = result_a[i]) then //result_a:= richtig (* Code *); end; end; |
AW: Arrays mit Integer-Variablen
Dankeschön! Das hat mit erstmal echt geholfen!!
Aber wie kann ich die Anzahl der richtigen Ergebnisse zusammenzählen? Also dann:
Delphi-Quellcode:
for i := Low(result_a) to High(result_a) do begin
result_a[i]:= a*b; if (c = result_a[i]) then result_a[1]=r //nächste Runde dann result_a[2] ; end; richtige_loesungen.caption:= count result_a //nach r durchsuchen |
AW: Arrays mit Integer-Variablen
Hallo,
du brauchst noch eine Variable:
Delphi-Quellcode:
var
Counter: Integer; {...} Counter := 0; for i := Low(result_a) to High(result_a) do begin result_a[i]:= a*b; if (c = result_a[i]) then begin result_a[1]=r; //nächste Runde dann result_a[2] inc(Counter); end; end; richtige_loesungen.caption:= IntToStr(Counter); //nach r durchsuchen |
AW: Arrays mit Integer-Variablen
Liste der Anhänge anzeigen (Anzahl: 1)
Also:
Ihr seid echt super! Voller Verzweiflung habe ich wieder Hoffnung! :D Das Programm lässt sich endlich kompilieren! Wie man auf dem Bild hoffentlich sieht, wird bei richtiger Eingabe gesagt, man hätte alle Aufgaben richtig. Wenn die Eingabe falsch ist, so sind 0 Aufgaben richtig. Also das Array result_a "resettet" sich nach jeder Aufgabe. So wird dann nicht +1 gerechnet, sodass man nicht weiß wie viele Aufgaben richtig sind. Wiso?:cry: Ebenso sieht man nicht, welche Aufgabe Aktuell ist. Der Wert besteht aus der Anzahl der Aufgaben -1. Wiso?:cry: Und Dankeschön! Ich schätze eure Hilfe sehr!! Hier die Prozedur des Eingabe-Buttons:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var result_a: array of integer; i:integer; Counter: Integer; begin a:= StrToInt(zahla.caption); b:= StrToInt(zahlb.caption); c:= StrToInt(zahlc.text); round_i:= StrToInt(round.text); zahla.caption:=IntToStr(Random(area_n)); zahlb.caption:=IntToStr(Random(area_n)); Counter := 0; SetLength(result_a, round_i); for i := Low(result_a) to High(result_a) do begin panel7.caption:=IntToStr(i); result_a[i]:= a*b; if (c = result_a[i]) then begin result_a[i]:=1; inc(Counter); end; end; panel5.caption:= IntToStr(Counter); end; |
AW: Arrays mit Integer-Variablen
Hallo,
ich könnte jetzt lang ausholen und versuchen Dir zu erklären wieso, warum und weshalb es mit Deinem Code nicht so recht klappen mag (wenn es Dich interessiert: Detailfragen gerne per PN). Da ich Deinen Kenntnisstand nun eher als "Anfänger" einschätze (das ist jetzt keineswegs geringschätig gemeint) wäre die Antwort u. U. recht langatmig (ggf. auch unverständlich), daher lass ich es mal lieber bleiben. Ich denke Du machst Dir das Leben nur unnötig schwer. Versuch es doch mal so (nur was noch nicht in Deinem Projekt vorhanden ist ergänzen):
Delphi-Quellcode:
type
TForm1 = class(TForm) procedure FormCreate (Sender : TObject); procedure Button1Click (Sender : TObject); private FCorrectAnswers : Integer; FCurrentExercise : Integer; procedure Reset; end; procedure TForm1.FormCreate (Sender : TObject); begin Reset end; procedure TForm1.Button1Click (Sender : TObject); begin // Hier ggf, noch prüfen, ob wirklich FCurrentExercise <= Maximun (SpinEdit Runden) if StrToInt (zahla.Caption) * StrToInt (zahlb.Caption) = StrToInt (zahlc.Caption) then Inc (FCorrectAnwsers); Inc (FCurrentExercise); // Hier noch die Ausgabe aktualisieren FCorrectAnwsers of FCurrentExercise panel5.caption := IntToStr (FCorrectAnwsers); zahla.Caption := IntToStr (Random (area_n)); zahlb.Caption := IntToStr (Random (area_n)) end; // Reset wird immer dann aufgerufen, wenn eine neu Runde beginnt (Button Los) procedure TForm1.Reset; begin FCorrectAnswers := 0; FCurrentExercise := 1 end; |
AW: Arrays mit Integer-Variablen
Dankeschön erstmal!
Ich habe jetzt das Projekt erstmal dupliziert, und den Quellcode angepasst eingefügt. Und ja: Ich bin Anfänger :D. Also wäre die andere Methode zu kompliziert für mich? :) Sinn und Zweck ist ja, dass ich Übung bekommen will. Aber das hat mich wie gesagt an meine Grenzen gebracht :). Also: Für mein Verständnis habe ich nochmal nen Paar Fragen:
Ansonsten: Funktioniert es jetzt erstmal, und dafür bin ich euch, besonders dir V. Zeller, sehr sehr dankbar!! |
AW: Arrays mit Integer-Variablen
Alle diese Fragen kannst du dir leicht selbst beantworten, indem du ein entsprechendes Grundlagen-Tutorial durcharbeitest. Besser wäre es natürlich, wenn du dir nacheinander verschiedene Tutorials vornimmst und die gewissenhaft und geduldig Schritt für Schritt durchgehst.
Hier gibt es ![]() Auch die Uni Leipzig bietet ein ![]() Es gibt sogar ein entsprechendes ![]() ... und noch viel mehr via ![]() Viel Erfolg :thumb: |
AW: Arrays mit Integer-Variablen
Dankeschön erstmal an:
So klapp es ja erstmal, was ich eurer Hilfe zu verschaffen habe! Dankeschön (: LG, Joel |
AW: Arrays mit Integer-Variablen
Hallo,
Zitat:
![]() ![]() Zitat:
Delphi-Quellcode:
Wobei FMaxExcerises der Anzahl an Übungsrunden entspräche. Einfacher ist es doch die Methode im OnClick-Ereignis der Schaltfläche "Los" abzuarbeiten.
if FCurrentExercise > FMaxExercises then
Reset Zitat:
Delphi-Quellcode:
Vielleicht kannst Du was damit anfangen. Die Methode DoDevide kannst Du natürlich auch mit fixen Kommastellen (z. B. auf 4 Stellen genau) im Ergebnis umschreiben (so zur Übung).
type
TOperator = (opPlus, opMult, opMinus, opDiv); TForm1 = class (TForm) edtResidual : TEdit; // Die Eingabemöglichkeit für den Divisionsrest. Müsstest Du halt noch auf Deinem Form einfügen procedure FormCreate (Sender : TObject); procedure Button1Click (Sender : TObject); procedure Button2Click (Sender : TObject); // Der Button mit der Beschriftung "Los" private FCorrectAnswers : Integer; FCurrentExercise : Integer; FCurrentOperator : TOperator; FMaxExcerises : Integer; procedure DoAddUp; procedure DoDevide; procedure DoMultiply; procedure DoSubtract; procedure InitExercise; procedure InitOperator; procedure Reset; end; implementation procedure TForm1.FormCreate (Sender : TObject); begin Reset end; procedure TForm1.Button1Click (Sender : TObject); begin case FCurrentOperator of opPlus : DoAddUp; opMult : DoMultiply; opMinus : DoSubstract; opDiv : DoDivide; end; panel5.caption := IntToStr (FCorrectAnwsers); Inc (FCurrentExercise); if FCurrentExercise <= FMaxExcerises then InitExercise end; procedure TForm1.Button2Click (Sender : TObject); begin Reset; InitExercise end; procedure TForm1.DoAddUp; var a, b, c : Integer; begin a := StrToInt (zahla.Caption); b := StrToInt (zahlb.Caption); c := StrToInt (zahlc.Caption); if a + b = c then Inc (FCorrectAnwsers) end; // Hier mal ganzzahlige Division mit Rest procedure TForm1.DoDevide; var a, b, c, r : Integer; begin a := StrToInt (zahla.Caption); b := StrToInt (zahlb.Caption); c := StrToInt (zahlc.Caption); r := StrToInt (edtResidual.Text); if (a div b = c) and (a mod b = r) then Inc (FCorrectAnwsers) end; procedure TForm1.DoMultiply; var a, b, c : Integer; begin a := StrToInt (zahla.Caption); b := StrToInt (zahlb.Caption); c := StrToInt (zahlc.Caption); if a * b = c then Inc (FCorrectAnwsers) end; procedure TForm1.DoSubtract; var a, b, c : Integer; begin a := StrToInt (zahla.Caption); b := StrToInt (zahlb.Caption); c := StrToInt (zahlc.Caption); if a - b = c then Inc (FCorrectAnwsers) end; procedure TForm1.InitExercise; begin zahla.Caption := IntToStr (Random (area_n)); zahlb.Caption := IntToStr (Random (area_n)); zahlc.Caption := ''; edtResidual.Text := ''; InitOperator; FMaxExcerises := // hier muss noch die Zuweisung Deiner Komponente Anzahl Runden gemacht werden end; procedure TForm1.InitOperator; begin FCurrentOperator := TOperator (Random (4)); case FCurrentOperator of opPlus : PanelX.Caption := '+'; // kann nicht erkennen von welchem Typ die Komponente ist und wie sie heißt opMult : PanelX.Caption := '*'; opMinus : PanelX.Caption := '-'; opDiv : PanelX.Caption := '/'; end end; procedure TForm1.Reset; begin FCorrectAnswers := 0; FCurrentExercise := 1 end; Zitat:
Zitat:
Gruß |
AW: Arrays mit Integer-Variablen
Wow! Dankeschön!
Ich werde den Quellcode so gut wie möglich studieren, ihn aber nicht einfügen, da ich mit deinem anderen unglaublich hilfreichen Ansatz den Trainer jetzt schon +,-,* abfragen kann :D.! Danke, für die Beantwortung! :) Ok, ich werde mich mal an andere Projekte zur Übung von Arrays machen. Danke! LG, Joel Und echt lieb, für deinen Aufwand!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz