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
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

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. .