Entwickler-Ecke

Sonstiges (Delphi) - Frage zu Stringgrids....zahlen vertauschen


flotschi - Do 20.04.06 00:49
Titel: Frage zu Stringgrids....zahlen vertauschen
Hallo!
Vielen Dank im Voraus schon mal!
Ich muss bis morgen ein kleines Programm für die Schule abgeben und komm nicht weiter.

Es besteht aus 2 stringgrids mit jeweils 1 zeile und 10 spalten, die beide mit zufallszahlen zw. 1 und 100 gefüllt werden sollen...soweit hab ichs auch richtig und es geht..
Mit einem 2 Button sollen dann die Zahlen elementweise verglichen werden und wenn die Zahl im oberen der beiden Stringgrids größer ist als die im unteren, dann sollen sie vertauscht werden...da happerts ein bisserl bei mir ;)

hier der code den ich bis jetzt zusammengepfuscht hab....

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:
procedure TForm1.Button1Click(Sender: TObject);
var i,o,u,zuzahl: integer;
begin
o:=100;
u:=1;
for i := 0 to 9 do
        begin
        zuzahl:=random(o-u)+1;
        stringgrid1.Cells[i,0]:=inttostr(zuzahl);
        zuzahl:=random(o-u)+1;
        stringgrid2.Cells[i,0]:=inttostr(zuzahl);
        end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize();
end;

procedure TForm1.Button2Click(Sender: TObject);
var v:integer;
    zahl:string;
