Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Zadatak 2.8. (vjezbe) (zadatak)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
aska
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 02. 11. 2005. (20:01:50)
Postovi: (5B)16
Sarma = la pohva - posuda
12 = 15 - 3

PostPostano: 18:10 pet, 30. 3. 2007    Naslov: Zadatak 2.8. (vjezbe) Citirajte i odgovorite

Zadatak koji sam ostala duzna na demonstraturama danas:

[quote]Zadatak 2.8 (pismeni ispit, 27.6.2005). Napisite rekurzivnu funk-
ciju koja uzima barem jedan argument x iz N. Funkcija treba vratiti
broj na koliko razlicitih nacina se x moze prikazati kao umnozak pri-
rodnih brojeva vecih od 1. Na primjer, za x = 12, funkcija treba vratiti
4 (2 · 2 · 3, 2 · 6, 3 · 4 i 12), za x = 30 treba vratiti 5 (2 · 3 · 5, 2 · 15,
3 · 10, 5 · 6, 30), a za x = 24 treba vratiti 7 (2 · 2 · 2 · 3, 2 · 2 · 6, 2 · 12,
2 · 3 · 4, 3 · 8, 4 · 6, 24).
Napisite i program kojim se testira funkcija (treba samo ucitati broj,
pozvati funkciju i ispisati rezultat).
Napomena: Uz argument x, funkcija smije primati dodatne po-
mocne argumente, ali nije dozvoljeno koristenje polja, lista, te globalnih
i static varijabli![/quote]

Rjesenje:

[code:1]
int f(int x,int max){
int i,rez=0;
if(x==1)return 1;

for(i=max;i<=x;i++) if((x%i)==0)rez+=f(x/i,i);

return rez; }
[/code:1]


Ok, problematican je dio bio izvesti da ne brojimo vise puta iste nacine (npr. za 12 su 223, 232 i 322 isti nacin).
Ideja je da gledamo samo uzlazno sortirane nizove( :arrow: 223).
Niz dobimo tako da dijelimo x s nekim prirodnim brojevima dok ne dobijemo 1 (u gornjem primjeru, 12 podijelimo s 2, pa ono sto dobijemo (6) dijelimo opet s 2 pa rezultat (3) dijelimo s 3).
Caka je u tome da svaki put nas broj dijelimo samo s brojevima jednakim ili vecim od onog s kojim smo zadnji put dijelili (i.e. kad jednom podijelimo 6 sa 2, iduci put ono sto dobijemo (3) mozemo dijeliti samo opet s 2 ili s 3 (jer nema smisla dijeliti 3 s brojevima vecim od 3)).
To izvedemo tako da uvedemo ekstra parametar max koji pamti koji je najveci broj s kojim smo dosad dijelili.

Prvi broj s kojim ima smisla dijeliti x je broj 2 ( nacin 1*x gleda se posljednji; u zadnjem koraku for petlje x dijelimo s x) pa se funkcija u mainu poziva sa f(x,2).


Btw, demonstratura ce iduci tjedan biti, samo ne u petak. :)
Bit ce neka obavijest na oglasnoj/forumu.
8)
Zadatak koji sam ostala duzna na demonstraturama danas:

Citat:
Zadatak 2.8 (pismeni ispit, 27.6.2005). Napisite rekurzivnu funk-
ciju koja uzima barem jedan argument x iz N. Funkcija treba vratiti
broj na koliko razlicitih nacina se x moze prikazati kao umnozak pri-
rodnih brojeva vecih od 1. Na primjer, za x = 12, funkcija treba vratiti
4 (2 · 2 · 3, 2 · 6, 3 · 4 i 12), za x = 30 treba vratiti 5 (2 · 3 · 5, 2 · 15,
3 · 10, 5 · 6, 30), a za x = 24 treba vratiti 7 (2 · 2 · 2 · 3, 2 · 2 · 6, 2 · 12,
2 · 3 · 4, 3 · 8, 4 · 6, 24).
Napisite i program kojim se testira funkcija (treba samo ucitati broj,
pozvati funkciju i ispisati rezultat).
Napomena: Uz argument x, funkcija smije primati dodatne po-
mocne argumente, ali nije dozvoljeno koristenje polja, lista, te globalnih
i static varijabli!


Rjesenje:

Kod:

int f(int x,int max){
    int i,rez=0;
    if(x==1)return 1;
       
    for(i=max;i<=x;i++) if((x%i)==0)rez+=f(x/i,i);
                                               
    return rez; }



Ok, problematican je dio bio izvesti da ne brojimo vise puta iste nacine (npr. za 12 su 223, 232 i 322 isti nacin).
Ideja je da gledamo samo uzlazno sortirane nizove( Arrow 223).
Niz dobimo tako da dijelimo x s nekim prirodnim brojevima dok ne dobijemo 1 (u gornjem primjeru, 12 podijelimo s 2, pa ono sto dobijemo (6) dijelimo opet s 2 pa rezultat (3) dijelimo s 3).
Caka je u tome da svaki put nas broj dijelimo samo s brojevima jednakim ili vecim od onog s kojim smo zadnji put dijelili (i.e. kad jednom podijelimo 6 sa 2, iduci put ono sto dobijemo (3) mozemo dijeliti samo opet s 2 ili s 3 (jer nema smisla dijeliti 3 s brojevima vecim od 3)).
To izvedemo tako da uvedemo ekstra parametar max koji pamti koji je najveci broj s kojim smo dosad dijelili.

