0 Daumen
529 Aufrufe

Aufgabe:

Moin! Ich möchte mit wxMaxima eine Blockformel schreiben, die eine eingegebene Liste (aus Zahlen) mit dem Selectionsort-Algorithmus sortiert. Wir dürfen hierbei keine systemeigene Maxima-Funktion zum Sortieren nutzen. Ich habe nun folgendes aufgeschrieben:


selectionsort:=block([n:length(L)],for j:1 thru n-1 do(min:i),(for j:i+1 thru n do(if a[j] < a[min] then(a:j))t:a[min],a[min]:a[i],a[i]:t)return(a));

Leider erhalte ich immer diesen Error, weil das, was ich geschrieben habe offensichtlich Käse ist..

incorrect syntax: t is not an infix operator

Außerdem hätte ich eine weitere Frage: Wie kann ich den Insertionsort-Algorithmus in wxMaxima eingeben bzw. was muss ich für "current" und Print[A] in wxMaxima eingeben? Vielen Dank im Voraus für Eure Hilfe!

Avatar von

Die Frage sollte hier bleiben - es geht um die Arbeit im CAS Maxima das gehört auch zur Mathematik, oder? Falls jemand danach sucht, dann erstmal nicht in der Stacklounge.

Genau, wir behandeln das in Mathematik - und du hast recht; es geht ja um den Maxima Code. Ich nutze den Pseudocode als Vorlage.

1 Antwort

0 Daumen
 
Beste Antwort

Wir hatten vor ein paar Tagen ein Beratungsgespräch mit einem Kollegen

https://www.mathelounge.de/1007066/wie-verwende-ich-blockformel-sortieralgorithmen-wxmaxima#a1007069

vielleicht zum Grundsätzlichen.

Wieso Pseudocode, ich denke Du willst Maxima code?

Dein Text sieht kaputt aus: übergabe Parameter fehlt, beide Schleifen über j und i ist nicht definiert - sieht ehr nach einem Zufallsgenerator aus ;-).

Gib mal einen Link zu selectionsort...

Avatar von 21 k

Hi, danke für den Link. Der Kollege lernt ebenfalls für die Maxima Klausur. :D Wir haben die Sortieralgorithmen nur mithilfe des Pseudocodes aus dem Skript kennengelernt. Ich dachte, dass ich diese Pseudocodes einfach in wxMaxima übertragen kann. Klappt offensichtlich nicht. :-( Screenshot_20230409-155340_Drive.jpg

Text erkannt:

function SelectionSort (a)
begin
\( \begin{array}{l}n=\text { length }(a) ; \\ \text { for } i=1 \text { to } n-1 \text { do } \\ \text { begin } \\ \qquad \begin{array}{l}\text { min }=i \text {; } \\ \text { for } j=i+1 \text { to } n \text { do } \\ \text { begin } \\ \text { if } a[j]<a[\mathrm{~min}] \text { then } \\ \text { end }\end{array} \\ \begin{array}{l}t=a[\mathrm{~min}] \text {; } \\ a[\mathrm{~min}]=a[i] ;\end{array} \\ \text { end }[\mathrm{t} \text {; } \\ \text { return } a \text {; }\end{array} \)
end

Und hier nochmal der InsertionsortScreenshot_20230409-155417_Drive.jpg

Nun, dann brauchst Du ja nur RICHTIG abschreiben, etwa

selectionsort(L):=block(
[n:length(L),A:copylist(L),stack:0],
for i:1 thru n-1 do(
    minix:i,
    for j:i+1 thru n do(
      if A[j] < A[minix] then minix:j
    ),
stack:A[i], A[i]:A[minix], A[minix]:stack,
print(A)
),
return(A)
);

print(A) wenn man jeden Schritt sehen will, was abgeht...

Dankeschön Wächter. :) Gibt es in wxMaxima bezüglich Instertionsort einen Befehl oder kann ich current einfach so aufschreiben?

Hm,

ich denke Du sollst keine internen Maxima sortierfunktionen verwenden.

current ist eine Variable/Speicherplatz wie z.B. stack in meinem Beispiel - Du kannst auch, meinentwegen, merke sagen - namen sind schall und rauch

Man kann das fast 1:1 runterschreiben:
block wie gezeigt einfügen
Begin ->(, End->), stat := nur :
Anweisungen durch Kommta trennen - fertisch

testen/aufruf wie bei Deinem Kollegen gezeigt....

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community