Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Bubblesort Problem (https://www.delphipraxis.net/186830-bubblesort-problem.html)

EWeiss 8. Mär 2018 14:07

AW: Bubblesort Problem
 
Zitat:

Zitat von himitsu (Beitrag 1395573)
Zitat:

Zitat von EWeiss (Beitrag 1395570)
Zitat:

Wie dein Vergleich arbeitet, das musst du definieren und auch "richtig" implementieren
Siehe den Codeabschnitt.

Welchen?

Antwort #6 ... joar, stimmt soweit.



Delphi-Quellcode:
for i := 0 to High(numbers)-1 do
  for k := i+1 to High(numbers) do
    if numbers[i] > numbers[k] then
      Tausche(i, k)
Das
Delphi-Quellcode:
if ... then
musst du natürlich noch richtig implementieren, denn was man hier aus dem Wirrwarr rauslesen kann, ist dein Vergleich ein scheinbar bissl "anders".



Die Generics gibt es schon seit 2009 und 2010 ging es dann "besser".
k.A. ob Delphi-Referenz durchsuchenGenerics.Collections.TArray.Sort bei dir schon verfügbar ist.
fand es nicht, aber in der Hilfe fehlte damals auch noch Vieles http://docwiki.embarcadero.com/RADSt...ulltext=Search
Aber auch hier, musst du den Vergleich anpassen.

Nein ich meine den Beitrag in dem die Arrays vorbereitet werden.

gruss

TiGü 8. Mär 2018 14:27

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395575)
Zitat:

Zitat von TiGü (Beitrag 1395571)
Hast du denn mal die Variablen Angle, AnglePi und zorder[K] geloggt?

Nein.
Was mit jetzt ein Log da bringen würde entschließt sich mir.
Aber wie gesagt bin bereit jemanden das Projekt zu schocken damit er es mal testen kann.
Was nicht bedeuten soll das er meine Arbeit tun soll ;)

Du würdest sehen, ob die errechneten Werte so stimmen oder ob da schon VOR der Sortierung etwas faul ist. :idea:

hoika 8. Mär 2018 19:55

AW: Bubblesort Problem
 
Hallo,
Zitat:

Nach meinem Verständnis ist es richtig implementiert.
Wo liegt denn dann der Fehler?
Das musst Du doch selber schnell herausfinden.

Für mich ist Deine Berechnung jedenfalls zu kompliziert...

Delphi-Laie 8. Mär 2018 20:03

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395566)
Zitat:

Ist die gewünschte Reihenfolge erstmal klar, kann man nämlich (nahezu) jeden Sortieralgorithmus auf jedes Sortierproblem loslassen.
Leicht dahin gesagt..

Meine Reihenfolge wird in dem Quelltext definiert.

Es wäre für einen Außsenstehenden - und vermutlich auch für Dich - transparenter, die diesem vergleichsgbasierten Sortieralgorithmus namens Bubblesort zugrundeliegende Vergleichsfunktionalität in eine extra Funktion auszulagern, die drei Ausgabewerte annehmen kann, die dem kleiner, gleich oder größer entsprechen.

Oder sind die Relationen der zu sortierenden Objekte intransitiv?

EWeiss 8. Mär 2018 20:49

AW: Bubblesort Problem
 
Zitat:

Zitat von hoika (Beitrag 1395607)
Hallo,
Zitat:

Nach meinem Verständnis ist es richtig implementiert.
Wo liegt denn dann der Fehler?
Das musst Du doch selber schnell herausfinden.

Für mich ist Deine Berechnung jedenfalls zu kompliziert...

Ja wird mir nichts anderes übrigbleiben. (vielleicht mit Quicksort mal versuchen)
Danke.

gruss

Delphi-Laie 8. Mär 2018 21:21

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395610)
Ja wird mir nichts anderes übrigbleiben. (vielleicht mit Quicksort mal versuchen)

