Pętla w układzie współrzędnych

0

Witam, raczej głupie i banalne pytanie, ale jakoś głowy do tego nie mam...
Pytanie brzmi jak zmienić pętle aby przy podziale układu współrzędnych wpisując konkretną wartość do zmiennej(z), został on podzielony po całej długości a nie tak jak w pętli od do (-3 to 3), jednocześnie aby nie wykraczało poza układ. Wiem że można zrobić to używając PaintBox ale wolał bym zrobić to bez tego.

 var i,z: integer; 

begin
  with Shape1.Canvas do
  begin
   moveto(20,220); lineto(420,220);
   moveto(220,20); lineto(220,420);
   Pen.mode := pmblack;
   Polygon([point(420,220),point(410,215),Point(410,225)]);
   textout(425,225,'x');
   Polygon([point(220,20),point(215,30),Point(225,30)]);
   textout(230,15,'y');
   z:=StrToInt(edit1.Text);
    for i:=-3 to 3 do
      begin
       moveto(220+z*i,215);
       lineto (220+z*i,225); 
       moveto(215,220+z*i);
       lineto (225,220+z*i); 
       textout(222+z*i,225,inttostr(i)); 
       if i <> 0 then
       textout (205,213+z*i,inttostr(-i)); 
    end;
  end;

Pozdrawiam

3
    m:=200 div z;
    for i:=-m to m do
0

Dzięki wielkie, nie było mnie na miejscu więc dopiero teraz odpisuje.

Jeszcze jedno małe pytanie, dało by rade jakoś przepisać dwie pętle while na "case of" chyba że ktoś ma lepszy pomysł aby to skrócić

begin

  a:=strtofloat(Edit1.Text);
  b:=strtofloat(Edit2.Text);
  c:=strtofloat(Edit3.Text);


  i:=0;
  while i < 420 do
  begin
  i:=i+1;
  x:=(i-220)/50;
  y:=a*x+b;
  j:=round((220-y*50));
  Shape1.Canvas.Pixels[i,j]:=clred;
  Shape1.Canvas.Pen.Color:=clred;
  end;

  i:=0;
  while i<420 do
    begin
    i:=i+1;
    x:=(i-220)/50;
    y:=a*sqr(x)+b*x+c; 
    j:=round((220-y*50));
    Shape1.Canvas.Pixels[i,j]:=clred;
    Shape1.Canvas.Pen.Color:=clred;
    end;
end;
0
for i:=1 to 420 do
  begin
    x:=(i-220)/50;
    Shape1.Canvas.Pixels[i,round((220-(a*x+b*50))]:=clred;
    Shape1.Canvas.Pixels[i,round((220-(a*sqr(x)+b*x+c)*50))]:=clred;
  end;
0

Problem w tym, że dwie funkcje nie powinny pojawiać się razem. Mam namyśli, że po wpisaniu zmiennej a i b (Edit1/2) zostanie wykonana pierwsza funkcja natomiast po wpisaniu a,b,c druga.

usunięcie cytowania całego poprzedniego posta - fp

0

Może byś tak łaskawie przeczytałeś byle jaki kurs paskala?

  a:=strtofloat(Edit1.Text);
  b:=strtofloat(Edit2.Text);
  if Length(Edit3.Text)>0 then
  begin 
    c:=strtofloat(Edit3.Text);
    for i:=1 to 420 do
    begin
      x:=(i-220)/50;
      Shape1.Canvas.Pixels[i,round((220-(a*sqr(x)+b*x+c)*50))]:=clred;
    end;
  end
  else
  begin
    for i:=1 to 420 do
    begin
      x:=(i-220)/50;
      Shape1.Canvas.Pixels[i,round((220-(a*x+b*50))]:=clred;
    end;
  end;

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