pomoc v pascale, asi pomocou rekurzie by sa to dalo spravit.
-
retsil
Light Star
- Príspevky: 293
- Registrovaný: 01 jan 2006, 16:02
- Bydlisko: ČSR
- Kontaktovať používateľa:
pomoc v pascale, asi pomocou rekurzie by sa to dalo spravit.
zdar mam taky problem, vsetko je vysvetlene na obrazku, za akukolvek pomoc vopred dik!!
Neviem, či sa aspoň trochu vyznáš v C. Momentálne nemám Pascal , takže som to urobil v C. Dôležitá je funkcia fill. (ak sa v tom nebudeš orientovať, môžem sa pokúsiť prerobiť to do Pascalu)
Kód: Vybrať všetko
#include <stdio.h>
#define SIRKA 10
#define VYSKA 10
int pole[SIRKA][VYSKA];
void init(void)
{
int i, j;
for (i = 0; i < SIRKA; i++) {
for (j = 0; j < VYSKA; j++) {
pole[i][j] = 0;
}
}
pole[1][2] = 1;
pole[2][2] = 1;
pole[0][3] = 1;
pole[1][3] = 1;
pole[2][3] = 1;
pole[2][4] = 1;
pole[3][4] = 1;
pole[1][5] = 1;
pole[2][5] = 1;
pole[3][5] = 1;
}
// x,y - poloha bodu, od ktoreho zacneme vyplnat
// c1 - farba policok, ktorym budeme menit farbu
// c2 - nova farba policok
void fill(int x, int y, int c1, int c2)
{
// skontrolujeme, ci je spravna poloha; ak nie vyskocime z funkcie
if (x < 0 || x >= SIRKA || y < 0 || y >= VYSKA)
return;
// skontrolujeme, ci je na aktualnej pozicii spravna farba; ak nie vyskocime z funkcie
if (pole[x][y] != c1)
return;
// printf("%ix%i - %i:%i\n", x, y, c1, pole[x][y]);
// pole vyplnime novou farbou
pole[x][y] = c2;
fill(x-1, y, c1, c2);
fill(x+1, y, c1, c2);
fill(x, y-1, c1, c2);
fill(x, y+1, c1, c2);
}
int main(void)
{
init();
fill(2, 4, 1, 2);
}NETESTOVANÉ
Kód: Vybrať všetko
const
SIRKA = 10;
VYSKA = 16;
var
plocha: array[0..SIRKA-1, 0..VYSKA-1] of Integer;
procedure fill(x, y, c1, c2: Integer);
begin
if x < 0 OR x >= SIRKA OR y < 0 OR y >= VYSKA then
return;
if (pole[x,y] <> c1) then
return;
pole[x,y] := c2;
fill(x-1, y, c1, c2);
fill(x+1, y, c1, c2);
fill(x, y-1, c1, c2);
fill(x, y+1, c1, c2);
end;-
retsil
Light Star
- Príspevky: 293
- Registrovaný: 01 jan 2006, 16:02
- Bydlisko: ČSR
- Kontaktovať používateľa:
tak na zaciatku mam toto
mam to v grafike, takze vlastne zistujem na ktore policko som klikol a potom prejdem do tej precedury klik
chapes ze ono to stale bude tu proceduru posuvat hore...mmm ale mam tam chybu, o tom viem a mozno uz aj tusim ako ju odsrtanim, tam treba este daku podmienku, ze ak to neni ta farba nech to posunie do ineho smeru
Kód: Vybrať všetko
repeat
kde_je_mys(x,y);
x:=(x-15) div 20;
y:=(y-110) div 20;
farba:=pole[x,y];
until left;
klik(x,y,farba);Kód: Vybrať všetko
procedure klik(px,py,pf:integer); //px,py:suradnice; pf:farba
begin
if (px>=1)and(px<=10)and(py>=1)and(py<=16) then begin // ci sa nachadzam vobec v tej matici
if pole[px,py]=pf then pole[px,py]:=256; // ak sa rovna farba, tak to zmeni na farbu 256
klik(px,py-1,pf);
klik(px+1,py,pf);
klik(px,py+1,pf);
klik(px-1,py,pf);
end;
end;Kód: Vybrať všetko
if pole[px,py]=pf then pole[px,py]:=256; // ak sa rovna farba, tak to zmeni na farbu 256Kód: Vybrať všetko
if pole[px,py] <> pf then return;
pole[px,py]:=256; // ak sa rovna farba, tak to zmeni na farbu 256-
retsil
Light Star
- Príspevky: 293
- Registrovaný: 01 jan 2006, 16:02
- Bydlisko: ČSR
- Kontaktovať používateľa:
nie nie, potom ked mam proceduru vypln ktora mi to prekresli, tak som tam mal prehodene parametr i j...takze teraz to uz vlastne ide...ale potreboval by som este dat ochranu, ze ked nema okolo seba tu istu farbu, tak to neprekresli... ale robi mi tu aj dake haluze ako napriklad, ze ten moj tvar mi prekresli ok, ale pri tom prekresli este aj nieco ine (ale nie vzdy), musim tam dat dake ochrany na tie suradnice...