begin
for v:= 0 to 9 do
if stringgrid1.cells[v,0]>stringgrid2.Cells[v,0then
begin
             stringgrid1.Cells[v,0]:= zahl;
             stringgrid2.cells[v,0]:= stringgrid1.cells[v,0];
             stringgrid2.Cells[v,0]:= zahl;


end;

end;


Mein problem ist jetzt, dass mir das prog die Zahlen, wo die obere kleiner ist, stehen lasst und die die getauscht werden sollten, löscht es einfach....
Kann mir jemand sagen was ich falsch gemacht hab??
bin am verzweifeln...
Vielen Dank!
mfg
flotschi

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Ironwulf - Do 20.04.06 01:00

fällt dir sehr früh ein das du morgen schul hast ;D


Delphi-Quelltext
1:
2:
3:
4:
5:
begin 
stringgrid1.Cells[v,0]:= zahl; 
stringgrid2.cells[v,0]:= stringgrid1.cells[v,0]; 
stringgrid2.Cells[v,0]:= zahl; 
end;


und zwar wenn du zahlen vertauschen willst brauchste noch ne hilfsvariable müsste dann in etwa so aussehn

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var hilfe: String;
begin
  hilfe:= stringgrid1.Cells[v,0];
  stringgrid1.Cells[v,0]:= Zahl;
  stringgrid2.Cells[v,0]:= hilfe;
end;


und in zukunft formatier bitte deinen text und füg kommentare ein damit man weiß was die einzelnen button machen solln

EDIT:
da mir grad löangweilig is weiß ich dich noch bevor es ein mod tut darauf hin das du bitte dein titel des themas änderst damit es anderen usern mit dem selben problem einfacher fällt ein ähnliches problem zubewältigen ;D;D;D;D;D;D

so den hinweis wollt ich schon immer mal schreiben XD


flotschi - Do 20.04.06 01:28

Hi!
Danke zuerst mal!
Aber ich hab noch immer so ziemlich das selbe problem...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button2Click(Sender: TObject); // Vertausche die Zahlen wenn Zahl im oberen > Zahl im unteren
var v:integer;
    zahl,hilfe:string;

begin
for v:= 0 to 9 do
if stringgrid1.cells[v,0]>stringgrid2.Cells[v,0then
begin
             hilfe:= stringgrid1.Cells[v,0];
             stringgrid2.cells[v,0]:= zahl;
             stringgrid2.Cells[v,0]:= hilfe;
             stringgrid1.cells[v,0]:=zahl



end;

end;


Er Setzt mir jetzt zwar die Zahl vom oberen in den unteren Stringgrid, lässt aber die untere zahl verschwinden und die Zelle im oberen wird leer...warum??
Danke!
mfg
flotschi

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Ironwulf - Do 20.04.06 02:03

wenn dus so machst hat die variable zahl keinen inhalt


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for v:= 0 to 9 do 
if stringgrid1.cells[v,0]>stringgrid2.Cells[v,0then 
begin
  Hilfe:= stringgrid2.Cells[v,0];
  stringgrid2.Cells[v,0]:= stringgrid1.Cells[v,0];
  stringgrid1.Cells[v,0]:= Hilfe;
end;

so müssts jetz wirklich passen


flotschi - Do 20.04.06 02:32

Super Danke!
endlich gehts...
ich will nicht frech sein oder so...aber kannst du mir vielleicht noch helfen wie ich die 20 zahlen aus den beiden stringgrids in ein (einzelnes) array abspeichern kann? wär echt nett! das array hab ich schon nur wie krieg ich die 20 zahlen rein??
nochmals danke!
mfg
flotschi


Delphi-Quelltext
1:
2:
3:
4:
5:
const max= 20;
type Tzahlen = array[1..max] of integer;
var
  Form1: TForm1;
  arr: Tzahlen;


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button3Click(Sender: TObject); // Button soll die zahlen der 2 Stringgrids in das array übergeben..??
begin
???
end;


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Ironwulf - Do 20.04.06 03:05

ich hab zwar noch nie was mit stringgrids gemacht aber so müssts gehn ;D

Delphi-Quelltext
1:
2:
3:
4:
5:
for i:= 0 to 9 Do
begin
  arr[i]:= StrToInt(stringgrid1.Cells[i,0]); 
  arr[i+10]:= StrToInt(stringgrid2.Cells[i,0]);
end;


und dann noch die zeile ändern

Delphi-Quelltext
1:
2:
const max= 20
type Tzahlen = array[1..max] of integer;


in

Delphi-Quelltext
1:
2:
const max= 19
type Tzahlen = array[0..max] of integer;


flotschi - Do 20.04.06 03:46

Danke Vielmals!
aber eine kleine Frage hätt ich da noch :-)
als letzes muss ich den inhalt des arrays in einem Label ausgeben, so dass alle zahlen des Arrays nebeneinander mit beistrich im label erscheinen...
ich brings nur zusammen die letze zahl im label anzuzeigen...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button4Click(Sender: TObject); //Gib die zahlen des Arrays in einem Label aus
var i:integer;
begin
 for i:=0 to 19 do
begin
label1.caption:= inttostr(arr[i]);
end;

end;


Danke für die hilfe!

mfg
flotschi

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


der Berliner - Do 20.04.06 07:05

Hallo
bist du dir sicher das das ein label sein muß.
Weil Label ist einzeilig weitere Zeile geht glaub ich nur mit #13#10
nimm doch ein Memo, oder darfst du das nicht?

So wie du es hast durchäuft er zwar die schleife 20 mal
schreibt auch jedesmal einen anderen wert ins label
der wird aber bei jedem Durchlauf vom nächsten wert wieder überschrieben.
sodas am schluß der 20ste wert im Label steht.

also ich schlag ne memo Komponente vor.
Gruß


Ironwulf - Do 20.04.06 15:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button4Click(Sender: TObject); //Gib die zahlen des Arrays in einem Label aus  
var i:integer;  
begin  
Label1.Caption:= IntToStr(arr[1]);
 for i:=1 to 19 do  
begin  
label1.caption:= Label.Caption + ' - ' + inttostr(arr[i]);  
end;


der Berliner - Do 20.04.06 15:37

:( ok ..dann kann er doch ein label nehmen :D
gruß