Seite 1 von 1

best. Prozeduren bei best. Ergebnissen

Verfasst: 23.07.2006 19:49
von obbba
Wenn ich jetzt einen Taschenrechner programmieren wollte, sähe das so aus:

Code: Alles auswählen

Procedure Plus(lhs,rhs)
  ProcedureReturn lhs+rhs
EndProcedure

Procedure Minus(lhs,rhs)
  ProcedureReturn lhs-rhs
EndProcedure

Procedure Mal(lhs,rhs)
  ProcedureReturn lhs*rhs
EndProcedure

Procedure Geteilt(lhs,rhs)
  If rhs=0
    ProcedureReturn 0
  Else
    ProcedureReturn lhs/rhs
  EndIf
EndProcedure


OpenConsole()

Print("Erste Zahl: ") 
zahl1=Val(Input())
PrintN("")

Print("Operator ( 1=+ , 2=- , 3=* , 4=/ ): ")
operator=Val(Input())
PrintN("")

Print("Zweite Zahl: ")
zahl2=Val(Input())
PrintN("")


Select operator
Case 1
  ausg=Plus(zahl1,zahl2)
Case 2
  ausg=Minus(zahl1,zahl2)
Case 3
  ausg=Mal(zahl1,zahl2)
Case 4
  ausg=Geteilt(zahl1,zahl2)
EndSelect

PrintN(" Das Ergebnis ist "+Str(ausg))

Input()
End

Kann ich das auch ohne das "Select" machen? So als eine Art procedurenarray? (hat das was mit Zeigern und Callback zu tun?)

Ich meine so eine Art

Code: Alles auswählen

Input...
Tu die Prozedur mit der Nr die gewählt wurde
output...
Ich meine wenn eigentlich jede Procedure eine Nr hat, kann man die ja in ein Array schreiben und dann sagen, dass die Prozedur mit der jeweiligen Adresse ausgeführt werden soll.

ich suche quasi so eine Funktion:

procedure call(adressevonzielfunktion)
starte die funktion mit "adressevonzielfunktion"
endprocedure


Wenns das nicht gibt:
Gibt es sowas vieleicht bei Subroutinen?
Ala (wieauchimmerdasgeschriebenwird)

procedure mach(?label)
springe zu label
endprocedure

Verfasst: 23.07.2006 20:47
von MVXA

Code: Alles auswählen

Procedure Plus(lhs,rhs)
  ProcedureReturn lhs+rhs
EndProcedure

Procedure Minus(lhs,rhs)
  ProcedureReturn lhs-rhs
EndProcedure

Procedure Mal(lhs,rhs)
  ProcedureReturn lhs*rhs
EndProcedure

Procedure Geteilt(lhs,rhs)
  If rhs=0
    ProcedureReturn 0
  Else
    ProcedureReturn lhs/rhs
  EndIf
EndProcedure


OpenConsole()

Print("Erste Zahl: ")
zahl1=Val(Input())
PrintN("")

Print("Operator ( 1=+ , 2=- , 3=* , 4=/ ): ")
operator=Val(Input())
PrintN("")

Print("Zweite Zahl: ")
zahl2=Val(Input())
PrintN("")


ausg = CallFunctionFast(PeekL(?Operatoren + ((operator - 1) * 4)), zahl1, zahl2)

PrintN(" Das Ergebnis ist "+Str(ausg))

Input()
End

DataSection
    Operatoren:
        Data.l @Plus(), @Minus(), @Mal(), @Geteilt()
EndDataSection

Verfasst: 23.07.2006 21:11
von obbba
Das gibt mir in der vorletzten Zeile ein "Syntax Error".

Ich hab's jetzt so gemacht:

Code: Alles auswählen

Procedure Plus(lhs,rhs) 
  ProcedureReturn lhs+rhs 
EndProcedure 

Procedure Minus(lhs,rhs) 
  ProcedureReturn lhs-rhs 
EndProcedure 

Procedure Mal(lhs,rhs) 
  ProcedureReturn lhs*rhs 
EndProcedure 

Procedure Geteilt(lhs,rhs) 
  If rhs=0 
    ProcedureReturn 0 
  Else 
    ProcedureReturn lhs/rhs 
  EndIf 
EndProcedure 

Dim fun(4)
fun(1)=@Plus()
fun(2)=@Minus()
fun(3)=@Mal()
fun(4)=@Geteilt()

OpenConsole() 

Print("Erste Zahl: ") 
zahl1=Val(Input()) 
PrintN("") 

Print("Operator ( 1=+ , 2=- , 3=* , 4=/ ): ") 
operator=Val(Input()) 
PrintN("") 

Print("Zweite Zahl: ") 
zahl2=Val(Input()) 
PrintN("") 


ausg = CallFunctionFast(fun(operator), zahl1, zahl2) 

PrintN(" Das Ergebnis ist "+Str(ausg)) 

Input() 
End 
So klappts. Hat das jetzt einen Geschwindigkeitsvorteil gegenüber der Select-Variante?