Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Versuche werden nicht gezählt (https://www.delphipraxis.net/197488-versuche-werden-nicht-gezaehlt.html)

Versus 9. Aug 2018 21:29


Versuche werden nicht gezählt
 
Delphi-Quellcode:
procedure TForm10.Button3Click(Sender: TObject);
begin
  Versuche:=0;
   Versuche:= Versuche +1;
  label5.Caption:='Versuche: '  +IntToStr(Versuche) ;

label2.caption:=IntToStr(zahl1);
label3.Caption:=IntToStr(zahl2);
zahl1:=random(100)+2;
zahl2:=random(100)+2;
if (zahl1) and (zahl2) =0 then
repeat
zahl1:=random(100)+2;
zahl2:=random(100)+2;
until (zahl1) and (zahl2) <> 0;
Zahl3:=StrToInt(label2.caption) ;
Zahl4:=StrToInt(label3.caption);
Ergebnis2:= (zahl3+zahl4) ;

 edit2.Text:=IntToStr(Ergebniss2) ;
Ich hätte da zwei Fragen und auch 2 Probleme :/. Erstens wenn ich auf den Button klicke sollte er normalerweise eine Zufallszahl generieren das Problem ist wenn ich das erste mal draufdrücke erscheint erst eine 0 und erst beim 2 mal drücken wird die Zufallszahl generierte . Und Zweitens Die Versuche werden immer nur bei dem ersten Click gezählt z.B. Von 0 auf 1 dann jedoch nicht mehr egal wie oft ich drauf drücke. Was mach ich wohl Falsch ?
Sorry bin ein absoluter Neuling.Dennoch würde ich mich freue ich mich über jede hilfreiche Antwort. :o

blawen 9. Aug 2018 21:57

AW: Versuche werden nicht gezählt
 
Problem 1:
Zu Beginn musst Du
Delphi-Quellcode:
Randomize
aufrufen:
Delphi-Quellcode:
...
Randomize;
Zahl1 := Random(100);
...

Problem 2:
Jedes mal wenn Du den Button drückst, wird die Variable Versuch auf Null zurückgesetzt.
In diesem Fall musst Du die Variable ausserhalb der Function definieren (globale Variablen) und auf Null zurücksetzen.
Innerhalb der Function musst Du die Variable dann hochzählen.

Delphi-Quellcode:
var
  Versuch : Integer;


procedure Reset;
begin
  Versuch := 0;
end;

procedure TForm10.Button3Click(Sender: TObject);
begin
  inc(Versuch);
  ...
end;
Beachte aber, dass globale Variablen häufig zu Fehler/Missverständnissen führt und daher mit Bedacht eingesetzt werden sollte.

KodeZwerg 9. Aug 2018 23:25

AW: Versuche werden nicht gezählt
 
Ich kommentiere einfach mal Deinen Code um es für Dich zu übersetzen was Du da treibst
Zitat:

Zitat von Versus (Beitrag 1410265)
Delphi-Quellcode:
procedure TForm10.Button3Click(Sender: TObject);
begin

//hier schummel ich was rein
RANDOMIZE; // das initialisiert den Zufallsgenerator von Random()

  Versuche:=0; // setze Variable Versuche auf 0
   Versuche:= Versuche +1; // setze Variable Versuche auf 1
  label5.Caption:='Versuche: '  +IntToStr(Versuche) ; // Schreibe Variable Versuche in Caption

label2.caption:=IntToStr(zahl1); // schreibe eine undefinierte Variable Zahl1 in Caption
label3.Caption:=IntToStr(zahl2); // schreibe eine undefinierte Variable Zahl2 in Caption
// also bis jetzt hat weder Zahl1 noch Zahl2 einen Wert, warum also in Caption schreiben?

zahl1:=random(100)+2; // gebe Zahl1 einen Zufallswert der mindestens 2 ist
zahl2:=random(100)+2; // gebe Zahl2 einen Zufallswert der mindestens 2 ist

//lösch alles ab hier
if (zahl1) and (zahl2) =0 then // wenn Zahl1 und Zahl2 Null sind dann... (passiert nur nie da mit +2 initialisiert wurde)
repeat // wiederhole das hier...
zahl1:=random(100)+2; // gebe Zahl1 einen Zufallswert der mindestens 2 ist
zahl2:=random(100)+2; // gebe Zahl2 einen Zufallswert der mindestens 2 ist
until (zahl1) and (zahl2) <> 0; // wiederhole alles wenn Zahl1 und Zahl2 Null sind (da mit +2 initialisiert ist es nur immer ein Durchgang)
//lösch alles bis hier

Zahl3:=StrToInt(label2.caption) ; // schreibe eine undefinierte Variable Zahl3 in Caption
Zahl4:=StrToInt(label3.caption); // schreibe eine undefinierte Variable Zahl4 in Caption
// also bis jetzt hat weder Zahl3 noch Zahl4 einen Wert, warum also in Caption schreiben?

Ergebnis2:= (zahl3+zahl4) ; // übergebe ein undefiniertes an Ergebnis2 (Zahl3 + Zahl4)
// also bis jetzt hat weder Zahl3 noch Zahl4 einen Wert, warum also an Ergebnis2 übergeben?

 edit2.Text:=IntToStr(Ergebniss2) ; // schreibe eine undefinierte Variable Ergebnis2 in Caption
// das hier nichts mehr klappt sollte mit meiner Beschreibung doch auch klar sein, oder?

Ich hoffe Du konntest was lernen.

KodeZwerg 10. Aug 2018 03:26

AW: Versuche werden nicht gezählt
 
Ps: So in etwa würde ich es machen, zum Einstieg, später kannst Du es mit Klassen und eigenen Funktionen/Methoden immer noch abändern/erweitern.
Falls noch kein "Form.Create" Event existiert, doppelklick auf eine leere Stelle im Dialog, oder wähle im Objekt-Inspektor die Form aus und setze manuell ein solches Event.
Zitat:

Zitat von KodeZwerg (Beitrag 1410275)
Zitat:

Zitat von Versus (Beitrag 1410265)
Delphi-Quellcode:
procedure TForm10.FormCreate(Sender: TObject);
begin
  // alles was hier gesetzt wird, passiert nur einmal bei Programm-Start.
  Randomize; // das initialisiert den Zufallsgenerator von Random()
  // PS: Es reicht diesen einmal irgendwo im aktuellen Thread aufzurufen.
  Versuche := 0; // setze Variable Versuche auf 0
end;

procedure TForm10.Button3Click(Sender: TObject);
begin
  Versuche := Inc(Versuche); // addiere plus 1 zu Variable Versuche
  label5.Caption := 'Versuche: '+IntToStr(Versuche); // Schreibe Variable Versuche in Caption

  zahl1 := Random(100)+2; // gebe Zahl1 einen Zufallswert der mindestens 2 ist
  zahl2 := Random(100)+2; // gebe Zahl2 einen Zufallswert der mindestens 2 ist
  label2.Caption := IntToStr(zahl1); // schreibe Variable Zahl1 in Caption
  label3.Caption := IntToStr(zahl2); // schreibe Variable Zahl2 in Caption

  // Falls mit den Captions und Zahl1/2 nichts weiter gemacht werden soll, geh ich mal Dein Original Code weiter durch

  zahl3 := Random(100)+2; // gebe Zahl3 einen Zufallswert der mindestens 2 ist
  zahl4 := Random(100)+2; // gebe Zahl4 einen Zufallswert der mindestens 2 ist
  label2.Caption := IntToStr(zahl3); // schreibe Variable Zahl3 in Caption
  label3.Caption := IntToStr(zahl4); // schreibe Variable Zahl4 in Caption

  Ergebnis2 := (zahl3 + zahl4); // übergebe eine Addition an Ergebnis2 (Zahl3 + Zahl4)
  edit2.Text := IntToStr(Ergebniss2); // schreibe Variable Ergebnis2 in Caption



Jasocul 10. Aug 2018 07:35

AW: Versuche werden nicht gezählt
 
Zitat:

Zitat von Versus (Beitrag 1410265)
Delphi-Quellcode:
procedure TForm10.Button3Click(Sender: TObject);
begin
...
if (zahl1) and (zahl2) =0 then
repeat
...
until (zahl1) and (zahl2) <> 0;
...

Dein Problem wurde ja schon beantwortet, daher noch ein weitere Hinweis für dich:
Obiger Ausschnitt muss eigentlich wie folgt geschrieben sein:
Delphi-Quellcode:
procedure TForm10.Button3Click(Sender: TObject);
begin
...
if (zahl1 = 0) and (zahl2 = 0) then
repeat
...
until (zahl1 <> 0) and (zahl2 <> 0);
...
Das "and" hat in deinem Source völlig andere Bedeutung.
Es bewirkt ein logisches and zwischen den Zahlen und vergleicht das Ergebnis mit 0 (bzw. <> 0).
Du meinst aber sicher, dass beide Zahlen 0, bzw. <> 0 sein sollen.

Jumpy 10. Aug 2018 09:31

AW: Versuche werden nicht gezählt
 
Und ist noch eleganter, wenn man Bedingung und Schleife zusammenpackt (Kopfgesteuerte Schleife):

Delphi-Quellcode:
procedure TForm10.Button3Click(Sender: TObject);
begin
...
while (zahl1 = 0) and (zahl2 = 0) do
begin
...
end;
...

KodeZwerg 10. Aug 2018 09:37

AW: Versuche werden nicht gezählt
 
Da ZahlX mit +2 initialisiert wird, werden Eure Versuche, egal wie elegant sie aussehen mögen, niemals aufgerufen.

Jasocul 10. Aug 2018 10:15

AW: Versuche werden nicht gezählt
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410304)
Da ZahlX mit +2 initialisiert wird, werden Eure Versuche, egal wie elegant sie aussehen mögen, niemals aufgerufen.

Hat keiner von uns bestritten.
Mir ging es um den grundsätzlichen Fehler in der Definition der Prüfbedingungen.

KodeZwerg 10. Aug 2018 10:28

AW: Versuche werden nicht gezählt
 
Ja nein schon klar, ich habe das nur geschrieben weil TE von sich selbst sagte "Neuling" aber von Euch keiner erwähnte das die Bedingung niemals erfüllt wird. Das sollte keinen Zweifel an Eurem Code sein, Bitte um Richtigstellung meiner Aussage und Verzeihung falls es falsch rüber kam, Danke für Deine Verbesserung zu meiner falsch geschriebenen Erklärung im Kommentar.

Jasocul 10. Aug 2018 10:33

AW: Versuche werden nicht gezählt
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410311)
ich habe das nur geschrieben weil TE von sich selbst sagte "Neuling"

Genau deswegen habe ich meinen Kommentar geschrieben. :wink:

Zitat:

Zitat von KodeZwerg (Beitrag 1410311)
aber von Euch keiner erwähnte das die Bedingung niemals erfüllt wird.

Hattest du weiter oben ja schon. Deswegen hatte ich mir das gespart.

Zitat:

Zitat von KodeZwerg (Beitrag 1410311)
Verzeihung falls es falsch rüber kam, Danke für Deine Verbesserung zu meiner falsch geschriebenen Erklärung im Kommentar.

Bleib locker. Hier, zur Entspannung: :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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