Autor Beitrag
Anika
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 30
Erhaltene Danke: 2

Windows 7
Delphi 7
BeitragVerfasst: So 06.01.13 15:22 
Guten Tag,
in Informatik haben wir die Hausuafgabe bekommen 50 Zahlen mit Sortieren mit Einfügen zu sortieren.
Ich denke, das ich es verstanden habe aber meine Lösung sortiert nicht richtig. Einige Zahlen sind weg, andere kommen mehrfach.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
const n = 50;
var x : array [0..n] of integer;

procedure TForm1.Sort(Sender: TObject);
var h,i,j : integer;
begin
  for i:=2 to n do begin
     h:=x[i];
     j:=i-1;
     while (j>0and (h<x[j]) do
     begin
       x[j+1]:=x[j];
       j:=j-1;
     end;
     x[j]:=h;
   end;
   for i:=1 to n do
     listbox1.items.Add(inttostr(x[i]));
end;

Ich habe bei Wikipedia und hier in der Suche schon nachgesehen. Ich finde meinen Fehler nicht. Könnte bitte jemand mal sehen, wo mein Fehler ist. Danke.

Anika
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: So 06.01.13 16:22 
Hallo,

Nach der While-Schleife ist j um 1 zu klein.
ausblenden Delphi-Quelltext
1:
2:
      end;
     x[j+1]:=h;


Als kleines Konsolenprogramm
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
{$APPTYPE CONSOLE}
const
  n = 10;
var
  x : array [1..n] of integer;

procedure Sort;
var
  h,i,j : integer;
begin
  for i:=2 to n do
    begin
    h:=x[i];
    write('Stelle:',i:3,' mit Wert ',h:3' rueckt an Stelle');
    j:=i-1;
    while (j>0and (h<x[j]) do
      begin
      x[j+1]:=x[j];
      j:=j-1;
      end;
    writeln('-> ',j+1);
     x[j+1]:=h;   //<--- dort passierte es
    end;
writeln;
  for i:=1 to n do
    Writeln(i:10,x[i]:10);
end;
var
  i : integer;
Begin
  // Belege x umgekehrt sortiert
  For i := 1 to n do
    x[i] := n-i+1;  
  Sort;
end.


Gruß Horst

Für diesen Beitrag haben gedankt: Anika
Anika Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 30
Erhaltene Danke: 2

Windows 7
Delphi 7
BeitragVerfasst: So 06.01.13 17:06 
Danke für die Hilfe.
Jetzt funktioniert es einwandfrei.

Anika