Forum » Programiranje » [JAVA] [naloga]Rekurzivna metoda
[JAVA] [naloga]Rekurzivna metoda
dellorto ::
Lep pozdrav!
Z programiranjem sem se začel ukvarjati šele pred kratkim in potrebujem pomoč pri tejle nalogi(mi nekako ne rata );
Sestavi applet, ki kot parameter dobi naravno število n, ter nariše sliko reda n. Na spodnjih slikah so prikazane slike redov 0, 1 in 2. Največji krog naj ima središče v sredini appleta, polmer pa takšen, da je od najbližjega roba oddaljen 10 točk.
Z programiranjem sem se začel ukvarjati šele pred kratkim in potrebujem pomoč pri tejle nalogi(mi nekako ne rata );
Sestavi applet, ki kot parameter dobi naravno število n, ter nariše sliko reda n. Na spodnjih slikah so prikazane slike redov 0, 1 in 2. Največji krog naj ima središče v sredini appleta, polmer pa takšen, da je od najbližjega roba oddaljen 10 točk.
blaz_ ::
Zivjo
Tole je bila ena izmed nalog na FMF.
Kot pomoc pa naj ti povem le, da se da to nalogo resiti v 35-ih vrsticah in ni tezka.
Primercek rekurzije:
public static void(Graphics g, int n, int x, int y, int r){
g.drawOval(x,y,r,r);
if (n > 0)
{ //Kličemo rekurzije...
ovalR(g,(int)(n-1),x+5,y+5,r-10);
}
}
kaj naredi ta metoda pogruntaj sam. :)
Vec ne smem izdati.
lp blaz
Tole je bila ena izmed nalog na FMF.
Kot pomoc pa naj ti povem le, da se da to nalogo resiti v 35-ih vrsticah in ni tezka.
Primercek rekurzije:
public static void(Graphics g, int n, int x, int y, int r){
g.drawOval(x,y,r,r);
if (n > 0)
{ //Kličemo rekurzije...
ovalR(g,(int)(n-1),x+5,y+5,r-10);
}
}
kaj naredi ta metoda pogruntaj sam. :)
Vec ne smem izdati.
lp blaz
Ko tehnologija odpove, uporabi macolo.
Minotaurus ::
Zivijo!
Da se ga v 25 in manj.
Tele graficne rekurzije najbolje napises takole. (Skusal sem napraviti nekaksen kuharski recept
1. korak: Najprej napisi metodo, ki ti narise sliko reda 0. To je preprosta metoda, ki ji pac podas Graphics g, x0, y0 in r in ti narise krog s temi podatki (r je radij kroga). To ne bi smelo biti tezko. Potem v definiciji metode dodas se parameter n (public static void Krogi(Graphics g, int x0, int y0, int r, int n)).
2. korak: Potem glede na x0, y0 in r skusas dolocit nove x0, y0 in r iz katerih bos klical novo rekurzijo. To najbolje naredis, ce primerjas sliko reda 0 in 1 in se vprasat, kam moras postaviti nove kroge in s kaksnim radijem, da bos dobil novo sliko. V tem primeru si bos moral pomagati z enakostranicnim trikotnikom (visina je 0.5 * a * koren iz 3, ce je a stranica trikotnika).
3. korak: Napises klice nove rekurzije, s parametri g, xn, yn, r in n-1 (n-1 zato, da bos lahko v naslednjem koraku lahko poskrbel, da se ti rekurzija zakljuci).
4. korak: Poskrbis, da se ti rekurzija konca. To naredis s pomocjo n - ja. Pred klicem rekurzij dodas stavek, ki ti klice rekurzije samo takrat, ko je n>0. N bo namrec z vsakim novim klicem manjsi in ko bo n = 0, se bo rekurzija nehala klicati in se bo ustavila.
Za demonstracijo bom citiral blaza (ce lahko):
public static void ovalR(Graphics g, int n, int x, int y, int r){
g.drawOval(x,y,r,r); // to je prvi korak (s tem da pomeni T(x,y) zgornji levi kot in ne sredisca kroga!
if (n > 0){ //dodamo if stavek, da se rekurzija sploh konca - 4. korak
//Tukaj bos moral izracunati nove koordinate sredisca in radij - 2. korak
//Kličemo rekurzije... - 3. korak
ovalR(g,(int)(n-1),x+5,y+5,r-10);
}
}
5. korak: Na koncu poklicemo iz metode Paint tole Rekurzijo z zacetnimi parametri (x0, y0 - koordinati sredisca, r - zacetni radij in n stopnja).
public void paint(Graphics g)
{
int n=2;
int x0 = 200;
int y0 = 200;
int r = 200;
ovalR(g,n,x0,y0,r);
}
Upam da sva ti dovolj pomagala.
LP, Minotaurus
Da se ga v 25 in manj.
Tele graficne rekurzije najbolje napises takole. (Skusal sem napraviti nekaksen kuharski recept
1. korak: Najprej napisi metodo, ki ti narise sliko reda 0. To je preprosta metoda, ki ji pac podas Graphics g, x0, y0 in r in ti narise krog s temi podatki (r je radij kroga). To ne bi smelo biti tezko. Potem v definiciji metode dodas se parameter n (public static void Krogi(Graphics g, int x0, int y0, int r, int n)).
2. korak: Potem glede na x0, y0 in r skusas dolocit nove x0, y0 in r iz katerih bos klical novo rekurzijo. To najbolje naredis, ce primerjas sliko reda 0 in 1 in se vprasat, kam moras postaviti nove kroge in s kaksnim radijem, da bos dobil novo sliko. V tem primeru si bos moral pomagati z enakostranicnim trikotnikom (visina je 0.5 * a * koren iz 3, ce je a stranica trikotnika).
3. korak: Napises klice nove rekurzije, s parametri g, xn, yn, r in n-1 (n-1 zato, da bos lahko v naslednjem koraku lahko poskrbel, da se ti rekurzija zakljuci).
4. korak: Poskrbis, da se ti rekurzija konca. To naredis s pomocjo n - ja. Pred klicem rekurzij dodas stavek, ki ti klice rekurzije samo takrat, ko je n>0. N bo namrec z vsakim novim klicem manjsi in ko bo n = 0, se bo rekurzija nehala klicati in se bo ustavila.
Za demonstracijo bom citiral blaza (ce lahko):
public static void ovalR(Graphics g, int n, int x, int y, int r){
g.drawOval(x,y,r,r); // to je prvi korak (s tem da pomeni T(x,y) zgornji levi kot in ne sredisca kroga!
if (n > 0){ //dodamo if stavek, da se rekurzija sploh konca - 4. korak
//Tukaj bos moral izracunati nove koordinate sredisca in radij - 2. korak
//Kličemo rekurzije... - 3. korak
ovalR(g,(int)(n-1),x+5,y+5,r-10);
}
}
5. korak: Na koncu poklicemo iz metode Paint tole Rekurzijo z zacetnimi parametri (x0, y0 - koordinati sredisca, r - zacetni radij in n stopnja).
public void paint(Graphics g)
{
int n=2;
int x0 = 200;
int y0 = 200;
int r = 200;
ovalR(g,n,x0,y0,r);
}
Upam da sva ti dovolj pomagala.
LP, Minotaurus
dellorto ::
Hval za izčrpne odgovore.
Vprašal bi še tole:
-kako narišeš krog čez cel applet(da je lepo na sredini tudi ko applet razširiš)
-kako napisat koordinate notranjih krogov, ker drawOval zahteva int
Vprašal bi še tole:
-kako narišeš krog čez cel applet(da je lepo na sredini tudi ko applet razširiš)
-kako napisat koordinate notranjih krogov, ker drawOval zahteva int
OwcA ::
kako narišeš krog čez cel applet(da je lepo na sredini tudi ko applet razširiš)
Malo pogledaš dogodke za applet in ugotoviš, kaj se zgodi, ob spremembi velikosti, nato ustrezno ukrepaš (in seveda applet "povprašaš" po novih dimenzijah).
kako napisat koordinate notranjih krogov, ker drawOval zahteva int
Pretvoriš v ustrezen tip (in s tem tudi zaokrožiš).
Otroška radovednost - gonilo napredka.
Minotaurus ::
Za postavljanje na sredino uporabis metodi getWidth in getHeight, ki ti povesta visino in sirino appleta. Ce hoces, da je krog na sredini, moras vzeti polovico. Za r pa seveda vzames tistega, ki je manjsi.
int x0 = getWidth()/2;
int y0 = getHeight()/2;
Zaokrozevanje si bi pa lahko prebral v knjigi oz. poslusal na predavanjih.
g.drawOval((int)x0, (int)y0 ...); //ti odbije decimalke
(int) x0+0.5; //ti pa zaokrozi
int x0 = getWidth()/2;
int y0 = getHeight()/2;
Zaokrozevanje si bi pa lahko prebral v knjigi oz. poslusal na predavanjih.
g.drawOval((int)x0, (int)y0 ...); //ti odbije decimalke
(int) x0+0.5; //ti pa zaokrozi
There is no place like /home.
Zgodovina sprememb…
- spremenilo: Minotaurus ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# - domača nalogaOddelek: Programiranje | 2199 (1740) | IceBoX |
» | 4 v vrsto [java pomoč]Oddelek: Programiranje | 1479 (1306) | Spura |
» | java minolovecOddelek: Programiranje | 1509 (1360) | xordie |
» | [Java] Liha potencaOddelek: Programiranje | 1817 (1711) | bijonda |
» | [Java] GrafikaOddelek: Programiranje | 1454 (1221) | SkIDiver |