 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Alpha
Anmeldungsdatum: 01.05.2005 Beiträge: 6
|
Verfasst am: 05.05.2005, 01:06 Titel: Arrays und Schleifen |
|
|
Hallo,
Kann mir jemand ein paar beispiele für die Sinnvolle verwendung von Arrays und Schleifen erklären?(bitte keine eingaben) Ich kenn nur das Beispiel aus den Tutorials, aber mit dem kann man sich das schlecht einprägen find ich......ein paar Beispiele wären nett  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 05.05.2005, 02:13 Titel: |
|
|
ähm, zb?
*wasausnfingernsaug*
Code: | DIM spieler(4) AS STRING
spieler(0)="Hans"
spieler(1)="Klaus"
spieler(2)="DerInderInDerInderin"
spieler(3)="BismarckBisMarckBisMarckBismarckBis"
spieler(4)="ober-b00n"
PRINT "Hier sind alle Spieler:"
PRINT "======================="
FOR n = 0 TO 4
PRINT STR$(n)+") "+spieler(n)
NEXT n
END |
_________________ "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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.05.2005, 12:53 Titel: |
|
|
Oder mit Zahlen, z.B. ein einfacher Lottozahlengenerator.
Einfach daher, weil Zahlen mehrmals auftreten können.
Code: |
DIM Lottozahlen(1 TO 6) AS INTEGER, Zusatzzahl
FOR i = 1 TO 6
Lozzozahlen(i) = INT(RND * 49) + 1
NEXT i
Zusatzzahl = INT(RND * 49) + 1
PRINT " Die heutigen Lottozahlen: "
FOR i = 1 TO 6
PRINT LTRIM$(STR$(i)) + ". " + LTRIM$(STR$(Lottozahlen(i))
NEXT i
PRINT " Und die Zusatzzahl ist die " + LTRIM$(STR$(Zusatzzahl))) + "."
|
PS: So hab ich auch mit Arrays und Schleifen angefangen
jb |
|
Nach oben |
|
 |
Alpha
Anmeldungsdatum: 01.05.2005 Beiträge: 6
|
Verfasst am: 06.05.2005, 00:31 Titel: |
|
|
aha, also braucht man arrays und schleifen nur wenn man lotto spielen will , scherz....ich meinte eher beispiele von kompliziertem zeugs  |
|
Nach oben |
|
 |
Jan

Anmeldungsdatum: 04.01.2005 Beiträge: 74
|
Verfasst am: 06.05.2005, 08:03 Titel: |
|
|
Moin,
also komplizierter is das mit den Arrays nicht.
Du kannst das höchstens noch anspruchsvoller machen, wenn du deine eigene Datenstruktur für ein Array erstellts. Dann kann das schon mal ganz lustig werden. |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 06.05.2005, 15:36 Titel: |
|
|
Das einzige, was noch dazu kommt, is die verwaltung dynamischer arrays.
Klingt jetz kompliziert, is aber genauso einfach.
Angenommen, du hast ein Array, und die Zahl der Elemente ändert sich im Programmverlauf. Dann musst du es redimensionieren, und evtl neu befüllen.
Unter QBX geht dass ganz einfach per REDIM PRESERVE, ansonsten musst du's zuvor in ein Temp-Array kopieren.
Könnte so aussehn:
Code: |
'QBX-Variante:
'$DYNAMIC
DIM Array(2, 3 TO 7)
'... Code, der das Array befüllt)
REDIM PRESERVE (3, 3 TO 7)
'------------------------
'QB 4.5-Variante:
DIM Array(2, 3 TO 7)
'... Code, der das Array befüllt)
DIM TmpArray(2, 3 TO 7)
FOR i = 0 TO 2
FOR j = 3 TO 7
TmpArray = Array(i, j)
NEXT
NEXT
REDIM Array (3, 3 TO 7)
FOR i = 0 TO 2
FOR j = 3 TO 7
Array = TmpArray(i, j)
NEXT
NEXT
|
Noch was zum Einsatz: Arrays brauchst du immer dann, wenn du beim Programmieren nicht genau sagen kannst, wie viele Speicherstellen (Variablen) du genau brauchst, oder wenn du dir selbst zusammenhänge deutlich machen willst. (Sieht man gut am ersten Beispiel)
Anspruchsvoller wäre nur noch die Koppelung eines Arrays mit einem UDT (User Defined Type):
Code: |
TYPE PlayerType
PlName AS STRING
PlScore AS INTEGER
PlLevel AS STRING
END TYPE
DIM Player(10) AS PlayerType
...
|
Ansonsten bleibts wohl eher auf dieser Höhe:
(Beispiel aus einem aktuellen Projekt: Ein Level soll in eine Datei gespeichert werden. Neben dem Level selbst müssen auch Headerdata mit. Das sind Dinge wie Startposition, Name des Levels, ...)
Code: |
sub SaveLvl (FileName as string, Map() as string, Info() as string, Groesse as Vektor)
dim f as ubyte
dim headersize as long
dim Elements As SHORT
f = freefile
Elements = Ubound(Info, 0)
open FileName for binary as #f
headersize = 1
for i = 0 to Elements
headersize = headersize + len(Info(i, 0)) + 2
headersize = headersize + len(Info(i, 1)) + 1
next
Print "Erstelle Header"
put #f, 1, headersize
put #f, 5, Elements
for i = 0 to Elements
Put #f, , chr$(255) + Info(i, 0) + chr$(255)
put #f, , Info(i, 1) + chr$(13)
next
Print "Speichere Dimensionen"
Put #f, headersize + 6, Groesse.y
Put #f, headersize + 8, Groesse.x
Print "Speichere Karte"
for y = 0 To Groesse.y - 1
for x = 0 to Groesse.x - 1
put #f, , Map(y, x)
next
next
close #f
end sub
|
Etwas in der Art hat wohl auch Jan gemeint, als er von einer eigenen Datenstruktur für ein Array gesprochen hat.
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.05.2005, 18:31 Titel: |
|
|
Voriges Beispiel funktioniert nur in PDS (QB7.1), in QB4.5 gibt es PRESERVE nicht. _________________ "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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 06.05.2005, 20:48 Titel: |
|
|
Deswegen hab ich ja auch im ersten Codebeispiel abgetrennt; der erste Teil als QBX-Variante, und nach dem Trennstrich das QB45-Äquivalent. Der dritte Codeauszug (die SUB) sollte QB-Kompatibel sein, auch wenn ich nicht ganz sicher bin, weil sie aus einem FB-Prog ist. Aber abgesehen von dem DIM elements AS SHORT sollte alles QB sein.
(SHORT entspricht dem QB-Integer) _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|
|
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.
|
|