Variable von der Prozedure übergeben
Das habt ihr ja die ganze Zeit gepostet
z.b.
Code von TS-Soft:
etc.
So schluss damit ---------------------
Gute Nacht
z.b.
Code von TS-Soft:
Code: Alles auswählen
Global x.l
Procedure ErhoeheX()
x + 1
EndProcedure
[b]x = 5 [/b]
Debug x
ErhoeheX()
Debug x
So schluss damit ---------------------
Gute Nacht

huhu alle ^^ also wenn ich das jetzt richtig verstanden habe, möchtet ihr eine variable (x) erst auf 5 tun und mit hilfe der Procedure einen wert addieren oder??
mir ist aufgefallen ihr habet etwas vergessen zu schreiben...
hoffe ich habe es richtig verstanden...
mir ist aufgefallen ihr habet etwas vergessen zu schreiben...
Code: Alles auswählen
Procedure.d erhoehex(x) ;dieses x was in der klammer ist.
x =x +1
ProcedureReturn(x)
EndProcedure
x = 5
Debug x
x = erhoehex(x)
Debug x

Pure Basic 4.0
Das weiß ich auch aber im vorigem Code...
Du hast geschrieben das wir x als Parameter nicht angegeben haben...
Außerdem hat den Code schon jeder hier gepostet.
@Kiffi
Das mach ich auch immer... Global ist nicht mein Freund. Aber der Code vorher war ja auch nicht von mir... ich hab es nur eeinmal vorgeschlagen.
Du hast geschrieben das wir x als Parameter nicht angegeben haben...
Außerdem hat den Code schon jeder hier gepostet.
@Kiffi
Das mach ich auch immer... Global ist nicht mein Freund. Aber der Code vorher war ja auch nicht von mir... ich hab es nur eeinmal vorgeschlagen.
Es geht hier wohl um das Verständnis mit den Umgang von Proceduren.
Ohne ProcedureReturn ist es im klassischen Sinn eine Procedure.
Mit ProcedureReturn ist es eine Funktion wie ABS(), etc.
FF 
Edit: Noch ein Beispiel mit Structuren
Ohne ProcedureReturn ist es im klassischen Sinn eine Procedure.
Mit ProcedureReturn ist es eine Funktion wie ABS(), etc.
Code: Alles auswählen
; Unsaubere Methode
Global x
Procedure MyAdd()
If x <= 8
x + 2
EndIf
EndProcedure
; Saubere Methode
Procedure MyAddFunction(Value.l)
If Value <= 8
Value + 2
EndIf
ProcedureReturn Value
EndProcedure
Debug MyAdd()
x = MyAddFunction(x)
Debug x
x = MyAddFunction(x)
Debug x
x = MyAddFunction(x)
Debug x
x = MyAddFunction(x)
Debug x
x = MyAddFunction(x)
Debug x

Edit: Noch ein Beispiel mit Structuren
Code: Alles auswählen
Structure udtMitarbeiter
Name.s
Vorname.s
Stunden.f
Urlaub.l
EndStructure
Procedure SetNamen(*Mitarbeiter.udtMitarbeiter, Name.s, Vorname.s)
; Programmfehler abfangen
If @*Mitarbieter = 0
ProcedureReturn #False
EndIf
; Daten setzen
With *Mitarbeiter
\Name = Name
\Vorname = Vorname
EndWith
ProcedureReturn #True
EndProcedure
Procedure.s GetNamen(*Mitarbeiter.udtMitarbeiter)
Protected Result.s
; Programmfehler abfangen
If @*Mitarbeiter = 0
ProcedureReturn ""
EndIf
; Daten lesen
With *Mitarbeiter
Result = \Name + ", " + \Vorname
EndWith
ProcedureReturn Result
EndProcedure
Procedure AddStunden(*Mitarbeiter.udtMitarbeiter, Stunden.f)
; Programmfehler abfangen
If @*Mitarbieter = 0
ProcedureReturn #False
EndIf
; Daten bearbeiten
With *Mitarbeiter
\Stunden + Stunden
EndWith
ProcedureReturn #True
EndProcedure
Procedure SubStunden(*Mitarbeiter.udtMitarbeiter, Stunden.f)
; Programmfehler abfangen
If @*Mitarbieter = 0
ProcedureReturn #False
EndIf
; Daten bearbeiten
With *Mitarbeiter
\Stunden - Stunden
EndWith
ProcedureReturn #True
EndProcedure
Procedure.f GetStunden(*Mitarbeiter.udtMitarbeiter)
; Programmfehler abfangen
If @*Mitarbieter = 0
ProcedureReturn 0
EndIf
; Daten bearbeiten
ProcedureReturn *Mitarbeiter\Stunden
EndProcedure
; Test
; Mitarbeiter
Global Dim Arbeiter.udtMitarbeiter(10)
SetNamen(Arbeiter(1), "Meyer", "Hans")
SetNamen(Arbeiter(2), "Smith", "John")
Debug GetNamen(Arbeiter(1))
Debug GetNamen(Arbeiter(2))
AddStunden(Arbeiter(1), 8.0)
AddStunden(Arbeiter(1), 8.0)
SubStunden(Arbeiter(1), 4.0)
Debug "Stunden: " + StrF(GetStunden(Arbeiter(1)),2)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
So ihr lieben Programmierer
Weil ihr mich nicht versteht, mache ich rasch nen Codebeispiel, was ich genau meine.
Ich habe eigentlich schon alle Informationen zum Verstehen gegeben, aber anscheinend kann ich nicht so gut erklären
So hier:
Viel Glück


Weil ihr mich nicht versteht, mache ich rasch nen Codebeispiel, was ich genau meine.
Ich habe eigentlich schon alle Informationen zum Verstehen gegeben, aber anscheinend kann ich nicht so gut erklären

So hier:
Code: Alles auswählen
InitSprite()
InitKeyboard()
Procedure abc()
For a=0 To 100
x+1
Delay(1)
Next
ProcedureReturn x
EndProcedure
If OpenScreen(1024,768,32,"Screen-Vorlage")
ClearScreen(RGB(0,0,0))
x=0
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Default)
Box(100+x,100,500,500,RGB(50,100,200))
StopDrawing()
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Right)
x+1
EndIf
If KeyboardPushed(#PB_Key_Left)
x-1
EndIf
If KeyboardPushed(#PB_Key_Return)
abc()
EndIf
If KeyboardReleased(#PB_Key_Escape)
End
EndIf
Until Quit=1
EndIf


- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Das einzige was sinn macht wäre:
Wenn Du das Ergebnis der Procedure niemanden zuordnest und die Variable
nicht Global ist, kannste die Procedure nur als Zeitfresser nutzen
Code: Alles auswählen
If KeyboardPushed(#PB_Key_Return)
x=abc()
EndIf
nicht Global ist, kannste die Procedure nur als Zeitfresser nutzen

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
