Autor Beitrag
FlyMan
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.05.06 13:33 
Hallo!
Wir sollen im Informatikunterrricht ein Programm erstellen das folgendermaßen aufgebaut ist:
Eine StringGrid Tabelle mit 100 Spalten soll durch eine Random Funktion über einen Button mit Zufallszahlen gefüllt werden. Über einen weiteren Button sollen die Zahlen mit Bubblesort sortiert werden (1-99) und über einen anderen Button invertiert (99-1) werden. Schließlich soll noch ein Button zum löschen des Inhaltes vorhanden sein.
Wer kann mir da weiterhelfen?
Vielen Dank im Vorraus.
Gruß
FlyMan


Zuletzt bearbeitet von FlyMan am Do 11.05.06 15:27, insgesamt 1-mal bearbeitet
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 08.05.06 13:37 
Was hast du denn bis jetzt gemacht, bzw. wo hast du Probleme ?
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.05.06 13:49 
Ich habe das Layout fertig. Weiterhin bekomm ich es hin, das in eine Spalte des StringGrids eine Zufallszahl geschrieben wird, die dann über den anderen Button gelöscht wird.
Über eine Schleife wäre es sicherlich am einfachsten, aber irgendwie bekomme ich das nur für einzelne Spalten hin...
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 08.05.06 13:52 
Poste doch mal deinen Quellcode, womit du eine Spalte füllst.
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.05.06 13:57 
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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    b_ende: TButton;
    b_sortieren: TButton;
    b_erzeugen: TButton;
    b_invertieren: TButton;
    b_loeschen: TButton;
    procedure b_endeClick(Sender: TObject);
    procedure b_erzeugenClick(Sender: TObject);
    procedure b_loeschenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.b_endeClick(Sender: TObject);
begin
close;
end;

procedure TForm1.b_erzeugenClick(Sender: TObject);
begin
StringGrid1.Cells[1,1]:=random(99)+1;         Also so oder ähnlich, da ist irgendwo der Wurm drin.

end;

procedure TForm1.b_loeschenClick(Sender: TObject);
begin
StringGrid1.cells[1,0]:=' ';
end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 08.05.06 14:03 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.b_erzeugenClick(Sender: TObject);
begin
// Schleife mit 100 Durchläufen
 for Spalte := 0 to 99 do
  begin
    StringGrid1.Cells[Spalte,0]:=inttostr(random(99)+1); 
    //Der Inhalt der Spalte muss vom Typ "String" sein (deshalb STRINGGRID),
    //daher noch mit "inttostr" umwandeln.
  end;
end;
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 08.05.06 14:25 
Also, da du noch Sortierung reinbringen musst, sollte man die Daten und die Darstellung trennen.
Mein Vorschlag ist, folgende Prozeduren zu schreiben:

ErzeugeArray(anzahlElem:Integer);
SortiereArray(Richtung:Boolean);
FülleGrid;
LeereGrid;

Da den entsprechenden Code rein und an der richtigen Stelle aufrufen.
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.05.06 16:08 
Ich hab das Programm jetzt soweit, dass ich die Spalten mit Zufallszahlen füllen kann.
Wir sollen das mit bubblesort sortieren und invertieren. Dazu haben wir zwar auch Unterlagen bekommen,
die allerdings schwer verständlich sind.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mo 08.05.06 16:30 
ausblenden 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:
procedure TForm1.sort(Richtung : Boolean);
var
  Index: Integer;
  Lauf: Integer;
  x: Byte;
begin
  for Lauf := 1 to 98 do
    for Index := 99 downto Lauf do
    if Richtung then // (Richtung = true)
    begin
      if aZahlen[Index] < aZahlen[Index - 1then
      begin
        x := aZahlen[Index];
        aZahlen[Index] := aZahlen[Index - 1];
        aZahlen[Index - 1] := x;
      end;
    end
    else // (Richtung = false)
    begin
      //wenn Elemnt größer als vorhergehendes Element ...
      if aZahlen[Index] > aZahlen[Index - 1then
      begin
        // ... dann tauschen
        x := aZahlen[Index]; //Element in x zwischenspeichern
        aZahlen[Index] := aZahlen[Index - 1]; //Wert des vorherigen Elements in Element speichern
        aZahlen[Index - 1] := x; //Wert von x (=ursprüngliches Element) in vorheriges Elemnt speichern
      end;
    end;
end;


Aufruf mit sort(true) //Bubblesort vorwärts
oder sort(false) //Bubblesort rückwärts (invertieren)

statt aZahlen schreibst du den Namen deines Arrays


Edit :
Bubblesort : Es werden zwei Elemente verglichen und wenn nötig ausgetauscht.
mit dem Parameter "Richtung" wird entschieden, ob auf- oder abwärts sortiert werden soll


Zuletzt bearbeitet von azubi_20 am Di 09.05.06 09:44, insgesamt 1-mal bearbeitet
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 08.05.06 19:48 
Moin,
könntest du bitte mal deinen kompletten Quelltext des Programms posten. Bei einem kompletten Quelltext kann ich die Thematik besser verstehen.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Di 09.05.06 09:36 
Ich glaub eher du kannst dann besser copy and paste machen... :roll:
Also du deklarierst ein Array, das 100 Integer-Werte aufnehmen kann.
In einer Schleife kannst du jedem Element eine Zufallszahl zuordnen.
In einer weiteren Schleife kannst du das Grid mit den Werten des Arrays füllen.
Sortieren : s.o.
Nach dem Sortieren musst du natürlich dein Grid neu befüllen, damit man das Ergebnis auch sieht.
Wenn du was nicht verstehst, kann ich gerne versuchen, es dir zu erklären, aber komplett fertigen Code gibts nicht. 8)
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.05.06 14:31 
So ich hab das versucht mit Copy und Paste. Aber was ein Array ist habe ich nicht rausgefunden, beschäftige mich auch noch nicht so lange mit Delphi.
Mein aktueller Quelltext:

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

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    b_erzeugen: TButton;
    b_sortieren: TButton;
    b_invertieren: TButton;
    b_loeschen: TButton;
    b_close: TButton;
    procedure b_closeClick(Sender: TObject);
    procedure b_erzeugenClick(Sender: TObject);
    procedure b_loeschenClick(Sender: TObject);
    procedure b_sortierenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.b_closeClick(Sender: TObject);
begin
close;
end;

procedure TForm1.b_erzeugenClick(Sender: TObject);
var i:integer;
begin
for i := 0 to 99 do
    StringGrid1.Cells[i,0]:=inttostr(random(99)+1);

end;

procedure TForm1.b_loeschenClick(Sender: TObject);
begin
StringGrid1.cells[0,0]:=' ';
end;

procedure TForm1.b_sortierenClick(Sender: TObject);
var
  Index: Integer;  
  Lauf: Integer;  
  x: Byte;  
begin  
  for Lauf := 1 to 98 do  
    for Index := 99 downto Lauf do  
    if Richtung then
    begin
      if aZahlen[Index] < aZahlen[Index - 1then
      begin  
        x := aZahlen[Index];  
        aZahlen[Index] := aZahlen[Index - 1];  
        aZahlen[Index - 1] := x;  
      end;  
    end  
    else
    begin
        if aZahlen[Index] > aZahlen[Index - 1then
        begin
        x := aZahlen[Index];
        aZahlen[Index] := aZahlen[Index - 1];
        aZahlen[Index - 1] := x;
      end;  
    end;  

end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 10.05.06 14:50 
OK, das mit dem Copy'n'Paste war eher ein ironischer Hinweis, das ich dir nichts fertiges gebe, weil du dann nichts lernst. :roll:

Also zum Thema :
Ein Array ist sowas wie eine Tabelle.


Bisher erzeugst du die Zahlen direkt ins Grid, sie werden nicht gespeichert, du kannst also nicht darauf zugreifen und auch nicht sortieren.
Du musst trennen zwischen den Daten (gespeichert im Array) und der Darstellung (im Stringgrid).
Das sieht dann so aus : Du erzeugst eine Tabelle mit 100 Zahlen (=Array). Dann stellst du diese Zahlen in dein Grid.
Dein Array kannst du dann sortieren und anschliessend wieder im Stringgrid darstellen.
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 10.05.06 14:58 
Heißt das, dass das Array im Hintergrund arbeitet und nicht in Form1 erzeugt werden muss?
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 10.05.06 15:16 
Naja, so ähnlich...
ein Array ist keine sichtbare Komponente (wie ein stringgrid) sonder eher ein Datentyp wie z.B. Integer. In einer Variable vom Typ Integer kannst du aber nur einen Wert speichern - in einem Array kannst du mehrere Werte des gleichen Datentyps speichern.

Beispiel für Integer:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//...
var
 i : integer;
begin
 i := 12;
end;
/..



Beispiel für Array of Integer :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var  
 a : Array[0..99Of Integer; // 100 Elemnte, die Integer-Werte aufnehmen können
begin
  a[0]:= 15// 1. Element hat den Index 0 und den Wert 15
  a[1]:= 23// 2. Element hat den Index 1 und den Wert 23
  a[2]:= 63// 3. Element hat den Index 2 und den Wert 63
  //... usw
end;
DaKirsche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
BeitragVerfasst: Mi 10.05.06 15:38 
Etwas ähnliches mussten wir auch mal schreiben während meiner Schulzeit...
Die Zahlen werden ebenfalls in einem Stringgrid ausgegeben und dann Sortiert...

Musst mal schauen, ob du was mit dem Quellcode anfangen kannst...
Mfg
Einloggen, um Attachments anzusehen!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 10.05.06 17:21 
Hallo,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image klicken und den Titel ändern. Dank Dir!

Viele Grüße,
Tino
FlyMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 11.05.06 15:34 
Ja hab ich geändert....
Ich werd mir die Posts mal anschauen uns sehen was sich draus machen lässt.