Taschenrechner (aus dem Buch eigene Apps programmieren)

Startseite Foren Deutsches LiveCode-Forum Taschenrechner (aus dem Buch eigene Apps programmieren)

Ansicht von 14 Antwort-Themen
  • Autor
    Beiträge
    • #18025
      m4723
      Teilnehmer

      Hallo,

      ich bin fleißig am Lernen mit dem sehr gut geschriebenen Buch.
      Jetzt bin ich bei Kapitel 7 und versuche einen Taschenrechner zu basteln, allerdings will das nicht funktionieren.
      Es kommt immer dieser Fehler: (value: error executing expression) near „2+3=“, char 1

      Selbst wenn ich den kompletten Code aus dem Übungsprojekt kopiere kommt der Fehler.

      Starte ich das Übungsprojekt funktioniert der Taschenrechner einwandfrei.
      Wo liegt jetzt da der Fehler?

      
      global neu
      global aufgabe
      global ergebnis
      
      on mouseDown
         if "Button" is in the target then
            if neu = true then
               put empty into field "display"
               put false into neu
            end if
            put the label of the target after field "display"
         end if
      end mouseDown
      
      on ausrechnen
         set the numberFormat to ".#####"
         put field "display" into aufgabe
         try
            put the value of aufgabe into ergebnis
         catch err
            put "Fehleingabe" into ergebnis
         end try
         put ergebnis into field "display"
         put true into neu
      end ausrechnen
      

      Die Button heißen „Button“ und die Label sind durchnummeriert.

      Danke im Voraus.

      Grüße Matze

    • #18030
      Klaus Major
      Verwalter

      Hallo Matze,

      willkommen im Forum!

      Ich kenne das Buch nicht, wo genau kommt der Fehler bzw. welche Zeile genau meckert LC an? Du hast ja zwei Handler in Deinem Skript oben.

      Gruß

      Klaus

    • #18039
      m4723
      Teilnehmer

      Hi,

      es geht um das Buch Rheinwerk-Verlag

      Der Fehler passiert beim „ausrechnen“.
      Bei „Try Catch“ erscheint immer „Fehleingabe“ im Display.
      Wenn ich den „Try Catch“ weg lasse, kommt es hier zum Fehler: put the value of aufgabe into ergebnis

      Danke im Voraus 🙂

      Grüße Matze

    • #18040
      Klaus Major
      Verwalter

      OK, und was steht genau in dem Feld, wenn der Fehler auftaucht?
      Habe das gerade mal getestet und 2+2 ins Feld eingegeben:

      on mouseUp
         put field "display" into aufgabe
         put the value of aufgabe into ergebnis
         answer ergebnis
      end mouseUp

      Und erhielt -> 4

    • #18042
      Klaus Major
      Verwalter

      Ah, gerade gesehen:
      Das Gleichheitszeichen = am Ende des Feldes generiert den Fehler! Daher zur Not:

      ...
      ## Ist letztes Zeichen im Feld ein =?
      if char -1 of fld "display" = "=" then
      
        ## Dann löschen:
        delete char -1 of fld "display"
      end if
      ...

      Oder direkt den Handler „ausrechnen“ aufrufen, wenn der User ein = eingibt!?

    • #18050
      m4723
      Teilnehmer

      Perfekt!
      Danke Klaus.

      Habe statt „field „display““ die Variable „aufgabe“ prüfen lassen, dann hat es funktioniert.
      Allerdings verstehe ich immer noch nicht warum das bei den Übungsdateien (die 1 zu 1 identisch sind mit meinem Code) funktioniert und bei dem was ich getippt habe nicht.

      Aber das ist auch nicht weiter tragisch und irgendwann werde ich hoffentlich auch auf solche Ideen kommen. 🙂

      Schönen Abend und bis zum nächsten Mal.

    • #18070
      Torsten
      Teilnehmer

      Hi,

      schau Dir unbedingt mal das Video von Hauke zum Taschenrechner an: https://youtu.be/N93qGiCmdtQ
      Der ist viel besser als der im Buch 🙂

      LG
      Torsten

    • #18078
      m4723
      Teilnehmer

      Hi,

      da hast du Recht.
      Obwohl der aus dem Buch eigentlich aktueller ist/ sein sollte.
      Schade auch, das nur zwei Videos von ihm Verfügbar sind.

      Grüße Matze

    • #18082
      hauke
      Verwalter

      Hallo Matze,

      der Fehler ist nur ersichtlich, wenn man auch das Button-Skript, das zum „=-Button“ gehört, betrachtet. Das Problem liegt darin, dass es „on mouseup“ im Card-Abfrageskript heißen muss und nicht „on mousedown“. Das ist im Buch ein bisschen verwirrend, denn das Skript wird hier in einem Schritt von „mousedown“ auf mouseup“ geändert, ohne dass nochmal drauf hingewiesen wird.
      Denn nur wenn im Button-Skript und im Card-Skript dasselbe abgefragt wird (also „mouseup“) kann sichergestellt werden, dass das Card-Skript nicht mehr aufgerufen wird, wenn der Button es bereits abgefangen hat.

      Alles klar?

      Torsten: Warum findest du, dass meine Youtube-Version besser sei? Im Grunde ist sie doch gleich wie im Buch, nur dass sie im Buch es etwas didaktischer aufbereitet habe und abgesichert gegen Fehleingaben.

    • #18084
      m4723
      Teilnehmer

      Hallo,

      von der Theorie ist es jetzt klar.
      Morgen setze ich das noch um, damit meine Übungen (Taschenrechner in dem Fall) auch in der Praxis einwandfrei funktionieren.

      Den Rechner aus dem Video habe ich heute ebenfalls nachgebaut, dass hat wunderbar funktioniert und war dann wieder ein kleiner Erfolg.

      Weitere Videos wären großartig.

      Danke für die Erklärung.

      Grüße Matze

    • #18104
      Torsten
      Teilnehmer

      @Hauke

      ich beziehe mich beim Taschenrechner auf die erste Auflage des Buches. Da hast Du nur die Addition berücksichtigt, aber alles andere nicht. Eine Erweiterung um minus, mal und geteilt wird recht komplex.

      Durch die geniale Verwendung von
      put the value of field "ausgabe" into field "ausgabe"
      wird eine Menge Komplexität abgenommen (z.B. auch das Rechnen mit Klammern) und gezeigt, wie elegant das mit Livecode geht 🙂

    • #18106
      Klaus Major
      Verwalter

      VALUE ist eine Funktion, daher kann man auch hier wieder etwas Tipparbeit (drei Buchstaben weniger!) sparen, wenn man sie mit der „üblicheren“ Syntax verwendet:

      ...
      put value(field "ausgabe") into field "ausgabe
      ...

      🙂

    • #18108
      Torsten
      Teilnehmer

      oder noch kürzer:

      put value(fld "ausgabe") into fld "ausgabe

      Alter Tastensparfuchs 🙂

    • #18113
      Klaus Major
      Verwalter

      HA! 😀

    • #18115
      hauke
      Verwalter

      @Torsten: Ja, in der ersten Auflage war der richtige Taschenrechner noch nicht enthalten, in der zweiten habe ich den Rechner aus dem Video übernommen.


      @Klaus
      : Da hast du natürlich Recht – jede gesparte Taste verlängert das Leben… 🙂

Ansicht von 14 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.