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

trebam pomoć oko zadatka
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
michelangelo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 06. 2009. (22:59:23)
Postovi: (69)16
Spol: žensko
Sarma = la pohva - posuda
10 = 11 - 1

PostPostano: 19:41 pet, 12. 11. 2010    Naslov: Citirajte i odgovorite

znam da sigurno može kraće i bolje al molila bi nekog da mi objasni zašto ovo ne radi...

#include<stdio.h>
int main(){
int n, p, j, sum=0, i;

scanf("%d", &n);
if(n<=-13){
for(i=n; i<=-13; i++){
p=2; j=i;
while(j!=0){
if(j%p==0){
sum=sum+p;
j=j/p;
}}
p++;
}}
if(n>-13){
for(i=-13; i<=n; i++){
if(i==-1 || i==1 || i==0) continue;
p=2; j=i;
while(j!=0){
if(j%p==0){
sum=sum+p;
j=j/p;}}
p++;}
}
printf("%d", sum);
scanf("%%");
return 0;
}


znači u zadatku treba nać sumu svih prostih djelitelja brojeva od n do -13.

[size=9][color=#999999]Added after 39 minutes:[/color][/size]

[latex]#include<stdio.h>
int sumaprost(int x){
int p=2, sum=0;
if(x==-1 || x==0 || x==1) sum=0;
if(x<0)x=-x;
while(x>1){
if(x%p==0){
sum+=p;
x/=p;
}
p++;
}
return sum;
}

int main (){
int n, i, zbroj=0;
scanf("&d", &n);
if(n<=-13){
for(i=n;i<=-13; i++){
zbroj += sumaprost(i);}
}
else {
for(i=-13;i<=n; i++){
zbroj += sumaprost(i);}
printf("%d", zbroj);
return 0;
}
}[/latex]

[size=9][color=#999999]Added after 7 minutes:[/color][/size]

a zašto ovo ne radi? isti zadatak 134445456. pokušaj :((((





#include<stdio.h>

int sumaprost(int x){
int p=2, sum=0;
if(x==-1 || x==0 || x==1) sum=0;
if(x<0)x=-x;
while(x>1){
if(x%p==0){
sum+=p;
x/=p;
}
p++;
}
return sum;
}

int main (){
int n, i, zbroj=0;
scanf("&d", &n);
if(n<=-13){
for(i=n;i<=-13; i++){
zbroj += sumaprost(i);}
}
else {
for(i=-13;i<=n; i++){
zbroj += sumaprost(i);}
}
printf("%d", zbroj);
return 0;
}
znam da sigurno može kraće i bolje al molila bi nekog da mi objasni zašto ovo ne radi...

#include<stdio.h>
int main(){
int n, p, j, sum=0, i;

scanf("%d", &n);
if(n⇐-13){
for(i=n; i⇐-13; i++){
p=2; j=i;
while(j!=0){
if(j%p==0){
sum=sum+p;
j=j/p;
}}
p++;
}}
if(n>-13){
for(i=-13; i⇐n; i++){
if(i==-1 || i==1 || i==0) continue;
p=2; j=i;
while(j!=0){
if(j%p==0){
sum=sum+p;
j=j/p;}}
p++;}
}
printf("%d", sum);
scanf("%%");
return 0;
}


znači u zadatku treba nać sumu svih prostih djelitelja brojeva od n do -13.

Added after 39 minutes:



Added after 7 minutes:

a zašto ovo ne radi? isti zadatak 134445456. pokušaj Sad(((





#include<stdio.h>

int sumaprost(int x){
int p=2, sum=0;
if(x==-1 || x==0 || x==1) sum=0;
if(x<0)x=-x;
while(x>1){
if(x%p==0){
sum+=p;
x/=p;
}
p++;
}
return sum;
}

int main (){
int n, i, zbroj=0;
scanf("&d", &n);
if(n⇐-13){
for(i=n;i⇐-13; i++){
zbroj += sumaprost(i);}
}
else {
for(i=-13;i⇐n; i++){
zbroj += sumaprost(i);}
}
printf("%d", zbroj);
return 0;
}


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


Pridružen/a: 15. 05. 2010. (18:46:07)
Postovi: (164)16
Sarma: -

PostPostano: 20:10 pet, 12. 11. 2010    Naslov: Re: a ovako????????????????? Citirajte i odgovorite

U programu se kriju tri problematične greške koje ga ujedno sprječavaju da se program izvrši i da dođe do kraja.

1) Uvjet "j!=0" je uvijek istinit zbog toga što, kada određeni broj j dijeliš prostim brojevima, on će u određenom koraku doći do vrijednosti -1 ili 1 (ovisi je li i negativan ili pozitivan). Uvjet "j%p==0" se nikada neće ispuniti jer je p>1 (i raste), stoga nikako neće dijeliti broj -1 ili 1. Shodno tome, broj j nikada neće biti jednak nuli i program je zaglavio u beskonačnoj while petlji.
2) Naredba "p++" je na krivom mjestu. Ona je izvan while petlje, što znači da ti zapravo j pokušavaš podijeliti s brojem 2 koliko god možeš, a to nije bio cilj.
Također, "p++" bi se trebao izvršiti samo ako broj j više nije djeljiv s trenutnim brojem p. Naime, j može, npr., biti djeljiv s 4, stoga bi trebali dva puta podijeliti s 2 i onda petlja ide dalje.
Program bi trebao ići ovako:
[code:1]while(j!=-1||j!=1)
{
if(j%p==0)
{
...
}
else
++p;
}[/code:1]
3) Naredba "scanf("%%");" nema smisla, a još uz to i zaustavlja program te se ne može zatvoriti. To treba maknuti.

Program bi sada trebao raditi (barem meni radi)! :)
To je što se tiče tvoje prve verzije programa. Ovu drugu još nisam pogledao, sad ću je proučiti...

Inače, ako u zadatku slučajno piše "ignorirajući kratnost", tada bi za svaki broj svaki prosti djelitelj trebali ubrojiti samo jednom. Npr., ako je j=32, tada ne bi trebali sumi prebrojiti 2+2+2+2+2=12, nego samo 2. Tada samo ubaci uvjet koji će svaki prosti broj prebrojiti samo jednom.
Naravno, ako to ne piše, program ovako valja (pretpostavljam da se to traži).


P. S. Također, tvoj program uopće ne provjerava je li neki broj prost ili nije, međutim, to nije ni potrebno, zato što, kada određeni broj dijeliš s nekim prostim brojem koliko god možeš, taj broj poslije neće biti djeljiv s nijednim njegovim višekratnikom, tj. neće biti djeljiv s nijednim složenim brojem većim od njega. Stoga neće ni ići u traženu sumu. :D
(Ovo podsjeća na Eratostenovo sito s nedavnog predavanja, barem za moju grupu.)


------

Što se tiče druge verzije programa, imaš 2 ključne greške (inače program funkcionira):
1) Krivo unosiš broj n. Treba ići "%d", a ne "&n".
(Ovakve greške su vjerovatno najgore koje se mogu napraviti. Teško ih je vidjeti, ali se zato lako da iznervirati oko tvrdoglavog nefunkcionalnog programa.)
2) U funkciji, ispred "p++" treba ići "else" zbog toga što neki broj može biti djeljiv s nekom većom potencijom prostog broja (npr., s 4, 8, 16 ili više, a ne samo s 2).
U programu se kriju tri problematične greške koje ga ujedno sprječavaju da se program izvrši i da dođe do kraja.

1) Uvjet "j!=0" je uvijek istinit zbog toga što, kada određeni broj j dijeliš prostim brojevima, on će u određenom koraku doći do vrijednosti -1 ili 1 (ovisi je li i negativan ili pozitivan). Uvjet "j%p==0" se nikada neće ispuniti jer je p>1 (i raste), stoga nikako neće dijeliti broj -1 ili 1. Shodno tome, broj j nikada neće biti jednak nuli i program je zaglavio u beskonačnoj while petlji.
2) Naredba "p++" je na krivom mjestu. Ona je izvan while petlje, što znači da ti zapravo j pokušavaš podijeliti s brojem 2 koliko god možeš, a to nije bio cilj.
Također, "p++" bi se trebao izvršiti samo ako broj j više nije djeljiv s trenutnim brojem p. Naime, j može, npr., biti djeljiv s 4, stoga bi trebali dva puta podijeliti s 2 i onda petlja ide dalje.
Program bi trebao ići ovako:
Kod:
while(j!=-1||j!=1)
{
   if(j%p==0)
   {
       ...
   }
   else
      ++p;
}

3) Naredba "scanf("%%");" nema smisla, a još uz to i zaustavlja program te se ne može zatvoriti. To treba maknuti.

Program bi sada trebao raditi (barem meni radi)! Smile
To je što se tiče tvoje prve verzije programa. Ovu drugu još nisam pogledao, sad ću je proučiti...

Inače, ako u zadatku slučajno piše "ignorirajući kratnost", tada bi za svaki broj svaki prosti djelitelj trebali ubrojiti samo jednom. Npr., ako je j=32, tada ne bi trebali sumi prebrojiti 2+2+2+2+2=12, nego samo 2. Tada samo ubaci uvjet koji će svaki prosti broj prebrojiti samo jednom.
Naravno, ako to ne piše, program ovako valja (pretpostavljam da se to traži).


P. S. Također, tvoj program uopće ne provjerava je li neki broj prost ili nije, međutim, to nije ni potrebno, zato što, kada određeni broj dijeliš s nekim prostim brojem koliko god možeš, taj broj poslije neće biti djeljiv s nijednim njegovim višekratnikom, tj. neće biti djeljiv s nijednim složenim brojem većim od njega. Stoga neće ni ići u traženu sumu. Very Happy
(Ovo podsjeća na Eratostenovo sito s nedavnog predavanja, barem za moju grupu.)


------

Što se tiče druge verzije programa, imaš 2 ključne greške (inače program funkcionira):
1) Krivo unosiš broj n. Treba ići "%d", a ne "&n".
(Ovakve greške su vjerovatno najgore koje se mogu napraviti. Teško ih je vidjeti, ali se zato lako da iznervirati oko tvrdoglavog nefunkcionalnog programa.)
2) U funkciji, ispred "p++" treba ići "else" zbog toga što neki broj može biti djeljiv s nekom većom potencijom prostog broja (npr., s 4, 8, 16 ili više, a ne samo s 2).


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


Pridružen/a: 25. 06. 2009. (22:59:23)
Postovi: (69)16
Spol: žensko
Sarma = la pohva - posuda
10 = 11 - 1

PostPostano: 20:23 pet, 12. 11. 2010    Naslov: Citirajte i odgovorite

možda sam trebala stavit tekst zadatka:
Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (uvažavajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i -13 (uključivo).
re:1 imala sam skoro pa takav kod u 1. pokušaju. :D
re: 2.cilj mi je podijeliti broj s 2 koliko god puta mogu jer trebam uvažiti kratnost tj upravo ga hoću podijelit s dva koliko god ide pa onda kad više ne bude djeljiv onda povećam p ili ne? :(
možda sam trebala stavit tekst zadatka:
Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (uvažavajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i -13 (uključivo).
re:1 imala sam skoro pa takav kod u 1. pokušaju. Very Happy
re: 2.cilj mi je podijeliti broj s 2 koliko god puta mogu jer trebam uvažiti kratnost tj upravo ga hoću podijelit s dva koliko god ide pa onda kad više ne bude djeljiv onda povećam p ili ne? Sad


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


Pridružen/a: 15. 05. 2010. (18:46:07)
Postovi: (164)16
Sarma: -

PostPostano: 20:30 pet, 12. 11. 2010    Naslov: Citirajte i odgovorite

Aha, dakle užavajući kratnost. Dakle, program funkcionira. :)

"Skoro pa takav kod"? Šteta što to nije dovoljno za potpuno točno rješenje. Na natjecanjima u programiranju "skoro pa takav kod" ne bi donio nijedan bod. No, to je druga priča. :D
Zezam se malo. Uspješno si iskodirala program, uz 2 do 3 greškice (premda su bile fatalne za uspješno izvršavanje programa, kvantiteta grešaka je pohvalna). Bez obzira što ti se, kada si pokretala program, činilo da ti program apsolutno ne valja. Bravo! :)

Tako je, na taj način uvažavaš kratnost. Upravo zato ide "else". Kada ga ne bi bilo, ti bi imala, npr., sljedeću situaciju: broj x=4 podijeliš s p=2, rezultat je x=2. No, broj p raste na 3, 4, 5, ..., i tako u neudogled zbog toga što svi ti brojevi ne dijele x=2, a shodno tome, nikada neće vrijediti x=1. :)
Aha, dakle užavajući kratnost. Dakle, program funkcionira. Smile

"Skoro pa takav kod"? Šteta što to nije dovoljno za potpuno točno rješenje. Na natjecanjima u programiranju "skoro pa takav kod" ne bi donio nijedan bod. No, to je druga priča. Very Happy
Zezam se malo. Uspješno si iskodirala program, uz 2 do 3 greškice (premda su bile fatalne za uspješno izvršavanje programa, kvantiteta grešaka je pohvalna). Bez obzira što ti se, kada si pokretala program, činilo da ti program apsolutno ne valja. Bravo! Smile

Tako je, na taj način uvažavaš kratnost. Upravo zato ide "else". Kada ga ne bi bilo, ti bi imala, npr., sljedeću situaciju: broj x=4 podijeliš s p=2, rezultat je x=2. No, broj p raste na 3, 4, 5, ..., i tako u neudogled zbog toga što svi ti brojevi ne dijele x=2, a shodno tome, nikada neće vrijediti x=1. Smile


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


Pridružen/a: 25. 06. 2009. (22:59:23)
Postovi: (69)16
Spol: žensko
Sarma = la pohva - posuda
10 = 11 - 1

PostPostano: 20:39 pet, 12. 11. 2010    Naslov: Citirajte i odgovorite

brijem da je proradio :DDDDDDDDDD it's alive :D
pusti ti natjecanja iz programiranja..... nije to za mene.... :D
brijem da je proradio :DDDDDDDDDD it's alive Very Happy
pusti ti natjecanja iz programiranja..... nije to za mene.... Very Happy


[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