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:

Realisierung einer verkettete Liste in QB

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



Anmeldungsdatum: 04.05.2005
Beiträge: 6
Wohnort: Castrop-Rauxel

BeitragVerfasst am: 04.05.2005, 20:39    Titel: Realisierung einer verkettete Liste in QB Antworten mit Zitat

Hallo,

es ist zwar schon ein bißchen her, das ich das letzte mal QBasic wirklich intensiv angefaßt habe. Aber nachdem ich mich neulich mit jemanden (Ray hier aus dem Forum) unterhalten habe bin ich wieder ein bißchen auf den Geschmack gekommen. Allerdings geht mir die Frage nun im Kopf herum ob sich ähnlich wie in Java oder C/C++ verkettete Liste realisieren lassen.
Meine letzten programmiererfahrungen in QBasic liegen nun auch schon gut 10 Jahre zurück und ich wäre daher über einen entsprechenden Tipp ob sich solche Strukturen realisieren lassen, sehr dankbar.
Gruß
Dan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



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

BeitragVerfasst am: 04.05.2005, 20:52    Titel: Antworten mit Zitat

also Basic-Datenfelder sind Standartmäßig statisch, können also nichtt verändert werden. Generiert man sie per REDIM kann man sie damit auch verändern in der Größe, dabei werden jedoch immer alle enthaltenen Daten gelöscht.
Für richtige Dynamik schau dir php an, damit kann man mit normalen Arrays alles machen, was man sich vorstellen kann.. das is einfach nur Wahnsinn.
_________________
"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
hawkeye78



Anmeldungsdatum: 04.05.2005
Beiträge: 6
Wohnort: Castrop-Rauxel

BeitragVerfasst am: 04.05.2005, 21:04    Titel: Antworten mit Zitat

Hallo MisterD,

erst einmal vielen Dank für dein Posting, ja mit PHP und Java und wenn ich mir ganz viel Mühe gebe auch mit C kann ich umgehen. Aber da mir Ray so ein bißchen davon erzählt hat was er so alles in QBasic realisiert war ich nun mal neugierig was sich bezüglich Anwendungen (Listen, Bäume etc.) noch so alles realisieren läßt.
Ich danke dir noch einmal viel mals für dein Posting.
Gruß
Dan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



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

BeitragVerfasst am: 04.05.2005, 22:30    Titel: Antworten mit Zitat

na so lieb hat sich ja auch noch keiner bei mir für n Posting bedankt xD

Also php is relativ einfach zu lernen, dazu empfehle ich http://tut.php-q.net
Progman is irgendwie n komischer Typ, das is stellenweise auch etwas schwer zu lesen, aber man kann damit auskommen, was besseres wirst du ned finden. Brauchst halt nen Apache um das Zeugs auszuführen, dazu empfehle ich XAMPP von www.apachefriends.org -> alles drin was man braucht.
Das einzige Problem bei php ist, dass man nen saumäßigen Programmierstil bekommt.. dafür gewöhnt man sich GOTO nicht an, das gibts garnicht erst zwinkern
_________________
"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
hawkeye78



Anmeldungsdatum: 04.05.2005
Beiträge: 6
Wohnort: Castrop-Rauxel

BeitragVerfasst am: 05.05.2005, 09:31    Titel: Antworten mit Zitat

Guten Morgen MisterD,

ja ich weiß ich habe mein Abschlußprojekt für meine Ausbildung in PHP in Kombination mit MySQL und HTML geschrieben. Daher habe ich ein paar Grundlegende Erfahrungen was diese Sprache betrifft zwinkern.
Ich wünsche dir einen schönen Feiertag
Gruß
Dan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 05.05.2005, 09:42    Titel: Antworten mit Zitat

Hallo.

Bei QB 7.1 bzw. PDS kannst du auch REDIM PRESERVE anwenden. Damit kannst du die Größe eines Datenfelds ändern, ohne dass Daten verloren gehen. lächeln Wie man DIM usw. genau einsetzt, ist in der großen QB Monster-FAQ auf www.qbasic.de beschrieben.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 05.05.2005, 11:00    Titel: Antworten mit Zitat

Verkettete Listen im Sinne von C/C++ sind bei QB nicht möglich, da QB keinen Heap verwaltet, bei dem man malloc() und free() bzw. ein "new"-Operator anwenden und so die Elemente mittels Pointer verknüpfen kann.

Damit aber dennoch die typischen Operationen wie etwas einfügen, herausnehmen usw. möglich sind, würde ich mich in diesem Fall einer Ersatzkostruktion mit Arrays bedienen
Code:
TYPE itemType
  ' nicht näher definiert (von der Anwendung abhängig)
END TYPE

DECLARE SUB TueEtwasMitItem(x AS itemType)

TYPE DListe
  item AS itemType
  naechst AS INTEGER
  vorher AS INTEGER
END TYPE
' naechst und vorher wären in C/C++ Pointer, weil in QB Arrayindexe immer
' 16-Bit-Integer sind, nehmen wir sinnvollerweise diesen Datentyp dafür

