Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Komplette Arrays in SUBs übergeben?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 13.08.2007, 09:32    Titel: Komplette Arrays in SUBs übergeben? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 13.08.2007, 09:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 13.08.2007, 11:23    Titel: Antworten mit Zitat

Siehe sonst

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

Abschnitt "Feldvariablen als Aufrufparameter". Dürfte bei FreeBasic 1:1 identisch von der Syntax und Semantik sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 13.08.2007, 13:36    Titel: Antworten mit Zitat

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... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 13.08.2007, 16:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 13.08.2007, 18:06    Titel: Antworten mit Zitat

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 zwinkern
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 13.08.2007, 18:44    Titel: Antworten mit Zitat

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 zwinkern

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 zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz