Variable von der Prozedure übergeben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@D@nte
Ist aber sehr schlecht in einer Wiederholschleife: xyz = abc() /:->
PS: Spiel (Hauptschleife) + Prozedure

\\Edit:
...xyz = abc()
Denn, dann kann man den Wert von X nicht menr ändern, weils sowieso in 101 geändert wird.
Zuletzt geändert von RSBasic am 06.06.2007 20:36, insgesamt 1-mal geändert.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Wie wärs mit Global x?
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

RSBasic wollte einen wert in einer procedure ändern und in der main wieder weiter benutzen
Sollte die Procedure mehrere Werte veränder sollte man Pointer übergeben und die Procedure ändert die Werte direkt im Speicher
Soll nur ein Wert geändert werden ist es doch ganz einfach:

Code: Alles auswählen

Procedure.l erhoehe(wert.l)
  wert+1
  ProcedureReturn wert
Endprocedure
x = 5
debug x
x = erhoehe(x)
debug x
; oder auch:
debug "---"
x = 5
for i = 1 to 5
  x = erhoehe(x)
  debug x
next
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@a14xerus: Wieso einfach, wenns umständlich geht? ;-) . Du hast hier wieder die einfachste Methode genommen und wir sind alle nicht darauf gekommen :lol: :lol: :lol:
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Und so?

Code: Alles auswählen

Procedure Add1ToVal(*Val.Long)
 *Val\l+1
EndProcedure


a=0
Debug a
Add1ToVal(@a)
Debug a
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Das ist die von mir erwähnte Pointervariante
Nur nützlich, wenn mehrere Werte geändert werden sollen.
Oder andersherum, wenn du zb einem Thread mehrere Werte übergeben willst (strukture)
Immer wenn du mehrer Werte irgendwohin übergeben willst aber nur ein Wert "zugelassen" ist, ist das Arbeiten mit Pointern zu structuren am besten (IMHO)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@a14xerus
Danke für dein Code, das war sehr hilfreich :allright:
Also das Problem besteht immernoch :(

Code: Alles auswählen

...
x = 5 
Debug x 
x = erhoehe(x) 
Debug x 
; oder auch:
...
Also vor der Prozedure und nach "---" ist mir klar.
Aber ich weis nicht wo ich es hin machen soll, diesen Teil-Code, was ich siehe oben gepostet hab. :cry:
Weil ich muss in der Wiederholschleife hinschreiben, aber dann macht es keinen Sinn. :roll:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Warum machst du es nicht einfach so?:

Code: Alles auswählen

Global x.l
Procedure ErhoeheX()
  x + 1
EndProcedure

x = 5
Debug x
ErhoeheX()
Debug x
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

weil das unschön ist
Benutzeravatar
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

Beitrag von ts-soft »

Wenn Du in einer Procedure bist, wird nur der dortige Code ausgeführt, bis
ProcedureReturn folgt oder die Procedure zu ende ist. Die andere Schleife
wartet solange :wink: . Mit Threads kann man das umgehen, aber dann
kannste auch nicht gleichzeitig auf dieselben variablen zugreifen, sondern
mußt die sperren. Also irgendo haste einen grossen Denkfehler.
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.
Bild
Antworten