Autor |
Beitrag |
Krumnix
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Di 25.01.05 17:42
Hiho.
Hab in der Suche leider nix dazu gefunden. Liegt wohl auch daran, das bei der Suche von Schleife und For nen Haufen Zeug angezeigt wird  .
Nun aber mein Problem.
Und zwar hab ich folgendes geschrieben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| k := 0; for i := 1 to MaxZahl do begin if k > StringGrid1.RowCount then StringGrid1.RowCount := k + 1; StringGrid1.Cells[0,k] := inttostr(i) StringGrid1.Cells[1,k] := Wert[i].Zahl1; StringGrid1.Cells[2,k] := Wert[i].Zahl1; k := k + 1; end; |
Dabei passiert folgendes:
Wenn ich das nun durchlaufen lasse, dann hört die Schleife um den Wert 1 vermindert von MaxZahl auf. Also MaxZahl ist z.B. 120 und in der ersten Spalte in Grid steht aber als letztes 119. Warum?
Und wenn ich jetzt hingehe und folgendes schreibe:
Delphi-Quelltext 1:
| for i := 1 to MaxZahl + 1 do |
Dann zählt er bis 121. Warum denn das nun?
Wie bekomm ich es hin, das er bei 120 aufhört???
THX
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.Moderiert von Christian S.: Topic aus Sonstiges verschoben am Di 25.01.2005 um 17:09
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Di 25.01.05 18:07
Nun,
die 119 erklär ich mir aus der Tatsache, daß k bei 0 anfängt und somit für 120 Durchläufe bei 119 ist.
Die 121 erscheint mir so fragwürdig, daß ich nur sagen, kann: Da fehlen mir notwendige Infos.
gegrüßt!
_________________ "Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Di 25.01.05 18:24
Nunja, das k lass ich ja nicht anzeigen. Es ist ja nur dafür da, das ich das Grid durchnummerieren kann. Und das fängt ja bei 0,0 an. Somit ist k := 0....
In 0,k lasse ich ja dann den Wert von i anzeigen. Und der sollte doch bis MaxZahl laufen?! Tut er aber nicht 
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 25.01.05 18:25
Also wenn du den Quellcode bis auf das +1 nicht veränderst darf sich bei 121 Durchläufen am Schluss gar nicht 121 als letztes Element im StringGrid befinden, da du k=0 initialisierst.
Außerdem: warum so umständlich mit einer Variable k? i - 1 erfüllt genau den gleichen Zweck.
AXMD
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Di 25.01.05 20:35
Ne, das k wird ja später noch weiter verarbeitet. Und das k ist ja auch komplett egal. Es geht ja darum, das i nie die 120 erreicht sondern bei 119 aufhört. Also in StringGrid[0,0] steht 1 und in StringGrid[0,119] steht nix, ist leer.
Aber wenn ich 120 + 1 sozusagen schreibe, dann geht das ganze bis StringGrid[0,120] und dann steht dort die 121 aber drin....
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 25.01.05 20:54
in dem fall hier würde ich aml sagenes liegt an dem programmierer
du hast uns den code gezeigt - da gekommt bestimmt nicht einmal 119 und bei einem mehr 121 raus
du hast erwähnt das du k weiterbenutzt (also wird in der for schleife denke k noch verändert)
demnach kann es sein das du bei einem i = x einfach ein 2. mal ein k veränderst
also z.b.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| i = 0; k = 0; [k] = 0; i = 1; k = 1; [k] = 1; i = 2; k = 2; [k] = 2; i = 3; k = 3; [k] = 3; i = 4; k = 4; [k] = 4; i = 5; k = 4; [k] = 5; |
solltest du k nicht weiter in der schleife benutzen solltest i nehmen
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Di 25.01.05 22:50
Nein. k wird ausserhalb weiter benutz. Die Schleife sieht so aus.
Und i nehme ich nur für den Schleifenzähler. Da danach eine weitere Schleife begint, die auch mit i parametriert wird, muss ich ja den anderen Wert speichern. Und da will ich nicht überall i - 1 schreiben sondern mach es lieber so. Ist schneller dann und übersichtlicher.
Edit: Achso und noch ne kleine Info. Der Wert von i, der in der ersten Spalte von dem Grid aufgelistet wird, läuft von 1 bis 119, sollte ja aber bis 120 laufen. Bei +1 gehts aber bis 121. Das gleiche kommt, wenn ich alles rauswerfe und nur nen Edit-Feld nehme. Dann steht am Schluß bei Version ein 119 drin und bei der 2. 121.....
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Mi 26.01.05 13:52
Nächste Vermutung,
ich gehe mal davon aus, das RowCount zu Beginn <> 0 ist. Stimmts?
Nun kann ich bei einem RowCount von 4 nicht darauf warten, daß k größer wird. Ich behaupte, die Zeile, die sozusagen die initale Zeilenanzahl angibt, ist nicht da. Vorgänger und Nachfolger schon.
Das erklärt aber noch nicht die Sache mit der 121.
gegrüßt!
_________________ "Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Mi 26.01.05 15:54
Ja, die Vermutung stimmt. Habs voreingestellt auf 5. Aber solang ja k kleiner ist, sollte das egal sein, weil ja genug Zellen dann da sind. Und damit ich halt nachher alles lesen kann erhöhe ich damit die Anzahl der Reihen.
Aber in der Hilfe von Delphi steht folgendes:
Zitat: |
for statements:
begin
counter := initialValue;
while counter <= finalValue do
begin
statement;
counter := Succ(counter);
end;
end
|
Da steht ja <= und das Gleich könnte ja was sein, das ich nie die 120 erreiche, und deswegen nur die 119 kommt. Aber wiese geht es bei 120 + 1 bis 121?
Ich habs jetzt mal mit ner while-schleife gemacht. Das funktioniert schonmal.
Trotzdem würde ich gerne mal wissen, ob da jemand nen Plan hat, warum einmal das und das andere mal das rauskommt.
Gruß
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 26.01.05 16:14
da kommt mit sicherheit nicht einmal das eine und beim andern mal was anderes raus
das liegt eher am benutzer (dir) weil du uns nicht die ganze wahrheit sagst, die schleife wie du sie da stehen hast zeigt 120 bzw 121 an und nicht 119 und 121
sorry aber bei der behauptung will dir das keiner erklären und kann auch keiner das biste selbst schuld
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mi 26.01.05 18:07
Ich liebe diese ganzen Halbwahrheiten ...
Wenn ihr es mal ausprobieren würdet, würdet ihr sehen, dass es sehr wohl den Anschein hat, als käme mal dieses, mal jenes raus.
Aber es ist so:
Die Schleife geht immer bis MaxZahl (also 120) oder eben auch bis MaxZahl+1 (also 121).
Es werden nur nicht immer alle Zeilen des StringGrids angezeigt.
Die Erhöhung von RowCount in dem Code ist so nicht korrekt.
Hängt ein StringGrid1.RowCount := StringGrid1.RowCount+2;dahinter und man kann es sehen.
Erledigen kann man das Problem z.B. so: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| k := 0; for i := 1 to MaxZahl do begin StringGrid1.Cells[0,k] := inttostr(i) StringGrid1.Cells[1,k] := Wert[i].Zahl1; StringGrid1.Cells[2,k] := Wert[i].Zahl1; k := k + 1; end; StringGrid1.RowCount := k; |
|
|
Krumnix 
      
Beiträge: 60
Win98,2000,XP
Delphi 7 Enterprise
|
Verfasst: Mi 26.01.05 20:18
Also das mit dem StringGrid hab ich jetzt versucht. Das Prob. dabei war, das ich das auf 6 Reihen definiert hab. So konnte ich nicht alles sehn. Deswegen hab ich das mit dem k gemacht.
Jetzt bin ich aber hin und hab das Grid auf 100 erhöht und als MaxZahl 90 eingegeben. Und siehe da, ich konnte alles lesen. Hab ichs wieder zurück gemacht, was wieder mal so, mal so.
Also liegt es nicht an der For-Schleife sondern wohl daran, das die letzte Reihe nicht mehr angezeigt wird.....
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mi 26.01.05 22:43
Krumnix hat folgendes geschrieben: | Also liegt es nicht an der For-Schleife sondern wohl daran, das die letzte Reihe nicht mehr angezeigt wird..... |
Was heißt "Was schon geschrieben stand" auf lateinisch?
|
|