AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Taschenrechner Ausgabe

Ein Thema von safak67 · begonnen am 5. Jun 2009 · letzter Beitrag vom 8. Jun 2009
Thema geschlossen
Seite 5 von 8   « Erste     345 67     Letzte »    
safak67

Registriert seit: 22. Mär 2009
87 Beiträge
 
#41

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 12:48
wenn ich das break einfüge dann macht er die division und addition richtig aber dann macht er die multiplikation falsch und wenn kein break da ist dann macht er das eine falsch das andere richtig...

 
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#42

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 12:53
Das lässt sich ja relativ einfach lösen indem du nur bei '+' und '-' breakst.
Schön ist das aber eigentlich nich wenn man nicht weiss worans liegt^^

Delphi-Quellcode:
case index of
  0: Result := Seg1 * Seg2;
  1: Result := Seg1 / Seg2;
  2: begin
       Result := Seg1 + Seg2;
       break;
  end;
  3: begin
       Result := Seg1 - Seg2;
       break;
  end;
end;

€dit
Es liegt daran dass der Operator der zuerst gefunden wird, nicht zuerst berechnet wird.
Wenn du 2*3+3 eingibst findet die funktion zuerst 2*3, gibt 3+3 recursiv weiter und rechnet das dann aus.
Dann steht in der ersten instanz 2*6 und das ergibt 12.
Wenn man die reihenfolge umdreht(also zuerst auf '+' und '-' prüft), findet die funktion zuerst 3+3 und gibt 2*3 weiter.
Das ergibt richtigerweise 3+6 = 9.

Weil die funktion ohne break einfach weiterläuft findet sie nachdem sie das '*' gefunden hat, das '+' neu und macht genau das selbe als würden die operatoren umgekehrt geprüft :=)

Delphi-Quellcode:
  OpFound := False;
  Result:= 0;
  for index := 0 to 3 do begin
    case index of
      0: Op := '+';
      1: Op := '-';
      2: Op := '*';
      3: Op := '/';
    end;
    if pos(Op,Formular) > 1 then begin
      OpFound := True;
      Seg1 := BerechneTerm(copy(Formular,1,pos(Op,Formular) - 1));
      Seg2 := BerechneTerm(copy(Formular,pos(Op,Formular) + 1,length(Formular)));
      case index of
        0: Result := Seg1 + Seg2;
        1: Result := Seg1 - Seg2;
        2: Result := Seg1 * Seg2;
        3: Result := Seg1 / Seg2;
      end;
      break;
    end;
  end;

  if Not OpFound then Result := StrToFloat(Formular);
narf - not a real function
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#43

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:17
Die Reihenfolge gleichwertiger Operatoren wurden bereits bei der ursprünglichen von mir geposteten Funktion noch nicht berücksichtigt.
Ich habe darauf hingewiesen.

http://www.delphipraxis.net/internal...t.php?t=158936

Der Gedanke war, daß sich jemand bestimmtes damit auseinander setzt, die Funktion versteht und zumindest einen kleinen Teil selbst programmiert (oder zumindest nach einem Ansatz sucht).
Die Funktion wurde mehrfach verändert (so daß diese zwischenzeitlich garnicht mehr funktionierte) und liefert jetzt wieder die ursprünglichen Ergebnisse.

Allerdings scheint es kaum Fortschritte beim Verständnis für das Programmieren im allgemeinen zu geben.
Wenn man ein wichtiges Projekt hat, dann muss man sich auch jeden Tag tatsächlich intensiv damit beschäftigen.
(2-3 Stunden und sei es nur indirekt in dem man z.B. Bücher für Anfänger liest)
Ich denke das passiert aber nicht, sonst würden die meisten der hier gestellten Fragen in dieser Form nicht mehr auftreten.

Wahrscheinlich könnte fast jeder in diesem Forum das Programm fertigstellen.
Aber das kann nicht Ziel diese Projektes gewesen sein.
Zumindest sollte man das Programm danach verstehen und selbst erklären können.
 
safak67

Registriert seit: 22. Mär 2009
87 Beiträge
 
#44

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:30
Ich weiß nicht wie oft ich es noch schreiben soll.. Aber ich habe vorher noch NIE mit Delphi programmiert, die Aufgabe sollte ich ohne Vorkentnisse machen. Ich habe nur das Buch Delphi für Kids erhalten mit ich mich auch intensiv beschäftige..
Naja zurück zum Thema:

Also wenn ich die Operanden vertausche funktioniert das nicht aber wenn ich das break einfüge unter + und - dann geht das..
 
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#45

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:37
Zitat von safak67:

Also wenn ich die Operanden vertausche funktioniert das nicht aber wenn ich das break einfüge unter + und - dann geht das..
Das macht zwar im Endeffekt das selbe, ist aber undschön frisst überflüssig Rechenzeit.

Was funktioniert denn nicht wenn du die Operanden vertauschst?

Das beispiel das ich gepostet habe ist quasi identisch mit dem code den dir Blup schon vor zwei tagen gegeben hat.
Wieso hast du den überhaupt so verändert?
narf - not a real function
 
safak67

Registriert seit: 22. Mär 2009
87 Beiträge
 
#46

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:39
wenn ich die operanden vertausche macht er kein punkt vor strichrechnung, sondern umgekehrt..
 
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#47

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:47
Hast du die Operanden denn auch in beiden cases geändert?

Bei mir funktioniert das einwandfrei...

Und es bleibt die frage wieso du das überhaupt geändert hast.
In Blups code war es doch richtig.
narf - not a real function
 
safak67

Registriert seit: 22. Mär 2009
87 Beiträge
 
#48

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 13:53
ja ich habe es in den beiden cases verändert.. wenn ich z.B 3+3*3 eintippe kommt da 18 raus...
aber wie gesagt andersrum funktioniert es, also mit den breaks..
hat einer vllt ne idee, was ich falsch gemacht habe
 
HenKst

Registriert seit: 7. Jul 2008
113 Beiträge
 
#49

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 14:12
Dass es mit den breaks funktioniert ist aber eigentlich Zufall, darauf darfst du nichts aufbauen.

Hast du den einen Break hinterm case?

Delphi-Quellcode:
case index of
  0: Result := Seg1 + Seg2;
  1: Result := Seg1 - Seg2;
  2: Result := Seg1 * Seg2;
  3: Result := Seg1 / Seg2;
end;
break;
Den brauchst du schon noch, sonst hast du die gleiche Situation wie vorher nur mit mit anderen Operanden.
narf - not a real function
 
safak67

Registriert seit: 22. Mär 2009
87 Beiträge
 
#50

Re: Taschenrechner Ausgabe

  Alt 5. Jun 2009, 14:17
ich habe da immer noch ein rechenfehler drin.. wenn ich 2-2*2-2 gibt er mir 0 aus was ja falsch ist.. weiß einer warum.?
bei der eingabe 3-3*3-3 gibt er mir -3 aus anstatt -9, der vertauscht das zweite minus in plus um oder so ähnlich

der aktuelle quelltext was ich habe:
Delphi-Quellcode:
function TFormTR.BerechneTerm(Formular: string): Double;
var
  Seg1,Seg2 : double;
  index, ipos : integer;
  Op : string;
  OpFound : Boolean;
begin
  OpFound := False;
  for index := 0 to 3 do begin
    case index of
      0: Op := 'x';
      1: Op := '/';
      2: Op := '+';
      3: Op := '-';
    end;
    ipos:= pos(Op,Formular);
    if ipos > 1 then
    begin
      OpFound := True;
      Seg1 := BerechneTerm(copy(Formular,1,ipos - 1));
      Seg2 := BerechneTerm(copy(Formular,ipos + 1,length(Formular)));
      case index of
         0: Result := Seg1 + Seg2;
         1: Result := Seg1 - Seg2;
         2: Result := Seg1 * Seg2;
         3: Result := Seg1 / Seg2;
      end;
      break;

    end;
  end;

  if Not OpFound then Result := StrToFloat(Formular);
end;
 
Thema geschlossen
Seite 5 von 8   « Erste     345 67     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz