Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Pascal, Basic und andere nicht aufgelistete
Antworten
Punkt000
Beiträge: 2
Registriert: Do Dez 09, 2010 4:31 pm

Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Beitrag von Punkt000 » Do Dez 09, 2010 5:46 pm

Hallo zusammen,

wir arbeiten derzeit in der Schule mit PASCAL und die Hausaufgabe ist in eigenen Worten das Sortieren durch einfügen zu erklären. Schon passiert ;) Nun möchte ich gerne ne Zusatzaufgabe machen, also schonmal eine Prozedur dafür aufbauen (nit zum schleimen sondern ich liebe die Informatik ^^) und bräuchte dort mal Hilfe.

Ich habe ein Taschenbuch der Algorithmen (von der TU-Dortmund) und dort ist dies eigentlich ganz schön beschrieben, allerdings habe ich noch ein Problem.

Es geht darum, mit dem Sortieren per Einfügen ein Regal mit Büchern zu ordnen. Jedes Buch hat eine Zahl. Nun ist hier ein kleiner Code im Buch der soweit ich das erkenne in C++ geschrieben ist:

Code: Alles auswählen

1 Gegeben: A:Feld mit n Einträgen;
2 for i:=2 to n do
   // ordne Buch an Position i durch Verschiebung ein
3 Hand:=A[j]; //nimm aktuelles Buch in die Hand
4 j:=i-1;
   // solange korrekte Position des aktuellen Buchs noch nicht erreicht
5 while j>=1 annd A[j]>Hand do
6 A[j+1]:=A[j]; // schiebe Buch an die Position j nach rechts
7 j:=j-1;
8 endwhile
9 A[j]:=Hand // füge aktuelles Buch an der richtigen Stelle ein
10 endfor
Die Zahlen 1-10 soll wohl die Zeile darstellen ^^ achja und >= bedeute größer oder gleich, weiss nicht wie ich das Zeichen mit ALT+Tastenkombi kriege oder ob es überhaupt geht ^^

So, nun habe ich es soweit in Pascal

Code: Alles auswählen

PROGRAM hausaufgabe;
CONS n=5 (*den Wert 5 hab ich mir jetzt einfach mal so genommen*);
VAR A:ARRAY [1..n] OF INTEGER;
       hand,i,j:INTEGER;

PROCEDURE sort;
BEGIN
i:=2;
hand:=A[i];
j:=i-1;
WHILE j>=1 AND A[j]>hand DO
BEGIN
A[j+1]:=A[j];
j:=j-1;
END
A[j]:=hand;
END;

BEGIN
sort;
END.
Wenn ich nun den Programmablauf durchgehe habe ich aber doch etwas vergessen oder nicht? Ich habe mir hier 5 Zettel hingelegt mit Zahlen von 1-5 als Bücher in der Reichenfolge 23145. Laut meinem Programm nehme ich Buch 3 in die Hand, solang 1 > oder = 1 ist und Buch 2 > als das Buch in der Hand (Buch 3) ist mache [...] und dann steht ja unten nach der WHILE Schleife dass ich das Buch was ich in der Hand habe an der Stelle 1 wo aber noch Buch 2 ist da ich es ja nicht verschiebe hintuhen muss. Da ist ja ein fehler offensichtlich. Hat vielleicht jemand eine Idee zum vervollständigen? Mir fehlt grad ein Faden...ich komm da nicht weiter und will das gerne morgen abgeben :D

Einzige Idee dir mir grad noch kommt wäre:

Code: Alles auswählen

PROGRAM hausaufgaben_aufgabeb;
CONS n=20;
VAR A:ARRAY [1..n] OF INTEGER;
j,i,:INTEGER;

PROCEDURE insertion_sort;
BEGIN
j:=1;
i:=2;
REPEAT
  IF A[i]<A[j]
  THEN BEGIN
  REPEAT
    IF A[i]<A[j]
    THEN BEGIN
	hand:=A[j];
    A[j]:=A[i];
    A[i]:=hand
    j:=j-1;
    i:=i-1;
	END
	ELSE BEGIN
	j=0;
	i=1;
	END
  UNTIL j=0 AND i=1;
  END
  j:=j+1;
  i:=i+1;
UNTIL j=n-1 AND i=n;
END;