Prvi broj s kojim ima smisla dijeliti x je broj 2 ( nacin 1*x gleda se posljednji; u zadnjem koraku for petlje x dijelimo s x) pa se funkcija u mainu poziva sa f(x,2).


Btw, demonstratura ce iduci tjedan biti, samo ne u petak. Smile
Bit ce neka obavijest na oglasnoj/forumu.
Cool



_________________
Ovcica
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
lela
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 10. 02. 2007. (13:57:40)
Postovi: (8)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 11:57 ned, 1. 4. 2007    Naslov: Citirajte i odgovorite

puno hvala
puno hvala


[Vrh]
Korisnički profil Pošaljite privatnu poruku
MKova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38)
Postovi: (187)16
Spol: muško
Sarma = la pohva - posuda
= 45 - 45

PostPostano: 18:24 sub, 7. 4. 2007    Naslov: Citirajte i odgovorite

ok, pitanje o materijalu s [url=http://degiorgi.math.hr/c/predavanja/predavanje_1.pdf]predavanja prof. Nogo, stranica 17[/url]

[code:1]
int x=3,a=5;
printf("%d\n",x);
printf("%p\n",&x); /* 0012FED4 */
printf("%p\n",&a); /* 0012FEC8 */
[b](int*)x=&a;[/b]
printf("%d\n",*(int*)x);
printf("%p\n",(int*)x);
printf("%p\n",&(int*)x);
printf("%p\n",x);
[/code:1]

što je [b][i](int*)x=&a[/i][/b]; ?? .... castanje x-a u pointer na integer pa spremanje u njega memorijske adrese od varijable a? U DevC++u stvar ne prolazi... Zar se integer može castat u pointer na integer?
ok, pitanje o materijalu s predavanja prof. Nogo, stranica 17

Kod:

int x=3,a=5;
printf("%d\n",x);
printf("%p\n",&x); /* 0012FED4 */
printf("%p\n",&a); /* 0012FEC8 */
[b](int*)x=&a;[/b]
printf("%d\n",*(int*)x);
printf("%p\n",(int*)x);
printf("%p\n",&(int*)x);
printf("%p\n",x);


što je (int*)x=&a; ?? .... castanje x-a u pointer na integer pa spremanje u njega memorijske adrese od varijable a? U DevC++u stvar ne prolazi... Zar se integer može castat u pointer na integer?



_________________
suradnici za razvoj igre traženi!! vidi ovo
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail MSNM
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 20:09 sub, 7. 4. 2007    Naslov: Citirajte i odgovorite

:shock: To je očito greška jer se vrijednost ne može pridružiti lijevoj strani, zato i ne prolazi u kompajleru.

Možda je taj int* dio nekakav ostatak neke napomene.
Shocked To je očito greška jer se vrijednost ne može pridružiti lijevoj strani, zato i ne prolazi u kompajleru.

Možda je taj int* dio nekakav ostatak neke napomene.



_________________
-- space available for rent --
[Vrh]
Korisnički profil Pošaljite privatnu poruku
MKova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38)
Postovi: (187)16
Spol: muško
Sarma = la pohva - posuda
= 45 - 45

PostPostano: 23:11 sub, 7. 4. 2007    Naslov: Citirajte i odgovorite

[quote="pecina"]:shock: To je očito greška jer se vrijednost ne može pridružiti lijevoj strani, zato i ne prolazi u kompajleru.

Možda je taj int* dio nekakav ostatak neke napomene.[/quote]

...to sam i ja mislio, ali lijeva strana se isto evaluira kao i desna... recimo možeš napraviti:
[code:1]
x = 3 + y = 10;
[/code:1]
... i ovo:
[code:1]
*x = 10;
[/code:1]

... dakle nije očito da je isključeno da je na lijevoj strani neki složeniji izraz, a razlog zašto kompajler ne guta to je možda zbog neke potrebne deklaracije ili nečega prije tog primjera... ajde vi stara C garda sa 5+ godina na faksu, sigurno to znate :)
pecina (napisa):
Shocked To je očito greška jer se vrijednost ne može pridružiti lijevoj strani, zato i ne prolazi u kompajleru.

Možda je taj int* dio nekakav ostatak neke napomene.


...to sam i ja mislio, ali lijeva strana se isto evaluira kao i desna... recimo možeš napraviti:
Kod:

x = 3 + y = 10;

... i ovo:
Kod:

*x = 10;


... dakle nije očito da je isključeno da je na lijevoj strani neki složeniji izraz, a razlog zašto kompajler ne guta to je možda zbog neke potrebne deklaracije ili nečega prije tog primjera... ajde vi stara C garda sa 5+ godina na faksu, sigurno to znate Smile



_________________
suradnici za razvoj igre traženi!! vidi ovo
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail MSNM
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 16:20 ned, 8. 4. 2007    Naslov: Citirajte i odgovorite

[quote="MKova"]recimo možeš napraviti:
[code:1]
x = 3 + y = 10;
[/code:1]
[/quote]
:ccc: To nikako ne mozes napraviti. Ako to pokusas dobijes
[quote="gcc 4.1.1"]
error: invalid lvalue in assignment
[/quote]
MKova (napisa):
recimo možeš napraviti:
Kod:

x = 3 + y = 10;


Ccc.... Sram te bilo... To nikako ne mozes napraviti. Ako to pokusas dobijes
gcc 4.1.1 (napisa):

error: invalid lvalue in assignment



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
MKova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38)
Postovi: (187)16
Spol: muško
Sarma = la pohva - posuda
= 45 - 45

PostPostano: 19:03 ned, 8. 4. 2007    Naslov: Citirajte i odgovorite

:oops: my bad, frend s 2. godine mi je rekao da se može i nisam provjerio

ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?
Embarassed my bad, frend s 2. godine mi je rekao da se može i nisam provjerio

ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?



_________________
suradnici za razvoj igre traženi!! vidi ovo
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail MSNM
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 19:19 ned, 8. 4. 2007    Naslov: Citirajte i odgovorite

[quote="MKova"]ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?[/quote]
Meni gcc tvrdi da [tt](int*)x[/tt] nije lvalue. Ako bas zelis adresu od varijable [tt]a[/tt] spremiti u integer varijablu [tt]x[/tt], onda to napravi ovako: [code:1]x = (int) &a;[/code:1]
MKova (napisa):
ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?

Meni gcc tvrdi da (int*)x nije lvalue. Ako bas zelis adresu od varijable a spremiti u integer varijablu x, onda to napravi ovako:
Kod:
x = (int) &a;



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
MKova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38)
Postovi: (187)16
Spol: muško
Sarma = la pohva - posuda
= 45 - 45

PostPostano: 20:26 ned, 8. 4. 2007    Naslov: Citirajte i odgovorite

[quote="mdoko"][quote="MKova"]ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?[/quote]
Meni gcc tvrdi da [tt](int*)x[/tt] nije lvalue. Ako bas zelis adresu od varijable [tt]a[/tt] spremiti u integer varijablu [tt]x[/tt], onda to napravi ovako: [code:1]x = (int) &a;[/code:1][/quote]

ma ja samo želim prokužiti što je greška u toj naredbi u skripti... ma nvm, ignoriram tu stranicu
mdoko (napisa):
MKova (napisa):
ali ok hoće li mi netko odgovoriti na početno pitanje? Jel ono greška ili nije?

Meni gcc tvrdi da (int*)x nije lvalue. Ako bas zelis adresu od varijable a spremiti u integer varijablu x, onda to napravi ovako:
Kod:
x = (int) &a;


ma ja samo želim prokužiti što je greška u toj naredbi u skripti... ma nvm, ignoriram tu stranicu



_________________
suradnici za razvoj igre traženi!! vidi ovo
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail MSNM
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 20:39 ned, 8. 4. 2007    Naslov: Citirajte i odgovorite

[quote="MKova"]
ma ja samo želim prokužiti što je greška u toj naredbi u skripti... ma nvm, ignoriram tu stranicu[/quote]
Ma, greska je u tome sto umjesto [tt](int*)x = &a;[/tt] treba pisati [tt]x = (int) &a;[/tt].

Nije problem u kastanju [tt]int[/tt]-a na [tt]int*[/tt], nego je problemu tome sto se kastovi ne mogu nalaziti s lijeve strane operatora [tt]=[/tt].
MKova (napisa):

ma ja samo želim prokužiti što je greška u toj naredbi u skripti... ma nvm, ignoriram tu stranicu

Ma, greska je u tome sto umjesto (int*)x = &a; treba pisati x = (int) &a;.

Nije problem u kastanju int-a na int*, nego je problemu tome sto se kastovi ne mogu nalaziti s lijeve strane operatora =.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 9:50 sri, 11. 4. 2007    Naslov: Citirajte i odgovorite

Odgovor MKovi: prof. koristi VS.NET i tamo ovakva konstrukcija radi i to tocno ono sto zelimo: tretira [tt]x[/tt] kao pointer na [tt]int[/tt] i onda unutra stavlja adresu od [tt]a[/tt]. 8)

Opcenito, na predavanjima se pokaze i ponesto "slobodnije" sintakse od one na kojoj inace inzistiramo (i koja se koristi na kolokvijima), da vidite cega jos ima "tamo vani". ;) Vjerujem da je prof. to spomenula na predavanju. :)
Odgovor MKovi: prof. koristi VS.NET i tamo ovakva konstrukcija radi i to tocno ono sto zelimo: tretira x kao pointer na int i onda unutra stavlja adresu od a. Cool

Opcenito, na predavanjima se pokaze i ponesto "slobodnije" sintakse od one na kojoj inace inzistiramo (i koja se koristi na kolokvijima), da vidite cega jos ima "tamo vani". Wink Vjerujem da je prof. to spomenula na predavanju. Smile



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan