Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 02.08.2005, 12:20 Titel: Arrayübergabe über Subs? |
|
|
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 |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 02.08.2005, 13:08 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 02.08.2005, 13:50 Titel: |
|
|
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 |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 02.08.2005, 14:20 Titel: |
|
|
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 |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 02.08.2005, 15:15 Titel: |
|
|
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 |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 02.08.2005, 17:19 Titel: |
|
|
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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 14.08.2005, 13:38 Titel: Aw |
|
|
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 |
|
|
licer
Anmeldungsdatum: 17.05.2005 Beiträge: 51
|
Verfasst am: 16.08.2005, 11:43 Titel: |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 16.08.2005, 15:03 Titel: |
|
|
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 |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 16.08.2005, 16:29 Titel: |
|
|
@ 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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 16.08.2005, 18:16 Titel: Aw: |
|
|
@licer
Diese Subroutinen sind so speziell, das ich sie für nicht anderes verwenden kann .
Es macht zum Beispiel konkrett, keinen Sinn, aus einen Digtalschaltungsimulator (darum handelt es sich) die Zeichen oder gar Simulations zweck entfremtet wieder zu verwenden . |
|
Nach oben |
|
|
|