|
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 |
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 15.02.2018, 23:15 Titel: Strings werden falsch sortiert? - Alternative??? |
|
|
Ich habe Strings die wie folgt aus sehen:
Code: | Temp(1) = "1"
Temp(2) = "10"
Temp(3) = "1.5"
Temp(4) = "5.5"
Temp(5) = "2.5"
Temp(6) = "4"
Temp(7) = "12"
Temp(8) = "9" | Diese sollen von 1-12/12-1, quasi aufsteigend oder absteigend sortiert werden. Leider sortiert der bei Strings immer so:
Code: | Temp(1) = "1"
Temp(2) = "1.5"
Temp(3) = "10"
Temp(4) = "12"
Temp(5) = "2.5"
Temp(6) = "4"
Temp(7) = "5.5"
Temp(8) = "9" | Kann man das irgendwie ändern? Man wird jetzt einfach sagen: Integer verwenden, aber das ist in meinem Fall nicht so einfach mit Integer umzusetzen. Warum sortiert der Strings anders als Integer? Welche Alternativen gibt es? Irgendwelche Tricks anwendbar auf Strings?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05
Zuletzt bearbeitet von ALWIM am 16.02.2018, 17:05, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.02.2018, 23:28 Titel: |
|
|
Was du suchst nennt sich "Natural Sort". FreeBASIC kann das nicht von Haus aus, aber es gibt dutzende Quellen dazu im Internet die die Idee dahinter erklären und Beispielcode in diversen Sprachen dazu mitliefern, z.B. hier: https://unclassified.software/de/source/naturalsort _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 16.02.2018, 17:05 Titel: |
|
|
Interessant, das zu hören...
Wäre das mit Freebasic-Mitteln zu lösen? Oder muss ich wirklich von String zu Integer wechseln? Auf jeden Fall, muss ich mir was einfallen lassen.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.02.2018, 17:18 Titel: |
|
|
Meine Güte, ALWIM, kannst du nicht ein einziges Mal etwaas Eigeninitiative zeigen, oder wartest du wieder darauf dass dir jemand die Funktion wie sie in dem Artikel beschrieben wird 1:1 nachbaut und sagst dann, dass du das auch gekonnt hättest?!
Aber gut, hier noch mal eine kurze Beschreibung, was du bei deinem Einsatzzweck tun musst:
1. Deine Sortierfunktion muss umgebaut werden damit sie nicht =, <, <=, >, >= oder was auch immer zum Vergleich verwendet, sondern ruft eine Funktion auf, die die zwei zu vergleichenden Strings als Parameter nimmt.
2. Diese Funktion schaut sich in die zu vergleichenden Strings ein Zeichen nach dem anderen an. Sind die beiden angeschauten Zeichen keine Ziffern, so werden sie ganz normal vergleich (z.B. mit <). Ein "echtes" Natural Sort würde hier auch noch z.B. Umlaute richtig einsortieren, z.B. "ä" zwischen "a" und "b", aber wir wollen erst mal simpel anfangen, gell?
3. Falls die verglichenen Zeichen aber beides Ziffern sind, schaust du dir die beiden Strings ab diesem Zeichen bis zum nächsten Zeichen, das keine Ziffer ist an (oder Stringende, falls es kein solches Zeichen gibt). Diesen Substrings konvertierst du dann tatsächlich nach Integer und vergleichst ihn. Sind beide konvertierte Zahlen gleich, fährt der Vergleich ganz normal fort, ansonsten gibt die Funktion eben zurück, dass einer der beiden Strings kleiner als der andere ist.
Das alles ist in FreeBASIC problemlos umsetzbar. Nach über 12 Jahren hier im Forum solltest du jetzt auch mal zeigen können, dass du so eine Beschreibung selbstständig in Code umsetzen kannst. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1874 Wohnort: D59192
|
Verfasst am: 16.02.2018, 18:01 Titel: Bubble-Sort Beispiel für FreeBasic |
|
|
Leicht geändertes Bubble-Sort Beispiel aus FreeBasic Portal:
Code: | 'Bubble-Sort Beispiel für FreeBasic
'Der Code darf frei verwendet werden.
'Für eventuelle Schäden wird nicht gehaftet.
'AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±¸©ø°
Dim Temp(8) As String
Sub BubbleSort(Tipp() As String, ByVal how As String=">") 'Sortiert kleinere Datenmengen zuverlässig in beiden Richtungen
Dim As Long l=LBound(Tipp), u=UBound(Tipp)
For i As Long = l To u
For j As Long = l To u 'vom Anfang der Schleife bis zu ihrem Ende
If IIf(how=">", Val(Tipp(i))<Val(Tipp(j)), Val(Tipp(i))>Val(Tipp(j))) Then Swap Tipp(i), Tipp(j) 'je nach gewählter Richtung werden die Elemente getauscht
Next
Next
End Sub
Sub MatOut(Msg As String="", Tipp() As String) 'Gibt die Matrix aus
If Msg<>"" Then Print Msg 'Meldung vorhanden? Ja, dann ausgeben..
For i As Long =LBound(Tipp) To UBound(Tipp)
Print Tipp(i)
Next
End Sub
Temp(0) = "0.5"
Temp(1) = "1"
Temp(2) = "10"
Temp(3) = "1.5"
Temp(4) = "5.5"
Temp(5) = "2.5"
Temp(6) = "4"
Temp(7) = "12"
Temp(8) = "9"
BubbleSort(Temp()) 'und sortieren, aufwärts ist default, braucht also nicht angegeben zu werden
MatOut("Aufw„rts", Temp()) 'sortierte Matrix ausgeben..
BubbleSort(Temp(), "<") 'und sortieren, diesmal aber abwärts
MatOut("Abw„rts", Temp()) 'sortierte Matrix ausgeben..
Sleep 'Programmende, auf Tastendruck warten, funktioniert aber nur im Konsolenmodus | aber das hast du bestimmt schon selbst gefunden? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 17.02.2018, 00:36 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Das alles ist in FreeBASIC problemlos umsetzbar. | Mehr wollte ich nicht hören! Dass mir jemand ein Beispiel liefert, oder etwas programmiert, war nicht in meinem Sinne. Ich bringe es auch ohne Hilfe hin. Wollte nur im Voraus wissen, ob es möglich ist. Bis jetzt habe ich mein Projekt immer noch zu 98% bis 99% selber programmiert.
volta hat Folgendes geschrieben: | Leicht geändertes Bubble-Sort Beispiel aus FreeBasic Portal: | Das Beispiel schaue ich gar nicht mal an. Schließlich will ich es selber programmieren! Immerhin weiß ich jetzt, dass es möglich ist.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 17.02.2018, 15:33 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Meine Güte, ALWIM, kannst du nicht ein einziges Mal etwaas Eigeninitiative zeigen | Lass ihn doch, so kommt wenigstens etwas Leben ins Forum.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 18.02.2018, 14:04 Titel: |
|
|
ALWIM hat Folgendes geschrieben: | Das Beispiel schaue ich gar nicht mal an. Schließlich will ich es selber programmieren! Immerhin weiß ich jetzt, dass es möglich ist. |
Könnte aber dennoch nicht schaden es anzuschauen, denn es demonstriert die grundsätzliche Vorgangsweise anhand eines sehr einfachen Sortieralgorithmus. Wenn du eine performante Sortierung für größere Datenmengen brauchst kommt dann BubbleSort ohnehin nicht in Betracht. Du wirst also das gezeigte ohnehin auf einen anderen Sortieralgorithmus übertragen und somit den Code nicht 1:1 verwenden können.
Und übrigens ist im Allgemeinen jeder Algorithmus der in irgendeiner Programmiersprache implementiert wurde (z.B. C# für den von Jojo verlinkten Artikel) immer auch mit FreeBasic umsetzbar. Deine Frage ob etwas mit FreeBasic umsetzbar sei kann man demnach eigentlich immer mit Ja beantworten (und falls das nicht der Fall sein sollte wird man dich sicher darauf hinweisen). _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 19.02.2018, 20:30 Titel: |
|
|
St_W hat Folgendes geschrieben: | ALWIM hat Folgendes geschrieben: | Das Beispiel schaue ich gar nicht mal an. Schließlich will ich es selber programmieren! Immerhin weiß ich jetzt, dass es möglich ist. |
Könnte aber dennoch nicht schaden es anzuschauen, denn es demonstriert die grundsätzliche Vorgangsweise anhand eines sehr einfachen Sortieralgorithmus. Wenn du eine performante Sortierung für größere Datenmengen brauchst kommt dann BubbleSort ohnehin nicht in Betracht. Du wirst also das gezeigte ohnehin auf einen anderen Sortieralgorithmus übertragen und somit den Code nicht 1:1 verwenden können.
Und übrigens ist im Allgemeinen jeder Algorithmus der in irgendeiner Programmiersprache implementiert wurde (z.B. C# für den von Jojo verlinkten Artikel) immer auch mit FreeBasic umsetzbar. Deine Frage ob etwas mit FreeBasic umsetzbar sei kann man demnach eigentlich immer mit Ja beantworten (und falls das nicht der Fall sein sollte wird man dich sicher darauf hinweisen). | Angeschaut habe ich mir es jetzt doch einmal! (Da ich mein Problem lösen konnte, brauche ich das Beispiel nicht mehr.) Ich habe aus dem String einfach einen Double gemacht. Somit wird alles richtig sortiert und gut ist. Ich musste letztendlich sowieso einen Double draus machen, da ich sonst an anderer Stelle Probleme kriege. War nicht leicht, bei meinem Programm aus dem String einen Double zu machen. Aber ich habe es zum Schluss doch hinbekommen! Richtig analysieren und studieren, werde ich das Beispiel ein anderes mal. Trotzdem vielen herzlichen Dank für die Infos!
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05
Zuletzt bearbeitet von ALWIM am 20.02.2018, 22:58, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 19.02.2018, 22:23 Titel: |
|
|
Bei Zahlen mit Nachkommastellen würde ich ja eher zu SINGLE oder DOUBLE raten, aber wenn INTEGER für dich funktionieren, ist das selbstverständlich in Ordnung. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
ALWIM
Anmeldungsdatum: 08.08.2006 Beiträge: 1037 Wohnort: Niederbayern
|
Verfasst am: 20.02.2018, 22:56 Titel: |
|
|
nemored hat Folgendes geschrieben: | Bei Zahlen mit Nachkommastellen würde ich ja eher zu SINGLE oder DOUBLE raten, aber wenn INTEGER für dich funktionieren, ist das selbstverständlich in Ordnung. | Stimmt! Ich habe mich bloß verschrieben. In meinem Programm ist das ganze mit Double definiert und funktioniert.
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
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.
|
|