DIM dl(0 TO 99) AS DListe, itm AS itemType

' Liste leeren/initialisieren
anker% = -1
naechstFrei% = 0

' Beispiele

' Liste durchgehen
a% = anker%
WHILE a%<>-1
  TueEtwasMitItem dl(a%).item
  a% = dl(a%).naechst
WEND

' Einfügen von itm _nach_ Element e%
IF naechstFrei% > UBOUND(dl) THEN
  PRINT "Fehler: Kein Speicherplatz mehr"
  ERROR 5
ELSE
  ' Einfügen
  dl(naechstFrei%).item = itm
  dl(naechstFrei%).naechst = dl(e%).naechst
  dl(e%).naechst = naechstFrei%
  dl(naechstFrei%).vorher = e%
  dl(dl(naechstFrei%).naechst).vorher = naechstFrei%
  naechstFrei% = naechstFrei% + 1
END IF

Hinweis: Spezialfall Anfang und Ende ist nicht berücksichtigt. Jeder sollte sich gut vorstellen können, wie Operationen wie Eintrag entfernen usw. noch implementiert werden müssten, wobei man beim Löschen einfach das letzte Element in die freigewordene Lücke einbaut, so dass dass Array nie einen "DEFRAG.EXE" nötig hat.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChemicalWarfare



Anmeldungsdatum: 15.09.2004
Beiträge: 152

BeitragVerfasst am: 05.05.2005, 13:02    Titel: Antworten mit Zitat

Nicht ganz, dreael, es ist möglich, aber da QB halt nicht mit Zeiger umgehen kann wie es C/C++ tuen, ist es sehr aufwändig (und langsam) und daher nicht zu empfehlen. Und eine alloc-Funktion kann sich ja wohl jeder schreiben, der ein bisschen asm kann. Aber die einfachste Möglichkeit ist die von Sebastian: DIM PRESERVE.

Zuletzt bearbeitet von ChemicalWarfare am 05.05.2005, 13:09, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 05.05.2005, 13:02    Titel: Antworten mit Zitat

Zitat:
Verkettete Listen im Sinne von C/C++ sind bei QB nicht möglich.


Ähm, wie bitte? Was sind denn verkettete Listen im Sinne von C/C++? Also verkettete Listen sind strukturen, die wie folgt definiert sind:

Eine Liste ist entweder eine leere Liste oder eine Liste bestehend aus einem Element (normaler Weise Head genannt) und einer weiteren Liste (Normalerweise Tail genannt). Das ist schon sei Lisp aus den frühen 60ern so und hat nix mit C oder gar C++ zu tun.
Dann gibt es auch noch doppelt verkettete Liste. Das sind Listen, die nicht nur ihren Nachfolger, sondern auch ihren vorgänger kennen.

Üblich sind Listen generell eher in funktionalen Sprachen. In imperativen verwendet man eher Arrays. Natürlich gibt es für beides Ausnahmen.

-------------------

Ein Array als Speicher zu ge/missbrauchen macht nur sehr selten Sinn, da die listentypischen Operationen nicht wirklich sinnvoll implementieren lassen, da normalerweise ständig neue Listen erstellt werden.

Um erfahrungen mit Listen zu sammeln würde ich empfehlen eine entsprechende Sprache (SML oder O'Caml würde ich hier empfehlen) anzusehen.
Natürlich sind Listen in vielen Sprachen möglich, allerdings ist der Umgang oft so kompliziert, das sich das Arbeiten nicht wirklich lohnt und das so viel anderes getan werden muss, das man den eigentlichen Algorithmus aus den Augen verliert.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 05.05.2005, 14:05    Titel: Antworten mit Zitat

kann helium nur beipflichten, obwohl listen und deren abarten sehr wohl und häufig auch in imperativen/objektorientierten sprachen einsatz finden, siehe z.B. stl lächeln.

dreals ansatz is ein guter wenn man unbedingt dynamische listen in qbasic benötigt. blitz hat vor längerer zeit mal einen binär baum über diees methode implementiert ( für den quake level renderer ), außerdem hab ich glaub ich mal auf badlogic einen forum eintrag dazu auf english verfasst.

viel langsamer ist dieses dingens per array indizierung nicht.
_________________
Yagl - yet another gameprogramming library
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MisterD



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

BeitragVerfasst am: 05.05.2005, 15:13    Titel: Antworten mit Zitat

also bei Java gibts extra Listen, da kann man dann auch Iterator's draufsetzen um die, wenn sie nicht indiziert sind, zu durchlaufen.. Da gibts auch alle möglichen Methoden wie next, preview, add, delete etc.

bei php hat jedes Array standartmäßig einen internen Cursor, man kann also ein Array entweder mit
foreach($array as $var){
echo $var;
}
oder eben mit
reset($array);
while($var=next($array)){
echo $var;
}
durchlaufen, von daher kann man das einigermaßen als Liste benutzen, was halt nicht geht, ist, Einträge dazwischen einzufügen, das muss man manuell einfügen, sprich alle weiteren einträge verschieben.
_________________
"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
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. 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