Autor Beitrag
wicked
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 29.11.08 22:10 
Hallo,

ich bin grade dabei einen einfachen Selection Sort, durch den eine Zahlenreihe sortiert werden soll zu programmieren.. leider komme ich wegen einer komischen Fehlermeldung nicht weiter.. hier mein Quelltext bzw. die Fehlermeldung:
(es können allerdings auch noch einige andere Fehler enthalten sein - ich programmiere noch nicht sehr lang..)
Vielen Dank schonmal für Hilfe!!

die Fehlermeldung: wenn ich das Programm starten will, erscheint folgendes:

[Fehler]Project1.dpr(11): Undefinierter Bezeichner: 'Form1'

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
type
  TForm1 = class(TForm)
  {Zahlen=record
    Zahl : integer;}

    E1: TEdit;
    E2: TEdit;
    E7: TEdit;
    E3: TEdit;
    E6: TEdit;
    E5: TEdit;
    E8: TEdit;
    E9: TEdit;
    E10: TEdit;
    Label1: TLabel;
    Panel1: TPanel;
    BSortieren: TButton;
    E4: TEdit;
    BLoeschen: TButton;
    BSchliessen: TButton;
    procedure BSortierenClick(Sender: TObject);
    procedure BSchliessenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    L: array of integer;
    max: integer;
  end;


implementation

{$R *.dfm}


procedure TForm1.BSchliessenClick(Sender: TObject);
begin
 Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  max:= 10;
  setlength(L,max+1);
end;



procedure TForm1.BSortierenClick(Sender: TObject);
var
  i, j     : integer;  { Zaehlvariablen }
  x, Min: integer;  { Zwischenspeicher, Minimum }
begin
    L[1]:=strtoint(e1.text);
    L[2]:=strtoint(e2.text);
    L[3]:=strtoint(e3.text);
    L[4]:=strtoint(e4.text);
    L[5]:=strtoint(e5.text);
    L[6]:=strtoint(e6.text);
    L[7]:=strtoint(e7.text);
    L[8]:=strtoint(e8.text);
    L[9]:=strtoint(e9.text);
    L[10]:=strtoint(e10.text);

  for i := 0 to max do begin
    Min := i;
    for j := i to max+1 do                   
                                           
      if L[j] < L[Min] then
     begin
      Min := j;

      x:= L[Min];
      L[Min]:= L[i];
      L[i]:= x;
     end;

  e1.text:=inttostr(L[1]);
  e2.text:=inttostr(L[2]);
  e3.text:=inttostr(L[3]);
  e4.text:=inttostr(L[4]);
  e5.text:=inttostr(L[5]);
  e6.text:=inttostr(L[6]);
  e7.text:=inttostr(L[7]);
  e8.text:=inttostr(L[8]);
  e9.text:=inttostr(L[9]);
  e10.text:=inttostr(L[10]);


  end;


end;


end.


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 29.11.08 22:33 
Du hast in unit1.pas diese Zeilen vor implementation gelöscht... :roll:
ausblenden Delphi-Quelltext
1:
2:
var
  Form1: TForm1;
wicked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 29.11.08 23:42 
Danke für die Hilfe!!
Das Programm läuft jetzt zwar, allerdings muss ich komischerweise immer mehrmals ( in der Regel 3mal) auf den Button "Sortieren" drücken, bis die Zahlen vollständig sortiert sind.. sie sind dann allerdings auch richtig sortiert (immerhin^^)
kann mir vielleicht jemand sagen, woran das liegen könnte? Ich verstehe es leider nicht..
Danke schonmal!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 29.11.08 23:53 
Naja, du hast 10 Zahlen, hast aber im Array Platz für 11 und sortierst ab Index 0, dabei gehen deine Zahlen erst bei Index 1 los...

Ein Array fängt bei 0 an zu zählen und die Länge musst du auch auf 10 setzen, wenn du 10 Zahlen hast, und nicht auf 10+1...
wicked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 30.11.08 00:32 
Ich verstehe schon was du meinst, aber ich kann es irgendwie nicht umsetzen.. welche Änderung muss ich denn konkret im Quelltext vornehmen?
Ich habe es zum Beispiel mal mit

ausblenden Quelltext
1:
2:
3:
 for i := 0 to max-1 do begin
    Min := i;
    for j := i to max-1 do



versucht, aber es hat sich nichts verändert..

Danke für Hilfe!
wicked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 30.11.08 00:34 
achso.. und noch eine Frage:

Kann man dieses Teil hier verkürzt durch eine Schleife darstellen?

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
L[0]:=strtoint(e1.text);
L[1]:=strtoint(e2.text);
L[2]:=strtoint(e3.text);
L[3]:=strtoint(e4.text);
L[4]:=strtoint(e5.text);
L[5]:=strtoint(e6.text);
L[6]:=strtoint(e7.text);
L[7]:=strtoint(e8.text);
L[8]:=strtoint(e9.text);
L[9]:=strtoint(e10.text);


Danke!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 30.11.08 00:35 
Dein SetLength setzt die Länge auf 11 statt 10 (warum steht das SetLength überhaupt im FormCreate und nicht dort wo du das Array füllst, außerdem könnte die variable auch lokal sein, wenn du das nicht trennen würdest) und mit
ausblenden Delphi-Quelltext
1:
L[1]:=strtoint(e1.text);					
schreibst du die erste Zahl in das zweite Feld des Arrays.

Und zu deiner anderen Frage, die eigentlich in ein neues Thema gehört, da schau dir mal die Funktion FindComponent an.
wicked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 30.11.08 00:51 
Ich habe jetzt ein bisschen was geändert, aber es funktioniert leider noch immer nicht.. kannst du nochmal drüberschauen?

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormCreate(Sender: TObject);
begin
  max:= 10;
  setlength(L,max-1);
end;


ausblenden volle Höhe 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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm1.BSortierenClick(Sender: TObject);
var
  i, j     : integer;  
  x, min: integer;  
begin
    L[0]:=strtoint(e1.text);
    L[1]:=strtoint(e2.text);
    L[2]:=strtoint(e3.text);
    L[3]:=strtoint(e4.text);
    L[4]:=strtoint(e5.text);
    L[5]:=strtoint(e6.text);
    L[6]:=strtoint(e7.text);
    L[7]:=strtoint(e8.text);
    L[8]:=strtoint(e9.text);
    L[9]:=strtoint(e10.text);

  for i := 0 to max-1 do begin
    Min := i;
       for j := i to max-1 do 
        if L[j] < L[Min] then
          begin
           Min := j;
           if min>i then
        
            begin
             x:= L[Min];
             L[Min]:= L[i];
             L[i]:= x;

            end;

      end;

  e1.text:=inttostr(L[0]);
  e2.text:=inttostr(L[1]);
  e3.text:=inttostr(L[2]);
  e4.text:=inttostr(L[3]);
  e5.text:=inttostr(L[4]);
  e6.text:=inttostr(L[5]);
  e7.text:=inttostr(L[6]);
  e8.text:=inttostr(L[7]);
  e9.text:=inttostr(L[8]);
  e10.text:=inttostr(L[9]);

end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 30.11.08 01:19 
Warum setzt du die Länge denn jetzt auf 9? Erst Länge 11 für 10 Einträge, jetzt 9, wie wäre es mit 10...

Und was den Algorithmus an sich angeht, schau dir mal bei Wikipedia das C# Beispiel an, das ist praktisch identisch.
de.wikipedia.org/wiki/Selectionsort#C.23
wicked Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 30.11.08 10:47 
ja stimmt, das war sinnlos..

aber ich habe jetzt zum beispiel mit L[0] angefangen, dass jeder platz genutzt wird.. deshalb habe ich das dann auch unten geändert.. war das sinnvoll? leider sortiert sich die zahlenreihe noch immer nicht nach einem klick..

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 for i := 0 to max-1 do begin
    Min := i;
    for j := i+1 to max-1 do                   
      if L[j] < L[Min] then
      begin
      Min := j;
        if min>i then
        begin
        x:= L[Min];
        L[Min]:= L[i];
        L[i]:= x;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 30.11.08 11:46 
user profile iconwicked hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 for i := 0 to max-1 do begin
    Min := i;
    for j := i+1 to max-1 do                   
      if L[j] < L[Min] then
      begin
      Min := j;
        if min>i then
        begin
        x:= L[Min];
        L[Min]:= L[i];
        L[i]:= x;
Die markierten Zeilen kommen im C# Code nicht vor. ;-)