Español
Foro

Problema - Selbst programmierter Taschenrechner

 
- Página 1 -



Julian
Schmidt
¡Hola,
bin gerade esta de Just for Fun una Taschenrechner zuschreiben.
Häng allerdings todavía a el Punkt cómo a besten el Ergebnis ausrechnet.
Bräucht una gute Strategie cómo una en un Editierbox eingebene Matheaufgabe, gelöst en una variable speichert y luego en el besagten Editierbox ausgibt
Weiß ahora no como yo genau anstellen se.
Hoffe ihr könnt me sagen como yo anstelle
DEF GetSysColor(1)!"USER32","GetSysColor"
declarar Edit&,e%,eins&,zwei&,drei&,vier&,fünf&,sechs&,sieben&,acht&,neun&,null&
declarar komma&,plus&,minus&,mal&,geteilt&,gleich&,clear&,off&,del&,info&,ans$,ergebnis!
Ventana de Estilo 24
Ventana 10,10-250,250
cls GetSysColor(15)
Título de la ventana "Taschenrechner"
Edit& = Crear("Edit",%HWnd,"",20,20,200,20)
eins& = Crear("Button",%HWnd,"1",20,60,30,25)
zwei& = Crear("Button",%HWnd,"2",60,60,30,25)
drei& = Crear("Button",%HWnd,"3",100,60,30,25)
vier& = Crear("Button",%HWnd,"4",20,100,30,25)
fünf& = Crear("Button",%HWnd,"5",60,100,30,25)
sechs& = Crear("Button",%HWnd,"6",100,100,30,25)
sieben& = Crear("Button",%HWnd,"7",20,140,30,25)
acht& = Crear("Button",%HWnd,"8",60,140,30,25)
neun& = Crear("Button",%HWnd,"9",100,140,30,25)
null& = Crear("Button",%HWnd,"0",20,180,30,25)
komma& = Crear("Button",%HWnd,".",60,180,30,25)
plus& = Crear("Button",%HWnd,"+",140,60,30,25)
minus& = Crear("Button",%HWnd,"-",140,100,30,25)
mal& = Crear("Button",%HWnd,"*",140,140,30,25)
geteilt& = Crear("Button",%HWnd,":",140,180,30,25)
gleich& = Crear("Button",%HWnd,"=",100,180,30,25)
clear& = Crear("Button",%HWnd,"C",180,100,40,25)
del& = Crear("Button",%HWnd,"Del",180,140,40,25)
off& = Crear("Button",%HWnd,"Off",180,60,40,25)
info& = Crear("Button",%HWnd,"?",180,180,40,25)

whilenot e%

    waitinput
    waitinput

    if getfocus(eins&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "1"

    elseif getfocus(zwei&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "2"

    elseif getfocus(drei&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "3"

    elseif getfocus(vier&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "4"

    elseif getfocus(fünf&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "5"

    elseif getfocus(sechs&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "6"

    elseif getfocus(sieben&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "7"

    elseif getfocus(acht&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "8"

    elseif getfocus(neun&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "9"

    elseif getfocus(null&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "0"

    elseif getfocus(plus&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "+"

    elseif getfocus(minus&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "-"

    elseif getfocus(mal&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "*"

    elseif getfocus(geteilt&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "/"

    elseif getfocus(komma&)

        ans$ = Val(GetText $(Edit&))
        SetText Edit&,ans$ + "."

    elseif getfocus(clear&)

        SetText Edit&,""

    elseIf Getfocus(off&)

        end

    elseif getfocus(info&)

        MessageBox("Title:\t\tTaschenrechner\t\nAutor:\t\tJulian Schmidt\nVersion:\t\t1.0\nErstellungsdatum:\t5.11.2010","I N F O",64)

    elseif getfocus(del&)

        SetText Edit&,ans$

    elseif getfocus(gleich&)

        ergebnis! = Val(GetText $(Edit&))
        ans$ = ergebnis!
        SetText Edit&,ans$

    endif

endwhile


Außerdem sería Me gusta el Del-Función verbessern. Kann bisher sólo una Signo entfernen. Man debería also de uno Variable una Signo abschneiden
y valor entonces neu transferencia.
Für otro Verbesserungsvorschläge bin natürlich offen
Naja Hoffe ihr könnnt me en media zwei anliegen einwenig helfen


mfg

Julian57
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.11.2010  
 



 
- Página 3 -


« Dieser Contribución wurde como Solución gekennzeichnet. »

- Página 4 -



Peter
Max
Müller

DEF CTStr(2) if(len($(2))=0,0,(len($(1))-len(translate$($(1),$(2),"")))/len($(2)))'zählt como oft $2 en $1 vorkommt
DEF InStrExt(3) int(instr($(2),mid$($(1),&(3),len($(1))))+&(3))'sucht en $1 de &3 después de $2
DEF InStrLast(3) if(instrext($(1),$(2),&(3))>&(3),instrlast($(1),$(2),instrext($(1),$(2),&(3))),int(&(3)-1))'sucht en $1 de &3 después de el letzen vorkommen de $2, arbeitet Rekursiv.
'Wenn uno el Operatorzeichen ändern möchte braucht uno sólo el entsprechenden Signo ändern en el 2 folgenden Características ändern
DEF MathTabs(2) translate$(translate$(translate$(translate$($(1),"+",$(2)),"-",$(2)),"*",$(2)),"/",$(2))
DEF GetMath(1) if($(1)="+",1,if($(1)="-",2,if($(1)="*",3,if($(1)="/",4,0))))
'Das Kernstück, así klein y doch una ganzer Taschenrechner
'Funktioniert sólo alleine si la Variables de Math Global gesetzt fueron (Ergebnis siempre en ma_v1& !)

proc mathcore

    parámetros ma_cmd$
    ma_s2$="«Æ»"'MathTabs-Signo = Beliebige Zeichenfolge el no en el Ausdruck vorkommen debería, sonst falsche Berechnung !
    ma_s4$=mathtabs(ma_cmd$,ma_s2$)'MathTabs conjunto
    ma_s3$=""
    ma_v1&=0
    ma_v2&=1

    whileloop ctstr(ma_s4$,ma_s2$)+1

        ma_s3$=substr$(ma_s4$,&bucle,ma_s2$)'Valor erfassen - Hier podría uno el Ausdruck zB. en una cierto Namen prüfen (para Variables en Skriptsprachen).
        ma_v1&=if(ma_v2&=0,ma_v1&,if(ma_v2&=1,ma_v1&+val(ma_s3$),if(ma_v2&=2,ma_v1&-val(ma_s3$),if(ma_v2&=3,ma_v1&*val(ma_s3$),if(val(ma_s3$)<1,ma_v3&,ma_v1&/val(ma_s3$))))))
        ma_v2&=GetMath(mid$(ma_cmd$,len(ma_s3$)+1,1))
        ma_cmd$=del$(ma_cmd$,1,len(ma_s3$)+1)

    wend

ENDPROC

'Berechnung con Klammern
'Haupt-Procedimiento el automáticamente sólo todos Klammern ausrechnet (si welche vorkommen)

proc math

    parámetros ma_prio$
    declarar ma_s1$,ma_s2$,ma_s3$,ma_s4$,ma_v1&,ma_v2&,ma_v3&,ma_v4&'en häufiger Benutztung Global conjunto (Ergebnis siempre en ma_v1& !)
    caso or(instr(")",ma_prio$)<instr("(",ma_prio$),neq(ctstr(ma_prio$,"("),ctstr(ma_prio$,")"))):ma_prio$="0"'ungültige Klammersetzung: Valor en Null conjunto

    whilenot ctstr(ma_prio$,"(")=0

        ma_v3&=instr("(",ma_prio$)+1
        ma_v4&=instrext(ma_prio$,")",ma_v3&)-1
        ma_v3&=ma_v3&+instrlast(mid$(ma_prio$,ma_v3&,ma_v4&-ma_v3&),"(",1)'Klammern de Innen después de Außen auflösen
        mathcore mid$(ma_prio$,ma_v3&,ma_v4&-ma_v3&)
        ma_prio$=del$(ma_prio$,ma_v3&-1,ma_v4&-ma_v3&+2)
        ma_prio$=en el$(str$(ma_v1&),ma_prio$,ma_v3&-1)

    wend

    mathcore ma_prio$
    volver ma_v1&

ENDPROC

declarar ed1%,bt1%
window 20,20-420,150
drawtext 5,5,"Berechnung eingeben... (+ Add ; - Sub ; / Div ; * Mul ; ( ) Prio)"
ed1%=create("edit",%hwnd,"5+(30*(4/2)+10)",5,25,400,21)'5+((10/2)*10)-30
bt1%=create("button",%hwnd,"Berechnen",5,50,400,40)

whilenot %key=2

    waitinput
    'XProfan
    caso getfocus(bt1%):messagebox("Ergebnis: "+str$(math(gettext$(ed1%))),"Ergebnis:",0)
    ''Profano 7:
    'caso getfocus(bt1%):math gettext$(ed1%)
    'caso getfocus(bt1%):messagebox("Ergebnis: "+str$(&(0)),"Ergebnis:",0)

wend

end

Das todo es en 2 Module aufgeteilt: Mathcore berechnet una Ausdruck, Math rechnet zusätzlich zuerst todos Klammern de.

El Procedimiento Math aufrufen !

Parámetro: $ (Formel)
Rückgabe: & (Ergebnis)
 
XProfan X3, X4ß, Win 10.1
08.11.2010  
 




Dieter
Zornow
In el Ayuda para 11.2 es una Taschenrechner como Ejemplo. Lade el Ayuda runter si du ellos no hast y dar en el Búsqueda Taschenrechner una, como kannst du einiges abschauen.
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
07.11.2010  
 




Julian
Schmidt
Gracias schön
werds me de tiempo anschauen
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.11.2010  
 



Wobei Yo ahora pero no weiß si Dieter weiß dasses Julian más ums eval va - qué aber así más o menos no Sprolle ielt. ^ ^
 
07.11.2010  
 




Julian
Schmidt
¡Hola
tener me ahora veces el Taschenrechner en Ayuda angeschaut. Bin de los Teil allerdings nich sonderlich überzeugt. Rechnet casi todos Aufgaben falso.
Beispiele
Yo geb el Tarea 5*5+25 en el Rechner una. Dann kommt komischerweise 30 fuera, obwohl 50 correcto wäre. En leichten Aufgaben funzt lo allerding (5+5 oder 60/3...)
Außerdem hängt él se öfters en

Werd media entonces doch con el Parsen escribir.
Wäre lieb si la el ya algo con Parsen gemacht haben simplemente veces ihren Quellcode puesto könnten.

Werde si yo fertig bin auch el Taschenrechner-Quellcode poste

mfg

Julian57
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



Como Yo el verstehe möchtest Usted gerne el código para una Taschenrechner en lugar de una a programa ... en entonces el código wiederum para enviar?! ^ ^

Gehe Stück para Stück antes y frage sólo después de si no weiterkommst.
 
08.11.2010  
 




Julian
Schmidt
nein, Yo hätte sólo gern una Ejemplo para parsen
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



Achso...
KompilierenMarcaSeparación
var s$="Mein String"
var c&=len(s$)

whileLoop c&

    if mid$(s$,&loop,1)=" "

        print "Freizeichen gefunden."

    endif

08.11.2010  
 




Julian
Schmidt
¡Hola, en esta post voluntad Yo sólo veces todos Fragen stellen wo todavía algo unklar para mich es

1. Como findet uno heraus a welcher Position el Operator(+,-./,*) liegt?

2. ¿Cómo se puede al hacer el él de el Rechenoperator nun solange lo Ziffern son nachrechts va

y el Position des Signo antes el Operator zwei en uno Variable speichern?

3. ¿Cómo se puede uno nun el ersten Part de Signo eins a para el Signo antes el zweiten Operator auslesen?Und entonces de Position des zweiten Operator a bastante hinten?

4. Como rechnet uno Anschließend el ersten Teil el Tarea de, y Hängt el Rest widerum dran y son el Ergebnis de?

Yo me todo entonces así pensamiento (Programa es sólo el Pasen Block, y funktioniert natürlich no. Habs sólo geschrieben en ya veces una Struktur a haben)
KompilierenMarcaSeparación
proc parsen

    whilenot e%

        waitinput

        if getfocus(clear&)

            SetText Edit&,""
            rechnen

        Elseif getfocus(off&)

            Windowtitle "Auf Wiedersehen..."
            Sleep 800
            end
            Else ifNot instr("*",ans$)=0
            op1%=Position des ersten Operators(*)
            Nun finde das Operator ab op1% und und und setze es als op2%
            op2%=op2%-1
            Teil1$=Del$(ans$,op2%,99)
            op2%=op2%+1
            Teil2$=Del$(ans$,1,op2%)
            Nun rechne noch Teil1$ aus und überschreibe Teil1$
            ans$=Teil1$ + Teil1$

        ElseIF instr("*",ans$)=0 or instr("/",ans$)=0 or instr("-",ans$)=0 pr instr("+",ans$)=0

            rechnen

        Endif

        parsen
        Else ifNot instr("+",ans$)=0
        op1%=Position des ersten Operators(+)
        Nun finde das Operator ab op1% und und und setze es als op2%
        op2%=op2%-1
        Teil1$=Del$(ans$,op2%,99)
        op2%=op2%+1
        Teil2$=Del$(ans$,1,op2%)
        Nun rechne noch Teil1$ aus und überschreibe Teil1$
        ans$=Teil1$ + Teil1$

    ElseIF instr("*",ans$)=0 or instr("/",ans$)=0 or instr("-",ans$)=0 pr instr("+",ans$)=0

        rechnen

    Endif

    parsen
    Else ifNot instr("/",ans$)=0
    op1%=Position des ersten Operators(/)
    Nun finde das Operator ab op1% und und und setze es als op2%
    op2%=op2%-1
    Teil1$=Del$(ans$,op2%,99)
    op2%=op2%+1
    Teil2$=Del$(ans$,1,op2%)
    Nun rechne noch Teil1$ aus und überschreibe Teil1$
    ans$=Teil1$ + Teil1$

ElseIF instr("*",ans$)=0 or instr("/",ans$)=0 or instr("-",ans$)=0 pr instr("+",ans$)=0

    rechnen

Endif

parsen
Else ifNot instr("-",ans$)=0
op1%=Position des ersten Operators(-)
Nun finde das Operator ab op1% und und und setze es als op2%
op2%=op2%-1
Teil1$=Del$(ans$,op2%,99)
op2%=op2%+1
Teil2$=Del$(ans$,1,op2%)
Nun rechne noch Teil1$ aus und überschreibe Teil1$
ans$=Teil1$ + Teil1$

ElseIF instr("*",ans$)=0 or instr("/",ans$)=0 or instr("-",ans$)=0 pr instr("+",ans$)=0

rechnen

Endif

parsen
end

ElseIF instr("*",ans$)=0 or instr("/",ans$)=0 or instr("-",ans$)=0 pr instr("+",ans$)=0

rechnen//gehe zu Proc Rechnen

endIF

ENDPROC


Wenn irgendetwas falso seien debería Por favor, simplemente puesto.
Hoffe ihr entfindet lo nich como unhöflich el Yo así viele Fragen lugar, más o menos viele antworten erwarte. Lo würd me auch ya reichen si ihr me simplemente sagt con welchen Befehl Yo qué anstellen kann.

mfg

Julian57
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



Zu 1: Como ya oft geschrieben: Función Instr. Genaueres simplemente el Ayuda entnehmen.

Zu 2: Z.B. por Vergleich des Ord-Wertes uno Zeichens, siehe hierzu Función Ord.

Zu 3: Mit uno Bucle como oben.

Zu 4: Vlt. primero 1,2 & 3 erledigen.

Su Code de eben scheint me sinnlos zusammengewürfelt, poner Usted doch kleine Ziele y erstelle Características el kleine Aufgaben erledigen así Usted el Información general bewahrst.
KompilierenMarcaSeparación
 
08.11.2010  
 




Julian
Schmidt
1. Ok , habs ahora verstanden el el Ergebnis Así que el Position es
2. A Función "Ord" findet uno en el Ayuda no muy viel sólo:



@Ord(S)
S : String
Ergebnis: Integer

Der ANSI-Code des ersten Zeichens de S. (El Función entspricht el BASIC-Función Asc)


Wäre nett si du una Ejemplo postest (Por favor, con Kommentaren trabajo)
3. Hab Yo sí ya así bastante oben gelöst^^. War me sólo nich bastante sicher si así va



Su Code de eben scheint me sinnlos zusammengewürfelt, poner Usted doch kleine Ziele y erstelle Características el kleine Aufgaben erledigen así Usted el Información general bewahrst.


Wollte sólo primero una Struktur redactar en mich daran a orientieren Yo me para Ziele setzten kann
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



El Abhängigkeit kannst Usted nutzen:
KompilierenMarcaSeparación
print ord("0")
print ord("1")
print ord("2")
print ord("3")
print ord("4")
print ord("5")
print ord("6")
print ord("7")
print ord("8")
print ord("9")
print ord("A")
print ord("Z")
print ord("a")
print ord("z")
print ord("+")
print ord("-")
print ord("*")
print ord("/"s2>)
 
08.11.2010  
 



Siehe auch Ansi-Tabla: [...] 
 
08.11.2010  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

34.085 Views

Untitledvor 0 min.
Peter Max Müller21.01.2024
iF23.07.2015
Julian Schmidt02.02.2013
Michaeal18.10.2012
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie