Autor |
Beitrag |
sevenscrime
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
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
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.RandomClick(Sender: TObject); var zahl : integer; begin randomize; zahl := random(10)+1; Edit1.Text := IntToStr(zahl); end; |
Bubblesort
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var zufall : array [1..100] of integer; for i := 1 to 100 do for j := 1 to 99 do if zufall[j] > zufall[j+1] then 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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 114
Win Xp, Win Vista
D6 PE, D7 PE
|
Verfasst: Sa 25.04.09 19:33
Hallo und  im Forum.
Geh einfach mit Hilfe von for-Schleifen, jede Zelle des Stringgrids durch und schreibe eine Zufallszahl rein.
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
Mit freundlichen Grüßen
Blackbird8690
|
|
sevenscrime 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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?
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-1] then begin c:=stringgrid1.cells[j-1]; stringgrid1.cells[j-1]:=stringgrid1.cells[j]; stringgrid1.Cells[j]:=c; end; end; end; |
MFG, danke.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 25.04.09 21:30
Nun, eine Zelle hat doch X- und Y-Koordinaten, oder nicht?
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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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:
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,0] then 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 25.04.09 23:37
Nur geraten, wäre aber logisch:
GTA-Place hat folgendes geschrieben : | 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
      
Beiträge: 114
Win Xp, Win Vista
D6 PE, D7 PE
|
Verfasst: Sa 25.04.09 23:51
|
|
sevenscrime 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 26.04.09 11:21
schauen ob Stringgrid.Visible im Objektinspektor True ist.
|
|
sevenscrime 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
|
Verfasst: So 26.04.09 12:20
sevenscrime hat folgendes geschrieben : | 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 26.04.09 12:53
Oder poste am besten mal den Code.
|
|
sevenscrime 
Hält's aus hier
Beiträge: 8
|
Verfasst: So 26.04.09 13:00
Nee , hab ich nicht.
Hier der komplette Code nochmal:
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 public 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,0] then 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
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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: sevenscrime hat folgendes geschrieben : | 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: Delphi-Quelltext 1:
| if stringgrid1.cells[j,0]<stringgrid1.Cells[j-1,0] then | 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: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var temp: String; begin Temp := StringGrid1.Cells[j-1, 0]; StringGrid1.Cells[j-1, 0] := StringGrid1.Cells[j, 0]; StringGrid1.cells[j, 0] := Temp; |
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Mo 27.04.09 09:52
Hab auch mal eine Frage zu deiner if Abfrage und zwar warum machst du folgendes
Delphi-Quelltext
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.
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 27.04.09 10:32
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: 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.
|
|
|