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:

Zeidimensionales array sortieren?

 
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
Gloka



Anmeldungsdatum: 16.04.2013
Beiträge: 5

BeitragVerfasst am: 16.04.2013, 10:08    Titel: Zeidimensionales array sortieren? Antworten mit Zitat

Hallo miteinander ich bin ein Freebasic und allgemeiner Programmiere Anfänger.

Ich habe da eine Frage bei der Ihr mir vielleicht helfen könntet.
Ist es möglich ein zweidimensionales array zu ordnen? Das array sieht in etwa so aus:

Hund 2
Blume 1
Haus 3
Auto 5
Zug 4

Ich möchte das jetzt der Grösse nach ordnen, aber so dass zu der Blume immer die 1 gehört und zum Hund die 2. Es sollte dann am Schluss so aussehen:

Blume 1
Hund 2
Haus 3
Zug 4
Auto 5

Bubblesort ist mir bekannt aber ich kenne das nur für ein eindimensionales array, kann man das erweitern?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Affemitwaffel



Anmeldungsdatum: 02.06.2011
Beiträge: 39

BeitragVerfasst am: 16.04.2013, 12:41    Titel: Antworten mit Zitat

Hi,
wäre es nicht eventuell einfacher, wenn du einfach einen UDT machst und dann nur eine 1-Dimensionale Array erstellst?
Es sieht in dem Beispiel aber so aus, als ob der Gegenstand (oder was auch immer^^) schon direkt neben der Zahl steht und damit sollte es beim sortieren genauso funktionieren wie bei einer 1-Dimensionalen Array
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 16.04.2013, 14:30    Titel: Antworten mit Zitat

Ein zweidimensionales Array würde sich hier meines Erachtens sowieso nicht anbieten; wenn dann zwei eindimensionale Arrays:
begriff(1) = "Hund" : wert(1) = 2
begriff(2) = "Blume" : wert(2) = 1
usw.

Dann könntest du naxh wert() sortieren und begriff() in gleicher Weise mitsortieren. Noch etwas einfacher geht es aber, wie Affemitwaffel schon erwähnt hat, mit UDTs.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 16.04.2013, 15:44    Titel: Antworten mit Zitat

Hi,
wenn es ein UDT sein soll
Code:
' nach ytwinkys:
'http://www.freebasic-portal.de/code-beispiele/suchen-und-sortieren/qsort-shellsort-54.html
'aber auf das UDT angepasstes Qsort

Type SortType
  i As Integer
  s As String
End Type

Dim sortarray(4) As SortType
sortarray(0).i=2 : sortarray(0).s="Hund"
sortarray(1).i=1 : sortarray(1).s="Blume"
sortarray(2).i=3 : sortarray(2).s="Haus"
sortarray(3).i=5 : sortarray(3).s="Auto"
sortarray(4).i=4 : sortarray(4).s="Zug"

Declare Sub QSort(Feld() As SortType, ByVal l As Integer, ByVal r As Integer, ByVal Downwards As Integer=0)

For i As Integer = 0 To 4
  Print sortarray(i).s;" ";sortarray(i).i
Next
Print
QSort (sortarray(),0,4,0)

For i As Integer = 0 To 4
  Print sortarray(i).s;" ";sortarray(i).i
Next
Sleep

Sub QSort(Feld() As SortType, ByVal l As Integer, ByVal r As Integer, ByVal Downwards As Integer=0)
  Dim As Integer i=l, j=r 'Variablen für die Schleifensteuerung festlegen
  Dim As Integer x=Feld((l+r)\2).i 'Referenz-Element ermitteln, das 'Mittelste' im Feld
  Do
    While IIf(Downwards, Feld(i).i>x, Feld(i).i<x) 'Ein passendes Vergleichselement finden
      i+=1 'Zähler erhöhen
    Wend
    While IIf(Downwards, x>Feld(j).i, x<Feld(j).i) 'Noch ein passendes Element finden
      j-=1
    Wend
    If i<=j Then 'ggfs.
      Swap Feld(i), Feld(j) '..tauschen
      i+=1 'Zähler erhöhen..
      j-=1 '..diesen erniedrigen..
    End If
  Loop Until i>j
  If l<j Then QSort(Feld(), l, j, Downwards) 'ggfs mit den neuen Grenzen sortieren
  If i<r Then QSort(Feld(), i, r, Downwards) 'anderenfalls mit den neuen Grenzen sortieren
End Sub

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gloka



Anmeldungsdatum: 16.04.2013
Beiträge: 5

BeitragVerfasst am: 17.04.2013, 11:15    Titel: Antworten mit Zitat

Vielen dank ihr habt mir sehr weitergeholfen. Was dieses UDT genau ist versteh ich noch nicht wirklich aber dazu hat es ja genügend Tutorials.
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 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