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:

Sortiervorgang

 
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
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 20.03.2005, 19:51    Titel: Sortiervorgang Antworten mit Zitat

Moin grinsen . Kennt jemand zufällig einen Programmblock, mit dem man Strings alphabetisch sortieren kann? Ich dächte, dass ich einmal so einen Programmcode in einem Basicbuch gesehen hätte, aber ich finde es nicht mehr. Ich glaube, dass man dieses Problem mit mehreren verschachtelten Zählscheifen gelöst hat. Ich komm aber nicht mehr drauf.

Beispiel: Nachfolgede String sollen sortiert werden.

A$(1) = "Haus"
A$(2) = "Baum"
A$(3) = "Computer"
A$(4) = "Ahorn"
A$(5) = "Aachen"

So dass rauskommt:
Aachen
Ahorn
Baum
Computer
Haus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 20.03.2005, 20:05    Titel: Antworten mit Zitat

Hi!

Das müsstest du auch selber machen können.

Einfach den ersten Buchstaben von A$(n) und A$(n+1) vergleichen.
Über die ASCII-Tabelle kannst du entscheiden, welcher der "größere" ist. Also A=65, B=66 usw.
Also solltest du den String auch noch in Großbuchstaben umwandeln

Mit dem SWAP-Befehl kannst du dann, wenn die Reihenfolge der beiden Vergleichs-Strings falsch ist, diese vertauschen.
Code:
IF ASC(LEFT$(UCASE$(A$(n)),1)) > ASC(LEFT$(UCASE$(A$(n+1)),1)) THEN SWAP A$(n), A$(n+1)

UCAE$(A$) macht alles in Großbuchstaben.
LEFT$(..., 1) gibt den linkesten Buchstaben aus.
ASC(...) liefert den ASCII-Code eines Strings.

Ich denke, dass du dir jetzt daraus selber eine Schleife basten können solltest, die alle Strings sortiert.

Tipp: Vor der Schleife schreiben: Something.Changed=0 und bei dem THEN.. noch: something:Changed=1 dazuschreiben

Dann kannst du eine DO-LOOP-Schleife machen, die UNTIL Something.Changed = 0 läuft

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 20.03.2005, 20:51    Titel: Antworten mit Zitat

das ASC kann man sich auch sparen, da QB beim vergleichen von 2 Strings automatisch in Ascii-Zahl umwandelt.
Und auch das Left$ brauchst du nicht, das macht alles schon QB für dich, nur groß-und kleinschreibung muss beachtet werden.

Code:
if ucase$(wort1$) > ucase$(wort2$) then swap ...

reicht also, es wird auch erkannt, dass "aab" größer als "aaa" ist.

Wenn du die Bubbelsort-Methode von Mecki nimmst, musst du (n-1) mal alle Wörter durchlaufen, mit Quicksort oder Mergesort, allerdings nur n*log(n) -mal, ergo sie sind schneller, aber auch komplizierter.
Falls du dich für eine der Sortiermethoden interessierst, findest du im Netz oder wahrscheinlich auch hier im Forum viel darüber.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 21.03.2005, 09:36    Titel: Antworten mit Zitat

Beim Stringvergleich von Qbasic gibt es ein paar Probleme. Das eine (bereits erwähnte) ist das das Ergebnis nur richtig ist, wenn nur klein oder nur Großbuchstaben verwendet werden. Ein weiteres Problem sind Umlaute und das 'ß'.

Deshalb würde ich empfehlen den Vergleich in eine Funktion auszulagern wo all dies berücksichtigt wird:
Code:
'****************************************************
'* Vergleich von Zwei Texten unter berücksichtigung
'* von Umlauten, ß und der Groß-/Kleinschreibung
'****************************************************
FUNCTION groesserAls% (text1 AS STRING, text2 AS STRING)
   t1$ = LCASE$(text1$)
   t2$ = LCASE$(text2$)

   FOR i% = 1 TO LEN(t1$)
      SELECT CASE MID$(t1$, i%, 1)
         CASE "ä", "Ä": MID$(t1$, i%, 1) = "a"
         CASE "ö", "Ö": MID$(t1$, i%, 1) = "o"
         CASE "ü", "Ü": MID$(t1$, i%, 1) = "u"
         CASE "ß": MID$(t1$, i%, 1) = "s"
      END SELECT
   NEXT i%

   FOR i% = 1 TO LEN(t1$)
      SELECT CASE MID$(t2$, i%, 1)
         CASE "ä", "Ä": MID$(t2$, i%, 1) = "a"
         CASE "ö", "Ö": MID$(t2$, i%, 1) = "o"
         CASE "ü", "Ü": MID$(t2$, i%, 1) = "u"
         CASE "ß": MID$(t2$, i%, 1) = "s"
      END SELECT
   NEXT i%

   groesserAls% = (t1$ > t2$)
END FUNCTION


In dieser Funktion wird zum Beispiel das'Ä' wie ein 'A' behandelt, was ja in einem Lexikon überlich ist. Angewendet sieht das Ganze dann so aus:
Code:
if groesserAls(wort1$, wort2$) then swap ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 21.03.2005, 17:04    Titel: Ist alles in der QB-MonsterFAQ beschrieben ... Antworten mit Zitat

Ist alles in der QB-MonsterFAQ beschrieben. Unter

"www.qbasic.de | QB-MonsterFAQ | Sortieren und Suchen | Wie kann ich ein paar Texte sortieren?"
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
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 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