Français
Forum

Problem - Selbst programmierter calculette

 
- page 1 -



Julian
Schmidt
Salut,
suis justement dabei aus Just for Fun une calculette zuschreiben.
Häng allerdings encore à den Punkt comment on à besten cela Ergebnis ausrechnet.
Bräucht une gute Strategie comment on une dans un Editierbox eingebene Matheaufgabe, gelöst dans une variable speichert et ensuite dans qui besagten Editierbox ausgibt
sais maintenant pas comment je cela oui c'est ca anstellen soll.
Hoffe vous pouvez mir dire comment je cela anstelle
DEF GetSysColor(1)!"User32","GetSysColor"
declare Edit&,e%,eins&,zwei&,drei&,vier&,fünf&,sechs&,sieben&,acht&,neun&,null&
declare komma&,plus&,minus&,mal&,geteilt&,gleich&,clear&,off&,del&,info&,à l'$,ergebnis!
Fenêtre Style 24
Fenêtre 10,10-250,250
cls GetSysColor(15)
Titre de la fenêtre "Taschenrechner"
Edit& = Créer("Edit",%HWnd,»,20,20,200,20)
eins& = Créer("Button",%HWnd,"1",20,60,30,25)
zwei& = Créer("Button",%HWnd,"2",60,60,30,25)
drei& = Créer("Button",%HWnd,"3",100,60,30,25)
vier& = Créer("Button",%HWnd,"4",20,100,30,25)
fünf& = Créer("Button",%HWnd,"5",60,100,30,25)
sechs& = Créer("Button",%HWnd,"6",100,100,30,25)
sieben& = Créer("Button",%HWnd,"7",20,140,30,25)
acht& = Créer("Button",%HWnd,"8",60,140,30,25)
neun& = Créer("Button",%HWnd,"9",100,140,30,25)
null& = Créer("Button",%HWnd,"0",20,180,30,25)
komma& = Créer("Button",%HWnd,".",60,180,30,25)
plus& = Créer("Button",%HWnd,"+",140,60,30,25)
minus& = Créer("Button",%HWnd,"-",140,100,30,25)
mal& = Créer("Button",%HWnd,"*",140,140,30,25)
geteilt& = Créer("Button",%HWnd,»,140,180,30,25)
gleich& = Créer("Button",%HWnd,"=",100,180,30,25)
clear& = Créer("Button",%HWnd,"C",180,100,40,25)
del& = Créer("Button",%HWnd,"Del",180,140,40,25)
off& = Créer("Button",%HWnd,"Off",180,60,40,25)
info& = Créer("Button",%HWnd,"?",180,180,40,25)

whilenot e%

    waitinput
    waitinput

    si getfocus(eins&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "1"

    elseif getfocus(zwei&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "2"

    elseif getfocus(drei&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "3"

    elseif getfocus(vier&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "4"

    elseif getfocus(fünf&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "5"

    elseif getfocus(sechs&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "6"

    elseif getfocus(sieben&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "7"

    elseif getfocus(acht&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "8"

    elseif getfocus(neun&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "9"

    elseif getfocus(null&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "0"

    elseif getfocus(plus&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "+"

    elseif getfocus(minus&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "-"

    elseif getfocus(mal&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "*"

    elseif getfocus(geteilt&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "/"

    elseif getfocus(komma&)

        à l'$ = Val(GetText $(Edit&))
        SetText Edit&,à l'$ + "."

    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&,à l'$

    elseif getfocus(gleich&)

        ergebnis! = Val(GetText $(Edit&))
        à l'$ = ergebnis!
        SetText Edit&,à l'$

    endif

endwhile


Aussi serait je volontiers qui Del-Funktion améliorer. peux bisher seulement un marque entfernen. on devrait alors aus einer Variable un marque couper
et la valeur ensuite récente transfert.
Pour autre Verbesserungsvorschläge suis naturellement offen
bof Hoffe son könnnt mir chez meinen deux anliegen einwenig aider


mfg

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



 
- page 3 -


« cette Beitrag wurde comme Solution gekennzeichnet. »

- page 4 -



Peter
Max
Müller

DEF CTStr(2) si(len($(2))=0,0,(len($(1))-len(translate$($(1),$(2),»)))/len($(2)))'zählt comment souvent $2 dans $1 vorkommt
DEF InStrExt(3) int(instr($(2),mid$($(1),&(3),len($(1))))+&(3))'cherchez dans $1 ab &3 pour $2
DEF InStrLast(3) si(instrext($(1),$(2),&(3))>&(3),instrlast($(1),$(2),instrext($(1),$(2),&(3))),int(&(3)-1))'cherchez dans $1 ab &3 pour dem letzen vorkommen de $2, arbeitet Rekursiv.
'si on qui Operatorzeichen changement voudrais braucht on seulement qui entsprechenden marque changement dans den 2 folgenden Funktionen changement
DEF MathTabs(2) translate$(translate$(translate$(translate$($(1),"+",$(2)),"-",$(2)),"*",$(2)),"/",$(2))
DEF GetMath(1) si($(1)="+",1,si($(1)="-",2,si($(1)="*",3,si($(1)="/",4,0))))
'cela Kernstück, so petite et doch un ganzer calculette
'Funktioniert seulement alleine si le Variablen aus Math Global gesetzt wurden (Ergebnis toujours dans ma_v1& !)

proc mathcore

    parameters ma_cmd$
    ma_s2$="«Æ»"'MathTabs-marque = Beliebige Zeichenfolge qui pas im Ausdruck vorkommen sollte, sonst falsche Berechnung !
    ma_s4$=mathtabs(ma_cmd$,ma_s2$)'MathTabs mettons
    ma_s3$=»
    ma_v1&=0
    ma_v2&=1

    whileloop ctstr(ma_s4$,ma_s2$)+1

        ma_s3$=substr$(ma_s4$,&loop,ma_s2$)'Wert erfassen - ici pourrait on den Ausdruck zB. sur une certain Namen vérifier (pour Variablen dans Skriptsprachen).
        ma_v1&=si(ma_v2&=0,ma_v1&,si(ma_v2&=1,ma_v1&+val(ma_s3$),si(ma_v2&=2,ma_v1&-val(ma_s3$),si(ma_v2&=3,ma_v1&*val(ma_s3$),si(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 avec Klammern
'tête-Procédure qui automatisch seulement alle Klammern ausrechnet (si quelle vorkommen)

proc math

    parameters ma_prio$
    declare ma_s1$,ma_s2$,ma_s3$,ma_s4$,ma_v1&,ma_v2&,ma_v3&,ma_v4&'chez häufiger Benutztung Global mettons (Ergebnis toujours dans ma_v1& !)
    cas or(instr(")",ma_prio$)<instr("(",ma_prio$),neq(ctstr(ma_prio$,"("),ctstr(ma_prio$,")"))):ma_prio$="0"'ungültige Klammersetzung: Wert sur zéro mettons

    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 dedans pour 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$=ins$(str$(ma_v1&),ma_prio$,ma_v3&-1)

    Wend

    mathcore ma_prio$
    return ma_v1&

endproc

declare ed1%,bt1%
window 20,20-420,150
drawtext 5,5,"Berechnung eingeben... (+ Ajouter ; - Sous ; / 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 %clé=2

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

Wend

end

cela ganze ist dans 2 Module aufgeteilt: Mathcore berechnet une Ausdruck, Math rechnet zusätzlich d'abord alle Klammern aus.

qui Procédure Math appel !

paramètre: $ (Formel)
Rückgabe: & (Ergebnis)
 
XProfan X3, X4ß, Win 10.1
08.11.2010  
 




Dieter
Zornow
dans qui Aider pour 11.2 est un calculette comme Beispiel. Lade qui Aider runter si du vous pas la hâte et gebe dans qui cherche calculette un, là peux 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
merci joli
werds mir la fois anschauen
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
07.11.2010  
 



Wobei je maintenant mais pas sais si Dieter sais dasses Julian plutôt ums eval allez - quoi mais so ou bien so aucun Sprolle ielt. ^ ^
 
07.11.2010  
 




Julian
Schmidt
allô
hab mir maintenant la fois den calculette dans Aider angeschaut. suis de den partie allerdings nich sonderlich überzeugt. Rechnet si bien comment alle Aufgaben faux.
Beispiele
je geb qui devoir 5*5+25 dans den calculateur un. ensuite venez komischerweise 30 raus, quoique 50 richtig wäre. chez leichten Aufgaben funzt es allerding (5+5 ou bien 60/3...)
Aussi hängt il sich öfters sur

Werd meinen ensuite doch avec dem Parsen écrivons.
Wäre lieb si le qui déjà la fois quoi avec Parsen gemacht avons simple la fois ihren Quellcode posten könnten.

Werde si je fertig suis aussi den calculette-Quellcode Poste

mfg

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



comment je cela verstehe vouloir Du volontiers den Code pour une calculette statt une trop programmieren ... um ensuite den Code wiederum trop posten?! ^ ^

vais Stück pour Stück avant et frage arrêt pour si Du pas weiterkommst.
 
08.11.2010  
 




Julian
Schmidt
non, je hätte seulement gern un Beispiel zum parsen
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



Achso...
KompilierenMarqueSéparation
var s$="Mein String"
var c&=len(s$)

whileLoop c&

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

        print "Freizeichen gefunden."

    endif

08.11.2010  
 




Julian
Schmidt
allô, dans cette poste veux je seulement la fois alle Fragen se mettre wohin et avec ca unklar pour mich ist

1. comment findet on heraus à quel Position qui Operator(+,-./,*) liegt?

2. comment peux on cela faire cela il de dem Rechenoperator eh bien solange es Les chiffres sommes nachrechts allez

et qui Position des marque avant dem Operator deux dans einer Variable Sauver?

3. comment peux on eh bien den ersten Part de marque une jusqu'à zum den marque avant dem zweiten Operator auslesen?et ensuite encore de Position des zweiten Operator jusqu'à entier hinten?

4. comment rechnet on Anschließend den ersten partie qui devoir aus, et Hängt den reste widerum tour et gibt cela Ergebnis aus?

je hab mir cela ganze ensuite so gedacht (Programme ist seulement qui Pasen Block, et funktioniert naturellement pas. Tricolore seulement geschrieben um déjà la fois une Struktur trop avons)
KompilierenMarqueSéparation
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


si irgendetwas faux seien sollte s'il te plaît simple posten.
Hoffe son entfindet es nich comme unhöflich le moi so viele Fragen lieu, ou bien so viele répondre erwarte. Es würd mir aussi déjà reichen si son mir simple sagt avec welchen Befehl je quoi anstellen peux.

mfg

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



trop 1: comment déjà souvent geschrieben: Funktion Instr. Genaueres simple qui Aider entnehmen.

trop 2: Z.B. per comparaison des Ord-Wertes eines Zeichens, siehe hierzu Funktion Ord.

trop 3: avec einer Boucle comment dessus.

trop 4: Vlt. erstmal 1,2 & 3 erledigen.

Dein Code de plan scheint mir sinnlos zusammengewürfelt, mets Dir doch kleine Ziele et erstelle Funktionen qui kleine Aufgaben erledigen avec cela Du qui Vue d'ensemble bewahrst.
KompilierenMarqueSéparation
 
08.11.2010  
 




Julian
Schmidt
1. Ok , habs maintenant verstanden cela cela Ergebnis alors qui Position ist
2. Zur Funktion "Ord" findet on dans qui Aider pas très viel seulement:



@Ord(S)
S : String
Ergebnis: Integer

qui ANSI-Code des ersten Zeichens de S. (qui Funktion entspricht qui BASIC-Funktion Asc)


Wäre gentil si du un Beispiel postest (s'il te plaît avec Kommentaren travailler)
3. Hab je oui déjà so assez dessus gelöst^^. était mir seulement nich entier sûrement si es so allez



Dein Code de plan scheint mir sinnlos zusammengewürfelt, mets Dir doch kleine Ziele et erstelle Funktionen qui kleine Aufgaben erledigen avec cela Du qui Vue d'ensemble bewahrst.


voulais seulement erstmal une Struktur erstellen um mich daran trop orienter quoi je mir pour Ziele setzten peux
 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
08.11.2010  
 



qui dépendance peux Du nutzen:
KompilierenMarqueSéparation
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 aussi Ansi-Tabelle: [...] 
 
08.11.2010  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

34.025 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie