0 Daumen
610 Aufrufe

Aufgabe:

Ich soll in wxMaxima für verschiedene Sortieralgorithmen eine Blockformel schreiben, die eine eingegebene Liste sortiert - beispielsweise eine Blockformel, die eine Liste mit dem Bubble-Sort-Algorithmus sortiert. Mit ordentlich rumprobieren ist bisher leider nichts Gescheites bei mir rausgekommen.

Avatar von

1 Antwort

0 Daumen
 
Beste Antwort

Ich hab mal eine Funktion-Bib zur analytischen Geometrie in wxMaxima verfasst. Is aber schon eine weile her. Was ist Dein Problem?

Wenn z.B. nur atoms sortiert werden

bubble(L):=block(
[n:length(L),A:copylist(L),stack:false],
while not is (stack=true) do(
stack:true,
for j:1 thru n-1 do(
  if A[j] > A[j+1] then(
        stack:A[j], A[j]: A[j+1], A[j+1]:stack
  )
)),
return(A)
)

Avatar von 21 k

Besten Dank für die Antwort! Die Aufgabe war:  Schreiben Sie eine Blockformel, die eine eingegebene Liste mit dem Bubblesort-Algorithmus sortiert. Ich habe zuerst eine random Liste erstellt in maxima und anschließend den Bubble-Sort Algo erstellt, aber irgendwie sortiert der meine erstellte Liste nicht. :/

return vergessen?

Welche Daten die Listen enthält war nicht vorgegeben?

Ich hab einen kleinen Fehler eingbaut - sieht Du den? ;-)

Return habe ich auch, aber ich denke mein Problem ist eher Maxima, da ich nicht weiß, wie ich den Algorithmus in Maxima implementiere. Die Liste kann irgendwelche Werte habe und ist nicht vorgegeben, also z.B. [5,4,3,2,1] etc..Zum Fehler: Fehlt nach for j:1 thru n-1 do nicht Print? :)

Muss ich den Algorithmus einfach so wie bei Dir in Maxima 1zu1 eingeben, damit es funktioniert oder brauche ich irgendwelche Befehle aus der Menüleiste? Bin mit Maxima überhaupt nicht vertraut. Nochmal vielen Dank für die Hilfe und schöne Feiertage!

Ich denke wir reden von wxMaxima, Maxima ist eine Konsolenanwendung und sollte sich aber inputmäßig nicht von wxMaxima unterscheiden...

Was willst Du andrucken?

Du kannst den Code einfach nach wxMaxima/Maxima kopieren - ich stelle den Fehler oben richtig. 0 kann ja auch ein Element der Liste sein, weshalb ich das Abbruchkriterium als boolschen wert definiere!

Die Liste wird nach A sortiert und dann zurückgegeben - fertisch...

Maximasitzung

Maxima 5.28.0-2 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.8 (a.k.a. GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.

(%i1) bubble(L):=block([n:length(L),A:copylist(L),stack:false],while not is (stack=true) do(  stack:true, for j:1 thru n-1 do(    if A[j] > A[j+1] then(          stack:A[j], A[j]: A[j+1], A[j+1]:stack     ) )),return(A))$

(%i2) T:makelist(random(100),j,1,12);bubble(T);
(%o2)            [12, 2, 34, 85, 4, 91, 29, 85, 98, 3, 35, 65]
(%o3)            [2, 3, 4, 12, 29, 34, 35, 65, 85, 85, 91, 98]

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community