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

Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Linadus Forumaš(ica)

Pridružen/a: 07. 09. 2010. (12:57:28) Postovi: (2C)16
|
Postano: 19:25 pon, 15. 11. 2010 Naslov: |
|
|
molim pomoc oko zadatka, za "male" brojeve ispada ok, ali nesto ne stima... :roll:
dakle, zadatak glasi:
"Napišite program koji učitava prirodne brojeve a i b, te u rastućem poretku ispisuje sve cijele brojeve oblika 5⋅4i-62 koji se nalaze između a i b (bez a i b). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!"
a moje 'rjesenje' je
[code:1]
#include <stdio.h>
int main (void)
{
int a, b, k = 1, i, j, broj;
scanf("%d", &a);
scanf("%d", &b);
if ( a < b )
{
for ( i = a + 1; i < b; i++)
{
for ( j=1; j <= i; j++) k = k*4;
broj = 5 * k - 62;
printf("%d ", broj);
}
}
if ( b < a )
{
for ( i = b + 1; i < a; i++)
{
for ( j=1; j <= i; j++) k = k*4;
broj = 5 * k - 62;
printf("%d ", broj);
}
}
if ( a == b ) printf("Nema takvih brojeva.");
return 0;
}
[/code:1]
???
molim pomoc oko zadatka, za "male" brojeve ispada ok, ali nesto ne stima...
dakle, zadatak glasi:
"Napišite program koji učitava prirodne brojeve a i b, te u rastućem poretku ispisuje sve cijele brojeve oblika 5⋅4i-62 koji se nalaze između a i b (bez a i b). Ispisane brojeve odvojite razmacima. Ako takvih brojeva nema, program ispisuje poruku "Nema takvih brojeva.". Pazite da tekst bude naveden točno kako piše (bez navodnika)!
Oprez: može biti a<b ili a>b ili a=b!"
a moje 'rjesenje' je
Kod: |
#include <stdio.h>
int main (void)
{
int a, b, k = 1, i, j, broj;
scanf("%d", &a);
scanf("%d", &b);
if ( a < b )
{
for ( i = a + 1; i < b; i++)
{
for ( j=1; j <= i; j++) k = k*4;
broj = 5 * k - 62;
printf("%d ", broj);
}
}
if ( b < a )
{
for ( i = b + 1; i < a; i++)
{
for ( j=1; j <= i; j++) k = k*4;
broj = 5 * k - 62;
printf("%d ", broj);
}
}
if ( a == b ) printf("Nema takvih brojeva.");
return 0;
}
|
???
|
|
[Vrh] |
|
pbakic Forumaš(ica)

