Zadanie: Napisz program rysujacy 10 okregow, majacych losowe promienie i srodki w losowym miejscu na ekranie, ale tylko te, ktore mieszcza sie w obrebie ekranu calkowicie...
Udalo mi sie napisac program rysujace te 10 okregow; jak go skonczyc, by rysowal tylko te, ktore calkowicie mieszcza sie na ekranie?
Zalozenie: znana jest rozdzielczosc przez wykonanie wczesniej napisanego programiku:
begin
detectgraph(s,t);
initgraph(s,t,'c:\bp\bgi');
x:=getmaxx;
y:=getmaxy;
writeln(x,' ',y);
readln;
closegraph;
end.
Z gory dzieki za pomoc...
Oto te 'dzielo':
program okregi;
uses graph,crt;
var x,y,s,t,i,r:integer;
begin
randomize;
detectgraph(s,t);
initgraph(s,t,'C:\BP\BGI');
for i:=1 to 10 do
begin
x:=random(641);
y:=random(481);
r:=random(200);
circle(x,y,r);
end;
readln;
closegraph;
end.
pascal - jak to dokonczyc?
-
nykus
- Użytkownik

- Posty: 26
- Rejestracja: 11 sty 2006, o 01:17
- Płeć: Mężczyzna
- Lokalizacja: Zielona Góra
- Podziękował: 2 razy
- Pomógł: 5 razy
pascal - jak to dokonczyc?
Udało mi się wymyślić dwa sposoby:
I sposób.
Przed wyrysowaniem okręgu trzeba by sprawdzić (if'em) czy nie "wyjedzie" poza ekran. Czyli czy 0<=x-r, x+r<=getmaxx, o<=y-r, y-r<=getmaxy. Dopiero po sprawdzeniu tych warunków wyrysować okrąg. Całość trzeba wtedy zamknąć w pętli repeat (ewentualnie while), a nie for i dodatkowo zliczać wyrysowane okręgi (tak aby móc wyjść z pętli).
II sposób (moim zdaniem "ładniejszy"
).
Pozostajemy przy pętli for. Najpierw losujemy promień (do zmiennej r). Teraz dopiero będziemy losować współrzędne środka, ale w następujący sposób:
x:=r+random(getmaxx+1-2*r);
y:=r+random(getmaxy+1-2*r);
Przy takim określeniu x i y okrąg musi się mieścić na ekranie.
I sposób.
Przed wyrysowaniem okręgu trzeba by sprawdzić (if'em) czy nie "wyjedzie" poza ekran. Czyli czy 0<=x-r, x+r<=getmaxx, o<=y-r, y-r<=getmaxy. Dopiero po sprawdzeniu tych warunków wyrysować okrąg. Całość trzeba wtedy zamknąć w pętli repeat (ewentualnie while), a nie for i dodatkowo zliczać wyrysowane okręgi (tak aby móc wyjść z pętli).
II sposób (moim zdaniem "ładniejszy"
Pozostajemy przy pętli for. Najpierw losujemy promień (do zmiennej r). Teraz dopiero będziemy losować współrzędne środka, ale w następujący sposób:
x:=r+random(getmaxx+1-2*r);
y:=r+random(getmaxy+1-2*r);
Przy takim określeniu x i y okrąg musi się mieścić na ekranie.