Autor Beitrag
ron007
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 25.10.07 19:11 
Hy,
ich soll ein Programm erstellen, das mit einen Button zufällige Zahlen erstellen und keine doppelten erscheinen lässt (mit array gemacht und funktioniert) und mit einem Button sollen diese Zahlen mit Selection Sort sortiert werden. Nur leider erscheinen bei mir in allen Feldern nur Nullen und ich finde den Fehler nicht. Hoffe mit kann einer helfen dabei, das das Programm endlich funktioniert.

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1: TForm1;
  a: Array[1..6of integer;
  zahl : Array [1..6of integer;
  i,j : integer;
  d:integer;

implementation

{$R *.DFM}

// Zufallzahlen

procedure TForm1.Button1Click(Sender: TObject);
var neu : boolean;
begin
  randomize;
  for i:=1 to 6 do
  begin
    repeat
      neu:=true;
      a [i]:=random(60)+1;
      for j:=1 to i-1 do 
  if a[j]=a[i] 
  then 
   neu:=false;
    until neu=true;    

     edit1.text:=inttostr(a[1]);
     edit2.text:=inttostr(a[2]);
     edit3.text:=inttostr(a[3]);
     edit4.text:=inttostr(a[4]);
     edit5.text:=inttostr(a[5]);
     edit6.text:=inttostr(a[6]);
  end;

  
end;

// Sortieren

procedure TForm1.Button2Click(Sender: TObject);
var iMax, Max : Integer;
begin

for i := 6 downto 2 do
  begin
   iMax := i;
   Max := zahl [i];
   for j := 1 to (i-1do
    if zahl [j] > Max
     then
      begin
       iMax := j;
       Max := zahl [j];
      end;
    zahl [iMax] := zahl [i];
    zahl [i] := Max;

  end;
edit1.text := IntToStr (zahl[1]);
edit2.text := IntToStr (zahl[2]);
edit3.text := IntToStr (zahl[3]);
edit4.text := IntToStr (zahl[4]);
edit5.text := IntToStr (zahl[5]);
edit6.text := IntToStr (zahl[6]);
end;


end.



Gruß
ron
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Do 25.10.07 21:08 
Hallo!

In der Methode Button2Click greifst Du auf das Array Zahl zu ohne vorher die zufälligen 6 Nummern aus den TEdits ins Array zu kopieren. Und da Zahl ein globales Array of integer ist wird der Inhalt genullt.
Watt kann man machen? In der Methode Button1Click die Zufallszahlen nicht nur in die TEdits schreiben sondern gleichzeitig auch ins Array Zahl. Alternativ in der Sortier-Methode die Inhalte der TEdits ins zu sortierende Array kopieren.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
ron007 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 26.10.07 14:27 
danke für die antwort.
vom dem was du gesagt hast verstehe ich es auch, aber habe leider keine Ahnung wie man so was macht. kannst du mir das bitte mal erklären wie man die Zufallszahlen gleichzeitig in array zahl schreibt?

gruß
ron
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 26.10.07 14:43 
Moin und :welcome: im Forum!

Einfachste Lösung: lass das Array a[]weg und nimm nur zahl[], dann sollte es auch klappen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
ron007 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 27.10.07 10:18 
hy,
habe so gemacht wie Narses, es gesagt hat aba es funktioniert immer noch nicht werden imma noch nur nullen angezeigt. habe noch den quelltext rein gemacht, vll habe ich ja was falsch verstanden.

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen}
  public
    { Public-Deklarationen}
  end;

var
  Form1: TForm1;
  zahl : Array [1..6of integer;
  i,j : integer;
  d:integer;

implementation

{$R *.DFM}

// Zufallzahlen

procedure TForm1.Button1Click(Sender: TObject);
var neu : boolean;
begin
  randomize;
  for i:=1 to 6 do
  begin
    repeat
      neu:=true;
      zahl [i]:=random(60)+1;
      for j:=1 to i-1 do 
  if zahl[j]=zahl[i] 
  then 
   neu:=false;
    until neu=true;    

     edit1.text:=inttostr(zahl[1]);
     edit2.text:=inttostr(zahl[2]);
     edit3.text:=inttostr(zahl[3]);
     edit4.text:=inttostr(zahl[4]);
     edit5.text:=inttostr(zahl[5]);
     edit6.text:=inttostr(zahl[6]);
  end;

  
end;

// Sortieren

procedure TForm1.Button2Click(Sender: TObject);
var iMax, Max : Integer;
begin

for i := 6 downto 2 do
  begin
   iMax := i;
   Max := zahl [i];
   for j := 1 to (i-1do
    if zahl [j] > Max
     then
      begin
       iMax := j;
       Max := zahl [j];
      end;
    zahl [iMax] := zahl [i];
    zahl [i] := Max;

  end;
edit1.text := IntToStr (zahl[1]);
edit2.text := IntToStr (zahl[2]);
edit3.text := IntToStr (zahl[3]);
edit4.text := IntToStr (zahl[4]);
edit5.text := IntToStr (zahl[5]);
edit6.text := IntToStr (zahl[6]);
end;


end.



Gruß
ron
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Sa 27.10.07 14:10 
Ich habe es mal eben nachgebaut, mit Deinem Code, und bei mir funktioniert's.
Drückst Du auch zuerst den Button1 und danch den Button2?

Edit: formatierten und aufgeräumten Code angehängt
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    zahl : Array [1..6of integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ Zufallszahlen erzeugen }
procedure TForm1.Button1Click(Sender: TObject);
var
  neu : boolean;
  i,j : integer;
begin
  randomize;
  for i:=1 to 6 do
    repeat
      neu:=true;
      zahl [i]:=random(60)+1;
      for j:=1 to i-1 do
        if zahl[j]=zahl[i] then
          neu:=false;  
    until neu; // WICHTIG!!! NIEMALS einen Boolean-Wert auf True oder False überprüfen!!!

  edit1.text:=inttostr(zahl[1]);
  edit2.text:=inttostr(zahl[2]);
  edit3.text:=inttostr(zahl[3]);
  edit4.text:=inttostr(zahl[4]);
  edit5.text:=inttostr(zahl[5]);
  edit6.text:=inttostr(zahl[6]);
end;

{ Selection-Sort }
procedure TForm1.Button2Click(Sender: TObject);
var
  iMax, Max : Integer;
  i,j : integer;
begin
  for i := 6 downto 2 do
    begin
      iMax := i;
      Max := zahl [i];
      for j := 1 to (i-1do
        if zahl [j] > Max then
          begin
            iMax := j;
            Max := zahl [j];
          end;
      zahl [iMax] := zahl [i];
      zahl [i] := Max;
    end;

  edit1.text := IntToStr (zahl[1]);
  edit2.text := IntToStr (zahl[2]);
  edit3.text := IntToStr (zahl[3]);
  edit4.text := IntToStr (zahl[4]);
  edit5.text := IntToStr (zahl[5]);
  edit6.text := IntToStr (zahl[6]);
end;

end.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]


Zuletzt bearbeitet von Dunkel am Sa 27.10.07 14:43, insgesamt 1-mal bearbeitet
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.10.07 14:15 
nur mal einen hinweis, wenn du deinen code, ordentlich formatieren würdest, so kannst du auch viel schneller fehler finden....

PS: IMHO ist dein code eine zumutung, also mal vernünftig formatieren!
ron007 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 27.10.07 14:42 
user profile iconDunkel hat folgendes geschrieben:
Ich habe es mal eben nachgebaut, mit Deinem Code, und bei mir funktioniert's.
Drückst Du auch zuerst den Button1 und danch den Button2?


ja, ich drücke erst Button 1, damir man die Zahlen sieht und dann drück ich Button 2, aber es kommen halt die Nullen.

Gruß
ron
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Sa 27.10.07 14:46 
user profile iconron007 hat folgendes geschrieben:

ja, ich drücke erst Button 1, damir man die Zahlen sieht und dann drück ich Button 2, aber es kommen halt die Nullen.

Gruß
ron

Tja, dann weiß ich auch nicht weiter. Wie schon geschrieben, bei mir funktioniert's.
Probier es vielleicht mal mit dem Code aus meinem letzten Beitrag-Edit.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
ron007 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 27.10.07 16:02 
hy,
so habe es hin bekommen und weiß erst wo mein Fehler war. Bis jetzt ging ich immer davon aus die Projekt.exe immer auf die Unit1.pas zugreift, wemm man sie startet. Denn ich habe die *.pas Datei immer mit dem Editor geändert, da wir in der Schule ein älteres Delphi haben, welches nicht mit den Neuerungen der 7er Version, die ich zu Hause habe, klar kommt.

Gruß
ron

Moderiert von user profile iconNarses: 2. Frage entfernt.