![]() |
Bußgeldrechner
Hallo.
Bin ein ziemlicher Delphi Neuling. Bis auf die Schulischen Übungen habe ich nicht viel Erfahrung im Programmieren. Nur jetzt in der Uni. Eine Aufgabe ist jetzt das Erstellen eine Bußgeldrechners. Dabei sind die zulässige Höchstgeschwindigkeit, die gefahrene Geschwindigkeit einzugeben. Weiterhin ist einzugeben, ob es in einer Ortschaft war oder nicht (habe ich durch eine Radiogroup versucht zu realisieren) Auszugeben sind das Bußgeld, evtl. Punkte und Fahrverbot. Zunächst habe ich versucht durch eine if-then anweisung den bußgeldrechner zu programmieren. das heißt, wenn ein auto zwischen 50 und 60 fährt, dann gibt es 15 euro bußgeld usw. das programm läuft allerdings nicht mal, irgendein gleitkommawertfehler soll vorliegen. Hab da natürlich nicht so den plan davon. Hier mal der Quelltext. Sieht noch ziemlich spärlich aus, wie gesagt bin Neuling.
Delphi-Quellcode:
Vielleicht habt ihr Tips, Tricks oder schonmal sowas programmiert?
procedure TForm1.Button2Click(Sender: TObject);
var zulgesch, gefgesch, bußgeld, inort, punkte, fahrverbot : real; begin case radiogroup1.itemindex of 0 : inort := 'ja'; 1 : inort := 'nein'; end; begin zulgesch:= StrToFloat(Edit1.Text); gefgesch:= StrToFloat(Edit2.Text); bußgeld:= StrToFloat(Edit3.Text); if (gefgesch >= 50) and (gefgesch <=60) then bußgeld:= 15; if (gefgesch >= 60) and (gefgesch <=65) then bußgeld:= 25; end; end; end. Mfg rhesusaffe [edit=Matze][delphi]-Tags gesetzt. MfG, Matze[/edit] |
Re: Bußgeldrechner
Zitat:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var zulgesch, gefgesch, bußgeld: Double; inort: String; punkte, fahrverbot: Integer; begin case radiogroup1.itemindex of 0 : inort := 'ja'; 1 : inort := 'nein'; end; zulgesch:= StrToFloat(Edit1.Text); gefgesch:= StrToFloat(Edit2.Text); bußgeld:= StrToFloat(Edit3.Text); if (gefgesch >= 50) and (gefgesch <=60) then bußgeld:= 15; if (gefgesch >= 60) and (gefgesch <=65) then bußgeld:= 25; end; end; end. Hi und willkommen. Verwende doch das nächste Mal die "Delphi"-Tags im Editor. Hab Deine Prozedur mal überarbeitet. Du hattest inort als Real deklariert, hast dann aber versucht eine Zeichenkette zuzuweisen. Desweiteren nicht real sondern als Dezimaldatentyp Double verwenden. Gruß Michael |
Re: Bußgeldrechner
ok danke schon mal soweit. stimmt, das inort hätte ich als string deklarieren sollen, hatte ich auch erst. hab mir aber gedacht, das programm läuft trotzdem nicht, also liegt der fehler wohl nicht daran.
naja gut, werde mich dann nochmal dran setzen und schauen wie weit ich komme! mfg rhesusaffe PS: nächstes mal nehme ich die tag-funktion im editor :) |
Re: Bußgeldrechner
Hmm naja so richtig weiter bin ich nicht gekommen. Hat einer vielleicht "die" zündende Idee, das Programm zu laufen zu bekommen?
Mfg rhesusaffe |
Re: Bußgeldrechner
Was genau läuft denn nicht?
Sherlock |
Re: Bußgeldrechner
Mir erscheint das mit der Geschwindigkeit zwischen 50 und 60 nicht logisch. Wahrscheinlich meinst du, dass 50 das Limit ist und man bei bis zu 10km/h schneller 15 Euro zahlen muss. Im prinzip ist das doch recht einfach. Du hast immerin alle 3 Angaben:
- Zulässige Höchstgeschwindigkeit - gefahrene Geschwindigkeit - Innerorts, Außerorts Die Differenz zwischen zulässige Höchstgeschwindigkeit und gefahrener ist dann die Übertretung. Nun musst du nur noch schauen ob es Innerorts oder Außerorts und jenachdem einfach einen Wert ausgeben (die Strafe). |
Re: Bußgeldrechner
Zitat:
Delphi-Quellcode:
Im Übrigen bin ich mir nicht wirklich sicher, was Delphi zu dem 'ß' sagt. AFAIK sollte man darauf (und auch auf Umlaute) bei der Programmierung verzichten ;)
procedure TForm1.Button2Click(Sender: TObject);
var zulgesch, gefgesch, bußgeld: Double; inort: String; punkte, fahrverbot: Integer; begin case radiogroup1.itemindex of 0 : inort := 'ja'; 1 : inort := 'nein'; end; zulgesch:= StrToFloat(Edit1.Text); gefgesch:= StrToFloat(Edit2.Text); //bußgeld:= StrToFloat(Edit3.Text); <-- Hier liest du ein, was der User gerne für ein Bußgeld hätte ;) if (gefgesch >= 50) and (gefgesch <=60) then bußgeld:= 15; if (gefgesch >= 60) and (gefgesch <=65) then bußgeld:= 25; end; Edit3.Text := FloatToStr(bußgeld); //<-- Besser wäre es, das Ergebnis am Ende der Methode auszugeben ;) end; end. Achso, und warum ein String für 'inort'? :gruebel: Ein Boolean wäre da doch IMHO deutlich sinnvoller:
Delphi-Quellcode:
Und noch ein Edit: Der Hinweis von Frankfurtoder ist sowieso sehr sinnvoll. Warum denn so komplizierte If-Konstrukte, wenn es doch im Endeffekt immer nur um die Geschwindigkeitsübertretung geht?
inort : Boolean;
//... inort := (RadioGroup1.ItemIndex = 1); Das ließe sich doch mit einem Case mit Bereichsüberprüfung deutlich übersichtlicher gestalten. Voraussetzung wäre allerdings, dass du die Geschwindkigeiten als Integer definierst. Ich sehe aber im Moment sowieso keinen Sinn darin, dafür einen Double zu benutzen...
Delphi-Quellcode:
Btw stimmen die Bußgelder doch sowieso nicht... Deinem Code nach muss ich 15€ Strafe zahlen, wenn ich mit 50 durch die Stadt fahre? :gruebel:
Case gefgesch-zulgesch of
0..10: bußgeld := 15; 11..15: bußgeld := 25; else bußgeld := 42; end; |
Re: Bußgeldrechner
ui ui ui
danke erstmal der antworten! naja wenn da einiges ziemlich unlogisch erscheint, wie gesagt ich hatte bis jetzt mit delphi nicht viel am hut! mich verwirrt das hier auch alles n bisschen! naja nicht so meine sprache, die programmiersprache :\ |
Re: Bußgeldrechner
Kann mir denn wenigstens einer nen Struktogramm zu meiner Aufgabe schreiben? Daraus könnte ich dann ja ein Programm schreiben.
Wie gesagt, habe mein Programm soweit geschrieben, aber seh da wohl die logischen Zusammenhänge nicht so richtig. Ich brauch hilfe :( Mfg Rhesusaffe |
Re: Bußgeldrechner
Versuch doch die Basics zu verstehen die hier angesprochen wurden.
![]() ![]() Les dir das mal in Ruhe durch und versuch das umzusetzen was hier vorgeschlagen wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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