Pridružen/a: 05. 10. 2009. (17:48:30) Postovi: (143)16
Spol: 
|
|
[Vrh] |
|
Phoenix Forumaš(ica)


Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
Postano: 19:56 pon, 15. 11. 2010 Naslov: |
|
|
Kod je pogrešan i program neće raditi ni približno ono što bi trebao. I to zato što si krivo formirala for petlje.
Također, kod ima neke manje propuste, kao npr., slučajevi kada je [latex]a \neq b[/latex], a rješenja nema (tada ne ispisuje ništa, a treba doći barem neki tekst); uporaba varijable k (ona kreće od 1, ali kada for petlja krene na novi broj, k se neće sam vratiti na 1, već će pamtiti staru vrijednost).
Dakle, za početak, dobro je što si razdvojila 3 slučaja, s obzirom na to kakvi su a i b. Također je dobro postavljen slučaj kada je a=b. Promatrajmo sada slučaj kada je, recimo, a<b.
Napravi for petlju (recimo, s varijablom i) koja se kreće od a+1 do b-1 (oba broja uključena, naravno) i pokušaj provjeriti je li on prikaziv kao [latex]5*4^k-62[/latex], tj. je li [latex]i=5*4^k-62[/latex], za neki [latex]k \in \mathbb{N} \cup \left\{ 0 \right\}[/latex] (ako je k izvan tog skupa, očito izraz [latex]5*4^k-62[/latex] ne bi bio prirodan broj, pa nema smisla tražiti). Kako ćemo to napraviti?
Imaš vrijednost od i (jer njime prolazimo kroz for petlju). Riješi jednadžbu po k! :D
Znači: zbroji i sa 62, podijeli i s 5 ako je djeljiv s njim (ako nije, onda idemo dalje na sljedeći broj u for petlji jer onda broj nije prikaziv na traženi način) i provjeri je li dobiveni i potencija broja 4. Ako da, ispiši ga. A ako ne, idi dalje na sljedeći broj jer taj očito nije prikaziv na traženi način.
I još mala napomena: kada radiš ovakav slučaj, ne možeš unaprijed znati postoji li takav broj, no možeš znati ukoliko ga pronađeš i ispišeš. Stoga ne bi bilo loše imati neku varijablu s nekom početnom vrijednošću koju ćeš poslije promijeniti čim nađeš neki broj. Recimo: inicijaliziraš p=0, a poslije u programu, čim ispisuje neko rješenje, obavezno staviš: p=1. Poslije samo provjeri je li p=0, jer, ako je, onda nisi ispisala nijedan broj u svom programu i onda trebaš ispisati prikladnu poruku. :)
Eto ti nekoliko smjernica za pisanje koda! :D
Napiši kod i, ako opet zapneš, samo ga pastaj ili reci u čemu je problem. :)
@pbakic: Ovo drugo. To sam se i ja pitao dok nisam pogledao kod. Inače ne bih ni ja znao. :P
Kod je pogrešan i program neće raditi ni približno ono što bi trebao. I to zato što si krivo formirala for petlje.
Također, kod ima neke manje propuste, kao npr., slučajevi kada je , a rješenja nema (tada ne ispisuje ništa, a treba doći barem neki tekst); uporaba varijable k (ona kreće od 1, ali kada for petlja krene na novi broj, k se neće sam vratiti na 1, već će pamtiti staru vrijednost).
Dakle, za početak, dobro je što si razdvojila 3 slučaja, s obzirom na to kakvi su a i b. Također je dobro postavljen slučaj kada je a=b. Promatrajmo sada slučaj kada je, recimo, a<b.
Napravi for petlju (recimo, s varijablom i) koja se kreće od a+1 do b-1 (oba broja uključena, naravno) i pokušaj provjeriti je li on prikaziv kao , tj. je li , za neki (ako je k izvan tog skupa, očito izraz ne bi bio prirodan broj, pa nema smisla tražiti). Kako ćemo to napraviti?
Imaš vrijednost od i (jer njime prolazimo kroz for petlju). Riješi jednadžbu po k!
Znači: zbroji i sa 62, podijeli i s 5 ako je djeljiv s njim (ako nije, onda idemo dalje na sljedeći broj u for petlji jer onda broj nije prikaziv na traženi način) i provjeri je li dobiveni i potencija broja 4. Ako da, ispiši ga. A ako ne, idi dalje na sljedeći broj jer taj očito nije prikaziv na traženi način.
I još mala napomena: kada radiš ovakav slučaj, ne možeš unaprijed znati postoji li takav broj, no možeš znati ukoliko ga pronađeš i ispišeš. Stoga ne bi bilo loše imati neku varijablu s nekom početnom vrijednošću koju ćeš poslije promijeniti čim nađeš neki broj. Recimo: inicijaliziraš p=0, a poslije u programu, čim ispisuje neko rješenje, obavezno staviš: p=1. Poslije samo provjeri je li p=0, jer, ako je, onda nisi ispisala nijedan broj u svom programu i onda trebaš ispisati prikladnu poruku.
Eto ti nekoliko smjernica za pisanje koda!
Napiši kod i, ako opet zapneš, samo ga pastaj ili reci u čemu je problem.
@pbakic: Ovo drugo. To sam se i ja pitao dok nisam pogledao kod. Inače ne bih ni ja znao.
Zadnja promjena: Phoenix; 19:59 pon, 15. 11. 2010; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
Linadus Forumaš(ica)

Pridružen/a: 07. 09. 2010. (12:57:28) Postovi: (2C)16
|
|
[Vrh] |
|
<gogo> Forumaš(ica)


Pridružen/a: 09. 09. 2010. (09:09:31) Postovi: (19)16
Spol: 
|
Postano: 9:56 čet, 18. 11. 2010 Naslov: |
|
|
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 34 (uključivo).
[code:1]#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, i, l=34, d, suma=0, k;
scanf ("%d", &n);
if (n>34) {l=n; n=34;}
for (i=n; i<=l; ++i)
{
k=i;
if (i<0) k=-1*i;
for (d=2; d<=k; ++d)
{
if (i%d==0) {suma=suma+d; k=k/d;}
if (k%d==0) d=d-1;
}
}
printf ("%d", suma);
return 0 ;
}
[/code:1]
zbrajam sve proste djelitelje brojeva izmedju n i 34...al nekaj je krivo :roll:
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 34 (uključivo).
Kod: | #include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, i, l=34, d, suma=0, k;
scanf ("%d", &n);
if (n>34) {l=n; n=34;}
for (i=n; i<=l; ++i)
{
k=i;
if (i<0) k=-1*i;
for (d=2; d<=k; ++d)
{
if (i%d==0) {suma=suma+d; k=k/d;}
if (k%d==0) d=d-1;
}
}
printf ("%d", suma);
return 0 ;
}
|
zbrajam sve proste djelitelje brojeva izmedju n i 34...al nekaj je krivo
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 13:53 čet, 18. 11. 2010 Naslov: |
|
|
Ovako nabrzinu (zurim, sorry)...
Probaj tijelo vanjske petlje provesti za i=12. Dodat ces mu dvojku, [b]jednom[/b], dakle bez uvazavanja kratnosti.
Problem je u
[tt]if (i%d==0) {suma=suma+d; k=k/d;}[/tt]
Baci oko u skriptu. Taj algoritmic se radi maaaaalo drugacije.
Ovako nabrzinu (zurim, sorry)...
Probaj tijelo vanjske petlje provesti za i=12. Dodat ces mu dvojku, jednom, dakle bez uvazavanja kratnosti.
Problem je u
if (i%d==0) {suma=suma+d; k=k/d;}
Baci oko u skriptu. Taj algoritmic se radi maaaaalo drugacije.
_________________ 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] |
|
Linadus Forumaš(ica)

Pridružen/a: 07. 09. 2010. (12:57:28) Postovi: (2C)16
|
Postano: 14:26 ned, 28. 11. 2010 Naslov: |
|
|
Imam zadatak: "Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (ignorirajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i 27 (uključivo)."
i kod programa:
[code:1]
#include <stdio.h>
int main(void)
{
int n, p, suma = 0, i, s;
scanf("%d", &n);
if(n < 27)
{
for(i = n; i <= 27; i++)
{
p = 2;
s = i;
while(s > 1)
{
if(s % p == 0) suma = suma + p;
while(!(s % p)) s = s / p;
p++;
}
}
}
else
{
for(i = 27; i <= n; i++)
{
p = 2;
s = i;
while(s > 1)
{
if(s % p == 0) suma = suma + p;
while(!(s % p)) s = s / p;
p++;
}
}
}
printf("%d", suma);
return 0;
}
[/code:1]
koji 'radi' za n-ove manje od 27, ali ne za vece...ne mogu skontat zasto...moze pomoc? :)
Imam zadatak: "Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (ignorirajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i 27 (uključivo)."
i kod programa:
Kod: |
#include <stdio.h>
int main(void)
{
int n, p, suma = 0, i, s;
scanf("%d", &n);
if(n < 27)
{
for(i = n; i <= 27; i++)
{
p = 2;
s = i;
while(s > 1)
{
if(s % p == 0) suma = suma + p;
while(!(s % p)) s = s / p;
p++;
}
}
}
else
{
for(i = 27; i <= n; i++)
{
p = 2;
s = i;
while(s > 1)
{
if(s % p == 0) suma = suma + p;
while(!(s % p)) s = s / p;
p++;
}
}
}
printf("%d", suma);
return 0;
}
|
koji 'radi' za n-ove manje od 27, ali ne za vece...ne mogu skontat zasto...moze pomoc?
|
|
[Vrh] |
|
Flame Forumaš(ica)

Pridružen/a: 12. 08. 2009. (02:14:39) Postovi: (53)16
Spol: 
|
|
[Vrh] |
|
chiko Forumaš(ica)


Pridružen/a: 14. 09. 2010. (17:43:27) Postovi: (E)16
Spol: 
|
Postano: 18:15 ned, 12. 12. 2010 Naslov: |
|
|
Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (ignorirajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i -4 (uključivo).
[code:1]
#include<stdio.h>
int main(void){
int n,suma,prost,i,j,temp;
scanf("%d",&n);
suma=0;
for(i=-4;i<=n;i++){
temp=i;
if(i<0)
temp=-i;
prost=1;
if(i!=0){
for(j=2;j<temp;j++){
if(i%j==0)
prost=0;}
if(prost=1)
suma=suma+i;}}
printf("%d",suma);
return 0;
}
[/code:1]
Neznam što mi je krivo , verifikator nikako neće da potvrdi.
Napišite program koji učitava cijeli broj n, te ispisuje sumu svih prostih djelitelja (ignorirajući kratnost) svih cijelih brojeva različitih od nule koji se nalaze između n i -4 (uključivo).
Kod: |
#include<stdio.h>
int main(void){
int n,suma,prost,i,j,temp;
scanf("%d",&n);
suma=0;
for(i=-4;i<=n;i++){
temp=i;
if(i<0)
temp=-i;
prost=1;
if(i!=0){
for(j=2;j<temp;j++){
if(i%j==0)
prost=0;}
if(prost=1)
suma=suma+i;}}
printf("%d",suma);
return 0;
}
|
Neznam što mi je krivo , verifikator nikako neće da potvrdi.
|
|
[Vrh] |
|
pbakic Forumaš(ica)

Pridružen/a: 05. 10. 2009. (17:48:30) Postovi: (143)16
Spol: 
|
Postano: 18:33 ned, 12. 12. 2010 Naslov: |
|
|
Ne znam dal je u tome stvar, ali pazi kad ucitavas n - ako je manji od -4, onda for petlja mora izgledat drukcije.
U svakom slucaju, ono sto treba doraditi je provjera dal je broj prost; slucaj kad je i=2 mora se provjeriti posebno, jer ce inace ova for petlja koju imas detektirati da je slozen (buduci da je djeljiv s 2).
(opcenito, provjeru dal je neki broj prost je najelegantnije rijesiti funkcijom)
Ne znam dal je u tome stvar, ali pazi kad ucitavas n - ako je manji od -4, onda for petlja mora izgledat drukcije.
U svakom slucaju, ono sto treba doraditi je provjera dal je broj prost; slucaj kad je i=2 mora se provjeriti posebno, jer ce inace ova for petlja koju imas detektirati da je slozen (buduci da je djeljiv s 2).
(opcenito, provjeru dal je neki broj prost je najelegantnije rijesiti funkcijom)
|
|
[Vrh] |
|
vsego Site Admin


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


Pridružen/a: 14. 09. 2010. (17:43:27) Postovi: (E)16
Spol: 
|
|
[Vrh] |
|
Phoenix Forumaš(ica)


Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16
Sarma: -
|
|
[Vrh] |
|
chiko Forumaš(ica)


Pridružen/a: 14. 09. 2010. (17:43:27) Postovi: (E)16
Spol: 
|
Postano: 19:52 ned, 12. 12. 2010 Naslov: |
|
|
[code:1]#include<stdio.h>
#include<stdlib.h>
int main(void){
double x,min,max,i,f;
scanf("%lf",&x);
min=x;
max=x;
for(i=1;i<9;i++){
scanf("%lf",&x);
if(abs(x)<abs(min))
min=x;
if(abs(x)>abs(max))
max=x;}
f=max*min;
printf("%g",f);
return 0;
}
[/code:1]
Zadatak 4:
Napišite program koji učitava 9 realnih brojeva, te ih ispisuje umnožak ona dva koji imaju najveću, odnosno najmanju apsolutnu vrijednost. Ako dva broja imaju jednaku apsolutnu vrijednost, za većeg/manjeg uzimate onog koji je prije učitan.
Rezultat obavezno ispišite koristeći format %g!
Ja pokušavam riješiti zadatak i nikako mi nece da prihvati odgovor kao tocan... i onda ja pogledam za koje x-eve ne radi....Provjera zad: 4 (netočno za input: '37.4951 -64.141 -14.8192 11.1707 31.9025 23.3064 -67.5214 -77.1163 77.5395')..... gledam ja u debuggeru i sve ide po planu osim što neke brojeve bez potrebe piše sa devetkama npr. -77.1163 piše kao -77.11629999999999999 i sve ide u redu dok ne učitam 77.5395 i onda mi neće da prebaci u max (neznam zašto ??) a trebalo bi jer je u tom trenutku bila max=-77.1163 tj. negova apsolutna vrijednost... Zahvaljujem unaprijed :?
Kod: | #include<stdio.h>
#include<stdlib.h>
int main(void){
double x,min,max,i,f;
scanf("%lf",&x);
min=x;
max=x;
for(i=1;i<9;i++){
scanf("%lf",&x);
if(abs(x)<abs(min))
min=x;
if(abs(x)>abs(max))
max=x;}
f=max*min;
printf("%g",f);
return 0;
}
|
Zadatak 4:
Napišite program koji učitava 9 realnih brojeva, te ih ispisuje umnožak ona dva koji imaju najveću, odnosno najmanju apsolutnu vrijednost. Ako dva broja imaju jednaku apsolutnu vrijednost, za većeg/manjeg uzimate onog koji je prije učitan.
Rezultat obavezno ispišite koristeći format %g!
Ja pokušavam riješiti zadatak i nikako mi nece da prihvati odgovor kao tocan... i onda ja pogledam za koje x-eve ne radi....Provjera zad: 4 (netočno za input: '37.4951 -64.141 -14.8192 11.1707 31.9025 23.3064 -67.5214 -77.1163 77.5395')..... gledam ja u debuggeru i sve ide po planu osim što neke brojeve bez potrebe piše sa devetkama npr. -77.1163 piše kao -77.11629999999999999 i sve ide u redu dok ne učitam 77.5395 i onda mi neće da prebaci u max (neznam zašto ??) a trebalo bi jer je u tom trenutku bila max=-77.1163 tj. negova apsolutna vrijednost... Zahvaljujem unaprijed
_________________ Kake-Bake
|
|
[Vrh] |
|
vsego Site Admin


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

Pridružen/a: 07. 07. 2009. (21:14:20) Postovi: (22)16
|
Postano: 22:02 sub, 8. 1. 2011 Naslov: |
|
|
Jeli mi netko moze ukazati na pogresku, ja je ne mogu pronaci.
Tekst zadatka ide ovako :
Napišite program koji učitava 8 cijelih brojeva, te ispisuje svakog koji je djeljiv s prethodno upisanim (prvi se nikad ne ispisuje).
Ispisane brojeve odvojite razmacima (program ih smijete ispisivati i za vrijeme učitavanja), a ako traženih brojeva nema, program ne smije ništa ispisati.
#include<stdio.h>
main()
{
int i,x[7],t,j=0;
for(i=0;i<8;i++)
{
scanf("%d",&x[i]);
}
for(i=1;i<8;i++)
{ if(x[(i-1)]!=0)
{if(x[i]%x[(i-1)]==0) printf("%d ",x[i]);
}
}
return 0;
}
Jeli mi netko moze ukazati na pogresku, ja je ne mogu pronaci.
Tekst zadatka ide ovako :
Napišite program koji učitava 8 cijelih brojeva, te ispisuje svakog koji je djeljiv s prethodno upisanim (prvi se nikad ne ispisuje).
Ispisane brojeve odvojite razmacima (program ih smijete ispisivati i za vrijeme učitavanja), a ako traženih brojeva nema, program ne smije ništa ispisati.
#include<stdio.h>
main()
{
int i,x[7],t,j=0;
for(i=0;i<8;i++)
{
scanf("%d",&x[i]);
}
for(i=1;i<8;i++)
{ if(x[(i-1)]!=0)
{if(x[i]%x[(i-1)]==0) printf("%d ",x[i]);
}
}
return 0;
}
|
|
[Vrh] |
|
sailor m Forumaš(ica)

Pridružen/a: 23. 10. 2010. (10:46:13) Postovi: (4E)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 1:37 ned, 9. 1. 2011 Naslov: |
|
|
Ako vec (nepotrebno) koristis nizove, treba ih ispravno deklarirati. Ucitava se 8 brojeva, a ne 7, zar ne?
Za ubuduce, vidi mi sig.
Ako vec (nepotrebno) koristis nizove, treba ih ispravno deklarirati. Ucitava se 8 brojeva, a ne 7, zar ne?
Za ubuduce, vidi mi sig.
_________________ 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] |
|
rimidalv1991 Forumaš(ica)

Pridružen/a: 07. 07. 2009. (21:14:20) Postovi: (22)16
|
|
[Vrh] |
|
|