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



BeitragVerfasst: Sa 25.04.09 17:13 
Hallo , liebe Community!

Wahrscheinlich habt ihr shcon viele solcher Threads beantwortet , aber ich bekomm es einfach nicht hin es an meinem Programm zu berichtigen.Was noch zu sagen ist ich bin ein Anfänger ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button2Click(Sender: TObject);
 var
    zahl1,zahl2,zahl3,zahl4,zahl5,zahl6,zahl7,zahl8,zahl9,zahl10:integer;

begin
    zahl1:=17 ;
    zahl2:=98  ;
    zahl3:=55 ;
    zahl4:=32 ;
    zahl5:=9  ;
    zahl6:=69 ;
    zahl7:=46 ;
    zahl8:=72 ;
    zahl9:=13 ;
    zahl10:=88;
    zahl1:=stringgrid1.cells[0,0]:integer



Eigentlich wollte ich eine zufällig generierte Zahl in ein Stringgrid einbinden , um dann damit weiterzuarbeite , um letzenendlich Bubblesort hinzubekommen.Nur hat das mit dem Random nicht geklappt , weshalb ich mir Zahlen vorgebe und so tue , als ob sie zufällig sind -.- .
Darum wäre ich euch sehr dankbar , wenn ihr mir beides lösen könntet.
Vielen Dank.

MFG
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Sa 25.04.09 17:22 
Du weist der Zelle im StringGrid garkeinen Wert zu, sondern der zahl1 den Wert in der Zelle(0/0).

Zufallszahlen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.RandomClick(Sender: TObject);
var
  zahl : integer;
begin
randomize;   // am besten im OnCreate erzeugen
  zahl := random(10)+1;   // erzeugt Zufallszahlen im Bereich von 1 - 10
  Edit1.Text := IntToStr(zahl);
end;


Bubblesort
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  zufall : array [1..100of integer;
for i := 1 to 100 do
    for j := 1 to 99 do
        if zufall[j] > zufall[j+1then begin
         hilf := zufall[j];
         zufall[j] := zufall[j+1];
         zufall[j+1] := hilf;
          end;
for i := 1 to 100 do ListBox1.Items.Add(IntToStr(zufall[i]));

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 25.04.09 19:02 
Und wie kann ich eine zufällig bestimmte Zahl einer Zelle im Stringgrid zuweisen?Oder gleich mehrere?

MFG
Xabitire
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114

Win Xp, Win Vista
D6 PE, D7 PE
BeitragVerfasst: Sa 25.04.09 19:33 
Hallo und :welcome: im Forum.

Geh einfach mit Hilfe von for-Schleifen, jede Zelle des Stringgrids durch und schreibe eine Zufallszahl rein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var x, y: Integer;
begin
  Randomize;

  for x := 0 to StringGrid1.ColCount - 1 do
    for y := 0 to StringGrid1.RowCount - 1 do
      StringGrid1.Cells[x,y] := IntToStr(Random(10) + 1;


Wenn du allerdings einer Zelle mehrere Zahlen zuweisen willst oder nicht immer zwischen String und Integer/Double/etc. hin und her konvertieren willst solltest du ein mehrdimensionales Array benutzen, dessen Inhalt du dann jeweils, wenn benötigt, im Stringrid ausgibst. Das erspart dem Computer dann auch unnötige Rechenarbeit :wink:

Mit freundlichen Grüßen

Blackbird8690
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 25.04.09 21:03 
Danke euch , nur kommt jetztfolgende Fehlermeldung ( hat die SuFu benutzt ;) ):
Nicht genügend wirkliche Parameter.
1. was ist das?
2. wie kann ich es verbessern?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button2Click(Sender: TObject);
 var i,j,c:integer;
begin
 for i:=1 to 10-1 do
  begin
    for j:=10 downto i do
     begin
      if stringgrid1.cells[j]<stringgrid1.Cells[j-1then
       begin
         c:=stringgrid1.cells[j-1];
         stringgrid1.cells[j-1]:=stringgrid1.cells[j];
         stringgrid1.Cells[j]:=c;
        end;
     end;
   end;


MFG, danke.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 25.04.09 21:30 
Nun, eine Zelle hat doch X- und Y-Koordinaten, oder nicht? ;)

ausblenden Also zum Beispiel
1:
StringGrid1.Cells[I, J] := C;					


Außerdem solltest du keine festen Werte für die For-Schleife nehmen, sondern die Anzahl der Zellen.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 25.04.09 21:58 
Vielen Dank , klappt jetzt soweit.Delphi zeigt keinen Fehler mehr an , nur , wenn ich jetzt das Project starte und mir erstmal mein zufälligen zahlen hole ( indem ich auf den button1 klicke) passiert alles wie es soll , aber , wenn ich auf button 2 klicke kommt eine fehler meldung : "ist kein gültiger integer wert.

Hier der aktuelle Quellcode:
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:
procedure TForm1.Button1Click(Sender: TObject);
var x, y: Integer;
begin
  Randomize;

  for x := 0 to StringGrid1.ColCount - 1 do

    for y := 0 to StringGrid1.RowCount - 1 do
      StringGrid1.Cells[x,y] := IntToStr(Random(100) + 1);

end;



procedure TForm1.Button2Click(Sender: TObject);
 var i,j,c:integer;
begin
 for i:=1 to 10-1 do
  begin
    for j:=10 downto i do
     begin
      if stringgrid1.cells[j,0]<stringgrid1.Cells[j-1,0then
       begin

         stringgrid1.cells[j-1,0]:=inttostr(c);
         stringgrid1.cells[j-1,0]:=stringgrid1.cells[j,0];
         c:=strtoint(stringgrid1.cells[j,0]);
        end;
     end;
   end;


end;


Hat jemand ne Idee?
Ich vermute ,dass es an dem c und dem stringgrid liegt , weiß aber nichts genaueres.

MFG
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 25.04.09 23:37 
Nur geraten, wäre aber logisch:
user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem solltest du keine festen Werte für die For-Schleife nehmen, sondern die Anzahl der Zellen.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Xabitire
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114

Win Xp, Win Vista
D6 PE, D7 PE
BeitragVerfasst: Sa 25.04.09 23:51 
Stringgrid-Zellen sind vom Typ String, dass heißt du musst den Inhalt für einen Vergleich wieder in Integer umwandeln. Also:

ausblenden Delphi-Quelltext
1:
StrToInt(stringgrid1.cells[x,y])					

statt nur

ausblenden Delphi-Quelltext
1:
stringgrid1.cells[x,y]					
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 26.04.09 00:38 
So hab das genannte übernommen , nur ist jetzt mein Problem , dass ich , wenn ich das Project starten will nur den grauen Hintergrund des Fensters zu sehen bekomme.Formular und Quellcode ist da, das hab ich nachgeguckt.
Was nun?

MFG
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 26.04.09 11:21 
schauen ob Stringgrid.Visible im Objektinspektor True ist.
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 26.04.09 12:17 
Tform1 war nicht auf visible true. Hab das nun geändert , aber es ist immer noch nichts zu sehen ( man kann auch auf nichts klicken -.-).

MFG
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 26.04.09 12:20 
user profile iconsevenscrime hat folgendes geschrieben Zum zitierten Posting springen:
Tform1 war nicht auf visible true. Hab das nun geändert , aber es ist immer noch nichts zu sehen ( man kann auch auf nichts klicken -.-).

MFG


Es ist gar nichts zusehen? Dann überprüfe mal , ob du sonst irgendwo im Code Form1 auf Visible := false gesetzt hast-
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 26.04.09 12:53 
Oder poste am besten mal den Code.
sevenscrime Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 26.04.09 13:00 
Nee , hab ich nicht.

Hier der komplette Code nochmal:
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:
unit bubblesort;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    StringGrid1: TStringGrid;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

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

procedure TForm1.Button1Click(Sender: TObject);
var x, y: Integer;
begin
  Randomize;

  for x := 0 to StringGrid1.ColCount - 1 do

    for y := 0 to StringGrid1.RowCount - 1 do
      StringGrid1.Cells[x,y] := IntToStr(Random(100) + 1);

end;



procedure TForm1.Button2Click(Sender: TObject);
 var i,j,c:integer;
begin
 for i:=1 to 10-1 do
  begin
    for j:=10 downto i do
     begin
      if stringgrid1.cells[j,0]<stringgrid1.Cells[j-1,0then
       begin
         strtoint:=stringgrid1.cells[j-1,0];
         stringgrid1.cells[j-1,0]:=inttostr(c);
         stringgrid1.cells[j-1,0]:=stringgrid1.cells[j,0];
         c:=strtoint(stringgrid1.cells[j,0]);
        end;
     end;
   end;


end;

end.


Normalerweise müsste er jetzt ja , wenn ich die zufälligen zahlen erstellt habe (per maus-klick) dann müsste ich ja per mausklick auf den entsprechenden button sehen ( mehr oder weniger) , wie die Zahlen vertauscht werden . Das kann ich aber nicht . Was muss ich also machen??


PS:Fragt mich nicht woher ich weiß , dass es nicht so ist irgendwie hab ich mal dies und das gemacht und dann konnte ich es sehen , aber es klappt immer noch nicht , das Starten des Programmes.


MFG , danke.
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: So 26.04.09 13:02 
Bitte bearbeite den Thread nochmal und mache aus dem [delphi] ein [delphi]. Danke!

edit: Mist, zu spät.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 27.04.09 07:23 
Die fehlen offensichtlich die alleruntersten Grundlagen, deshalb einmal der Hinweis auf diesen sehr guten Crashkurs:
crashkurs.christian-stelzmann.de
und die neue Version speziell ab Turbo Delphi:
www.christian-stelzm...shkurs_reloaded.html

Ein weiteres gutes Online-Buch:
de.wikibooks.org/wik...grammierkurs:_Delphi

Dann zu dem geposteten Quelltext:
user profile iconsevenscrime hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
         strtoint:=stringgrid1.cells[j-1,0];
         stringgrid1.cells[j-1,0]:=inttostr(c);
         stringgrid1.cells[j-1,0]:=stringgrid1.cells[j,0];
         c:=strtoint(stringgrid1.cells[j,0]);
In der ersten Zeile benutzt du StrToInt. Dies ist eine Funktion, die dir einen Wert zurückgibt. Also so wie IntToStr, das du in der nächsten Zeile benutzt.

In der zweiten Zeile benutzt du jetzt c, allerdings hast du dieser Variablen noch gar keinen Wert zugewiesen...

In der vierten Zeile weist du jetzt c einen Wert zu, danach wird c allerdings in diesem Schleifendurchlauf gar nicht mehr verwendet.

Dann noch zu deiner if-Abfrage:
ausblenden Delphi-Quelltext
1:
if stringgrid1.cells[j,0]<stringgrid1.Cells[j-1,0then					
Du vergleichst so zwei Strings, aber nicht die Zahlenwerte darin.

Zwei Werte austauschen geht prinzipiell so, der erste Wert wird zwischengespeichert in einer Variablen, dann bekommt der den neuen Wert und am Ende der zweite Wert den zwischengespeicherten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  temp: String;
begin
  Temp := StringGrid1.Cells[j-10];
  StringGrid1.Cells[j-10] := StringGrid1.Cells[j, 0];
  StringGrid1.cells[j, 0] := Temp;
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mo 27.04.09 09:52 
Hab auch mal eine Frage zu deiner if Abfrage und zwar warum machst du folgendes
ausblenden Delphi-Quelltext
1:
  for i:=1 to 10-1 do					

bezogen auf [ 10 - 1 ] warum rechnest du in einer for schleife mit 2 Konstanten?
Kostet eig. nur unnötige Rechenleistung. D.h. gleich 9 schreiben. :P
ausblenden Delphi-Quelltext
1:
 strtoint:=StringGrid1.cells[1,1];					

Diese Zeile ist für mich unverständlich.
Und davon abgesehn kann ich mir nicht vorstellen das du da keine Fehlermeldung bekommst? Oo
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 27.04.09 10:32 
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
bezogen auf [ 10 - 1 ] warum rechnest du in einer for schleife mit 2 Konstanten?
Kostet eig. nur unnötige Rechenleistung.
Nein, das stimmt nicht, es sieht nur unübersichtlicher aus, aber Delphi rechnet sowas schon beim Kompilieren aus und optimiert die Schleife. Von der Laufzeit her ist es also völlig egal wie man das schreibt.

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Und davon abgesehn kann ich mir nicht vorstellen das du da keine Fehlermeldung bekommst? Oo
Da kommt ja auch eine, das ist klar, das halten viele nur offenbar nicht für wichtig zu erwähnen was nicht klappt...
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mo 27.04.09 10:41 
Zum 1. wieder was dazu gelernt. Danke dafür @jeanicke =)
Zum 2. Ich sehe das etwas anders denn ist er offensichtlich ein Anfänger und da denke ich sollte man das erwähnen.
Weis ja nicht was er sich dabei gedacht hat. Meine Vermutung wäre das er denkt damit wandelt er im Programm alle
string werte im strgrid dauerhaft in Integer um. War vil. aber auch einfach ein Flüchtigkeitsfehler.
Und er sagte ja auch das es nicht Funktioniert also Weise ich ihn netter weise darauf hin.