BEGIN
insertion_sort;
END.
Habe das hier mit Zettel durchgespielt und ich finde es kommt hin. Vll mal euer Statement ^^ Bin grad bissi sehr happy weil ich den Thread eig. schon offen machen wollte grad aber die Idee bekommen hatte ;) Sagt mir pls dass ihr bei meinem Programm auch das richtige rauskriegt :D

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Beitrag von cloidnerux » Do Dez 09, 2010 8:52 pm

Tag und Willkommen im Forum.
Es geht darum, mit dem Sortieren per Einfügen ein Regal mit Büchern zu ordnen. Jedes Buch hat eine Zahl. Nun ist hier ein kleiner Code im Buch der soweit ich das erkenne in C++ geschrieben ist:
Das sieht für mich eher nach PASCAL oder DELPHI(fast das gleiche) Pseudo Code aus^^
achja und >= bedeute größer oder gleich, weiss nicht wie ich das Zeichen mit ALT+Tastenkombi kriege oder ob es überhaupt geht ^^
Für die, die das Zeichen nicht auf ihrer Tastatur haben, es setzt sich aus dem Größer-Als Zeichen rechts neben der Shift-Taste(Dieselbige auch drücken) und dem "=" zusammen ;)

So wie ich den Algorithmus verstanden habe, gehst du einfach dein Array entlang und Prüfst das aktuelle Buch mit dem nächsten. Stehen beide Logisch richtig(Links kleiner als rechts) dann prüfst du die nächsten 2, ansonsten schiebst du das Buch Rechts 1 nach Links und Prüfst dann in einer Extra schleife das Verschobene Buch so lange mit seinen Vorgängen und Verschiebst es, bis es an einer Logisch richtigen stelle steht.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Beitrag von Xin » Do Dez 09, 2010 11:38 pm

Punkt000 hat geschrieben:Hallo zusammen,
Hallo, ich hatte Deinen Thread eben schon gelesen, aber musste direkt wieder los. Also gibt's erst jetzt ein "Willkommen im Forum!".
Punkt000 hat geschrieben:wir arbeiten derzeit in der Schule mit PASCAL und die Hausaufgabe ist in eigenen Worten das Sortieren durch einfügen zu erklären. Schon passiert ;)
Und da hast Du den Algorithmus erklärt, den Du hier als Pseudocode geschrieben hast?
Punkt000 hat geschrieben:Nun möchte ich gerne ne Zusatzaufgabe machen, also schonmal eine Prozedur dafür aufbauen (nit zum schleimen sondern ich liebe die Informatik ^^) und bräuchte dort mal Hilfe.
Dann schauen wir mal.
Punkt000 hat geschrieben:Ich habe ein Taschenbuch der Algorithmen (von der TU-Dortmund) und dort ist dies eigentlich ganz schön beschrieben, allerdings habe ich noch ein Problem.

Nun ist hier ein kleiner Code im Buch der soweit ich das erkenne in C++ geschrieben ist:
Sieht eher nach Pseudocode aus. C++ sieht anders aus, aber es geht ja nur um das Verständnis des Algorithmus und nicht um die Sprache.
In jedem Fall ist er nicht eingerückt und deswegen schwer zu lesen. Weiterhin wird j benutzt, aber nie initialisiert, also gehe ich mal dreist davon aus, dass er nicht ganz sauber abgeschrieben wurde ohne da jetzt Zeile für Zeile durchzugehen.
Punkt000 hat geschrieben:

Code: Alles auswählen

PROGRAM hausaufgabe;
CONS n=5 (*den Wert 5 hab ich mir jetzt einfach mal so genommen*);
VAR A:ARRAY [1..n] OF INTEGER;
       hand,i,j:INTEGER;

PROCEDURE sort;
BEGIN
  i:=2;
  hand:=A[i];
  j:=i-1;
  WHILE j>=1 AND A[j]>hand DO
  BEGIN
    A[j+1]:=A[j];
    j:=j-1;
  END
  A[j]:=hand;
END;

BEGIN
sort;
END.
Wenn ich nun den Programmablauf durchgehe habe ich aber doch etwas vergessen oder nicht? Ich habe mir hier 5 Zettel hingelegt mit Zahlen von 1-5 als Bücher in der Reichenfolge 23145. Laut meinem Programm nehme ich Buch 3 in die Hand, solang 1 > oder = 1 ist und Buch 2 > als das Buch in der Hand (Buch 3) ist mache [...] und dann steht ja unten nach der WHILE Schleife dass ich das Buch was ich in der Hand habe an der Stelle 1 wo aber noch Buch 2 ist da ich es ja nicht verschiebe hintuhen muss. Da ist ja ein fehler offensichtlich. Hat vielleicht jemand eine Idee zum vervollständigen? Mir fehlt grad ein Faden...ich komm da nicht weiter und will das gerne morgen abgeben :D
Das erste, was ich da sehe ist, dass j von i abhängig ist und i sich nie verändert. Im Pseudocode läuft i mittels einer for-Schleife von 2 bis n - hier ist i immer 2 => ja, da fehlt noch was. ^^
Punkt000 hat geschrieben: Einzige Idee dir mir grad noch kommt wäre:

Code: Alles auswählen

PROGRAM hausaufgaben_aufgabeb;
CONS n=20;
VAR A:ARRAY [1..n] OF INTEGER;
j,i,:INTEGER;

PROCEDURE insertion_sort;
BEGIN
  j:=1;
  i:=2;
  REPEAT
    IF A[i]<A[j] THEN 
    BEGIN
      REPEAT
        IF A[i]<A[j] THEN 
        BEGIN
          hand:=A[j];
          A[j]:=A[i];
          A[i]:=hand
          j:=j-1;
          i:=i-1;
        END
        ELSE 
        BEGIN
          j=0;
          i=1;
        END
      UNTIL j=0 AND i=1;
    END
    j:=j+1;
    i:=i+1;
  UNTIL j=n-1 AND i=n;
END;

BEGIN
  insertion_sort;
END.
Habe das hier mit Zettel durchgespielt und ich finde es kommt hin. Vll mal euer Statement ^^ Bin grad bissi sehr happy weil ich den Thread eig. schon offen machen wollte grad aber die Idee bekommen hatte ;) Sagt mir pls dass ihr bei meinem Programm auch das richtige rauskriegt :D
Ich weiß es ja nicht, aber bist Du Dir sicher, dass das unter der Überschrift "Insertion Sort" steht...? ^^

Insertion heißt "Einfügung" - Insertion Sort fügt etwas sortiert irgendwo ein. Also nimmt irgendwas irgendwo her und fügt es sortiert irgendwo anders ein. Hier wird nix eingefügt. Hier werden zwei nebeneinanderliegende Elemente verglichen und ggfs. vertauscht. Das ist ein Bubble-Sort.

Was mich daran erinnert, dass wir unbedingt mehr Algorithmen ins Wiki bringen müssen, zum Beispiel Insertion Sort... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Punkt000
Beiträge: 2
Registriert: Do Dez 09, 2010 4:31 pm

Re: Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Beitrag von Punkt000 » Fr Dez 10, 2010 7:33 am

Hmm joa, jetzt wo du es sagst mit dem Bubblesort ... ^^

Okay also der Pseudocode hab ich halt mit gerechnet dass es C++ ist dachte hab da was gelesen gehabt dass die Codes in C++ geschrieben sind aber nunja ^^

Ich werde später nach der Schule mal die Seiten einscannen ^^ dass interessiert mich jetzt schon wie man das umsetzt ^^ habe an meiner Variante 2 1/2 Stunden gesessen xD

Daher sag ich mal bis naher ;-)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sortieren durch einfügen ... Übersetzungshilfe C++ in Pascal

Beitrag von Xin » Fr Dez 10, 2010 11:00 am

Punkt000 hat geschrieben:Hmm joa, jetzt wo du es sagst mit dem Bubblesort ... ^^

Okay also der Pseudocode hab ich halt mit gerechnet dass es C++ ist dachte hab da was gelesen gehabt dass die Codes in C++ geschrieben sind aber nunja ^^
Der Link, den ich zuvor zum Bubblesort dazugepackt habe, zeigt Dir den Algorithmis in C/C++.
Punkt000 hat geschrieben:Ich werde später nach der Schule mal die Seiten einscannen ^^ dass interessiert mich jetzt schon wie man das umsetzt ^^ habe an meiner Variante 2 1/2 Stunden gesessen xD
Da ist ja auch nichts schlimmes dran - im Gegenteil, wenn Du am Ende dieser 2 1/2 Stunden verstanden hast, was Du da tust, dann ist das sehr gut investierte Zeit - selbst wenn es 2 1/2 Tage gedauert hätte.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten