Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Anfängerfrage Primzahlen
roadster - Do 09.02.06 22:23
Titel: Anfängerfrage Primzahlen
Hallo,
mein Sohn und ich versuchen uns gerade an unserem ersten Programm,
Eigenlich ganz einfach, aber irgendwie haben wir einen Denkfehler eingebracht.
Das Programm generiert eine Zahl zwischen 10 und 25, setzt die Zahl zum Quadrat und vergleicht
diese dann mit der Eingabe. Lt. der If Bedingung ist das Ergebnis allerdings immer falsch??! :?:
Vielen Dank für Eure Hilfe
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin randomize; try Frage := random(15) +10 ; label1.Caption := inttostr(Frage); edit1.SetFocus; eingabe:= strtoint(edit1.Text); label3.Caption := inttostr(Frage*Frage); label4.Caption := inttostr(eingabe); if eingabe = frage*frage then label2.Caption := 'Glück gehabt' else label2.Caption := 'Hmmm'; except end; end;
end. |
Moderiert von
Gausi: Beitragsformatierung überarbeitet.
_Digger - Do 09.02.06 22:33
ich kann eigentlich keinen Fehler erkennen.
eine Frage: was hat das programm mit Primzahlen zu tun?
Marc. - Do 09.02.06 22:38
Delphi-Quelltext
1: 2: 3: 4:
| if eingabe = frage*frage then label2.Caption := 'Glück gehabt' else label2.Caption := 'Hmmm'; |
Ich weiß nicht welche werte ihr eingeben wollt... aber beispielweiße, eure zufallszahl is 25... dann müsste im editfeld 625 stehen... dann klappts auch...
sollen aber nur zahlen von 10-25 erraten werden, würde ich in der IF anweisung, frage nicht quadrieren :roll:
... und auch meine Frage... was hat das mit Primzahlen zu tun? :gruebel:
roadster - Do 09.02.06 22:40
Hallo,
zum Üben von Primfaktorzerlegung müssen die Kids alle Quadratzahlen von 11 bis 25 Auswendiglernen.
Das Programm sollte da ein wenig helfen - aber leider ist irgendwie der Wurm drin. Der Vergleich der Eingabe passiert immer mit der nächsten Zufallszahl; keinen Schimmer warum.
Bruder Lal - Do 09.02.06 22:44
Bei dem Button, auf den man nach der Eingabe drückt, wird ja schon eine neue Zufallszahl generiert. Das lässt sich beheben indem du den code leicht umstellst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin randomize; try eingabe:= strtoint(edit1.Text); label3.Caption := inttostr(Frage*Frage); label4.Caption := inttostr(eingabe); if eingabe = frage*frage then label2.Caption := 'Glück gehabt' else label2.Caption := 'Hmmm'; Frage := random(15) +10 ; label1.Caption := inttostr(Frage); edit1.SetFocus; except end; end;
end. |
Wozu eigentlich try.. except?
edit: Und randomize sollte möglichst nur einmal aufgerufen werden.. z.b. in FormCreate
roadster - Do 09.02.06 22:53
Super, :D
hat mich 2h meines Lebens gekostet.
try.. except habe ich verwendet um Fehlermeldungen bei zb. einer Eingabe von Buchstaben abzufangen.
FormCreate sagt mir momentan noch nix. :?:
Vielen Dank
Bruder Lal - Do 09.02.06 23:00
Also ich würde ja die Fehlerursache zerstören.. z.B. so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function MakeInteger(s: string): string; var i: Integer; begin result:=''; for i:= 1 to length(s) do if s[i] in['0'..'9'] then result:=result+s[i]; end; |
aber das ist deine Entscheidung. Und das Ereignis OnCreate wird ausgelöst wenn das Programm startet. Such mal im Objektinspektor bei Form1 unter Ereignisse..
roadster - Do 09.02.06 23:27
Die Oberfläche von Delphi ist für mich noch ne echte Herausforderung.
Danke für die Hilfe
Blackheart666 - Do 09.02.06 23:50
Mach Dir keine Sorgen um die Delphi Oberfläche, es wird Komplizierter !!!
Quake User - Fr 10.02.06 13:31
Titel: Re: Anfängerfrage Primzahlen
mein Sohn und ich versuchen uns gerade an unserem ersten Programm,
Eigenlich ganz einfach, aber irgendwie haben wir einen Denkfehler eingebracht.
Das Programm generiert eine Zahl zwischen 10 und 25, setzt die Zahl zum Quadrat und vergleicht
diese dann mit der Eingabe. Lt. der If Bedingung ist das Ergebnis allerdings immer falsch??!
Dein erstes Programm sollte "Hello World" sein. (such mal ein Tutorial) So hast Du alle Funktionen der Delphi IDE schon einmal verwendet.
Du brauchst:
- Haltepunkte
- Überwachte Ausdrücke
- starte das programm "Zeilenweise" (F7, SHIFT+F7)
Quake User - Fr 10.02.06 13:55
Titel: Re: Anfängerfrage Primzahlen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin randomize; try Frage := random(15) +10 ; label1.Caption := inttostr(Frage); edit1.SetFocus; eingabe:= strtoint(edit1.Text); label3.Caption := inttostr(Frage*Frage); label4.Caption := inttostr(eingabe); if eingabe = frage*frage then label2.Caption := 'Glück gehabt' else label2.Caption := 'Hmmm'; except end; end;
end. |
mal noch einige Tips zum Design:
- verzichte am Anfang auf Fehlerbehandlung. Du solltest dazu später ein gutes Buch lesen.
Fehlerbehandlungen würde ich einbauen, wenn dein Programm getestet ist und unter Normalbedingungen sauber läuft
- Für jede Aktion solltest Du einen Event verwenden. (am Einfachsten ist dies am Anfang mit ButtonClick) später kannst Du dann auch Events wie OnShow, OnCreate ... verwenden.
- "edit1.SetFocus;" Nicht Du steuerst das Programm, sondern der Anwender am Monitor. Wenn er den Fokus auf das Edit Feld setzen möchte, wird er es tun.
- Verwende "sprechende" Ausgaben "Hmmm" sagt dem Nutzer eigentlich was?
- Dokumentiere deine Quellen
meine abgeänderte Variante. (ungetestet)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button1Click(Sender: TObject); begin Frage := random(15) +10 ; label1.Caption := inttostr(Frage); label3.Caption := inttostr(Frage*Frage); end;
procedure TForm1.Button2Click(Sender: TObject); begin eingabe:= strtoint(edit1.Text); label4.Caption := inttostr(eingabe); if eingabe = (frage*frage) then label2.Caption := 'Du hast '+inttostr(eingabe)+ ' eingegeben. Glück gehabt' else label2.Caption := 'Du hast '+inttostr(eingabe)+ ' eingegeben. Hmmm'; end;
procedure TForm1.Button3Click(Sender: TObject); begin randomize; end; |
Ich bin mir über den Sinn des Programms noch nicht ganz im klaren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!