Autor Beitrag
Ottchen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Do 21.11.02 11:27 
Es soll die Zahlenfolge

1 3 7 15 31 ...

so lange dargestelt werden (im StringGrid), bis die Summe dieser Zahlen 2000 erreicht. Wie geht das mit einer repeat-until-Schleife? (Mit Feldern sicherlich zu schwierig)

Also die Bildungsvorschrift für die Zahlenfolge lautet: a:=2*a+1.

Aber wie bildet man die Summe? Muss man die einzelnen Felder des StrinGrids auslesen?


HJat jmd. eine springende Idee? :idea:

Ottchen

_________________
See you.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 21.11.02 11:36 
Du führst in einer Schleife die Darstellung der Zahlen durch, also immer mit Deiner Bedingung, mit einem initialisierten Anfangswert, dann brauchst Du die Summe, d.h. du hast ne weitere Variable summe, zu der Du bei jedem Schleifendurchlauf das a dazuzählst, könnte also folgendermaßen aussehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
a:=0;
summe:=0;
repeat
     zahl:=2*a+1;
     summe:=summe+zahl;
     StringGrid.Cells[0,a]:=inttostr(zahl);
     Inc(a);
     until a>=2000;


Achtung, das is ungetestet *g*

Gruß
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 21.11.02 18:04 
Eher so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
a:=0;
summe:=0;
i:=0;

repeat
  a:=2*a+1;
  summe:=summe+a;
  StringGrid.Cells[0,i]:=inttostr(a); 
  inc(i);
until summe>=2000;


MfG,
Peter

P.S.: Auch ungetestet!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 21.11.02 18:07 
OK, geb mich geschlagen :autsch: , war wohl noch zu früh am Morgen *g*. Da konnte ich noch net so richtig denken. Und Zahlenfolgen waren mir eh immer ein Graus *g*

Hehe, danke für die Korrektur.

Gruß, Uwe
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 21.11.02 18:17 
Zitat:
war wohl noch zu früh am Morgen

Sozusagen noch tiefe Nacht!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Do 21.11.02 19:31 
Titel: Funktioniert, bis auf die Bildungsvorschrift
Hallo Ihr Fleißigen!

Also das von UGrohne funktioniert. (Unten der QT).

(Das von PeterLustig klappt bei mir auch nicht so richtig, obwohl der Code völlig logisch erscheint).

Nur leider muss irgendetwas an der Bildungsvorschrift nicht stimmen, da alle ungeraden Zahlen ausgegeben werden, und zwar:
1 3 5 7 9 11...

Ich brauche aber:
1 3 7 15 31...


Gibts da noch eine Idee?

Ottchen


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Rechne1Click(Sender: TObject);
var a, zahl, summe: integer;

begin
  a:=0;
  summe:=0;
  repeat
    StringGrid1.ColCount:=a;
    zahl:=2*a+1;
    StringGrid1.Cells[a,0]:=inttostr(zahl);
    summe:=summe+zahl;
    StringGrid1.Cells[a,1]:=inttostr(summe);
    Inc(a);
  until summe>=20;
  Panel2.Caption:=IntToStr(summe);
end;

_________________
See you.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 21.11.02 19:45 
Hi!

Ich habe das Ganze (meinen Code) mal ausprobiert. Die einzige Ändeurng war, dass ich statt des StringGrids eine Listbox verwendet habe, wo ich die Dinger eingetragen habe. Da kommt genau die Folge heraus, die Du haben willst.

Welche Fehlermeldung erhälst Du denn bzw. was gibt der Code bei Dir aus?

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 21.11.02 21:41 
Die Korrektur von Peter stimmt schon, dein QT muss so aussehen:
Zitat:
procedure TForm1.Rechne1Click(Sender: TObject);
var a, zahl, summe: integer;

begin
a:=0; zahl:=0;
summe:=0;
repeat
StringGrid1.ColCount:=a+1;
zahl:=2*zahl+1;
StringGrid1.Cells[a,0]:=inttostr(zahl);
summe:=summe+zahl;
StringGrid1.Cells[a,1]:=inttostr(summe);
Inc(a);
until summe>=20;
Panel2.Caption:=IntToStr(summe);
end;


Das a brauchst Du halt als Schleifenvaraible, damit das Grid richtig gefüllt wird. Achtung, Du musst bei ColCount 1 dazuzählen, weil die Variable bei 0 anfängt.
Das wird ja langsam richtig kompliziert *g*, aber so müssts gehen. Aber wie immer: Ungetestet ! *g*