best. Prozeduren bei best. Ergebnissen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

best. Prozeduren bei best. Ergebnissen

Beitrag 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
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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
Bild
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Beitrag 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?
Antworten