Autor Beitrag
ridom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
BeitragVerfasst: Mi 29.09.10 18:18 
Hi leute habe als Schulaufgabe auf in ein Stringgrid über ein array zufallszahlen hinein zu schreiben das ganze ist ja kein Problem
jetzt soll ich aber diese zufallszahlen rotieren lassen sprich alle zahlen werden um 1 nach links gerückt und die vorderste hinten angehongen
hier eine Bsp:

erste zeile:

>> zufallszahlen
1 5 3 4

zweite zeile:

>> rotiert
5 3 4 1

das rotieren wollten wir jetzt so umsetzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  for i := 1 to 10 do
        begin
          zufall[i-1]:=zufall[i];
          stringgrid1.Cells[i,2]:=inttostr(zufall[i]);
          zufall[i]:=zufall[k];
        end;
  stringgrid1.Cells[10,2]:=inttostr(zufall[k]);

_________________
Gestern standen wir noch kurz vor dem Abgrund...
...heute sind wir einen schritt weiter
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 29.09.10 18:41 
Du hast zwar nicht geschrieben, welches Problem dabei auftritt, aber ich denke mal, Du hast nicht berücksichtigt, daß Du beim Rotieren / Vertauschen eine "Zwischenvariable" benötigst.

Zur Verdeutlichung:

Der Inhalt der Variablen A mit dem Wert 1 soll mit dem Inhalt der Variablen B mit dem Wert 2 vertauscht werden.
ausblenden Delphi-Quelltext
1:
2:
A := B;
B := A;

Danach haben beide Variablen aber den gleichen Inhalt.
So gehts:
ausblenden Delphi-Quelltext
1:
2:
3:
Temp := A;
A := B;
B := Temp;
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 29.09.10 18:43 
wenn du es geschickt machst, musst du die zwischenvariable nur einmal setzen und auslesen. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ridom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
BeitragVerfasst: Mi 29.09.10 18:49 
also das problem ist folgendes

zeile 1
5 4 2 6

beim 1 klick

zeile 2

5 4 2 5

beim 2 klick

4 2 6 4

_________________
Gestern standen wir noch kurz vor dem Abgrund...
...heute sind wir einen schritt weiter
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 29.09.10 19:02 
user profile iconridom hat folgendes geschrieben Zum zitierten Posting springen:
also das problem ist folgendes
Und genau für dieses Problem habe ich Dir oben den Lösungsweg geschildert.

Wink mit dem Zaunpfahl:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Temp := A;
A := B;
B := C;
C := Temp;

Manchmal ist es sinnvoll, mit Papier und Bleistift zu arbeiten, um sich etwas zu verdeutlichen.
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Mi 29.09.10 21:28 
Am besten schreibst Du eine Prozedur, die den Tausch vornímmt:


Ich habe ein Formular mit dem StringGrid und zwei Buttons definiert.

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

interface


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

const
  n = 10;
var
  Zufall : Array[0..n] of integer;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    bu_fuellen: TButton;
    bu_Rotieren: TButton;
    procedure bu_fuellenClick(Sender: TObject);
    procedure bu_RotierenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure Tausch(var x1, x2 : integer);
var
  temp : integer;
begin
  Temp := x1;
  x1 := x2;
  x2 := Temp;
end;

procedure TForm1.bu_fuellenClick(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to n do
  begin
    Zufall[i] := Round(random*100);
    Stringgrid1.Cells[0,i]:=IntToStr(i);
    Stringgrid1.Cells[1,i]:=IntToStr(Zufall[i]);
  end;
end;

procedure TForm1.bu_RotierenClick(Sender: TObject);
var
  i : integer;
begin
  for i:= 1 to n do
  begin
    Tausch(Zufall[i-1],Zufall[i]);
    stringgrid1.Cells[1,i-1]:=inttostr(zufall[i-1])
  end;
  stringgrid1.Cells[1,n]:=inttostr(zufall[n])
end;

end.


Das funktioniert so, wie Du es vorhast.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Do 30.09.10 11:41 
Warum das Array drehen wenn es reicht beim Auslesen mit einem Offset zu arbeiten?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm8.StringGrid1Click(Sender: TObject);
var
  i, r, c: Integer;
  Zufall: array of Integer;
begin
  SetLength(Zufall, StringGrid1.ColCount - StringGrid1.FixedCols);
  for i := 0 to High(Zufall) do
    Zufall[i] := Random(100);

  for r := StringGrid1.FixedRows to Pred(StringGrid1.RowCount)  do
    for c := 0 to High(Zufall) do
      StringGrid1.Cells[c + StringGrid1.FixedCols, r] :=
        IntToStr(Zufall[(r - StringGrid1.FixedRows + c) mod Length(Zufall)]);
end;


Grüsse, Dirk
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 30.09.10 14:30 
user profile iconTryer hat folgendes geschrieben Zum zitierten Posting springen:
Warum das Array drehen wenn es reicht beim Auslesen mit einem Offset zu arbeiten?

weil das eben die Aufgabe ist ;) (siehe 1. Post)

@Tranx: Deine Methode ist etwas umständlich und warscheinlich auch langsamer als von deinen Vorrednern beschrieben. Gerd Kayser hat die Lösung schon fast geschrieben, nur das er anstatt der Elemente im Array normale Variablen genommen hat. Jetz muss ridom nur noch eine Schleife drum rum bauen und dann wissen wir auch das er es verstanden hat un das is ja Sinn und Zweck der ganzen Sache...

Mfg Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Do 30.09.10 15:18 
Da steht nur das die Zahlen rotiert ausgegeben werden sollen, nicht das sie rotiert im Array stehen müssen ;)
Da wir nur eine (in diesem Punkt ungenaue) Beschreibung der Aufgabenstellung und nicht die Aufgabenstellung selber haben gibt es eine gewisse Interpretationsfreiheit.. und somit alternative Lösungswege.

EDIT: ja ich habe den Titel des Threads gelesen, aber der könnte auch aus einer Fehlinterpretation des Threaderstellers hervorgegangen sein. Bin gespannt was der Lehrer denn nun erwartet hat.

Grüsse, Dirk
ridom Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
BeitragVerfasst: Do 30.09.10 23:08 
Also es hat jetzt funktioniert durch rum probieren ich weiss ist nicht ganz sinn der sache und ja der Lehrer wollte die zahlen im Array rotieren lassen und nicht in der Oberfäche ^^ aber danke nochmal für die hilfe

_________________
Gestern standen wir noch kurz vor dem Abgrund...
...heute sind wir einen schritt weiter