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

Pridružen/a: 20. 03. 2007. (21:35:45) Postovi: (40)16
Spol: 
|
Postano: 16:13 ned, 10. 2. 2008 Naslov: Zad 5.26 |
|
|
Napisi program koji ucitava prirodne brojeve dok ne ucita nulu. Program treba ispisati produkt znamenaka ( u bazi 8 ) svih ucitanih prostih brojeva. (Zad 5.26 u skripti)
Ja sam napiso ovako:
[quote="Kod"]#include <stdio.h>
int main() {
unsigned int t, x, prod=1, p, prost;
do {
p=2;
prost=1;
printf("Unesi x: "); scanf("%u", &x);
if (x==0) break;
while(prost && p<x) {
if(x&p==0) prost=0;
p++;
}
t=x;
if(prost) {
while(t>0) {
prod *=( t % 8 );
t /= 8;
}
}
}while (x);
printf ("Produkt svih znamenaka je %u\n", prod);
scanf("%%");
return 0;
}[/quote]
Ne znam di je greska pa ako neko moze pomoc. Hvala
Napisi program koji ucitava prirodne brojeve dok ne ucita nulu. Program treba ispisati produkt znamenaka ( u bazi 8 ) svih ucitanih prostih brojeva. (Zad 5.26 u skripti)
Ja sam napiso ovako:
Kod (napisa): | #include <stdio.h>
int main() {
unsigned int t, x, prod=1, p, prost;
do {
p=2;
prost=1;
printf("Unesi x: "); scanf("%u", &x);
if (x==0) break;
while(prost && p<x) {
if(x&p==0) prost=0;
p++;
}
t=x;
if(prost) {
while(t>0) {
prod *=( t % 8 );
t /= 8;
}
}
}while (x);
printf ("Produkt svih znamenaka je %u\n", prod);
scanf("%%");
return 0;
} |
Ne znam di je greska pa ako neko moze pomoc. Hvala
_________________ In such situations, when layer is put upon layer, when all is a facade, wound within webs of deception, the truth is what you make of it.
Nothing pains a liar more than when an opponent turns one of his lies into truth.
Zadnja promjena: Artemis; 16:58 ned, 10. 2. 2008; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 16:48 ned, 10. 2. 2008 Naslov: Re: Zad 5.26 |
|
|
[quote="Artemis"]
if(x&p==0) prost=0;
[/quote]
To smrdi ;)
A i malo ti je čudan program, bar meni. do-while je nepotrebno, dovoljno je staviti while (1) {} pa unutra breakat ako je učitana nula i ne kužim kaj će ti prost...za svaki učitani broj trebaš cijepat ga na znamenke u bazi 8 i produkt povećavat...drugo ti ne treba...naravno, jedna od tih znamenki može bit nula, al i to se događa u životu.
I daj to stavi u [code:1]KOD[/code:1], preglednije je i ljepše ;)
edit: sad vidjeh u skripti da u taj produkt idu samo prosti...pao nda provjera dal je prost treba
Artemis (napisa): |
if(x&p==0) prost=0;
|
To smrdi
A i malo ti je čudan program, bar meni. do-while je nepotrebno, dovoljno je staviti while (1) {} pa unutra breakat ako je učitana nula i ne kužim kaj će ti prost...za svaki učitani broj trebaš cijepat ga na znamenke u bazi 8 i produkt povećavat...drugo ti ne treba...naravno, jedna od tih znamenki može bit nula, al i to se događa u životu.
I daj to stavi u , preglednije je i ljepše
edit: sad vidjeh u skripti da u taj produkt idu samo prosti...pao nda provjera dal je prost treba
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
|
|
[Vrh] |
|
Artemis Forumaš(ica)

Pridružen/a: 20. 03. 2007. (21:35:45) Postovi: (40)16
Spol: 
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
dvičak Forumaš(ica)


Pridružen/a: 02. 11. 2006. (17:55:13) Postovi: (60)16
Spol: 
Lokacija: dj-zg
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 17:10 ned, 10. 2. 2008 Naslov: |
|
|
Evo nešto sklepano na brzinu, pa vidi...
[code:1]#include <stdio.h>
int main() {
unsigned int x;
int prod=1,prost,i;
while (1)
{
printf("Ucitaj x: ");
scanf("%u",&x);
if (x==0) break;
prost=1;
for (i=2;i<x/2;i++) if (x%i==0) {prost=0;break;}
if (prost)
while(x>0) {
prod *=( x % 8 );
x /= 8;
}
}
printf ("Produkt svih znamenaka je %d\n", prod);
scanf("%%");
return 0;
}[/code:1]
Evo nešto sklepano na brzinu, pa vidi...
Kod: | #include <stdio.h>
int main() {
unsigned int x;
int prod=1,prost,i;
while (1)
{
printf("Ucitaj x: ");
scanf("%u",&x);
if (x==0) break;
prost=1;
for (i=2;i<x/2;i++) if (x%i==0) {prost=0;break;}
if (prost)
while(x>0) {
prod *=( x % 8 );
x /= 8;
}
}
printf ("Produkt svih znamenaka je %d\n", prod);
scanf("%%");
return 0;
} |
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
|
|
[Vrh] |
|
Artemis Forumaš(ica)

Pridružen/a: 20. 03. 2007. (21:35:45) Postovi: (40)16
Spol: 
|
|
[Vrh] |
|
anam Forumaš(ica)

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 19:12 ned, 10. 2. 2008 Naslov: |
|
|
[quote="anam"]Imam zadatak koji mi traži ispis najmanjeg prostog djelitelja nekog broja, zapravo učitava n prirodnih brojeva i treba ispisati najmanji prosti djelitelj svakog učitanog broja, e pa mene zanima kako da izračunam taj neki prvi prosti djelitelj s kojim ću uspoređivat ostale jer nije isti za sve brojeve nikako, a kako god ja napravim meni ih ispiše sve a ne najmanji[/quote]
1. Učitaš niz n prirodnih brojeva i spremiš ih.
2. opet for petlja (ideš po nizu) i sad za svaki tražiš najmanji prost djelitelj. to radiš ovak: opet for petlja (od 2 do x[i]) i provjera dal je x[i] djeljiv s i. Kad naiđeš na prvog takvog ispišeš ga i breakneš (ovo pokriva slučaj i kad je x[i] prost)
I to je to ;)
p.s. Sve se to može čim učitaš i-ti broj, dakle situacija: [code:1]ucitaj broj: x[neki]
najmanji prost djelitelj od x[neki] je: nešto
učitaj broj: x[neki+1]
najmanji prost djelitelj od x[neki+1] je: nešto drugo[/code:1]
anam (napisa): | Imam zadatak koji mi traži ispis najmanjeg prostog djelitelja nekog broja, zapravo učitava n prirodnih brojeva i treba ispisati najmanji prosti djelitelj svakog učitanog broja, e pa mene zanima kako da izračunam taj neki prvi prosti djelitelj s kojim ću uspoređivat ostale jer nije isti za sve brojeve nikako, a kako god ja napravim meni ih ispiše sve a ne najmanji |
1. Učitaš niz n prirodnih brojeva i spremiš ih.
2. opet for petlja (ideš po nizu) i sad za svaki tražiš najmanji prost djelitelj. to radiš ovak: opet for petlja (od 2 do x[i]) i provjera dal je x[i] djeljiv s i. Kad naiđeš na prvog takvog ispišeš ga i breakneš (ovo pokriva slučaj i kad je x[i] prost)
I to je to
p.s. Sve se to može čim učitaš i-ti broj, dakle situacija: Kod: | ucitaj broj: x[neki]
najmanji prost djelitelj od x[neki] je: nešto
učitaj broj: x[neki+1]
najmanji prost djelitelj od x[neki+1] je: nešto drugo |
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
Zadnja promjena: Luuka; 19:17 ned, 10. 2. 2008; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
anam Forumaš(ica)

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 19:36 ned, 10. 2. 2008 Naslov: |
|
|
Ne trebaju nizovi za to (ucitas prvog, ispise, ucitas drugog, ispises,...). ;)
U skripti ima brzi ispis svih prostih faktora u rastucem poretku; koliko je tesko modificirati da taj ispis stane kad se ispise neki (dakle prvi) prosti faktor? :D
Inace, najmanji prosti faktor je jednak najmanjem djelitelju vecem od 1 (dokazite sami zasto). :)
Dakle:
[code:1]for (i = 0; i < n; i++) {
scanf("%d", &x);
if (x < 0) x = -x; /* ako zelis pokupiti i negativne cijele brojeve, a ne samo prirodne */
if (x < 2) continue; /* nema prostih djelitelja */
p = 2;
while (x % p) p++;
printf("%d\n", p);
}[/code:1]
8)
Ne trebaju nizovi za to (ucitas prvog, ispise, ucitas drugog, ispises,...).
U skripti ima brzi ispis svih prostih faktora u rastucem poretku; koliko je tesko modificirati da taj ispis stane kad se ispise neki (dakle prvi) prosti faktor?
Inace, najmanji prosti faktor je jednak najmanjem djelitelju vecem od 1 (dokazite sami zasto).
Dakle:
Kod: | for (i = 0; i < n; i++) {
scanf("%d", &x);
if (x < 0) x = -x; /* ako zelis pokupiti i negativne cijele brojeve, a ne samo prirodne */
if (x < 2) continue; /* nema prostih djelitelja */
p = 2;
while (x % p) p++;
printf("%d\n", p);
} |
_________________ 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] |
|
anam Forumaš(ica)

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
|
[Vrh] |
|
vsego Site Admin


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

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
Postano: 20:20 ned, 10. 2. 2008 Naslov: |
|
|
evo za ovo mi ispiše samo najveći prosti djelitelj zadnjeg elementa niza, šta je krivo?
[code:1]#include <stdio.h>
int main(void) {
int n,i, x[100],max_prost,p=2;
scanf ("%d", &n);
for (i=0;i<n;i++)
{
scanf("%d",&x[i]);}
for (i=0;i<n;i++)
while (x[i] > 1) {
if (x[i] % p == 0) {
max_prost = p;
while (x[i] % p == 0) x[i] /= p;
}
p++;
}
printf ("%d\n", max_prost);
scanf("%%");
return 0;
}[/code:1]
evo za ovo mi ispiše samo najveći prosti djelitelj zadnjeg elementa niza, šta je krivo?
Kod: | #include <stdio.h>
int main(void) {
int n,i, x[100],max_prost,p=2;
scanf ("%d", &n);
for (i=0;i<n;i++)
{
scanf("%d",&x[i]);}
for (i=0;i<n;i++)
while (x[i] > 1) {
if (x[i] % p == 0) {
max_prost = p;
while (x[i] % p == 0) x[i] /= p;
}
p++;
}
printf ("%d\n", max_prost);
scanf("%%");
return 0;
} |
|
|
[Vrh] |
|
vsego Site Admin


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

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
|
[Vrh] |
|
vsego Site Admin


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

Pridružen/a: 19. 10. 2007. (16:24:34) Postovi: (B5)16
Lokacija: My Hercegovina!!!!!
|
Postano: 21:23 ned, 10. 2. 2008 Naslov: |
|
|
evo za ovo tu i unos brojeva 3, 4, 5, 6 dobijem ispis četiri osmice, mislim vjerojatno sam napisala glupost al.....
[code:1]#include <stdio.h>
int main(void) {
int n,i, x[100],max_prost,p=2;
scanf ("%d", &n);
for (i=0;i<n;i++)
{
scanf("%d",&x[i]);}
for (i=0;i<n;i++)
while (x[i] > 1) {
if (x[i] % p == 0) {
max_prost==p;
printf ("%d\n", max_prost);
while (x[i] % p == 0) x[i] /= p;
}
p++;
}
scanf("%%");
return 0;
}[/code:1]
evo za ovo tu i unos brojeva 3, 4, 5, 6 dobijem ispis četiri osmice, mislim vjerojatno sam napisala glupost al.....
Kod: | #include <stdio.h>
int main(void) {
int n,i, x[100],max_prost,p=2;
scanf ("%d", &n);
for (i=0;i<n;i++)
{
scanf("%d",&x[i]);}
for (i=0;i<n;i++)
while (x[i] > 1) {
if (x[i] % p == 0) {
max_prost==p;
printf ("%d\n", max_prost);
while (x[i] % p == 0) x[i] /= p;
}
p++;
}
scanf("%%");
return 0;
} |
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 21:37 ned, 10. 2. 2008 Naslov: |
|
|
[tt]max_prost[color=red]==[/color]p;[/tt] nije pridruzivanje. :?
[tt]p[/tt] treba inicijalizirati za svaki [tt]x[/tt], a ne na pocetku. :?
Ispis [tt]printf("%d\n", max_prost);[/tt] treba ici za svaki [tt]x[/tt], a ne za svaki [tt]p[/tt]. :?
Sve skupa ti je jako nepregledno, jer ne pazis na lijepo uvlacenje i normalno je da se pogubis. :( Vidi kako to izgleda kad se pise uredno (i bez nizova, jer nigdje u zadatku ne pise da ima najvise 100 brojeva):
[code:1]#include <stdio.h>
int main(void) {
int n, i, x, max_prost, p;
scanf("%d", &n);
for (i = 0; i < n; i++) {
p = 2;
scanf("%d", &x);
if (x < 2) continue;
while (x > 1) {
if (x % p == 0) {
max_prost = p;
while (x % p == 0) x /= p;
}
p++;
}
printf("%d\n", max_prost);
}
scanf("%%");
return 0;
}[/code:1]
8)
max_prost==p; nije pridruzivanje.
p treba inicijalizirati za svaki x, a ne na pocetku.
Ispis printf("%d\n", max_prost); treba ici za svaki x, a ne za svaki p.
Sve skupa ti je jako nepregledno, jer ne pazis na lijepo uvlacenje i normalno je da se pogubis. Vidi kako to izgleda kad se pise uredno (i bez nizova, jer nigdje u zadatku ne pise da ima najvise 100 brojeva):
Kod: | #include <stdio.h>
int main(void) {
int n, i, x, max_prost, p;
scanf("%d", &n);
for (i = 0; i < n; i++) {
p = 2;
scanf("%d", &x);
if (x < 2) continue;
while (x > 1) {
if (x % p == 0) {
max_prost = p;
while (x % p == 0) x /= p;
}
p++;
}
printf("%d\n", max_prost);
}
scanf("%%");
return 0;
} |
_________________ 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] |
|
|