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 5 -


« 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  
 




Julian
Schmidt
¡Hola,
Nochmal a Fragen
Cuestión 1.


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


Das debería con op1%=instr("*",ans$) ir. Das Ergebnis debería dan el Position vom Sternchen ser
Cuestión 2


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?


Das debería entonces folglich con
op2%=instr("*",ans$,op1%) trabajo

Wenn ürgentetwas ahora falso es Por favor, puesto

Nun todavía a Cuestión 4


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


Könnt euch sí ya algo einfallen dejar, Yo schreib primero Teil 1-3 fertig

mfg

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




Julian
Schmidt
¿Cómo se puede uno con instr mehrere Argumente nehmen?
Ejemplo
op2%=instr("*,/,+,-",ans$,op1%) //va con Komma no
Geht el überhaupt?
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 




Rolf
Koch
Como media Usted el? op2% kann dir sí sólo una Position en el String zurückliefern y no mehrere Stellen.
Mach mehrere Variables y frag esta entonces con caso oder if de.
 
08.11.2010  
 




Julian
Schmidt
Sí bien Yo quería no ya otra vez una gigantischen Block bauen.Wird siempre schwerer con el parsen.Wollte eigentlich sólo el él gleichzeitig el Argumente +,-,*,/ en el String ans$ de el Position op1% sucht. Und el él me el Position vom ersten gefundene Argument en el Variable op2% schreibt.
Aber como se el anhöhrt muss Yo wohl todavía una gewaltige If-Prodzedur hinzufügen
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 




Julian
Schmidt
Naja steigt con ahora übern Kopf werd ahora doch wohl el Taschenrechner en el Ayuda umschreiben.
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 




Peter
Max
Müller
Mein erstes Posting a diesem Thema es no el qué du necesidad?
 
XProfan X3, X4ß, Win 10.1
08.11.2010  
 




Julian
Schmidt
nunja quería no yo en el debuggen außerdem Yo quería no a kompliziert kommen dejar
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 




Peter
Max
Müller
Gute Nacht.
 
XProfan X3, X4ß, Win 10.1
08.11.2010  
 



@Peter: Yo sag sólo:

Julian57 (08.11.10)
Nunja el Yo escribir scheinst du(IF) sí nich sonderlich Valor zulegen




@Julian: Mit ZIP packste lo simple.
 
08.11.2010  
 



Como komm Yo ahora hier her???
 
08.11.2010  
 




E.T.
... el scheind sí hier otra vez veces in's Sinnlose abzutrifften

[OFFTOPIC]
@IF: Irgendwie scheind el con el Smilies überhaupt nich hinzuhau'n:
S de S-Auswahl eingefügt, aber en el Post es el S-Code (*algo*), sin embargo no el Smilie
Apéndice: con el S, welche con : anfangen, scheind lo a funzen, con *-S pero no...
[/OFFTOPIC]
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
09.11.2010  
 



[OFFTOPIC]

Irgendwie scheind el con el Smilies überhaupt nich hinzuhau'n:


Welcher tritt seinen Dienst no a?[/OFFTOPIC]
 
09.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

33.914 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