Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Shirohige Forumaš(ica)
Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16
Spol:
|
Postano: 18:05 sri, 5. 12. 2012 Naslov: |
|
|
[quote="vsego"]@Shirohige: Ovako napamet, djeluje mi ok. Mozda bi ti u slucaju negativnog reda bilo bolje mnoziti [tt]x[/tt] (umjesto dijeljenja [tt]t[/tt]) sa [tt]b[/tt]?[/quote]
Množenje sa x daje bolje rezultate, hvala!
Promijenio sam kod u:
[code:1]if(x>1.0 && x<t) k=0;
else
{
if (1-x>0.0) { p=x; while(p<1) { k--; p = p*b;} }
else while(x>=t) { k++; t *= b;}
}
[/code:1]
Pomoćna varijabla p zato da mogu x na kraju ispisati. Nego, je li to ovako s jedinicom dobro definirano?
Mislim na: [code:1]while(p<1)[/code:1]
Bilo koji b na nultu je 1 pa je max. desna granica za brojeve između -1 i 1 odnosno između 0 i 1 upravo jedinica, jer kad bi uspoređivao s bazom, onda bi mi rezultat ispao za jedan previše...
vsego (napisa): | @Shirohige: Ovako napamet, djeluje mi ok. Mozda bi ti u slucaju negativnog reda bilo bolje mnoziti x (umjesto dijeljenja t) sa b? |
Množenje sa x daje bolje rezultate, hvala!
Promijenio sam kod u:
Kod: | if(x>1.0 && x<t) k=0;
else
{
if (1-x>0.0) { p=x; while(p<1) { k--; p = p*b;} }
else while(x>=t) { k++; t *= b;}
}
|
Pomoćna varijabla p zato da mogu x na kraju ispisati. Nego, je li to ovako s jedinicom dobro definirano?
Mislim na:
Bilo koji b na nultu je 1 pa je max. desna granica za brojeve između -1 i 1 odnosno između 0 i 1 upravo jedinica, jer kad bi uspoređivao s bazom, onda bi mi rezultat ispao za jedan previše...
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
|
[Vrh] |
|
Shirohige Forumaš(ica)
Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16
Spol:
|
|
[Vrh] |
|
beuler Forumaš(ica)
Pridružen/a: 02. 11. 2012. (14:08:41) Postovi: (16)16
|
|
[Vrh] |
|
4017 Forumaš(ica)
Pridružen/a: 11. 03. 2012. (20:55:09) Postovi: (17)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 12:08 čet, 6. 12. 2012 Naslov: |
|
|
Vjerojatno najjednostavnije (nikako ne i optimalno):
[code:1]prvi = 2;
drugi = 3;
treci = 5;
while (drugi + treci <= n) {
prvi = drugi;
drugi = treci;
while (!prost(treci += 2));
}
/* sada je drugi+treci > n, pa najvise sto mozemo dobiti s dva uzastopna iznosi prvi+drugi */
if (prvi+drugi <= n) ispisi rezultat; else ispisi da takvog nema;[/code:1]
Kome se optimizira, vjerojatno je bolje krenuti od [tt]prvi = drugi = n/2[/tt], zatim smanjivati [tt]prvi[/tt] i povecavati [tt]drugi[/tt] dok ne postanu oba prosti, da se dobije pocetno stanje, a onda raditi korekcije (jer ovo moze ispasti premalo ili preveliko, moze biti da je [tt]n/2[/tt] prosto,...). Trenutno nemam ideja za neke dublje optimizacije, no to ionako spada u "za one koji zele znati vise".
Vjerojatno najjednostavnije (nikako ne i optimalno):
Kod: | prvi = 2;
drugi = 3;
treci = 5;
while (drugi + treci <= n) {
prvi = drugi;
drugi = treci;
while (!prost(treci += 2));
}
/* sada je drugi+treci > n, pa najvise sto mozemo dobiti s dva uzastopna iznosi prvi+drugi */
if (prvi+drugi <= n) ispisi rezultat; else ispisi da takvog nema; |
Kome se optimizira, vjerojatno je bolje krenuti od prvi = drugi = n/2, zatim smanjivati prvi i povecavati drugi dok ne postanu oba prosti, da se dobije pocetno stanje, a onda raditi korekcije (jer ovo moze ispasti premalo ili preveliko, moze biti da je n/2 prosto,...). Trenutno nemam ideja za neke dublje optimizacije, no to ionako spada u "za one koji zele znati vise".
_________________ 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.
|
|
[Vrh] |
|
nuclear Forumaš(ica)
Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16
Spol:
|
Postano: 14:55 čet, 6. 12. 2012 Naslov: |
|
|
Opet ja :) I opet mi je negdje greška i zbilja ju ne mogu pronaći...
zad. 64: Napišite program koji učitava prirodni broj n. Program treba ispisati najmanji prirodni broj m, veći ili jednak n, koji je prirodna potencija nekog prostog broja, tj. ima oblik m = p^k , gdje je p prost broj, a k neki prirodan broj.
Primjer: za n = 122, program treba ispisati 125, jer je 125 = 53 , a za n = 75, rezultat je 79, jer je 79 prost broj.
[code:1]
int main(){
int n, i, l, j;
scanf("%d", &n);
for(i=n; ; i++){
j=i;
for(l=2; l<j; l++){
if(prost(l) && j%l==0){
while(j%l==0){
j=j/l;}
if(j==1) goto p; }
}
}
p: printf("Broj je %d.\n", i);
return 0;}[/code:1]
Opet ja I opet mi je negdje greška i zbilja ju ne mogu pronaći...
zad. 64: Napišite program koji učitava prirodni broj n. Program treba ispisati najmanji prirodni broj m, veći ili jednak n, koji je prirodna potencija nekog prostog broja, tj. ima oblik m = p^k , gdje je p prost broj, a k neki prirodan broj.
Primjer: za n = 122, program treba ispisati 125, jer je 125 = 53 , a za n = 75, rezultat je 79, jer je 79 prost broj.
Kod: |
int main(){
int n, i, l, j;
scanf("%d", &n);
for(i=n; ; i++){
j=i;
for(l=2; l<j; l++){
if(prost(l) && j%l==0){
while(j%l==0){
j=j/l;}
if(j==1) goto p; }
}
}
p: printf("Broj je %d.\n", i);
return 0;} |
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 15:28 čet, 6. 12. 2012 Naslov: |
|
|
Sto se s tvojim programom desi ako broj [tt]j[/tt] ima vise prostih faktora, npr. [tex]\verb~j~ = 144 = 2^4 3^2[/tex]? Izvedi petlju do kraja, a ne samo do onog [tt]if[/tt]-a, i bit ce ti jasno.
Sto se s tvojim programom desi ako broj j ima vise prostih faktora, npr. [tex]\verb~j~ = 144 = 2^4 3^2[/tex]? Izvedi petlju do kraja, a ne samo do onog if-a, i bit ce ti jasno.
_________________ 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.
|
|
[Vrh] |
|
nicki minaj Forumaš(ica)
Pridružen/a: 15. 01. 2012. (02:34:45) Postovi: (11)16
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 17:15 pet, 7. 12. 2012 Naslov: |
|
|
[quote="nicki minaj"]imam pitanje za zadatak 71, koje se odnosi i na slicne takve. treba napisati program koji ucitava niz brojeva te ispisuje clanove niza koji ispune neki uvjet. je li u redu ako se trazeni brojevi ispisuju dok se jos ucitava niz?[/quote]
Naravno da je u redu. BTW, ako ne lupaš enter nakon svakog unosa, nego ukucaš sve što želiš unijeti (pojedine unose odvoji razmakom), pa tek onda stisneš enter, dobit ćeš ispis koji izgleda kao da je prvo izvršen unos, pa tek onda ispis.
nicki minaj (napisa): | imam pitanje za zadatak 71, koje se odnosi i na slicne takve. treba napisati program koji ucitava niz brojeva te ispisuje clanove niza koji ispune neki uvjet. je li u redu ako se trazeni brojevi ispisuju dok se jos ucitava niz? |
Naravno da je u redu. BTW, ako ne lupaš enter nakon svakog unosa, nego ukucaš sve što želiš unijeti (pojedine unose odvoji razmakom), pa tek onda stisneš enter, dobit ćeš ispis koji izgleda kao da je prvo izvršen unos, pa tek onda ispis.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
nicki minaj Forumaš(ica)
Pridružen/a: 15. 01. 2012. (02:34:45) Postovi: (11)16
|
Postano: 17:33 pet, 7. 12. 2012 Naslov: |
|
|
[quote="mdoko"][quote="nicki minaj"]imam pitanje za zadatak 71, koje se odnosi i na slicne takve. treba napisati program koji ucitava niz brojeva te ispisuje clanove niza koji ispune neki uvjet. je li u redu ako se trazeni brojevi ispisuju dok se jos ucitava niz?[/quote]
Naravno da je u redu. BTW, ako ne lupaš enter nakon svakog unosa, nego ukucaš sve što želiš unijeti (pojedine unose odvoji razmakom), pa tek onda stisneš enter, dobit ćeš ispis koji izgleda kao da je prvo izvršen unos, pa tek onda ispis.[/quote]
hvala puno :)
mdoko (napisa): | nicki minaj (napisa): | imam pitanje za zadatak 71, koje se odnosi i na slicne takve. treba napisati program koji ucitava niz brojeva te ispisuje clanove niza koji ispune neki uvjet. je li u redu ako se trazeni brojevi ispisuju dok se jos ucitava niz? |
Naravno da je u redu. BTW, ako ne lupaš enter nakon svakog unosa, nego ukucaš sve što želiš unijeti (pojedine unose odvoji razmakom), pa tek onda stisneš enter, dobit ćeš ispis koji izgleda kao da je prvo izvršen unos, pa tek onda ispis. |
hvala puno
|
|
[Vrh] |
|
math_student Forumaš(ica)
Pridružen/a: 02. 11. 2012. (16:38:58) Postovi: (18)16
Spol:
|
Postano: 11:58 sub, 8. 12. 2012 Naslov: |
|
|
88. zadatak(Napisite program koji ucitava niz cijelih brojeva, sve dok se ne unese broj nula. Taj zadnji broj je oznaka za kraj niza, ali
nije clan niza. Program treba ispisati koliko ima brojeva u tom nizu, koji su neka prirodna potencija broja 2, ili broja 3. Na
kraju, treba ispisati i najveci takav clan niza. Ako takvih clanova nema u nizu, treba ispisati odgovarajucu poruku.)
moj kod je http://pastebin.com/HdnGmjXy
pitanje: Dal je kod dobar? Je li bolje (i brze) raditi potencije "pjesice" ili?
hvala
88. zadatak(Napisite program koji ucitava niz cijelih brojeva, sve dok se ne unese broj nula. Taj zadnji broj je oznaka za kraj niza, ali
nije clan niza. Program treba ispisati koliko ima brojeva u tom nizu, koji su neka prirodna potencija broja 2, ili broja 3. Na
kraju, treba ispisati i najveci takav clan niza. Ako takvih clanova nema u nizu, treba ispisati odgovarajucu poruku.)
moj kod je http://pastebin.com/HdnGmjXy
pitanje: Dal je kod dobar? Je li bolje (i brze) raditi potencije "pjesice" ili?
hvala
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 12:04 sub, 8. 12. 2012 Naslov: |
|
|
Koristenje realne aritmetike u problemima s cjelobrojnim argumentima je uvijek losa ideja (osim ako je stvarno neizbjezno, ali trenutno mi niti jedan primjer ne pada na pamet).
Pogledaj algoritam za rastav na proste faktore uzastopnim dijeljenjem broja. Treba samo malo modificirati (slicno zadatku 64) i dobije se efikasni, cisto cjelobrojni algoritam za ovo.
P.S. Ne kazem da ti kolege ovo nece prihvatiti, ali pitao si je l' moze bolje.
Koristenje realne aritmetike u problemima s cjelobrojnim argumentima je uvijek losa ideja (osim ako je stvarno neizbjezno, ali trenutno mi niti jedan primjer ne pada na pamet).
Pogledaj algoritam za rastav na proste faktore uzastopnim dijeljenjem broja. Treba samo malo modificirati (slicno zadatku 64) i dobije se efikasni, cisto cjelobrojni algoritam za ovo.
P.S. Ne kazem da ti kolege ovo nece prihvatiti, ali pitao si je l' moze bolje.
_________________ 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.
|
|
[Vrh] |
|
celeste Forumaš(ica)
Pridružen/a: 31. 10. 2009. (11:56:09) Postovi: (23)16
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
Postano: 18:49 sub, 8. 12. 2012 Naslov: |
|
|
Provjeri grupu na fejsu ako si uclanjen/a, tamo ces naci hrpetinu zadataka na jednom mjestu. Ovako je glupo uploadati random na dosta bitnoj temi, pa "tko se snađe, snađe".
[url=http://speedy.sh/dvhA9/Zadaci-za-PK.rar]Ovdje[/url] mozes naci kodove za sve zadatke (mislim da ovdje ima i tudjih, nemam pojma iskreno sto se na kraju naslo u ovom folderu, znam samo da su numerirani prema zadacima s liste), ali ih bar 10 ovdje ne radi kako treba jer su neki dovrsavani na razlicitim racunalima, neki nisu optimizirani, neki su jednostavno losi, a neki su kroz silna kompajliranja i mijenjanja raznih varijanti totalno izgubili smisao, ali to ces vec vidjeti ako ce ti stvarno trebati, uglavnom, mozda pomogne.
Provjeri grupu na fejsu ako si uclanjen/a, tamo ces naci hrpetinu zadataka na jednom mjestu. Ovako je glupo uploadati random na dosta bitnoj temi, pa "tko se snađe, snađe".
Ovdje mozes naci kodove za sve zadatke (mislim da ovdje ima i tudjih, nemam pojma iskreno sto se na kraju naslo u ovom folderu, znam samo da su numerirani prema zadacima s liste), ali ih bar 10 ovdje ne radi kako treba jer su neki dovrsavani na razlicitim racunalima, neki nisu optimizirani, neki su jednostavno losi, a neki su kroz silna kompajliranja i mijenjanja raznih varijanti totalno izgubili smisao, ali to ces vec vidjeti ako ce ti stvarno trebati, uglavnom, mozda pomogne.
|
|
[Vrh] |
|
nuclear Forumaš(ica)
Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16
Spol:
|
Postano: 19:16 sub, 8. 12. 2012 Naslov: |
|
|
Zadatak 81: Napišite program koji učitava niz cijelih brojeva, sve dok se ne unese broj nula. Taj zadnji broj je oznaka za kraj niza, ali
nije član niza. Program treba ispisati broj brojeva iz tog niza kojima je vodeća znamenka u dekadskom zapisu jednaka 9
(vodeća znamenka = znamenka uz najvišu potenciju baze 10). Ako je niz prazan, treba ispisati odgovarajuću poruku.
Primjer: za niz brojeva 191, 92, 19, 9, brojevi 92 i 9 imaju vodeću znamenku 9, pa program treba ispisati 2.
Varijabla brojac mi nije dobra i ne mogu pronaći grešku. Ako nije teško nekom pogledati :)
[code:1]
#include<stdio.h>
int main(){
int x[100], i=0, brojac=0, pot, max=0, broj;
while(1){
scanf("%d", &x[i]);
if(x[i]==0) break;
pot=10;
broj=x[i];
while(broj>0){
if(broj/pot==0){
broj=broj/(pot/10);
if((broj%10)==9) {
++brojac;
broj/=pot;}
else {
brojac=0;
broj/=pot; } }
else pot*=10;
}
if(brojac>max) max=brojac;
++i;}
printf("Najdulji niz je duljine: %d\n", max);
return 0;}[/code:1]
Zadatak 81: Napišite program koji učitava niz cijelih brojeva, sve dok se ne unese broj nula. Taj zadnji broj je oznaka za kraj niza, ali
nije član niza. Program treba ispisati broj brojeva iz tog niza kojima je vodeća znamenka u dekadskom zapisu jednaka 9
(vodeća znamenka = znamenka uz najvišu potenciju baze 10). Ako je niz prazan, treba ispisati odgovarajuću poruku.
Primjer: za niz brojeva 191, 92, 19, 9, brojevi 92 i 9 imaju vodeću znamenku 9, pa program treba ispisati 2.
Varijabla brojac mi nije dobra i ne mogu pronaći grešku. Ako nije teško nekom pogledati
Kod: |
#include<stdio.h>
int main(){
int x[100], i=0, brojac=0, pot, max=0, broj;
while(1){
scanf("%d", &x[i]);
if(x[i]==0) break;
pot=10;
broj=x[i];
while(broj>0){
if(broj/pot==0){
broj=broj/(pot/10);
if((broj%10)==9) {
++brojac;
broj/=pot;}
else {
brojac=0;
broj/=pot; } }
else pot*=10;
}
if(brojac>max) max=brojac;
++i;}
printf("Najdulji niz je duljine: %d\n", max);
return 0;} |
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:28 sub, 8. 12. 2012 Naslov: |
|
|
1. Nizovi ti uvode limit na broj ucitanih brojeva, a ovdje su cisti vishak, jer se samo broji koliko ima nekakvih elemenata (sto lako brojis tijekom ucitavanja).
2. Kako dobiti prvu nekog broja znamenku u bazi [tt]b[/tt]? Dijeljenjem s [tt]b[/tt] dok ne dobijes jednoznamenkasti broj:
[code:1]t = n;
while (t >= b) t /= b;
printf("Prva znamenka broja %d u bazi %d je %d.\n", n, b, t);[/code:1]
Ne treba nikakvo potenciranje i sl.
3. Zasto u onom [tt]else[/tt] resetiras [tt]brojac[/tt] natrag na nulu?
4. Glede ispisa, sto je "najdulji niz"? Toga nema u zadatku.
@Svi koji se misle igrati s gotovim (i, jos gore, neautoriziranim) rjesenjima zadataka poput ovih gore, ne krivite ekipu s kolegija ako popadate. Dovoljno puta je receno da se programiranje ne uci citanjem gotovih kodova (cak i ako su dobri), nego samostalnim pokusajima na racunalu.
1. Nizovi ti uvode limit na broj ucitanih brojeva, a ovdje su cisti vishak, jer se samo broji koliko ima nekakvih elemenata (sto lako brojis tijekom ucitavanja).
2. Kako dobiti prvu nekog broja znamenku u bazi b? Dijeljenjem s b dok ne dobijes jednoznamenkasti broj:
Kod: | t = n;
while (t >= b) t /= b;
printf("Prva znamenka broja %d u bazi %d je %d.\n", n, b, t); |
Ne treba nikakvo potenciranje i sl.
3. Zasto u onom else resetiras brojac natrag na nulu?
4. Glede ispisa, sto je "najdulji niz"? Toga nema u zadatku.
@Svi koji se misle igrati s gotovim (i, jos gore, neautoriziranim) rjesenjima zadataka poput ovih gore, ne krivite ekipu s kolegija ako popadate. Dovoljno puta je receno da se programiranje ne uci citanjem gotovih kodova (cak i ako su dobri), nego samostalnim pokusajima na racunalu.
_________________ 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.
|
|
[Vrh] |
|
celeste Forumaš(ica)
Pridružen/a: 31. 10. 2009. (11:56:09) Postovi: (23)16
|
|
[Vrh] |
|
|