Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
Verfasst am: 13.08.2007, 09:32 Titel: Komplette Arrays in SUBs übergeben? |
|
|
Morgen,
ich arbeite gerade an einem Programm, und würde gerne ein komplettes Array in eine SUB übergeben, und diese nicht nur mit einem einzigen Index öffnen (z.b. call test (variable(1) )
Wie kann ich da realisieren?
Werden Variablen, die sich in einer SUB ändern, auch beim verlassen der SUB im Hauptprogramm übernommen?
Danke sehr |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 13.08.2007, 09:45 Titel: |
|
|
Wahrscheinlich kannst du Arrays über Pointer übergeben, aber da kenne ich mich zu wenig aus. Zur Not kannst du das Array in einen selbstdefinierten Typen packen.
Code: | type meinArray
as integer inhalt(99)
end type
declare sub bla(byref wert as meinArray) |
Ist halt ein wenig umständlicher. Aber du kannst mittels byref bzw. byvar steuern, ob die Werte innerhalb des Hauptprogrammes mitverändert werden sollen oder nicht. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 13.08.2007, 13:36 Titel: |
|
|
Das dürfte weiterhelfen:
Code: | dim shared as string StrX(1 to 100)
dim as ubyte char
dim as integer i,i2
'StringsGenerieren
Sub generiereStrings
for i= 1 to 100
for i2= 1 to 10
char=Int(rnd*26)+asc("a")
StrX(I)+=CHR(char)
next
next
end sub
'Diese Sub gibt einen Belibigen String aus
Sub StrXPrint
randomize timer
Print StrX(INT(RND*100)+1)
end sub
' Hauptprogramm
Print "Strings generieren.."
print
generiereStrings
Print "Zufälligen genreierten String anzeigen"
print
StrXPrint
print
Print "Ausserhalb der Sub anzeigen"
print
Print StrX(47),StrX(52) ' Beweiss dafür das es auch ausserhalb der Subs geht.
print
Print "Auf Taste warten.."
sleep
|
Also mit dim shared... geht das ohne probleme (natürlich auch mit zahlen) _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 13.08.2007, 16:02 Titel: |
|
|
hi,
..dies auch:
Ich habe bisher immer folgende Konstruktion verwendet: Code: | 'Hauptprogramm
..
Declare Sub MachWas(Feld() As WasWeissDennIch)
Dim MitFeld(0 To irgendwas) As WasWeissDennIch
..
MachWas(MitFeld())
..
'Unterprogramm
Sub MachWas(Feld() As WasWeissDennIch)
..
End Sub | Das funktioniert eigentlich ganz gut..
..wenn die Klammern hinter dem Array-Namen nicht vergessen wird..
..oder das 'As ArrayTyp' in der Sub-Deklaration
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 13.08.2007, 18:06 Titel: |
|
|
AndT hat Folgendes geschrieben: | Also mit dim shared... geht das ohne probleme (natürlich auch mit zahlen) |
Dim Shared sollte man in solchen Fällen vermeiden. Wenn man später ein größeres Programm hat, wo man dann mehrere dim shared arrays hat, dann weiß man nicht mehr in welcher funktion welches array gebraucht wird. Also dim shared kann einem schnell die Übersicht klauen  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 13.08.2007, 18:44 Titel: |
|
|
man kann einer Sub/Function alles moegliche an werten uebergeben, am besten geht das ueber UDTs, solltest dazu einen blick in die referenz werfen und bei Type nachschlagen
was das aendern von werten innerhalb solcher Subs/Functionen angeht gibt es dazu eine menge zu beachten... zum einen wie diese(r) Wert(e) uebergeben wird, (Siehe Byref, Byval). Wenn Du deine Variablen/Arrays Byref uebergibst so werden diese bei aenderung 'Global' ubernommen.
Aus stundenlanger fehlersuche allerdings kann ich nur davon abraten
Denn manchmal kommt es vor das man einen Wert nicht durch eine vorher definierte Variable uebergibt sondern einen aufruf wie bsp.
Code: | testsub (123,"abc") |
eine aenderung der variable "abc" bsp. zu "abcd" fuehrt zu eine ueberschreibung des speichers und kann zu unvorhergesehende Fehler und abstuerze fuehren... von daher ist es immer ratsam Funktionen dafuer zu verwenden.
bsp.
Code: |
Function (byval bla string) as string
dim buffer as string=bla
buffer="blablubb"
return buffer
end function
|
Hier wird ein wert uebergeben, zwischengespeichert, bearbeitet und zurueckgegeben....[/code] _________________
 |
|
Nach oben |
|
 |
|