Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
blob Forumaš(ica)


Pridružen/a: 13. 07. 2007. (18:09:52) Postovi: (23)16
|
Postano: 22:03 pon, 21. 1. 2008 Naslov: Zadatak 8.30 |
|
|
Ide ovako:
[quote]Napišite program koji učitava prirodni broj [tt]n[/tt], te pomoću zvjezdica ("[tt]*[/tt]") iscrtava krug radijusa [tt]n[/tt] znakova.[/quote]
Traži se krug, dakle dio ravnine [i]ispunjen[/i] zvjezdicama. Jel' tako? Ne treba iscrtati samo kružnicu?
Poznato je iz analitičke geometrije da će krug činiti sve točke ravnine koje su za točno ili za manje od zadanog radijusa udaljene od središta, tj mora biti zadovoljeno, za sve točke kruga,
[latex]x^2+y^2\leq r^2[/latex], i znamo da, ako je radijus [tt]n[/tt], da u jednom redu ili stupcu ispisa programa može biti najviše 2*n zvjezdica. Iz toga slijedi da se brojači u for-petljama ne mogu postaviti da broje od -n do n, jer bi se izbrojao 2n+1 elemenata (zbog nule), pa sam sve podijelio da ide od n...1 i 1...n. Valjda se to može i elegantnije izvesti.
Evo kôda:
[code:1]
#include <stdio.h>
main(){
int i, j, k, n;
scanf("%d", &n);
for(i=-n; i<=1; i++)
{
for(j=n; j>=1; j--)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
for(j=1; j<=n; j++)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
for(k=1; k<=n; k++)
{
for(j=n; j>=1; j--)
{
if(k*k + j*j <= n*n) printf("*");
else printf(" ");
}
for(j=1; j<=n; j++)
{
if(k*k + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
return 0;}[/code:1]
Jedan od problema je npr. ispis: kako je razmak između zvjezdica manji od razmaka redaka, onda je taj krug stiješnjen pa više liči na elipsu nego na krug, npr. za n=17 izbaci
[code:1]
17
**********
****************
******************
********************
************************
************************
**************************
****************************
******************************
******************************
******************************
********************************
********************************
********************************
********************************
********************************
**********************************
********************************
********************************
********************************
********************************
********************************
********************************
******************************
******************************
******************************
****************************
**************************
************************
************************
********************
******************
****************
**********
[/code:1]
Probao sam umetati razmake između zvjezdica no to je samo pogoršalo stvar. Je li ovo uopće ono što se traži u zadatku?
Ide ovako:
Citat: | Napišite program koji učitava prirodni broj n, te pomoću zvjezdica ("*") iscrtava krug radijusa n znakova. |
Traži se krug, dakle dio ravnine ispunjen zvjezdicama. Jel' tako? Ne treba iscrtati samo kružnicu?
Poznato je iz analitičke geometrije da će krug činiti sve točke ravnine koje su za točno ili za manje od zadanog radijusa udaljene od središta, tj mora biti zadovoljeno, za sve točke kruga,
, i znamo da, ako je radijus n, da u jednom redu ili stupcu ispisa programa može biti najviše 2*n zvjezdica. Iz toga slijedi da se brojači u for-petljama ne mogu postaviti da broje od -n do n, jer bi se izbrojao 2n+1 elemenata (zbog nule), pa sam sve podijelio da ide od n...1 i 1...n. Valjda se to može i elegantnije izvesti.
Evo kôda:
Kod: |
#include <stdio.h>
main(){
int i, j, k, n;
scanf("%d", &n);
for(i=-n; i<=1; i++)
{
for(j=n; j>=1; j--)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
for(j=1; j<=n; j++)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
for(k=1; k<=n; k++)
{
for(j=n; j>=1; j--)
{
if(k*k + j*j <= n*n) printf("*");
else printf(" ");
}
for(j=1; j<=n; j++)
{
if(k*k + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
return 0;} |
Jedan od problema je npr. ispis: kako je razmak između zvjezdica manji od razmaka redaka, onda je taj krug stiješnjen pa više liči na elipsu nego na krug, npr. za n=17 izbaci
Kod: |
17
**********
****************
******************
********************
************************
************************
**************************
****************************
******************************
******************************
******************************
********************************
********************************
********************************
********************************
********************************
**********************************
********************************
********************************
********************************
********************************
********************************
********************************
******************************
******************************
******************************
****************************
**************************
************************
************************
********************
******************
****************
**********
|
Probao sam umetati razmake između zvjezdica no to je samo pogoršalo stvar. Je li ovo uopće ono što se traži u zadatku?
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
blob Forumaš(ica)


Pridružen/a: 13. 07. 2007. (18:09:52) Postovi: (23)16
|
Postano: 22:41 pon, 21. 1. 2008 Naslov: |
|
|
[quote="vsego"][quote="blob"]Je li ovo uopće ono što se traži u zadatku?[/quote]
Yup. :) Nisi cak niti morao izbjegavati onu nulu; princip je bitan. ;)
[/quote]
U tom slučaju (da je bitan princip :D) se sve može zapisati i kraće, no ne toliko precizno (u najširem redu neće biti točno 2*n zvjezdice):
[code:1]
#include<stdio.h>
int main(void){
int i, j, n;
scanf("%d", &n);
for(i=-n; i<=n; i++)
{
for(j=-n; j<=n; j++)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
return 0;}[/code:1]
:D
A sad idem kopati po settinzima. Noli turbare circulos meos, o konzolo! Krugovi trebaju biti krugovi, a ne elipse... :shock:
vsego (napisa): | blob (napisa): | Je li ovo uopće ono što se traži u zadatku? |
Yup. Nisi cak niti morao izbjegavati onu nulu; princip je bitan.
|
U tom slučaju (da je bitan princip ) se sve može zapisati i kraće, no ne toliko precizno (u najširem redu neće biti točno 2*n zvjezdice):
Kod: |
#include<stdio.h>
int main(void){
int i, j, n;
scanf("%d", &n);
for(i=-n; i<=n; i++)
{
for(j=-n; j<=n; j++)
{
if(i*i + j*j <= n*n) printf("*");
else printf(" ");
}
printf("\n");}
return 0;} |
A sad idem kopati po settinzima. Noli turbare circulos meos, o konzolo! Krugovi trebaju biti krugovi, a ne elipse...
|
|
[Vrh] |
|
blob Forumaš(ica)


Pridružen/a: 13. 07. 2007. (18:09:52) Postovi: (23)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
|