Autor |
Beitrag |
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 19.03.05 19:40
Und damit bitte wieder zurück zum eigentlichen Thema
AXMD
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 20:32
Vieleicht bringt es ja was, wenn ich schreibe, was das Programm machen soll.
Also es soll ein "Taschenrechner" werden (schulaufgabe)
Und da soll man halt eine Funktion eingeben.
Diese lautet zum Beispiel "5rad+8fak"
rad und fak sind 'specials' hier also einmal rad=Wurzel und fak=Fakultät.
Und da man das alles auf einmal eingibt, muss ich das ja trennen;)
Hierzu ist a1 die erste Zahl, op1 das erste 'Feature'
und a2 bzw.op2 das andere
operation ist halt ob plus oder...
Und das funktioniert leider nur mit try,finally,end; *grrr*
Und ich weiß jetzt echt nicht warum das nicht ohne funktioniert...
P.S.
Wegen der Formatierung: Es ist halt nut das Try/Finally und end; was aus der Reihe tanzt. Alles andere ist sauber strukturiert  ABER IST JA AUCH EGAL! MAN WILL JA KEINE BEENDETEN DISKUSIONEN WIEDER AUFLEBEN LASSEN! 
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Sa 19.03.05 20:43
du willst also einen mathe-Parser basteln  denke da gibt es hier genug vorlagen bzw. leute die sowas schon gemacht haben, auch komplexer.
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 20:51
Aber wo bleibt denn da der Lerneffeckt?
Wenn ich dann in der klausur sitze kann ich auch nicht einfach zu jemanden anderen hingehen und mir ein teil kopieren
^^"
Wollte halt nur ne kleine Antwort auf mein Frage, wie dieses Ding ohne try/finally/end; funktioniert 
|
|
matze.de
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: Sa 19.03.05 20:54
ich hab gar nichts von kopieren gesagt??
Ach ja, bei mir läuft es ohne Try..Finally-Block
mfg matze
_________________ si tacuisses, philosophus mansisses.
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 21:07
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Sa 19.03.05 21:08
verwende doch einfach mal den source von matze, hazer
lag sicher an deiner formatierung
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 21:12
retnyg hat folgendes geschrieben: | verwende doch einfach mal den source von matze, hazer
lag sicher an deiner formatierung |
nope
ohne try, etc. geht auch das nicht 
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Sa 19.03.05 21:19
so funktionierts (ich habe mir nicht die mühe gemacht es umzuformatieren)
bei 5rad+8fak gehts zum readln, nur keine ausgabe erfolgt.
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:
| Program rechner;
{$APPTYPE CONSOLE}
Uses SysUtils; Var S, D, a1, a2, op1, op2, Operation: String; C, B: Integer; Begin ReadLn(S); D := S; B := 0; C := 1; If (Ord(D[1]) < 58) And (Ord(D[1]) > 44) Then Begin While C <= Length(D) Do Begin B := B + 1; if C = 0 then break; If (Ord(D[C]) > 57) Or (Ord(D[C]) < 48) Then Begin If (Length(a1) = 0) Or (Length(a2) = 0) Or (Length(op1) = 0) Or (Length(op2) = 0) Then Begin If Length(a1) = 0 Then a1 := Copy(D, 0, B - 1) Else a2 := Copy(D, 0, B - 1); If Not (a2 = '') Then Begin If Ord(D[B]) > 114 Then Begin op2 := Copy(D, B, 3); Delete(D, 1, 3); End; End; Delete(D, 1, B - 1); C := C - B + 1; B := 0; If (Ord(D[C]) <= 47) And (Ord(D[C]) <> 46) And (Length(Operation) = 0) Then Begin Operation := Copy(D, 0, 1); Delete(D, 1, 1); C := C - 1; End; If (Ord(D[C + 1]) + Ord(D[C + 2]) < 115) Then Begin If Length(op1) = 0 Then op1 := Copy(D, 0, 3); Delete(D, 1, 3); C := C - 3; End; End; End; C := C + 1; End; End; ReadLn; End. |
ich habe nur zeile 21 eingefügt.
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 21:26
danke
Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha
thx
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 19.03.05 21:28
Hazer hat folgendes geschrieben: | danke
Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha
thx |
Darf ich nochmal fragen, welchen Zweck dein Programm hat und welche Eingaben es erwartet? Ich seh nur haufenweise Stringroutinen...
AXMD
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 21:31
AXMD hat folgendes geschrieben: |
Darf ich nochmal fragen, welchen Zweck dein Programm hat und welche Eingaben es erwartet? Ich seh nur haufenweise Stringroutinen...
AXMD |
Zitat: | Original von Hazer
Vieleicht bringt es ja was, wenn ich schreibe, was das Programm machen soll.
Also es soll ein "Taschenrechner" werden (schulaufgabe)
Und da soll man halt eine Funktion eingeben.
Diese lautet zum Beispiel "5rad+8fak"
rad und fak sind 'specials' hier also einmal rad=Wurzel und fak=Fakultät.
Und da man das alles auf einmal eingibt, muss ich das ja trennen;)
Hierzu ist a1 die erste Zahl, op1 das erste 'Feature'
und a2 bzw.op2 das andere
operation ist halt ob plus oder...
...
|
übersehen oder zu verwirrend?
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 19.03.05 21:39
Hazer hat folgendes geschrieben: | AXMD hat folgendes geschrieben: |
Darf ich nochmal fragen, welchen Zweck dein Programm hat und welche Eingaben es erwartet? Ich seh nur haufenweise Stringroutinen...
AXMD |
Zitat: | Original von Hazer
Vieleicht bringt es ja was, wenn ich schreibe, was das Programm machen soll.
Also es soll ein "Taschenrechner" werden (schulaufgabe)
Und da soll man halt eine Funktion eingeben.
Diese lautet zum Beispiel "5rad+8fak"
rad und fak sind 'specials' hier also einmal rad=Wurzel und fak=Fakultät.
Und da man das alles auf einmal eingibt, muss ich das ja trennen;)
Hierzu ist a1 die erste Zahl, op1 das erste 'Feature'
und a2 bzw.op2 das andere
operation ist halt ob plus oder...
...
|
übersehen oder zu verwirrend? |
Quote übersehen, Quelltext zu verwirrend ^^
AXMD
|
|
Hazer 
      
Beiträge: 54
Win XP Pro SP2
Turbo Delphi 2006
|
Verfasst: Sa 19.03.05 23:29
OK... ich steh so knap vor der Lösung *Daumen und Zeigefinger berühren sich fast*
Doch nun kommt noch eine Hammer n00b Prob, was das selbe Kaliber, wie die anderen fragen heute/gestern hatten
ALSO:
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:
| if a2=a3 then begin if ord(d[b]) > 57 then begin op2 := copy(d, b, 3); delete(d, 1, 3); end; end; |
Oops... Ist ja wieder die verhasste Hazer-Formatierung SORRY  (Ahh ne ist die Hazer-Formatting 1.1 (ohne ';' hinter den begin  )
Dort wo die beiden Kommentar getrennt sind, ist das Problem...
So findet das Prog wieder zuschnell ein Ende
Aber setze ich
Quelltext 1:
| if ord(d[b]) <= 114 then begin |
Dann funktioniert es wieder, halt ohne den gewünschten Erfolg
plz... need help 
_________________ I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 21.03.05 02:01
falls dein problem noch besteht, poste hier doch mal ein beispiel was man eingeben muss, und was die gewünschte ausgabe wäre.
ausserdem - WAS ist genau das problem ?
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.03.05 03:35
Hazer hat folgendes geschrieben: | Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha  |
Ich würd mich noch nicht zu früh freuen. Bei allem Respekt: Der Code ist komplett unbrauchbar und ich wette dein Lehrer wird sich nicht mal die Mühe machen, dein Programm zu korrigieren.
If (Ord(D[1]) < 58) And (Ord(D[1]) > 44) Then beginGemeint ist dabei folgendes: "Falls D[1] eines der folgenden Zeichen ist: -./0123456789". Ich kann mir fast keine schrecklichere Art ausdenken das zu programmieren!
Noch schlimmer diese Zeile hier:
if (ord(D[C + 1]) + ord(D[C + 2]) < 115) ThenWer blickt da noch durch!?
Wenn du überprüfen willst, ob ein Char in einem bestimmten Bereich liegt, oder zu einer bestimmten Menge von Zeichen gehört, kannst du das so tun:
Delphi-Quelltext 1: 2: 3: 4: 5:
| const Ops = ['+','-','/','*']; Zahl = ['0'..'9']; if C in Ops then |
Im Übrigen lässt sich das ganze vielleicht in ein Case packen, wenn du das ganze ein wenig ummodellierst.
Was mir grad noch auffällt:
Delphi-Quelltext
Das erste Zeichen im String ist das Zeichen 1, nicht 0. (Abgesehen davon ist Copy ein Overkill, wenn du damit nur ein einzelnes Zeichen aus dem String lesen willst)
Mein Vorschlag: Fang nochmals komplett von vorne an! Achte auf einen sauberen Programmierstil und versuch nicht, zwei Sachen gleichzeitig zu realisieren, wenn dabei die Lesbarkeit des Programmes drunter leidet! Verwende keine "Dirty Tricks" sondern programmier so, dass die Bedeutung jeder Programmzeile klar ersichtlich ist! Bei einem gut geschrieben Code sind nämlich Kommentare meist überflüssig.
Was die Geschwindigkeit angeht - dein Programm ist ohnehin nicht sehr effizient; du sparst mit deiner Programmierart definitiv am falschen Ort!
Gruss,
Simon
|
|
|