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:

Arrayübergabe über Subs?

 
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
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 02.08.2005, 12:20    Titel: Arrayübergabe über Subs? Antworten mit Zitat

Hallo.
Das is jetzt vllt ne Totale Anfängerfrage, aber wie übergebe ich Arrays in Subs?
Ich habs so probiert:

Code:

DECLARE SUB bildanz(bild AS ubyte, x, y)
DIM bild1 AS ubyte
BLOAD "Daten\Bild1.bmp", VARPTR(bild1(0))
CALL bildanz(bild1, x, y)

END

SUB bildanz(bild AS ubyte, x, y)
   PUT (x*10,y*10),bild1,PSET
END SUB


Und da kommt in der Zeile

CALL bildanz(bild1, x, y)

Der Fehler "Array Access, index expectet before ','".
Wie geht das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 02.08.2005, 13:08    Titel: Antworten mit Zitat

also irgendwie waren da so einige Fehler im Code.
Der hier klappt:
Code:
DECLARE SUB bildanz(bild() AS ubyte, x, y)
DIM bild1() AS ubyte
BLOAD "Daten\Bild1.bmp", VARPTR(bild1(0))
CALL bildanz(bild1(), x, y)

END

SUB bildanz(bild() AS ubyte, x, y)
   PUT (x*10,y*10),bild,PSET
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 02.08.2005, 13:50    Titel: Antworten mit Zitat

Ich mach das immer mit dim shared. Da muss ich garnichts mehr zum sub übergeben. Z.B:
Code:
Dim shared bildl() as ubyte

Ich weiß aber nicht, ob das so ne gute Variante ist.
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 02.08.2005, 14:20    Titel: Antworten mit Zitat

für ein eigenes Programm zwischendurch ist das ja ganz angebracht, aber bei öffentlichen Sachen sollte man das nicht zu oft machen, das ist einfach kein guter Stil.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 02.08.2005, 15:15    Titel: Antworten mit Zitat

Ich mach das immer um schreibarbeit zu sparen. Ich hab oft 3 subs in denen viele arrays bearbeitet werden. Mit dim shared spart man da viel schreibarbeit.
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 02.08.2005, 17:19    Titel: Antworten mit Zitat

Ich sagte ja, wenn es einfach ein Programm für dich ist und dir es so am besten gefällt ist es in Ordnung.
Allerdings ist wahrscheinlich die gesamte Struktur schon nicht optimal, wenn du in allen Subs die gleichen Arrays brauchst. Eine Sub sollte wenn möglich eine klar definierte Aufgabe haben und es hilft dann sehr der Lesbarkeit, wenn man am declare sieht, auf welche Variablen in der Sub zugegriffen wird. Und soviel Schreibarbeit spart man da nun auch wieder nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 14.08.2005, 13:38    Titel: Aw Antworten mit Zitat

Zitat Tomtitom "Allerdings ist wahrscheinlich die gesamte Struktur schon nicht optimal, wenn du in allen Subs die gleichen Arrays brauchst."

Ich bin da andere Meinung:

Ich hab eine Software geschrieben da ist das genau der Fall, die eine Subroutine ist für Löschen, die andere fürs Zeichnen, die nächste für Verschieben etc. zuständig.
Ohne shared wäre es meiner Meinung nach aufwendig, alles einzeln zu Übergeben und die Subroutinen auflöschen wurde das Programm unlesbar/unlesbarer machen.
Ich bleibe beim Globalisieren mit sharred.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
licer



Anmeldungsdatum: 17.05.2005
Beiträge: 51

BeitragVerfasst am: 16.08.2005, 11:43    Titel: Antworten mit Zitat

Zitat:
Ich hab eine Software geschrieben da ist das genau der Fall, die eine Subroutine ist für Löschen, die andere fürs Zeichnen, die nächste für Verschieben etc. zuständig.
Ohne shared wäre es meiner Meinung nach aufwendig, alles einzeln zu Übergeben und die Subroutinen auflöschen wurde das Programm unlesbar/unlesbarer machen.
Ich bleibe beim Globalisieren mit sharred.


In dem Fall würd ich alles in eine Sub packen und ihr noch einen String mitgeben.

Code:
Declare SUB Grafik (Wert1 , Wert2, test as string)


und innerhalb der Sub entscheiden was zu tun ist

Code:
sub Grafik (Wert1 , Wert2, test as string)

select case test

case "Löschen"
......

case "Zeichnen"
.......

usw.


Macht meiner meinung nach den code übersichtlicher.

Das Problem an Dim shared is meiner meinung nach auch, dass die functionen und subs nicht programm unabhängig laufen. wenn man sie dann in eine DLL auslagern will um sie in anderen Programmen auch nutzen zu können kriegt man probleme und muss doch wieder alles umschreiben.
Meiner meinung nach sollte man dimshared nur benutzen wenn es keine andere möglichkeit gibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 16.08.2005, 15:03    Titel: Antworten mit Zitat

oder bei sachen wie zB einem in viele Felder unterteilten Spielfeld, das eh immer das selbe ist und wo so ziemlich jede zweite sub drauf zugreift. Sowas ist auch als Shared besser (find ich).
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 16.08.2005, 16:29    Titel: Antworten mit Zitat

@ Michael & MD: also in dem Fall fände ich es aber übersichtlicher, wenn man das Array als Parameter übergibt, so könntest die SUB auf mehrere Arrays anwenden. Bei dir ist die SUB sicher statisch.
Was soll eigentlich das Problem sein, mal noch die eine oder andere Variable als Parameter zu übergeben? Es ist wirklich mehr arbeit, aber sie lohnt sich, da man sofort sieht, welche Variablen für die Funktion wichtig sind.

Ein guter Code zeichnet sich auch dadurch aus, dass man ihn sehr leicht wiederverwenden oder erweitern kann.

@ Licer: also da bevorzuge ich auf jeden Fall noch alles in extra SUBs zu packen (solange es nicht hunderte Funktionen sind)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 16.08.2005, 18:16    Titel: Aw: Antworten mit Zitat

@licer
Diese Subroutinen sind so speziell, das ich sie für nicht anderes verwenden kann zwinkern.
Es macht zum Beispiel konkrett, keinen Sinn, aus einen Digtalschaltungsimulator (darum handelt es sich) die Zeichen oder gar Simulations zweck entfremtet wieder zu verwenden zwinkern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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