Foro | | | | - 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) |
| | | | |  |
| |  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. ^ ^ |
| | | | |
| |  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. |
| | | | |
| |  Julian Schmidt | nein, Yo hätte sólo gern una Ejemplo para parsen |
| | | ˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗ Webseite [...]  | 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 |
| | | | |
| |  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 ▲ |
| |
| |  | | | | | |
| |  | Siehe auch Ansi-Tabla: [...]  |
| | | | |
|
RespuestaTema opciones | 34.099 Views |
ThemeninformationenDieses Thema ha 8 subscriber: |