Seite 1 von 2

Procedure

Verfasst: 02.04.2005 12:33
von Mike0484
Hallo
Ich verstehe einfach nicht wozu man Proceduren braucht bzw. welche funktion sie haben kann mir das einer erklären ? In der hilfe hab ich schon nachgekuckt aber ich verstehe es immernoch nicht. :?

Danke

Verfasst: 02.04.2005 12:42
von 125
naja du hast einen Programmteil den du immer wieder verwendest oder eine Rechenoperation die du immer wieder verwendest nimmst du eine Procedure.

Code: Alles auswählen

Procedure Mal16(variable.f)
mal16.f=variable*16
ProcedureReturn mal16
EndProcedure

Code: Alles auswählen

Var.f=Mal16(20)
Debug Var
würde 320 zurückgeben :)

Das war jetzt ein Bsp. wo man zwar keine Procedure für braucht aber den Sinn glaube ich Relativ gut erklärt.

mfg
125

Verfasst: 02.04.2005 13:30
von ts-soft
Proceduren sind Unterprogramme und Funktionen (in anderen Sprachen oft getrennt in Function und Sub) und dienen der strukturierten (übersichtlichen) Programmierung. Durch Prozeduren entstehen neue Gültigkeitsbereichte für Variablen (lokale Variablen).

Syntax siehste in dem Beispiel von 125

Gruß
Thomas

Verfasst: 02.04.2005 18:35
von Mike0484
Hm.. aber immer wenn ich eine Procedure erstelle funktioniert der Teil in der Procedure nicht mehr, muss man das irgendwie abrufen oder was mache ich da falsch.

Verfasst: 02.04.2005 18:41
von Franky
Hi Mike

Um einen Fehler zu finden, haben wir ein bisschen wenig informationen, du müsstest vielleicht mal einen teil deines Codes Posten.

Ein möglicher Fehler kann sein, dass du wichtige Variablen nicht als Global deklarierst.

Teste mal das hier

Code: Alles auswählen

x.l=3
Procedure Gibmiraus()
    ProcedureReturn x
endprocedure
Debug Gibmiraus()

Und dann setz mal in die erste Zeile ein "Global x.l" und führ es nochmal aus ;)

Verfasst: 02.04.2005 20:06
von Gisela
Sinn und Zweck von Prozeduren sind mir zwar klar, aber gibt es eigentlich deutliche Geschwindigkeitsunterschiede bei der Verwendung von Prozeduren im Vergleich zu GOSUB?

Würde mich wirklich mal interessieren.

Ach bevor ichs vergesse. Bin neu hier als PureBasic-Jünger. Prost Gemeinde.

Verfasst: 02.04.2005 20:28
von Mike0484
Ahhhhhh jetzt hab ichs verstanden, danke :bounce:

Verfasst: 03.04.2005 12:56
von Falko
Gisela hat geschrieben:Sinn und Zweck von Prozeduren sind mir zwar klar, aber gibt es eigentlich deutliche Geschwindigkeitsunterschiede bei der Verwendung von Prozeduren im Vergleich zu GOSUB?

Würde mich wirklich mal interessieren.

Ach bevor ichs vergesse. Bin neu hier als PureBasic-Jünger. Prost Gemeinde.
Hier ein Vergleich Procedure und Gosub.

Code: Alles auswählen

Procedure.l Test(Wert,Wert1)
  a=0
  For i=1 To Wert
   For b= 1 To Wert1
    a+1
   Next b
  Next i
  ProcedureReturn a
EndProcedure

StartTime = ElapsedMilliseconds() 
Ergebnis.l=Test(20000,1000) 
ElapsedTime1 = ElapsedMilliseconds()-StartTime 

StartTime = ElapsedMilliseconds()
Gosub test 
ElapsedTime2 = ElapsedMilliseconds()-StartTime


MessageRequester("Vergleicht", "Procedure: "+Str(ElapsedTime1)+" Millisekunden ;"+ Str(Ergebnis)+#LFCR$+"Gosub: "+Str(ElapsedTime2)+" Millisekunden ;"+Str(Ergebnis1))


test:
  a1=0
  For i=1 To 20000
     For b= 1 To 1000
       Ergebnis1+1
     Next b
  Next i
Return

Verfasst: 03.04.2005 13:34
von NicTheQuick
Ich glaube es wäre besser, wenn du die Aufrufgeschwindigkeit testest und nicht die Verarbeitungsgeschwindigkeit. Darin liegt nämlich der Unterschied. Hier ganz klar zu sehen.

Code: Alles auswählen

#Count = 10000000

Global a.l, b.f
Procedure TestProc()
  a + 1
  b * 1.00001
EndProcedure

Time1.l = ElapsedMilliseconds()
  a = 0 : b = 1
  For c.l = 1 To #Count
    TestProc()
  Next
Time1 = ElapsedMilliseconds() - Time1
Debug b

Time2.l = ElapsedMilliseconds()
  a = 0 : b = 1
  For c.l = 1 To #Count
    Gosub TestGosub
  Next
Time2 = ElapsedMilliseconds() - Time2
Debug b

MessageRequester("Vergleich: Proc <> Gosub", "Proc: " + Str(Time1) + " ms" + #CRLF$ + "Gosub: " + Str(Time2) + " ms")

End

TestGosub:
  a + 1
  b * 1.1
Return

Verfasst: 03.04.2005 13:43
von freedimension
Zudem sollte man auch noch erwähnen, dass die Vorteile von Prozeduren auf anderer Ebene liegen, z.B. bei der Kapselung von Variablen in ihrem eigenen Gültigkeitsbereich, Rückgabewerte, Parameter, Rekursion usw. .