Strona 1 z 1

moje makra - frezowanie wielu okręgów...

: 15 cze 2010, 00:21
autor: mitek
var x, y, z, k, r, ox, oy, oxx, oyy, i: integer;
begin
clear;
x:= 110;//polozenie pierwszego dolnegio x
y:= 100;//polozenie pierwszego dolnegio y
k:= 5;//ilosc kolumn
ox:= 120; //odleglosc miedzy okregami x
oy:= 100; //odleglosc miedzy okregami y
r:= 30; //promien
//

oxx:= x;
oyy:= y;


for i:=k downto 1 do begin
elipsa(oxx,y,r,r,0);
oxx:= ox+oxx;
end;

oxx:= x;
for i:=k downto 1 do begin
elipsa(oxx,y+oy,r,r,0);
oxx:= ox+oxx;
end;

oxx:= x;
for i:=k downto 1 do begin
elipsa(oxx,y+oy+oy,r,r,0);
oxx:= ox+oxx;
end;

oxx:= x;
for i:=k downto 1 do begin
elipsa(oxx,y+oy+oy+oy,r,r,0);
oxx:= ox+oxx;
end;

oxx:= x;
for i:=k downto 1 do begin
elipsa(oxx,y+oy+oy+oy+oy,r,r,0);
oxx:= ox+oxx;
end;

selectall;
refresh;
end.
mi przydało się przy robieniu zasłon na grzejniki :) by zwiększyć ilość wierszy trzeba skopiować kilka linji

: 15 cze 2010, 21:04
autor: Piotr Rakowski
Moje gratulacje! Nadal podziwiam Cię kol. Mitek za inwencję. Bardzo fajnie sobie poradziłeś. Ponieważ nie jesteś programistą (co można poznać po kodzie ;-) )podaję Ci drugą, znacznie prostszą wersję powyższego kodu - wykonuje to samo: (!)

var x, y, z, k, r, ox, oy, oxx, oyy, i: integer;
begin
clear;
x:= 110; //polozenie pierwszego dolnego x
y:= 100; //polozenie pierwszego dolnego y
k:= 5; //ilosc kolumn
ox:= 120; //odleglosc miedzy okregami x
oy:= 100; //odleglosc miedzy okregami y
r:= 30; //promien

circle(x,y,r);
selectall;
arrayrectselection(ox,oy,k,k);
selectall;
refresh;
end.

: 15 cze 2010, 23:14
autor: mitek
arrayrectselection(ox,oy,k,k);

kurcze ta funkcja mi umknęła a szukałem czegoś takiego choć to chyba jeden z moich pierwszych programów później sobie rodziłem pętlami :)

programistom nie jestem wiec pewnie sporo robiłem w koło ale cel dla mnie się liczył a zmniejszanie kodu dla przyśpieszenia ... nie w takich małych skrypcikach

: 16 cze 2010, 05:21
autor: Piotr Rakowski
Ale jest bardzo fajnie. Widziałem w innych skryptach, że później zacząłeś sobie radzić też z podwójnymi pętlami (dla X i Y jednocześnie). Jest także funkcja:

arraypolarselection(dx, dx, kąt);
albo
matrycakolowa(...)

Umozliwia to np, "dziurkowanie" po okręgu, tworzenie różnych dziwnych kształtów, typu zęby kół itd.

Uwaga moja do programowania jest taka:

nie musisz w pętlach zawsze używać polecenia "downto", bo ono zmniejsza licznik. Możesz licznik zwiększać poleceniem "to", czyli:

for x:=1 to 100 do
begin
...
end;

A jeśli licznik ma być wartością nie stałą, bądź ułamkową możesz używać:

repeat
...
x := x + 0.5;
...
until x = 100.5;

: 16 cze 2010, 11:35
autor: mitek
oj już nie pamiętam jak to pisałem bo jak działało to zostawiałem ale wiem że chciałem zrobić przy pomocy

for x:=1 to 100 do
begin
...
end;

ale coś tam miałem problem z umieszczeniem pentli w pentli bo end mi kończyło ją przed zakończeniem że tak powiem zewnętrznej pentli....

: 17 cze 2010, 05:06
autor: Piotr Rakowski
Użycie pętli masz w niejednym przykładzie makr w eduCADzie.