Erläutern des Bildes // Code (erstellung)

  • Allgemein

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Erläutern des Bildes // Code (erstellung)

    Guten Tag

    vlt kann mir jemand dieses Bild Interpretieren oder Erläutern

    und kann mir vlt jemand den Code als Ansatz aufschreiben

    Das kann in C++/C+ oder in Delphie geschrieben sein


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kLONkRIEGER90 () aus folgendem Grund: Hilfe +Pic

  • Also ansich ist die Aufgabe recht einfach.
    Trotzdem für meinen Geschmack an manchen stellen zu ungenau beschrieben.
    Über welche Datenstrukturen verfügt ihr denn so? Oder befindest du dich in keinem Unterricht sondern hast die Aufgabe nur so aus Interesse vorliegen?
    Code könnte ich dir in den nächsten Stunden in Java liefern.
    Sorry C++ bzw Delphi liegen bei mir schon paar Jahre zurück und da kenn ich auch keine fortgeschrittene Datenstrukturen :)
    Das ganze nur mit Arrays zu machen ist nämlich bisschen aufwendiger :)
    Ansonsten könnt ich dir natürlich auch die Grundidee für ein Programm erklären ;)
  • Meine Lösung in Java. Solltest du noch Erklärungen brauchen, sag einfach bescheid ;)

    Achja die Variante mit der gestrichelten Line ist nicht umgesetzt. Ist aber sehr einfach, statt den Hilfsstapel jedesmal wieder auf den Starstapel zu räumen einfach beim Aufräumen auf Vorschrift vergleichen und falls Treffer direkt auf Ziel verschieben.

    PHP-Quellcode

    1. import java.util.Stack;
    2. public class Main {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. // Für die Vorschrift und den Zielstapel reicht ein einfaches Array
    8. // Möglicherweise ist aber für den Zielstapel auch ein Stack gefordert,
    9. // wegen dem Namen "Stapel"
    10. int vorschrift[] = { 4, 3, 1, 0, 2 };
    11. int ziel[] = new int[5];
    12. // Der Hilfstapel arbeitet nach dem LIFO Prinzip also brauchen wir so
    13. // etwas wie einen Stack (zumindest könnte man das aus der Grafik
    14. // erschliessen)
    15. Stack<Integer> hilfsstapel = new Stack<Integer>();
    16. // Der Startstapel könnte nach LIFO oder FIFO Prinzip arbeiten, der
    17. // Einfachheit halber nehmen wir nochmals LIFO
    18. Stack<Integer> startstapel = new Stack<Integer>();
    19. // Startstapel aufbauen
    20. startstapel.push(4);
    21. startstapel.push(3);
    22. startstapel.push(2);
    23. startstapel.push(1);
    24. startstapel.push(0);
    25. /*
    26. * Durchlaufen der Vorschrift bis zum Ende, ist die Vorschrift
    27. * vollständig abgearbeitet sind wir fertig
    28. */
    29. for (int i = 0; i < vorschrift.length; i++) {
    30. /*
    31. * Jetzt laufen wir durch den Startstapel und vergleichen den Wert
    32. * mit der Vorschrift bei Übereinstimmung verschieben zum
    33. * Zielstapel, andernfalls auf den Hilfstapel
    34. */
    35. while(startstapel.size() > 0){
    36. // Ein Element nach dem anderen vom Starstapel holen
    37. int helper = startstapel.pop();
    38. if (vorschrift[i] == helper) {
    39. // Treffer also verschieben nach ziel
    40. ziel[i] = helper;
    41. } else {
    42. // kein Treffer also verschieben auf den Hilfsstapel
    43. hilfsstapel.push(helper);
    44. }
    45. }
    46. /*
    47. * Möglicherweise befindet sich das nächste gesuchte Element nicht
    48. * mehr im Startstapel sondern bereits im Hilfsstapel, also müssen
    49. * die Elemente wieder in den Startstapel verschoben werden
    50. */
    51. while(hilfsstapel.size() > 0){
    52. // Ein Element nach dem anderen vom Hilfsstapel holen und verschieben
    53. startstapel.push(hilfsstapel.pop());
    54. }
    55. }
    56. // Zur Überprüfung Ausgabe des Ziels
    57. for (Integer ausg : ziel) {
    58. System.out.print(ausg);
    59. System.out.print(",");
    60. }
    61. }
    62. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von stelzi ()

  • Hallo kLONkRIEGER90,

    also ein Lösungsansatz für den ersten Teil (ohne Optimierung = gestrichelte Linie) würde in C++ mit Feldern (Array´s) etwa so aussehen:

    PHP-Quellcode

    1. #include <iostream>
    2. #define MAX_WAGGON 5
    3. using namespace std;
    4. int main(int argc, char **argv)
    5. { // *** Variablen, Zähler, Felder
    6. int itStart, itZiel, itHilfs, itVorschrift;
    7. itStart = itZiel = itHilfs = itVorschrift = 0;
    8. int Vorschrift[] = {4, 3, 1, 0, 2};
    9. int Zielstapel[MAX_WAGGON], Startstapel[MAX_WAGGON], Hilfsstapel[MAX_WAGGON];
    10. // *** Startstapel aufbauen
    11. cout << "Waggon-Nummer:" << endl;
    12. for (int i = 0; i < MAX_WAGGON; i++)
    13. {
    14. Zielstapel[i] = Hilfsstapel[i] = -1;
    15. Startstapel[i] = i;
    16. cout << " -> " << Startstapel[i];
    17. }
    18. cout << endl;
    19. // *** Sortieren ***
    20. do
    21. {
    22. if(Vorschrift[itVorschrift] != Startstapel[itStart])
    23. { // *** Vergleich ohne Treffer
    24. Hilfsstapel[itHilfs] = Startstapel[itStart];
    25. itHilfs++; itStart++;
    26. }
    27. else
    28. { // *** Ansonsten Treffer
    29. Zielstapel[itZiel] = Startstapel[itStart];
    30. itStart++; itZiel++; itVorschrift++;
    31. }
    32. // *** Waggone vom Hilfstapel auf den Startstapel schieben
    33. // *** vom Letzten zum ersten Waggon (LIFO)
    34. if(itStart == MAX_WAGGON)
    35. {
    36. for(int i = itHilfs; i > 0; i--)
    37. Startstapel[i] = Hilfsstapel[i];
    38. itStart = itHilfs = 0;
    39. }
    40. } while (itZiel < MAX_WAGGON);
    41. // *** Ausgabe nach dem Sortieren ***
    42. cout << "\nWaggon-Nummern nach dem sortieren: " << endl;
    43. for (int i = 0; i < MAX_WAGGON; i++)
    44. cout << " -> " << Zielstapel[i];
    45. cout << endl << endl;
    46. system("PAUSE");
    47. return 0;
    48. }
    Alles anzeigen


    Falls Du fragen hast, einfach ne PN!! :)

    Gruß,

    zeroNULL

    Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von zeroNULL ()