gdzie tu mam błąd

0

procedure TForm1.FormPaint(Sender: TObject);
var
i,a, x,y : integer;
begin
y := 0;
x := 10;

for a:=0 to 50 do
begin

for i:=0 to 50 do
begin
szesc(x,y);
x := x+ 40;
end;
y := y +20;
end;

end;
procedure TForm1.szesc(x,y: integer);

begin
canvas.pen.Width := 3;

Canvas.MoveTo(x,y);
Canvas.LineTo(x + 20,y);

Canvas.MoveTo(x + 20,y);
Canvas.LineTo(x + 30,y + 20);

Canvas.MoveTo(x + 30,y + 20);
Canvas.LineTo(x + 20,y + 40);

Canvas.MoveTo(x + 20,y +40);
Canvas.LineTo(x, y +40);

Canvas.MoveTo(x,y+40);
Canvas.LineTo(x-1 0,y+20);

Canvas.MoveTo(x - 10,y + 20);
Canvas.LineTo(x,y);
end;

Ekran powinien się zapełnić sześciokątami lecz niestety tak nie jest wypełnia się tylko 1-wszy rząd co jest źle zrobione Czy pętla for do jest źle zagnieżdżona czy co

0

Ależ program rysuje te sześciokąty, ale - poza widocznym obszarem :)

  for a := 0 to 50 do
  begin

    for i := 0 to 50 do
    begin
      szesc( x, y );
      x := x + 40;
    end;
    y := y + 20;
  end;

Po pierwszym przejściu pętli "i" (tej wewnętrznej) x jest równe 2040, a po zwiększeniu "a" i ponownym wejściu w pętlę jest konsekwentnie dalej zwiększane :) Niby najprościej się uratować dodając instrukcję x := 10, ale dużo prościej będzie jeśli skonstruujesz pętle tak:

for x := 0 to 50 do
  for y := 0 to 50 do
    szesc( 10 + x * 40, y * 20 );

A na przyszłość - używaj breakpointów i klawiszy "F7", "F8", 'F9", czyli ogólnie - debuggera :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1