| Autor |
Beitrag |
ridom
      
Beiträge: 31
Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
|
Verfasst: 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
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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: 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.
Delphi-Quelltext
Danach haben beide Variablen aber den gleichen Inhalt.
So gehts:
Delphi-Quelltext 1: 2: 3:
| Temp := A; A := B; B := Temp; |
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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 
      
Beiträge: 31
Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
|
Verfasst: 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
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mi 29.09.10 19:02
ridom hat folgendes geschrieben : | | also das problem ist folgendes |
Und genau für dieses Problem habe ich Dir oben den Lösungsweg geschildert.
Wink mit dem Zaunpfahl:
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
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: 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.
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 public 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
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Do 30.09.10 11:41
Warum das Array drehen wenn es reicht beim Auslesen mit einem Offset zu arbeiten?
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
      
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)
|
Verfasst: Do 30.09.10 14:30
Tryer hat folgendes geschrieben : | | 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
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: 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 
      
Beiträge: 31
Win 2000, Win XP, Win Vista 32bit und 64bit
Delphi7, C++
|
Verfasst: 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
|
|