Wo Bubblesort nicht (oder nicht richtig) funktioniert, wird Quicksort kaum besser sein (ganz im Gegensatz, es ist komplizierter und damit fehleranfälliger), denn das Problem liegt wohl nicht an einem fehlerhaften Bubblesort.

EWeiss 8. Mär 2018 22:22

AW: Bubblesort Problem
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1395611)
Zitat:

Zitat von EWeiss (Beitrag 1395610)
Zitat:

Zitat von hoika (Beitrag 1395607)
Ja wird mir nichts anderes übrigbleiben. (vielleicht mit Quicksort mal versuchen).

.

Wo Bubblesort nicht (oder nicht richtig) funktioniert, wird Quicksort kaum besser sein (ganz im Gegensatz, es ist komplizierter und damit fehleranfälliger), denn das Problem liegt wohl nicht an einem fehlerhaften Bubblesort.

Auch wenn du recht haben magst werde ich es destotrotz versuchen.

gruss

freimatz 9. Mär 2018 06:59

AW: Bubblesort Problem
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1395609)
Oder sind die Relationen der zu sortierenden Objekte intransitiv?

Was meinst Du damit? Bitte erkläre das Wort intransitiv in dem Zusammenhang oder erkläre das was du sagen willst ohne das Wort. Danke.

hoika 9. Mär 2018 07:01

AW: Bubblesort Problem
 
Hallo,
da muss ich mal Delphi-Laie Recht geben. ausnahmsweise ;)

Was hat denn die Auswahl von Bubble-Sort oder Quick-Sort mit dem Problem zu tun?
Das Problem ist der Tausch-Algorithmus, da musst Du ansetzen,
z.B. mit ein paar Unit-Tests.

Neutral General 9. Mär 2018 08:24

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395614)
Zitat:

Zitat von Delphi-Laie (Beitrag 1395611)
Zitat:

Zitat von EWeiss (Beitrag 1395610)
Zitat:

Zitat von hoika (Beitrag 1395607)
Ja wird mir nichts anderes übrigbleiben. (vielleicht mit Quicksort mal versuchen).

.

Wo Bubblesort nicht (oder nicht richtig) funktioniert, wird Quicksort kaum besser sein (ganz im Gegensatz, es ist komplizierter und damit fehleranfälliger), denn das Problem liegt wohl nicht an einem fehlerhaften Bubblesort.

Auch wenn du recht haben magst werde ich es destotrotz versuchen.

Nochmal ein Versuch das zu erklären:
Das Sortieren besteht quasi aus 2 Teilen:

1) Den Algorithmus (Bubblesort, Quicksort, Mergesort, ...)
Jeder dieser Algorithmen kann zuverlässig in jeder Situation Zahlen sortieren :!:
2) Der Teil beim Sortieren wo zwei Elemente verglichen werden und entschieden werden muss welcher der beiden Elemente größer/kleiner/gleich ist.
Dieser Vergleich von zwei Elementen ist komplett UNABHÄNGIG vom gewählten Algorithmus und bestimmt am Ende in welcher Reihenfolge die Zahlen sortiert werden.

Dein Problem liegt bei 2).
Wie ich und andere schon mehrmals gesagt haben musst du dir bewusst machen in welcher Reihenfolge du deine Zahlen haben willst.
Wenn du da keinen 100%igen Plan wird das nie was und du kannst Sortieralgorithmen implementieren bis du schwarz wirst.
Sobald du weißt in welcher Reihenfolge du deine Zahlen haben willst musst du dir für 2) eine Function überlegen die zwei Zahlen anhand deiner Kriterien vergleicht => Fertig

HolgerX 9. Mär 2018 09:34

AW: Bubblesort Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Hab da mal was herumgespielt...

Es ist ein kleines Testtool, welches das so (ähnlich) macht, wie Du es (meiner Meinung nach) möchtest.

Habe hierzu ein paar Zeilen von Dir verwendet, nutze jedoch (für den Test) kein GDI+.

Es werden hier Kreise gemalt, welche sich in einem Kreis drehen.

Ich berechne die Positionen der jeweiligen Kreise immer wieder neu und die Y-Position gibt auch gleich an, welches am weitesten hinten und somit als Erstes, teil verdeckt gezeichnet wird. Dies geht, da durch die Perspektive die Kreise, welche am weitesten hinten sind auch am höchsten (am Mittelpunkt betrachtet) sind.

Das Demo ist einfach nur Quick and Ditry gebastelt..
(Verwendet wurde D6)

Delphi-Laie 9. Mär 2018 09:55

AW: Bubblesort Problem
 
Zitat:

Zitat von freimatz (Beitrag 1395616)
Zitat:

Zitat von Delphi-Laie (Beitrag 1395609)
Oder sind die Relationen der zu sortierenden Objekte intransitiv?

Was meinst Du damit? Bitte erkläre das Wort intransitiv in dem Zusammenhang oder erkläre das was du sagen willst ohne das Wort. Danke.

Die Tanten Google und Wikipedia sind Dein Freund.

Intransitiv bedeutet, daß nicht gilt: Wenn a<=b und b<=c dann a<=c, jedenfalls nicht immer und zwangsläufig. Einfaches Beispiel ist das Spiel "Schnick schnack schnuck".

M.E. kann man, wenn Intransitivität gilt, keinen Sortieralgorithmus darauf begründen, jedenfalls keinen, wie mir bekannt.

Darauf kam ich wegen des Kreisbildes, das weiter zuvor angehängt wurde.

madas 9. Mär 2018 10:03

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395462)
Genau so soll es sich drehen (bzw. die Anordnung sein) wie in deinem Bild gezeigt

Na ja werde mal schaun habe noch andere Baustellen.

gruss

Hast Du denn meinen Lösungsansatz mal ausprobiert? Oder hast Du ihn nciht verstanden.

Die Werte für X und Y im Koordinatensystem berechnest Du ja schon pro Kugel. Nun brauchst Du dem Z-Index der Kugel doch nur noch -1 * Y-Wert der Kugel zuweisen
und dann sollte es doch eigentlich funktionieren.

madas

madas 9. Mär 2018 10:08

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395577)
PM von Dir

Leider kann ich Dir nicht via PM antworten, da Du die Annahme selbiger ablehnst. :(
Von daher lade Dein Projekt hier als Zip-Datei hoch. Dann könnten auch andere drüber schauen.

madas

EWeiss 9. Mär 2018 10:10

AW: Bubblesort Problem
 
Zitat:

Wenn du da keinen 100%igen Plan wird das nie was und du kannst Sortieralgorithmen implementieren bis du schwarz wirst.
Ich weis nicht was da nicht zu verstehen ist.
Das Array beginnt bei 0 oder?
Ich habe 10 Objekte von 0 > 9

Also egal ob ich von links nach rechts oder von rechts nach links diese Objekte drehe ist immer das erste Objekt der Antrieb in dem fall 0.

Da ich diese aber vom Höchsten Index zum kleinsten durchlaufe ist es in dem fall die 9 (das 10 Objekt)
Auf die werte die nun bei der Berechnung während dem durchlauf der Schleife entstehen habe ich keinen Einfluss.

Nun sollen diese ausgetauscht werden abhängig davon wo diese sich gerade befinden.
Keine Ahnung was ihr immer mit 100% Plan meint, was gibt es da zu planen?
Dazu muss man sich nur mal meinen Code DrawCarousel anschauen dann sieht man das was ich geplant habe.

gruss

EWeiss 9. Mär 2018 10:12

AW: Bubblesort Problem
 
Zitat:

Von daher lade Dein Projekt hier als Zip-Datei hoch. Dann könnten auch andere drüber schauen.
Sorry nein aber du kannst es gerne nochmal versuchen sollte jetzt gehen.

Zitat:

Hast Du denn meinen Lösungsansatz mal ausprobiert? Oder hast Du ihn nciht verstanden.
Habe ich versucht und verstanden aber er funktioniert nicht.
Die Zorder ist immer noch falsch.
Danke.

Zitat:

Es ist ein kleines Testtool, welches das so (ähnlich) macht, wie Du es (meiner Meinung nach) möchtest.
HolgerX werde es mir mal anschauen.. Danke für deine Mühe.
Super gemacht ;) :thumb:

gruss

TiGü 9. Mär 2018 10:23

AW: Bubblesort Problem
 
Zitat:

Zitat von HolgerX (Beitrag 1395629)
Hmm..

Hab da mal was herumgespielt...

Es ist ein kleines Testtool, welches das so (ähnlich) macht, wie Du es (meiner Meinung nach) möchtest.

Habe hierzu ein paar Zeilen von Dir verwendet, nutze jedoch (für den Test) kein GDI+.

Es werden hier Kreise gemalt, welche sich in einem Kreis drehen.

Ich berechne die Positionen der jeweiligen Kreise immer wieder neu und die Y-Position gibt auch gleich an, welches am weitesten hinten und somit als Erstes, teil verdeckt gezeichnet wird. Dies geht, da durch die Perspektive die Kreise, welche am weitesten hinten sind auch am höchsten (am Mittelpunkt betrachtet) sind.

Das Demo ist einfach nur Quick and Ditry gebastelt..
(Verwendet wurde D6)

Top, kompiliert auch unter Tokyo.

@EWeiss, guck dir das an und versuche das auf dein Problem zu übertragen.

EWeiss 9. Mär 2018 10:31

AW: Bubblesort Problem
 
Zitat:

@EWeiss, guck dir das an und versuche das auf dein Problem zu übertragen.
Habe ich und es ist fast das selbe wie bei mir wenn man von GDI+ das entgegengesetzte drehen sowie die Größe der Objekte abhängig von der Tiefe mal absieht.
Ich kann keinen großen unterschied ausmachen.

Abgesehen davon das sich die Objekt an ihrer jeweiligen Position verändern.
Das kann ich so nicht machen.
Wenn einer dieser Kreise bsp. Gelb an der 5 Position steht darf sich diese nicht verändern tut sie aber in dem Beispiel.
Die Reihenfolge muss konstant bleiben so wie bei mir aber die ZOrder (das überlagern) der einzelnen Objekte sich anpassen.

Muss nochmal in meine DLL schauen da ich glaube das dieses spezifische Problem dort und nicht
mit dem Bubblesort produziert wird.

gruss

HolgerX 9. Mär 2018 11:07

AW: Bubblesort Problem
 
Hmm..

Zitat:

Zitat von EWeiss (Beitrag 1395642)

Abgesehen davon das sich die Objekt an ihrer jeweiligen Position verändern.
Das kann ich so nicht machen.
Wenn einer dieser Kreise bsp. Gelb an der 5 Position steht darf sich diese nicht verändern tut sie aber in dem Beispiel.
Die Reihenfolge muss konstant bleiben so wie bei mir aber die ZOrder (das überlagern) der einzelnen Objekte sich anpassen.

Die Kugeln drehen sich im Kreis...
Jede behält immer ihre, gleiche Farbe..
Sie bleiben immer in der gleichen Reihenfolge, es kommt nur immer die nächste durch das Drehen nach vorne..
Die vorderen Überlagern die Hinteren..

Hmm..

Zitat:

Zitat von EWeiss (Beitrag 1395390)
Ich habe 10 Objekte die sich im Kreis drehen.
Wenn sich diese im Vordergrund befinden dann soll das nächstfolgende das davor liegende überlagern.
Wenn das letzte Objekt hinten liegt in dem fall das 10 dann soll das folgende dieses überlagern.

Ist es nicht das was hier gefordert wurde?

Die Größenreduzierung ändert ja nichts an der Position, nur wie die Objekte gemalt werden und könnte ebenfalls (vereinfacht) über die Y-Position berechnet werden.

EWeiss 9. Mär 2018 11:10

AW: Bubblesort Problem
 
Zitat:

Jede behält immer ihre, gleiche Farbe..
Korrekt sorry..
War bei mir beim ersten Start nicht so kann jetzt nicht sagen woran es lag.

Funktioniert aber nach erneuten kompilieren jetzt richtig.

Zitat:

Ist es nicht das was hier gefordert wurde?
Doch.

Zitat:

Die Größenreduzierung ändert ja nichts an der Position, nur wie die Objekte gemalt werden und könnte ebenfalls (vereinfacht) über die Y-Position berechnet werden.
Richtig.

Keine Ahnung warum das bei mir so war nach jedem ändern der Zorder
veränderten sich alle Farben an unterschiedlichen Positionen.

oops.. war mein Fehler.
hatte diese zeile geändert wollte was testen ;)

Delphi-Quellcode:
for i := Length(FSprites)-1 downto 0 do begin
Meine Dummheit.

gruss

EWeiss 9. Mär 2018 13:36

AW: Bubblesort Problem
 
Nur zum Abschluss als Information.
Habe versucht dein Beispiel umzusetzen

Aber auch damit ist meine ZOrder falsch.
Muss wohl dann doch an meiner DLL liegen (debuggen ist angesagt).:stupid:
Zumindest weis ich jetzt das es an Bubblesort nicht liegt.

gruss

Delphi-Laie 9. Mär 2018 15:23

AW: Bubblesort Problem
 
Zitat:

Zitat von EWeiss (Beitrag 1395648)
Zumindest weis ich jetzt das es an Bubblesort nicht liegt.

Natürlich nicht. Es liegt überhapt nicht an irgendeinem Sortieralgorithmus.

Denn die gewünschte Reihenfolge scheint (nicht nur (Dir)) nicht klar zu sein.

Ich nahm es bisher so wahr, daß Du sämtlichen diesbezüglichen Fragen ausgewichen bist.

Wem es klar ist, welche Reihenfolge die wirklich gewünschte ist, der hat des Rätsels Lösung und wird sich hoffentlich melden.

EWeiss 9. Mär 2018 16:11

AW: Bubblesort Problem
 
Zitat:

Denn die gewünschte Reihenfolge scheint (nicht nur (Dir)) nicht klar zu sein.
Denke das hat sich erledigt oder?
Siehe das Sample von HolgerX keine Ahnung warum du immer wieder darauf rumreitest.
HolgerX hat es meinen Erklärungen entsprechend genauso umgesetzt da gibt es nichts zu meckern das ist 100%
Und genau so ist sie auch bei mir.

Vielleicht kann HolgerX dir das genau erklären obwohl ich nicht weis warum das nötig sein sollte.
Wir sind nicht unbedingt befreundet aber wenn er etwas gut macht dann stehe ich auch dazu und rechne ihm das hoch an.

gruss

freimatz 9. Mär 2018 16:31

AW: Bubblesort Problem
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1395633)
Zitat:

Zitat von freimatz (Beitrag 1395616)
Zitat:

Zitat von Delphi-Laie (Beitrag 1395609)
Oder sind die Relationen der zu sortierenden Objekte intransitiv?

Was meinst Du damit? Bitte erkläre das Wort intransitiv in dem Zusammenhang oder erkläre das was du sagen willst ohne das Wort. Danke.

Die Tanten Google und Wikipedia sind Dein Freund.

Intransitiv bedeutet, daß nicht gilt: Wenn a<=b und b<=c dann a<=c, jedenfalls nicht immer und zwangsläufig. Einfaches Beispiel ist das Spiel "Schnick schnack schnuck".

M.E. kann man, wenn Intransitivität gilt, keinen Sortieralgorithmus darauf begründen, jedenfalls keinen, wie mir bekannt.

Darauf kam ich wegen des Kreisbildes, das weiter zuvor angehängt wurde.

Danke für die Erklärungen.
(Google und wikipedia habe ich wohl zuwenig bemüht. Ich fand da nur Dinge die deutsche Grammatik betreffend.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz