AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Versuche werden nicht gezählt

Ein Thema von Versus · begonnen am 9. Aug 2018 · letzter Beitrag vom 10. Aug 2018
Antwort Antwort
Versus

Registriert seit: 9. Aug 2018
4 Beiträge
 
#1

Versuche werden nicht gezählt

  Alt 9. Aug 2018, 20:29
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.

Geändert von mkinzler ( 9. Aug 2018 um 21:45 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen
Online

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
325 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Versuche werden nicht gezählt

  Alt 9. Aug 2018, 20:57
Problem 1:
Zu Beginn musst Du 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.
Roland

Geändert von blawen ( 9. Aug 2018 um 21:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.676 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Versuche werden nicht gezählt

  Alt 9. Aug 2018, 22:25
Ich kommentiere einfach mal Deinen Code um es für Dich zu übersetzen was Du da treibst
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.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.676 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 02:26
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.
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
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
936 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 06:35
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.
Peter
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.470 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 08:31
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;
...
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.676 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 08:37
Da ZahlX mit +2 initialisiert wird, werden Eure Versuche, egal wie elegant sie aussehen mögen, niemals aufgerufen.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
936 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 09:15
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.676 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 09:28
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.
Gruß vom KodeZwerg
Wenn ein unerwarteter Fehler aufgetreten ist, frage ich mich immer, welche Fehler erwartet wurden...
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
936 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Versuche werden nicht gezählt

  Alt 10. Aug 2018, 09:33
ich habe das nur geschrieben weil TE von sich selbst sagte "Neuling"
Genau deswegen habe ich meinen Kommentar geschrieben.

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.

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:
Peter
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf