Step 7 Insertionsort mit SCL

Durch die 2000 Werte dauert die Auswertung in einer einzigen While-Schleife innerhalb eines Zyklus zu lange.
Du mußt das Ganze aufteilen, das hast du ja schon richtig erkannt.
Vielleicht postest du mal den Code des bisherigen Algorithmus, dann kann man mal darüber diskutieren, welche Aufteilung am sinnvollsten ist und wie man es hinbekommt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Durch die 2000 Werte dauert die Auswertung in einer einzigen While-Schleife innerhalb eines Zyklus zu lange.
Du mußt das Ganze aufteilen, das hast du ja schon richtig erkannt.
Vielleicht postest du mal den Code des bisherigen Algorithmus, dann kann man mal darüber diskutieren, welche Aufteilung am sinnvollsten ist und wie man es hinbekommt.

Es wäre auch denkbar, da er ja anscheinend mit PLCSIM arbeitet, und das ist ja doch einigermaßen schnell, dass einfach die Abbruchbedingung seine While-Schleife nicht erfüllt wird. Dann sollte zwar irgend ein Fehler von wegen Bereichslängenfehler auftreten. Aber da ich von den Programmierkünsten des TE keine besonders hohe Meinung hab kann das ja auch danebengegangen sein.

Vielleicht zählt er die Zeigervariable auch nicht hoch....
 
for i :=1 to 2000 do;
help := Tab;
j := i;
while (j > 0 AND Tab[j-1] > help)
Tab[j] := Tab[j-1];
j:=j-1;
end_while;
Tab[j] := help;
end_for;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab ichs mir gedacht. Ein Genie der ohne Kommentare und Einzüge ein Programm lesen kann.
Code:
// Passenden Platz zum Einfügen suchen
for  i ‹= 2000 do; 
     help := Tab[i];  
     j := i;
     // Tabelle schieben um freien Platz für neuen Wert zu erhalten
     while (j > 0 AND Tab[j-1] > help)
          Tab[j] := Tab[j-1];
          j:=j-1;
     end_while;
     Tab[j] := help;
end_for;

Mich wundert, dass du den Platz mit einer Zählschleife und nicht mit einer While-Schleife suchst. Wenn du den Platz gefunden hast bist du ja fertig.

Also While-Schleife oder dann zumindest EXIT.
 
Ich glaube, du hast schon nach Bubblesort gefragt und ich habe dir ausführlich geantwortet. While und for durch if zu ersetzen wird nicht helfen. Du kannst auch die Schleifen von insertionSort auf mehrere Zyklen aufteilen. Oder hast du in jedem SPS-Zyklus 2000 neue Daten zu sortieren?
Ansonsten kannst du einfach mal nur einen Teil deiner Daten sortieren:for i ‹= nx do; // 0< nx < 2000

und schauen, was noch geht, um ein Gefühl dafür zu bekommen, wie weit du von deinem Ziel weg bist...
 
Zurück
Oben