Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 19.03.05 19:40 
Und damit bitte wieder zurück zum eigentlichen Thema ;)

AXMD
Hazer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: 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! :evil:
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Sa 19.03.05 20:51 
Aber wo bleibt denn da der Lerneffeckt? :shock:

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 :cry:
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Sa 19.03.05 20:54 
ich hab gar nichts von kopieren gesagt?? :roll:
Ach ja, bei mir läuft es ohne Try..Finally-Block

mfg matze

_________________
si tacuisses, philosophus mansisses.
Hazer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Sa 19.03.05 21:07 
user profile iconmatze.de hat folgendes geschrieben:
ich hab gar nichts von kopieren gesagt?? :roll:

o.0? Oder halt abkucken und das denn verwenden :?

user profile iconmatze.de hat folgendes geschrieben:
Ach ja, bei mir läuft es ohne Try..Finally-Block

mfg matze

:shock:
Bei mir nicht :x
Liegt das an der Version?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Sa 19.03.05 21:12 
user profile iconretnyg hat folgendes geschrieben:
verwende doch einfach mal den source von matze, hazer
lag sicher an deiner formatierung


nope :cry:

ohne try, etc. geht auch das nicht :cry:
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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.
ausblenden volle Höhe 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:
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
    //useinputoutput; <- brauchts nur bei kol
    ReadLn(S);
    D := S;
    B := 0;
    C := 1;
        If (Ord(D[1]) < 58And (Ord(D[1]) > 44Then
        Begin
            While C <= Length(D) Do
            Begin
                B := B + 1;
                if C = 0 then break;
                If (Ord(D[C]) > 57Or (Ord(D[C]) < 48Then
                Begin
                    If (Length(a1) = 0Or (Length(a2) = 0Or (Length(op1) = 0Or (Length(op2) = 0Then
                    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, 13);
                            End;
                        End;
                        Delete(D, 1, B - 1);
                        C := C - B + 1;
                        B := 0;
                        If (Ord(D[C]) <= 47And (Ord(D[C]) <> 46And (Length(Operation) = 0Then
                        Begin
                            Operation := Copy(D, 01);
                            Delete(D, 11);
                            C := C - 1;
                        End;
                        If (Ord(D[C + 1]) + Ord(D[C + 2]) < 115Then
                        Begin
                            If Length(op1) = 0 Then
                                op1 := Copy(D, 03);
                            Delete(D, 13);
                            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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Sa 19.03.05 21:26 
danke :wink:

Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha :D

thx

_________________
I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 19.03.05 21:28 
user profile iconHazer hat folgendes geschrieben:
danke :wink:

Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha :D

thx


Darf ich nochmal fragen, welchen Zweck dein Programm hat und welche Eingaben es erwartet? Ich seh nur haufenweise Stringroutinen...

AXMD
Hazer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: Sa 19.03.05 21:31 
user profile iconAXMD 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 19.03.05 21:39 
user profile iconHazer hat folgendes geschrieben:
user profile iconAXMD 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win XP Pro SP2
Turbo Delphi 2006
BeitragVerfasst: 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 :oops:

ALSO:
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
  {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);
                        a3:=copy(d,0,b-1);
                        if (length(a1) <> 0) AND not(a3='') AND not(a3=a1) then a2 := copy(d, 0, b - 1);
                        delete(d, 1, b - 1); }

                        if a2=a3 then begin
                            if ord(d[b]) > 57 then begin  //HIER LIEGT DAS PROBLEM
                                op2 := copy(d, b, 3);
                                delete(d, 13);
                            end;
                        end;
                       { 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;}


Oops... Ist ja wieder die verhasste Hazer-Formatierung SORRY :oops: (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 :evil:
Aber setze ich
ausblenden Quelltext
1:
if ord(d[b]) <= 114 then begin					

Dann funktioniert es wieder, halt ohne den gewünschten Erfolg :evil:

plz... need help :!:

_________________
I was too weak to fight | once more i let go
it is a black session | an invitation of sorts
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 21.03.05 03:35 
user profile iconHazer hat folgendes geschrieben:
Jetzt nur noch versuchen a2/op2 hin zu kriegen und meine 1 ist mir sicher muahahahahaha :D

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]) < 58And (Ord(D[1]) > 44Then 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]) < 115ThenWer 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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
Copy(D, 01)					

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