Array mit Zahlen von 1-... füllen

Hallo ich hab eine Frage und zwar wollte ich ein Programm schreiben, dass Zahlen von 1 bis Eingabe in ein Stringgrid schreibt.
Also Eingabe ist bei mir ein Edit-Feld, in dem man eine beliebige Zahl eintragen kann. Ich möchte mein Programm in einem statischen Array haben.
Soweit hab ich auc alles geschafft, nur hab ich nun das Problem, dass mein Stringgrid in der 1. Zeile lauter 0 hat und in der 2. Zeile lauter 1 und in der 3. lauter 2 und so weiter.
Ich möchte es allerdings so haben, dass in der ersten Zeile 1,2,3,4,5,6,7,8 gezählt wird und in der 2 Zeile es dann mit 9,10,11,… weiter geht.
Hier einmal mein Quelltext:

procedure TFAnwendung.BsortiertClick(Sender: TObject);
var p,anzahl, x,y:integer;
begin
y:=0;
anzahl:=strtoint(anzahl.text);
for p:=0 to anzahl-1 do
for x := 0 to 7 do
begin
feld[i]:= i;
sgvorgabe.cells[x,y]:=inttostr(feld[p]);
if x=7
then begin
y:=y+1;
end;
end;
end;

Ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen
John

Hallo!

Viele Wege führen nach Rom. Hier ist einer:

var 
 aktuell, anzahl: Integer; 
 zeile,spalte: Integer;
begin
 anzahl := StrToInt(anzahl.text);
 aktuell := 0;
 zeile := 0;
 spalte := 0;
 while aktuell 
Eine Lösung mit For-Schleifen finde ich nur sinnvoll, wenn vor Beginn der Schleifen berechnet wird, wie viele Zeilen man bauchtm so dass man zwei Schleifen (für Zeile und Spalte) schachteln kann:


    
    var 
     aktuell, anzahl: Integer; 
     zeile,spalte, anzahlZeilen: Integer;
    begin
     anzahl := StrToInt(anzahl.text);
     aktuell := 0;
     anzahlZeilen := anzahl Div 8;
     if (anzahl mod 8)\>0 then Inc(anzZeilen); 
     For zeile := 0 to anzahlZeilen-1 do
     For spalte := 0 to 7 do
     begin
     feld[aktuell] := aktuell;
     sgvorgabe.cells[spalte,zeile]:=IntToStr(aktuell);
     Inc(aktuell);
     end{for spalte};
     end{for zeile};
    end;




VG
Jochen

Hallo,

hier mal ne schnelle Lösung:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;

begin
 for i := 0 to StrToInt(Edit1.Text)-1 do begin
 feld[i] := i+1; //Zählung soll bei 1 beginnen, nicht bei 0
 StringGrid1.Cells[i mod StringGrid1.ColCount, i div StringGrid1.ColCount] := IntToStr(i+1);
 end;

end;

oder wer es lieber so mag:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;

begin
 for i := 0 to StrToInt(Edit1.Text)-1 do
 with StringGrid1 do begin
 feld[i] := i+1; //Zählung soll bei 1 beginnen, nicht bei 0
 Cells[i mod ColCount, i div ColCount] := IntToStr(i+1);
 end;

end;

Vorteil dieser Lösung: Sie funktioniert mit jeder Anzahl Spalten im Grid. Du solltest aber noch Code hinzufügen um Fehler abzufangen (z.B. wenn im Edit keine Zahl steht) oder gleich ein SpinEdit verwenden oder wenn mehr Zahlen angezeigt werden sollen als es Felder im Grid gibt. Außerdem noch Code um das StringGrid vorher zu löschen.

Gruß, Niels

Danke für eure Antworten.
Ich habe noch eine Frage, um das geschehen des Programms besser verstehen zu können, würde ich gerne wissen was [i mod ColCount, i div ColCount] mod und div genau bedeuten bzw bewirken.

Hallo,

würde ich gerne wissen was [i mod ColCount, i div ColCount] mod und div

i div ColCount führt eine Integerdivision durch und gibt den ganzzahligen Anteil des Ergebnisses zurück (ist also das gleiche wie /, nur dass eben nur Ganzzahlen im Spiel sind, 9 div 4 ergibt also 2; div = divided by). Im vorliegenden Fall erhält man so die Zeile im Grid

i mod ColCount macht das gleiche, gibt aber den Rest der Division zurück (9 mod 4 ergibt also 1; mod = modulo) das ergibt die Spalte

Das Ganze funktioniert nur, wenn die Zählung im Grid und bei i mit 0 beginnt, weshalb das auch in den meisten Programmiersprachen der Standard ist.

Gruß, Niels

Danke