Autor |
Beitrag |
DelphX
Hält's aus hier
Beiträge: 5
|
Verfasst: So 25.10.09 15:19
Hi,
Ich bin neu hier und interessiere mich fürs Programmieren zudem hab ich das auch in der Schule (Ich nutze Zuhause Delphi7 aber in der Schule haben wir Delphi6. Ich habe im vorfeld angefangen mir Wissen anzueignen und bin jezt auf dieses schöne Forum hier gestoßen. Ich hoffe ich kann hier so einiges Lernen und später wenn ich genug weiss das erlernte auch Vermitteln.
Ich bin grade dabei einen Taschenrechner zu Programmieren (Wie der Windows Rechner)
mit *, /, +, -
Er soll auch Kommazahlen errechnen.
Das Problem ist ich komm gar nicht weiter.
Zum Beispiel hat mir mein Lehrer irgendwas von einem Zeichenkettenanfangsmelder erzählt und die erstellung von Struktogrammen und damit komm ich gar nicht klar.
Mich würde es sehr freuen wenn ich hilfe finden könnte so das wir schritt für schritt gemeinsam alles durchgehen können und vorallem das verständnis kommt.
Also ich erstelle die Ereignisse für die Ziffern z.B "Ziffernklickereignis" & "ButtonClickEreignis"
Dann die Befehle dort hin wie z.B "If sender Btn1 = xxx then ....."
Es ist nicht so das ich keine ahnung habe nur komme ich irgendwie nicht klar. Einige dinge versteh ich auch nicht wie z.B beim Geteilt da muss man irgendwie noch etwas spezielles machen wegen "0" Teilung. Und dann hat der Lehrer noch irgendwas vom Zeichenkettenanfangsmelder geredet. Ich weiss das er Zeichenkette true oder false sezt ist ein Boolean Typ.
Aber ich komm immer so durcheinander ich würd gern mal etwas struktur im Kopf haben und struktugramme selbst gut erstellen können.
Aso ich bin da echt am Verzweifeln.
Moderiert von Narses: Titel geändert, war: "Brauche Dringend Hilfe Taschenrechner".
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: So 25.10.09 16:05
Hi, und
Viele, viele Fragen auf einmal!
DelphX
Zitat: |
Aber ich komm immer so durcheinander ich würd gern mal etwas struktur ..... |
Sieht glaube so aus, als willst du alles auf einmal machen und verlierst damit den Überblick!
Hilfe bekommst Du in diesem Forum sicher.
Aber:
DelphX
Zitat: |
Mich würde es sehr freuen wenn ich hilfe finden könnte so das wir schritt für schritt gemeinsam alles durchgehen können und vorallem das verständnis komm |
ist das nicht ein wenig viel Hilfe
Ich glaube das würde diese Forum sprengen.
Helfen können wir Dir, bei einer Frage zu einem Problem, nicht bei Deinem ganzen Problem
und
DelphX
Zitat: | z.B beim Geteilt da muss man irgendwie noch etwas spezielles machen wegen "0" Teilung |
Wenn ich mich so richtig erinnere, gibt es auch noch DelphiHilfe, da steht so was drin.
Stell also eine konkrete Frage und schon geht es los
gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Zuletzt bearbeitet von ALF am So 25.10.09 18:43, insgesamt 1-mal bearbeitet
|
|
DelphX 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 25.10.09 16:32
Ohh vielen dank Ihr seid hier wirklich nett.
Also ich werd heute abend zu einem Freund gehen der mir versucht die Lage zu erklähren.
Ich werd das mal mit Ihm durchgehen dann werde ich sicher immer noch einige Fragen haben weil jezt bevor ich dahingehe währe es denke ich mal vlt zuviel fürs Forum ich möchte keinem zur Last fallen oder so. Das iss auch das beste denke ich dann stelle ich keine Fragen die später eh geklährt werden. Dannbleibt eig. nur noch das übrig was wirklich unverständlich für mich ist. Ich danke euch wirklich für eure hilfe 
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 25.10.09 19:09
Hallo und  in der Entwickler-Ecke,
also, dein Versuch uns zur Last zu fallen ist schlecht ausgefallen  . Wir freuen uns immer, wenn jemand Interesse am Programmieren findet. Für den Anfang kann ich dir auf jeden Fall raten: Geb nicht zu schnell auf. Programmieren besteht nun mal aus Frustmomenten und Fehlersuche. Auf jeden Fall empfehle ich dir, niemals die reine Copy+Paste-Methode zu benutzen, sondern immer zu versuchen, den Programmcode haarklein zu verstehen.
Der Taschenrechner ist mit Sicherheit ein beliebtes Übungsprogramm, dass die wichtigsten Programmierelement beinhaltet. Außerdem ist es beliebig erweiterbar, ein Taschenrechner ist im Grunde genommen ein Endlosprojekt mit schnellen Erfolgen, also optimal für einen Einsteiger.
Viel Spaß beim Programmieren
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 25.10.09 19:48
Also einwas schonmal:
Delphi-Quelltext 1:
| if sender Btn1 = xxx then |
Keine Ahnung was du damit bezwecken willst. Für mich sieht es so aus, als ob du alle Rechenoperationen in einer Methode unterbringen willst? Das ist zwar möglich, aber um es zu verstehen, solltest du vorher wenigstens entfernt was von OOP gehört haben. Für den Anfang schlage ich also vor, lieber jedem Button genau eine Rechenoperation mit einem eigenen Ereignis zu spendieren.
Vielleicht solltest du dir mal das hier ansehen:
[url]crashkurs.christian-stelzmann.de[/url] - Delphi Crashkurs von Christian S.
[url]de.wikibooks.org/wiki/Delphi[/url] - Wikibooks zum Thema Delphi
Delphi für Kids (Buch) von Hans-Georg Schumann (nicht unbedingt nötig, wenn du die beiden Referenzen zuvor verstanden hast. Aber auf jeden Fall ein sehr leichter Einstieg)
- "Zeichenkettenanfangsmelder" hab ich noch nie gehört
- Division durch Null: Warum fragst du nicht einfach ab, ob Divisor = 0? Ansonsten kannst du das auch mit try ... except lösen, was jedoch IMHO leicht unsauber wäre.
|
|
DelphX 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 25.10.09 23:18
Okay aso ich war beim Kollegen und hab das meiste verstanden.
Aso ich poste hier mal den Quelltext rein und den Teil den ich nicht kapiere der ist markiert & in Violett sind ( Moderiert von Narses: waren) Kommentare und genauere Erläuterungen...aso ab da versteh ich eig kaum noch was. Den rest könnte ich eig. Problemlos Programmieren. Ist nur dazu da falls Ihr euch das mal im Gesamtzusammenhang ansehen wollt.
Wenn Ihr wollt kann ich euch nochmal das Struktogramm geben das währe kein Problem:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edt1: TEdit; Btn0: TButton; Btn1: TButton; Btn2: TButton; Btn3: TButton; Btn4: TButton; Btn5: TButton; Btn6: TButton; Btn7: TButton; Btn8: TButton; Btn9: TButton; BtnPlus: TButton; BtnMinus: TButton; BtnMal: TButton; BtnGeteilt: TButton; BtnClear: TButton; BtnGleich: TButton; procedure BtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BtnOpClick(Sender: TObject); private public end;
var Form1: TForm1; zahl, erg: double; ZkAm : boolean; zeichen, op, opspeicher : char; zeichenkette : ansistring;
implementation
{$R *.dfm}
procedure TForm1.BtnClick(Sender: TObject); begin if Sender = Btn0 then zeichen := '0'; if Sender = Btn1 then zeichen := '1'; if Sender = Btn2 then zeichen := '2'; if Sender = Btn3 then zeichen := '3'; if Sender = Btn4 then zeichen := '4'; if Sender = Btn5 then zeichen := '5'; if Sender = Btn6 then zeichen := '6'; if Sender = Btn7 then zeichen := '7'; if Sender = Btn8 then zeichen := '8'; if Sender = Btn9 then zeichen := '9';
if ZkAm = true then begin ZkAm:= false; zeichenkette := zeichen; end else zeichenkette := zeichenkette + zeichen; Edt1.Text := zeichenkette; end;
procedure TForm1.FormCreate(Sender: TObject); begin ZkAm := true; opspeicher := '0'; end;
procedure TForm1.BtnOpClick(Sender: TObject); begin if Sender = BtnPlus then op := '+'; if Sender = BtnMinus then op := '-'; if Sender = BtnMal then op := 'x'; if Sender = BtnGeteilt then op := '/'; if Sender = BtnClear then op := 'c'; if Sender = BtnGleich then op := '='; | Also ich versteh hier nur sehr wenig, was mir diese Abschnitte sagen sollen ich kann es wirklich nur schwer nachvollziehen. Auf einmal steht da das die Variable "op" auf "+" gesetzt wird wenn Sender "+" ist. Und im Nächsten abschnitt ist dann aufeinmal von der Variable "opspeicher" die rede?
Und dann versteh ich das mit dem Geteilt nicht. Was wurde da genau gemacht? Wie kann man das machen das das Geteilt bei ="0" ein "Error" ausgiebt.
Und wie man Plötzlich zur Variable "Erg kommt" Also das Konzept ist mir schwebig bewusst aber ich versteh es nicht und kann hier wirklich nichts nachvollziehen besonders was funktion & Zusammenhänge angeht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| ZkAm := true; zahl := strtofloat(Edt1.Text); if opspeicher = '0' then erg := zahl; if opspeicher = '+' then erg := erg+zahl; if opspeicher = '-' then erg := erg-zahl; if opspeicher = 'x' then erg := erg*zahl; if opspeicher = '/' then erg := erg/zahl; if opspeicher = 'c' then erg := 0; if opspeicher = '=' then erg := erg;
opspeicher := op; Edt1.Text := floattostr(erg); end;
end. |
Moderiert von Narses: Color- durch Delphi- und Highlight-Tags ersetzt.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 26.10.09 00:00
Hi,
also als erstes mal: Musst du dieses Konzept verwenden? Oder darfst du auch ein eigenes machen? Weil das Konzept hier ist schon ziemlich komprimiert.
Anmerkung: Wenn man Variablen, die man nur an einer Stelle braucht, auch lokal deklariert, hat man einen besseren Überblick.
Also, fangen wir mal vorne an:
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: 25:
| procedure TForm1.BtnClick(Sender: TObject); begin if Sender = Btn0 then zeichen := '0'; if Sender = Btn1 then zeichen := '1'; if Sender = Btn2 then zeichen := '2'; if Sender = Btn3 then zeichen := '3'; if Sender = Btn4 then zeichen := '4'; if Sender = Btn5 then zeichen := '5'; if Sender = Btn6 then zeichen := '6'; if Sender = Btn7 then zeichen := '7'; if Sender = Btn8 then zeichen := '8'; if Sender = Btn9 then zeichen := '9';
if ZkAm = true then begin ZkAm:= false; zeichenkette := zeichen; end else zeichenkette := zeichenkette + zeichen; Edt1.Text := zeichenkette;
end; |
Die Variable ZkAm bedeuted eigentlich: "War der letzte Knopf eine Operation?" Das liegt daran, *Windows Rechner aufmach* tippst du ein: "1+7" dann steht da nur 7. (Ich muss ja ehrlicherweise zugeben, mir isses lieber wenn da die Rechnung da steht und nicht nur ein Ergebnis, aber Aufgabe ist Aufgabe). Das heißt, nach jeder Operation (in dem Fall das +) fängt er neu an, die Zahlen hinzuschreiben. Und genau dafür ist das ZkAm. Nach obigem Code wird genau danach gefragt: "Neue Zahlenreihe anfangen?" -> Wenn ja, dann zeichenkette = zeichen, sonst hänge es an die zeichenkette an.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.BtnOpClick(Sender: TObject); begin if Sender = BtnPlus then op := '+'; if Sender = BtnMinus then op := '-'; if Sender = BtnMal then op := 'x'; if Sender = BtnGeteilt then op := '/'; if Sender = BtnClear then op := 'c'; if Sender = BtnGleich then op := '='; |
So, das hier ist ganz einfach. Hier wird einfach geguckt, welche Operation gedrückt wurde (op ist wieder lokal, da steht eben nur die Operation drin).
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: 25: 26: 27:
| ZkAm := true;
zahl := strtofloat(Edt1.Text);
if opspeicher = '0' then erg := zahl; if opspeicher = '+' then erg := erg+zahl; if opspeicher = '-' then erg := erg-zahl; if opspeicher = 'x' then erg := erg*zahl; if opspeicher = '/' then erg := erg/zahl; if opspeicher = 'c' then erg := 0; if opspeicher = '=' then erg := erg;
opspeicher := op; Edt1.Text := floattostr(erg); end; |
So *kopf rauch* und jetzt kommen wir noch hierzu:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.FormCreate(Sender: TObject); begin ZkAm := true; opspeicher := '0'; end; |
Das hier ist das aller erste was er macht. ZkAm ist true, logisch weil wir ja zuerst mal ne Zahlenreihe eintippen.
opspeicher ist 0 (siehe oben). Wenn du "1+" eintippst dann macht er eben noch nix, sondern erst bei "1+2+".
Anmerkung:
Diese Zeile hier ist für Teiloperationen zuständig. Wie du weißt, darf dabei "zahl" nie null sein.
Delphi-Quelltext 1:
| if opspeicher = '/' then erg := erg/zahl; |
Also ganz banal:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if opspeicher = '/' then begin if zahl <> 0 then erg := erg/zahl else ... end; |
Die Frage ist dann halt, was er machen soll wenn zahl doch 0 ist. Ne Fehlermeldung bringen z.B.?
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 26.10.09 02:01
Da hier anscheinend jede Woche jemand nach Hilfe bezüglich eines Taschenrechners fragt, sollte eigentlich die Suche genug Beiträge finden.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 26.10.09 07:05
Da zahl eine Fließkommazahl ist, wird das Prüfen direkt auf 0 nicht unbedingt reichen. Da wäre IsZero geeigneter, denn damit erwischt man auch eine Zahl "so gut wie 0".
|
|
DelphX 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 26.10.09 22:45
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 26.10.09 23:26
der teil macht folgendes:
du hast eine zeichenkette. in deinem fall vermutlich lauter ziffern, also 1254. Da der PC aber nicht unterscheiden kann, was is jetzt ein zeichen, was eine zahl (intern im PC sind es ja nur bytes, also zahlen von 0 bis 255). Deswegen muss man dem PC sagen "bitte wandle diese ziffern in eine für dich lesbare zahl um". und genau das macht der befehl. Da es in unserem fall eine gleitkommazahl ist (also ein Floattyp: Real, Single, Double, Extended) und kein Ganzzahlentyp (Integer, ShortInt, SmallInt, LongInt, Int64) müssen wir den befehl StrToFloat verwenden. Str ist dabei die Abkürzung für String (also eine Zeichenkette), To heißt zu (no na ned), und Float heißt eben Gleitkommazahl. Und mit dieser Gleitkommazahl kann dann der PC herumrechnen, wie +, -, *, /, mod und so weiter.
alles klar?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 26.10.09 23:26
Naja die F1 taste wirkt wunder.
Zahl = typ(flieskommazahl)
Edit1.Text = String
zahl := string geht nicht
zahl := Wandel string to(in) float(flieskommazahl)
funktioniert
Hurra geschafft....
|
|
DelphX 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 26.10.09 23:36
ahhhhh jezt geht mir ein Licht auf  super ich kann jezt also den ganzen rechner runterschreiben.
Wie könnte man eigentlich Vorzeichen & Komma Realisieren so das man eingeben kann oder so ..oder -5,5 x 6 ?
Hätte da jemand eine Idee?
Aso ich könnte mir vorstellen sowas das man zu dem "ZiffernklickEreignis" ein '-' butten hinstellt der irgendwie als Zah gelten soll oder so...hmm keine ahnung. wo die Positiv zahl dann später in eine negativzahl im letzten schritt umgewandelt wird. aber so direkt hab ich keine besonmdere idee ich hoffe ich bin auf dem richtigen Pfad irgendwie....hmm
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 27.10.09 19:55
ich würde da eher einen Knopf hinmachen "-a"...hmm, ne, a ist das normal nicht...egal, auf jedenfall als Operation.
Und dann
Delphi-Quelltext 1: 2: 3: 4: 5:
| if Op='-a' then begin erg:=-erg; opspeicher := '0'; end; |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|