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


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
Postano: 2:52 sub, 19. 11. 2011 Naslov: |
|
|
[quote="kiara"]Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900?[/quote]
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis.
EDIT: Sad sam shvatio da tu imam jednu gresku, svaki se broj uredno pretvara iz double-a u int, tu je trebalo pisati da se 2900 uredno ucitava kao double :P
[size=9][color=#999999]Added after 46 minutes:[/color][/size]
[quote="Zenon"][b]Zadatak 23:[/b]
Napisati program koji će učitati cijeli broj n i za taj n izračunati vrijednost Eulerove funkcije od n. Eulerova funkcija definira se kao broj prirodnih brojeva u skupu {1,...,n} koji su relativno prosti s n.
Valja li moje riješenje?
[code:1]#include<stdio.h>
int main(void)
{
int n,k,i,brojac=0,rp,div;
scanf("%d",&n);
if (n==1) brojac++;
for( k=1; k<n; k++ )
{
rp=1;
div=2;
while ( div<=k && rp )
{
if ( n%div==0 && k%div==0) rp=0;
div++;
}
if ( rp ) brojac++;
}
printf ("%d",brojac);
return 0;
}
[/code:1]
[/quote]
Ovako na prvi pogled mi izgleda ok. Ako se osjecas nadobudno probaj ovo optimizirati jer ti je ovo kvadratna slozenost (vec za brojeve > [tex] 10^5[/tex] radi duze od jedne sekunde), a moze bolje.
[code:1]
div=2;
while ( div<=k && rp )
{
if ( n%div==0 && k%div==0) rp=0;
div++;
}
[/code:1]
Ovo nije krivo ali je "lijepse" moglo sa for petljom :D
[code:1]
for (div=2; div<=k && rp; ++div )
{
if ( n%div==0 && k%div==0) rp=0;
}
[/code:1]
[quote="Zenon"]
[b]Zadatak 30:[/b]
Kažemo da je matrica koja se sastoji samo od binarnih znamenki "hrvatska" ako u svakom retku i u svakom stupcu naizmjenično dolaze znamenke 1 i 0. Napišite program koji učitava broj redaka m i broj stupaca n i matricu koja će se sastojati samo od binarnih znamenki (ne treba provjeravati), te ispisuje riječ "DA" ako je učitana matrica hrvatska, a riječ "NE" u protivnom.
Gornji lijevi element hrvatske matrice smije biti i 0 i 1.
[code:1]#include<stdio.h>
int main(void)
{
int mxn,ODGOVOR=1,m,n,a,b,i;
scanf("%d %d",&m,&n);
mxn=n*m;
scanf("%d",&a);
if ( a!=0 && a!=1 ) ODGOVOR=0;
for ( i=1; i<mxn; i++ )
{
scanf("%d",&b);
if ( (b!=0 && b!=1) || b==a ) ODGOVOR=0;
a=b;
}
if (ODGOVOR) printf("DA");
else printf("NE");
return 0;
}[/code:1]
Valja li mi?
Hvala unaprijed.[/quote]
Probaj ovaj primjer:
[code:1]
2 4
1 0 1 0
1 0 1 0
[/code:1]
kiara (napisa): | Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900? |
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis.
EDIT: Sad sam shvatio da tu imam jednu gresku, svaki se broj uredno pretvara iz double-a u int, tu je trebalo pisati da se 2900 uredno ucitava kao double
Added after 46 minutes:
Zenon (napisa): | Zadatak 23:
Napisati program koji će učitati cijeli broj n i za taj n izračunati vrijednost Eulerove funkcije od n. Eulerova funkcija definira se kao broj prirodnih brojeva u skupu {1,...,n} koji su relativno prosti s n.
Valja li moje riješenje?
Kod: | #include<stdio.h>
int main(void)
{
int n,k,i,brojac=0,rp,div;
scanf("%d",&n);
if (n==1) brojac++;
for( k=1; k<n; k++ )
{
rp=1;
div=2;
while ( div<=k && rp )
{
if ( n%div==0 && k%div==0) rp=0;
div++;
}
if ( rp ) brojac++;
}
printf ("%d",brojac);
return 0;
}
|
|
Ovako na prvi pogled mi izgleda ok. Ako se osjecas nadobudno probaj ovo optimizirati jer ti je ovo kvadratna slozenost (vec za brojeve > [tex] 10^5[/tex] radi duze od jedne sekunde), a moze bolje.
Kod: |
div=2;
while ( div<=k && rp )
{
if ( n%div==0 && k%div==0) rp=0;
div++;
}
|
Ovo nije krivo ali je "lijepse" moglo sa for petljom
Kod: |
for (div=2; div<=k && rp; ++div )
{
if ( n%div==0 && k%div==0) rp=0;
}
|
Zenon (napisa): |
Zadatak 30:
Kažemo da je matrica koja se sastoji samo od binarnih znamenki "hrvatska" ako u svakom retku i u svakom stupcu naizmjenično dolaze znamenke 1 i 0. Napišite program koji učitava broj redaka m i broj stupaca n i matricu koja će se sastojati samo od binarnih znamenki (ne treba provjeravati), te ispisuje riječ "DA" ako je učitana matrica hrvatska, a riječ "NE" u protivnom.
Gornji lijevi element hrvatske matrice smije biti i 0 i 1.
Kod: | #include<stdio.h>
int main(void)
{
int mxn,ODGOVOR=1,m,n,a,b,i;
scanf("%d %d",&m,&n);
mxn=n*m;
scanf("%d",&a);
if ( a!=0 && a!=1 ) ODGOVOR=0;
for ( i=1; i<mxn; i++ )
{
scanf("%d",&b);
if ( (b!=0 && b!=1) || b==a ) ODGOVOR=0;
a=b;
}
if (ODGOVOR) printf("DA");
else printf("NE");
return 0;
} |
Valja li mi?
Hvala unaprijed. |
Probaj ovaj primjer:
Zadnja promjena: gflegar; 14:58 sub, 19. 11. 2011; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 7:20 sub, 19. 11. 2011 Naslov: |
|
|
[quote="gflegar"]Probaj ovaj primjer:
[code:1]2 4
1 0 1 0
1 0 1 0[/code:1][/quote]
To je false positive. Ako se u drugom retku zamijene nule i jedinice, dobije se false negative. Dakle, ne radi niti u jednom smjeru. Zenone, malo temeljitije testiraj svoje programe. Ako nesto ovisi o (ne)parnosti, probas uvijek obje kombinacije (dakle, ovdje, parni i neparni broj stupaca).
Hint za taj zadatak: pratite u kojem ste retku i stupcu, te procitani broju provjeravajte u ovisnosti o [tt](i + j) % 2[/tt] i prvom ucitanom broju ([tt]i[/tt] i [tt]j[/tt] su indeksi retka i stupca).
Usput, provjera [tt]b!=0 && b!=1[/tt] je vishak, jer tekst zadatka garantira da ce biti samo nule i jedinice.
gflegar (napisa): | Probaj ovaj primjer:
|
To je false positive. Ako se u drugom retku zamijene nule i jedinice, dobije se false negative. Dakle, ne radi niti u jednom smjeru. Zenone, malo temeljitije testiraj svoje programe. Ako nesto ovisi o (ne)parnosti, probas uvijek obje kombinacije (dakle, ovdje, parni i neparni broj stupaca).
Hint za taj zadatak: pratite u kojem ste retku i stupcu, te procitani broju provjeravajte u ovisnosti o (i + j) % 2 i prvom ucitanom broju (i i j su indeksi retka i stupca).
Usput, provjera b!=0 && b!=1 je vishak, jer tekst zadatka garantira da ce biti samo nule i jedinice.
_________________ 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] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 12:26 sub, 19. 11. 2011 Naslov: |
|
|
imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec :) pa ako moze objasnjenje... hvala :)
imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec pa ako moze objasnjenje... hvala
|
|
[Vrh] |
|
roverandom Forumaš(ica)


Pridružen/a: 31. 08. 2011. (10:42:47) Postovi: (4)16
|
Postano: 12:55 sub, 19. 11. 2011 Naslov: |
|
|
[quote="jema"]imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec :) pa ako moze objasnjenje... hvala :)[/quote]
Indeksi započinju od 0. Prvo mjesto je (i=0, j=0), itd... :wink:
Neparan par - i i j moraju biti neparni.
jema (napisa): | imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec pa ako moze objasnjenje... hvala  |
Indeksi započinju od 0. Prvo mjesto je (i=0, j=0), itd...
Neparan par - i i j moraju biti neparni.
|
|
[Vrh] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
|
[Vrh] |
|
Zenon Forumaš(ica)


Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 13:30 sub, 19. 11. 2011 Naslov: |
|
|
[quote="roverandom"][quote="jema"]imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec :) pa ako moze objasnjenje... hvala :)[/quote]
Indeksi započinju od 0. Prvo mjesto je (i=0, j=0), itd... :wink:
Neparan par - i i j moraju biti neparni.[/quote]
Može li mi netko objasniti zašto indeksi kreću od nule?
Mislim, na linearnoj eto cijelo vrijeme učimo da je skroz gornji lijevi element [tex]a_{11}[/tex], što je različito od [tex]a_{00}[/tex]. Prvi redak i prvi stupac. Što sad znači nulti redak i nulti stupac?
Ima li neki poseban razlog za to?
roverandom (napisa): | jema (napisa): | imam pitanje za 11. zad....kaze : neparni parovi (i,j) imaju vrijednost 0, i onda za m=3, n=5 na mjestima (2,2) (4,2) su nule...?? sta je to neparan par? kak tu mogu bit nule? tj. ne razumijem zadatak i glupo mi je ici ga stimat prema primjeru koji su oni dali jer nema smisla... treba skuzit sta zadatak hoce rec pa ako moze objasnjenje... hvala  |
Indeksi započinju od 0. Prvo mjesto je (i=0, j=0), itd...
Neparan par - i i j moraju biti neparni. |
Može li mi netko objasniti zašto indeksi kreću od nule?
Mislim, na linearnoj eto cijelo vrijeme učimo da je skroz gornji lijevi element [tex]a_{11}[/tex], što je različito od [tex]a_{00}[/tex]. Prvi redak i prvi stupac. Što sad znači nulti redak i nulti stupac?
Ima li neki poseban razlog za to?
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 13:35 sub, 19. 11. 2011 Naslov: |
|
|
Ima: memorija.
U C-u, "niz" je zapravo adresa prvog elementa niza. Dakle, ako imas
[tt]int x[17];[/tt] ([tt]x[/tt] je niz od 17 [tt]int[/tt]-ova)
onda se na memorijskoj lokaciji [tt]x[/tt] (sto je isto sto i [tt]x+0[/tt]) nalazi prvi element, na iducoj memorijskoj lokaciji ([tt]x + 1[/tt]) se nalazi drugi element, itd. Hence, prvog oznacavamo s [tt]x[0][/tt], drugog s [tt]x[1][/tt], itd.
Vise o tome na predavanjima, kad dodjemo do nizova.
Ima: memorija.
U C-u, "niz" je zapravo adresa prvog elementa niza. Dakle, ako imas
int x[17]; (x je niz od 17 int-ova)
onda se na memorijskoj lokaciji x (sto je isto sto i x+0) nalazi prvi element, na iducoj memorijskoj lokaciji (x + 1) se nalazi drugi element, itd. Hence, prvog oznacavamo s x[0], drugog s x[1], itd.
Vise o tome na predavanjima, kad dodjemo do nizova.
_________________ 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] |
|
Cupcake Forumaš(ica)

Pridružen/a: 01. 10. 2011. (18:52:00) Postovi: (1B)16
Spol: 
|
Postano: 14:14 sub, 19. 11. 2011 Naslov: |
|
|
Imam nekoliko pitanja, prvo je vezano uz zad.br.41 u kojemu moramo ucitati double i ispisati broj koji nastaje okretanjem njegovih znamenaka. U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati. Takoder me zanima da li ti zadaci moraju funkcionirati za sve unose, odnosno da li bi se moje rjesenje priznalo na prakticnom kolokviju? Da li ce asistenti tj oni koji ce nas cuvati upisivati za provjeru tocno ove primjere koji su navedeni ili ?
Unaprijed se zahvaljujem na odgovorima : D
#include <stdio.h>
int main(void){
double x; int a,b,t=0,v=0;
printf("Unesi realan broj: ");
scanf("%lf",&x);
a=int(x);
x=x-a;
b=int(x*10000);
while (b%10==0){
b=b/10;}
while(a>0){
t=t*10+a%10;
a=a/10;}
while(b>0){
v=v*10+b%10;
b=b/10;}
printf("%d.%d",v,t);
return 0;
}
Imam nekoliko pitanja, prvo je vezano uz zad.br.41 u kojemu moramo ucitati double i ispisati broj koji nastaje okretanjem njegovih znamenaka. U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati. Takoder me zanima da li ti zadaci moraju funkcionirati za sve unose, odnosno da li bi se moje rjesenje priznalo na prakticnom kolokviju? Da li ce asistenti tj oni koji ce nas cuvati upisivati za provjeru tocno ove primjere koji su navedeni ili ?
Unaprijed se zahvaljujem na odgovorima : D
#include <stdio.h>
int main(void){
double x; int a,b,t=0,v=0;
printf("Unesi realan broj: ");
scanf("%lf",&x);
a=int(x);
x=x-a;
b=int(x*10000);
while (b%10==0){
b=b/10;}
while(a>0){
t=t*10+a%10;
a=a/10;}
while(b>0){
v=v*10+b%10;
b=b/10;}
printf("%d.%d",v,t);
return 0;
}
|
|
[Vrh] |
|
gflegar Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
Postano: 14:41 sub, 19. 11. 2011 Naslov: |
|
|
[quote="Cupcake"]
#include <stdio.h>
int main(void){
double x; int a,b,t=0,v=0;
printf("Unesi realan broj: ");
scanf("%lf",&x);
a=int(x);
x=x-a;
b=int(x*10000);
while (b%10==0){
b=b/10;}
while(a>0){
t=t*10+a%10;
a=a/10;}
while(b>0){
v=v*10+b%10;
b=b/10;}
printf("%d.%d",v,t);
return 0;
}[/quote]
Za pocetak pogledaj kako bi kodovi trebali izgledati da budu citljivi, pogledaj npr. Zenonove kodove i onu boldanu recenicu koju vsego ima u potpisu.
Cupcake (napisa): |
#include <stdio.h>
int main(void){
double x; int a,b,t=0,v=0;
printf("Unesi realan broj: ");
scanf("%lf",&x);
a=int(x);
x=x-a;
b=int(x*10000);
while (b%10==0){
b=b/10;}
while(a>0){
t=t*10+a%10;
a=a/10;}
while(b>0){
v=v*10+b%10;
b=b/10;}
printf("%d.%d",v,t);
return 0;
} |
Za pocetak pogledaj kako bi kodovi trebali izgledati da budu citljivi, pogledaj npr. Zenonove kodove i onu boldanu recenicu koju vsego ima u potpisu.
|
|
[Vrh] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 14:41 sub, 19. 11. 2011 Naslov: |
|
|
ako netko moze pomoc, sto tu ne valja??! hvala :)
#include <stdio.h>
int prost(int a)
{
int prost=1, i;
for (i=1; i<a; ++i)
{
if (a%i==0) prost=0;
}
return prost;
}
int main (void)
{
int n,m,i;
printf("Ucitaj paran broj n>2: ");
scanf("%d", &n);
for (i=2; i<=n-2; ++i)
{
m=n-i;
if (prost(i) && prost(m))
{
printf("%d=%d+%d", n,i,m); break;
}
}
return 0;
}
ako netko moze pomoc, sto tu ne valja??! hvala
#include <stdio.h>
int prost(int a)
{
int prost=1, i;
for (i=1; i<a; ++i)
{
if (a%i==0) prost=0;
}
return prost;
}
int main (void)
{
int n,m,i;
printf("Ucitaj paran broj n>2: ");
scanf("%d", &n);
for (i=2; i<=n-2; ++i)
{
m=n-i;
if (prost(i) && prost(m))
{
printf("%d=%d+%d", n,i,m); break;
}
}
return 0;
}
|
|
[Vrh] |
|
gflegar Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
Postano: 14:46 sub, 19. 11. 2011 Naslov: |
|
|
[quote="Cupcake"]
U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati.[/quote]
[quote="gflegar"][quote="kiara"]Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900?[/quote]
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis. [/quote]
Mada mi se nije dalo desifrirati kod mislim da ti imas isti problem kao i kiara, pa i ti prouci ovaj topic malo detaljnije.
[size=9][color=#999999]Added after 3 minutes:[/color][/size]
[quote="jema"]
int prost(int a)
{
int prost=1, i;
[tt]for (i=1; i<a; ++i)[/tt]
{
[tt]if (a%i==0) prost=0;[/tt]
}
return prost;
}
[/quote]
Pogledaj malo bolje za koje brojeve ovo vrijedi.
Cupcake (napisa): |
U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati. |
gflegar (napisa): | kiara (napisa): | Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900? |
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis. |
Mada mi se nije dalo desifrirati kod mislim da ti imas isti problem kao i kiara, pa i ti prouci ovaj topic malo detaljnije.
Added after 3 minutes:
jema (napisa): |
int prost(int a)
{
int prost=1, i;
for (i=1; i<a; ++i)
{
if (a%i==0) prost=0;
}
return prost;
}
|
Pogledaj malo bolje za koje brojeve ovo vrijedi.
Zadnja promjena: gflegar; 15:06 sub, 19. 11. 2011; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
|
[Vrh] |
|
gflegar Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
|
[Vrh] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
|
[Vrh] |
|
malenaa Forumaš(ica)

Pridružen/a: 08. 12. 2010. (13:11:02) Postovi: (21)16
|
Postano: 16:17 sub, 19. 11. 2011 Naslov: |
|
|
Please pomoć!
17. zadatak, zamjena decimalnog i cijelog dijela realnog broja...
Kod upisa nekih brojeva sa četiri decimale ispiše mi krivo: npr. za 5668.5484 ispiše 5483.5668
Ne mogu shvatiti gdje sam pogriješila :?
#include <stdio.h>
#include <stdlib.h>
int main ()
{
double x, dec=0.0, d, trazeni;
int i, a, b, c, n=10, cijeli=0;
printf("Ucitaj realan broj: ");
scanf("%lf", &x);
c = (int) (x); /* c je cjelobrojni dio od x */
d = x - c; /*d je decimalni dio od x*/
for(i=0; i < 4; i++)
{
a = (int) (10*d);
if(a!=0)
cijeli = cijeli*n + a;
d = d*10 - a;
if(c!=0)
{
b= c%10;
dec= dec*0.1 + b*0.1;
c /=10;
}
}
trazeni = cijeli + dec;
printf("%.4f", trazeni);
return 0;
}
Please pomoć!
17. zadatak, zamjena decimalnog i cijelog dijela realnog broja...
Kod upisa nekih brojeva sa četiri decimale ispiše mi krivo: npr. za 5668.5484 ispiše 5483.5668
Ne mogu shvatiti gdje sam pogriješila
#include <stdio.h>
#include <stdlib.h>
int main ()
{
double x, dec=0.0, d, trazeni;
int i, a, b, c, n=10, cijeli=0;
printf("Ucitaj realan broj: ");
scanf("%lf", &x);
c = (int) (x); /* c je cjelobrojni dio od x */
d = x - c; /*d je decimalni dio od x*/
for(i=0; i < 4; i++)
{
a = (int) (10*d);
if(a!=0)
cijeli = cijeli*n + a;
d = d*10 - a;
if(c!=0)
{
b= c%10;
dec= dec*0.1 + b*0.1;
c /=10;
}
}
trazeni = cijeli + dec;
printf("%.4f", trazeni);
return 0;
}
|
|
[Vrh] |
|
matematičarka Forumaš(ica)


Pridružen/a: 01. 10. 2011. (18:19:07) Postovi: (38)16
Lokacija: Planet Zemlja
|
|
[Vrh] |
|
gflegar Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
Postano: 16:39 sub, 19. 11. 2011 Naslov: |
|
|
[quote="malenaa"]
Kod upisa nekih brojeva sa četiri decimale ispiše mi krivo: npr. za 5668.5484 ispiše 5483.5668
Ne mogu shvatiti gdje sam pogriješila[/quote]
[quote="gflegar"][quote="Cupcake"]
U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati.[/quote]
[quote="gflegar"][quote="kiara"]Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900?[/quote]
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis. [/quote]
Mada mi se nije dalo desifrirati kod mislim da ti imas isti problem kao i kiara, pa i ti prouci ovaj topic malo detaljnije.
[/quote]
I ti isto imas isti problem kao kiara i cupcake.
Ljudi pls citajte prijasnje postove na topicu, vjerojatno vam mogu pomoci. I stavite kodove u [b]code[/b] blokove (kako je i vsego napisao u potpisu), to je samo 12 znakova vise za napisati a dobivate puno na citljivosti.
malenaa (napisa): |
Kod upisa nekih brojeva sa četiri decimale ispiše mi krivo: npr. za 5668.5484 ispiše 5483.5668
Ne mogu shvatiti gdje sam pogriješila |
gflegar (napisa): | Cupcake (napisa): |
U mom kodu očito negje postoji greska jer mi za primjer 521.75 ispisuje dobro, odnosno 57.125, ali za neki drugi broj primjerice 50.98 nece funkcionirati. |
gflegar (napisa): | kiara (napisa): | Ok, hvala. Nevezano uz ovaj zadatak, sta da radim kad mi je double naprimjer 2900, i moram ga pretvorit u int, pretvori mi ga al u 2899, a to su mi razlicite znamenke. Kako da ga pretvorim u int da ostane 2900? |
Nikako (ako sam dobro shvatio sto te tocno muci, mada mi se cini da se 2900 uredno pretvara iz double-a u int), nekolicina mojih zadnjih postova je posvecena upravo tom problemu pa prouci malo. Poanta je u tome da ti kod samog ucitavanja gubis na preciznosti i nemas dobrog nacina da je vratis. |
Mada mi se nije dalo desifrirati kod mislim da ti imas isti problem kao i kiara, pa i ti prouci ovaj topic malo detaljnije.
|
I ti isto imas isti problem kao kiara i cupcake.
Ljudi pls citajte prijasnje postove na topicu, vjerojatno vam mogu pomoci. I stavite kodove u code blokove (kako je i vsego napisao u potpisu), to je samo 12 znakova vise za napisati a dobivate puno na citljivosti.
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
jema Forumaš(ica)

Pridružen/a: 29. 09. 2011. (15:56:35) Postovi: (52)16
|
Postano: 16:59 sub, 19. 11. 2011 Naslov: |
|
|
#include <stdio.h>
int main(void)
{
double n,a;
int x,z;
printf("Upisi dec. broj manji od 9999 i s max. 4 decimale: ");
scanf("%lf", &n);
x=(int)n;
a=n-x;
a *= 10000;
z=(int)(a+.5);
while (z%10==0)
{
z/=10;
};
printf("%d.%d",z,x);
return 0;
}
evo moj 17. zad. mozda nekom pomogne...ja koliko sam probala radi za sve, a puuuno je krace sto sam vidjela do sad XD...
#include <stdio.h>
int main(void)
{
double n,a;
int x,z;
printf("Upisi dec. broj manji od 9999 i s max. 4 decimale: ");
scanf("%lf", &n);
x=(int)n;
a=n-x;
a *= 10000;
z=(int)(a+.5);
while (z%10==0)
{
z/=10;
};
printf("%d.%d",z,x);
return 0;
}
evo moj 17. zad. mozda nekom pomogne...ja koliko sam probala radi za sve, a puuuno je krace sto sam vidjela do sad XD...
|
|
[Vrh] |
|
gflegar Forumaš(ica)


Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol: 
|
Postano: 17:17 sub, 19. 11. 2011 Naslov: |
|
|
Ajde posto vidim da je ovo "FAQ", idem napisati na jednom mjestu univerzalni odgovor:
[quote="veliko mnostvo forumasa prve godine"]
Zasto mi program koji treba zamjeniti realni i cijeli dio broja za broj [tt]15.2[/tt] ispisjue [tt]1999.15[/tt]?
[/quote]
Na predavanjima je bilo spomenuto da "realni" brojevi u racunalu [b]nisu[/b] realni brojevi ([tex]\mathbb{R}[/tex]). Stovise to nisu cak svi realni brojevi iz nekog intervala, nego samo brojevi oblika [tex] \pm\frac{a}{2^x}, a,x \in \mathbb{N}[/tex] (vise manje, malo tocnija formula je negdje gore u ovom topicu).
[quote="veliko mnostvo forumasa prve godine"] Sto se dogadja s brojevima koji nisu tog oblika?[/quote]
Racunalo pri samom ucitavanju tog broja umjesto njega sprema njemu "najblizi" prikazivi broj. Tako ce npr.
[tt]15.2[/tt] biti prikazan kao [tt]15.19999999999999928946[/tt]
[tt]50.98[/tt] kao [tt]50.97999999999999687361[/tt]
[tt]5668.5484[/tt] kao [tt]5668.54839999999967403710[/tt]
itd.
[quote="veliko mnostvo forumasa prve godine"]
Kako onda izbjeci ovo?
[/quote]
Necu vam odgovoriti na ovo pitanje (da nebi ispalo da vas poticem da radite ono sto se od vas ne ocekuje), nego cu vam reci ovo:
[quote="vsego"]
Dakle, od nas mozete ocekivat (lupam napamet) 12.375 ([tex]12\frac{3}{8}[/tex]), ali ne i nesto poput 12.1.[/quote]
Tj. svi brojevi koje cete na prakticnom kolokviju dobiti kao test primjere [b]ce biti prikazivi u racunalu[/b] i vas algoritam koji ne radi za gore navedene brojeve (i jos veliku vecinu slicnih) ce biti ocjenjen kao tocan.
[size=9][color=#999999]Added after 17 minutes:[/color][/size]
[quote="jema"][code:1]#include <stdio.h>
int main(void)
{
double n,a;
int x,z;
printf("Upisi dec. broj manji od 9999 i s max. 4 decimale: ");
scanf("%lf", &n);
x=(int)n;
a=n-x;
a *= 10000;
z=(int)(a+.5);
while (z%10==0)
{
z/=10;
};
printf("%d.%d",z,x);
return 0;
}
[/code:1]
evo moj 17. zad. mozda nekom pomogne...ja koliko sam probala radi za sve, a puuuno je krace sto sam vidjela do sad XD...[/quote]
[tt]z=(int)(a+.5);[/tt]
Zanimljiva optimizacija tocnosti za neprikazive brojeve, na prvi pogled mi cak izgleda savrseno tocna za brojeve s < 4 decimale :weee: :karma:
Ajde posto vidim da je ovo "FAQ", idem napisati na jednom mjestu univerzalni odgovor:
veliko mnostvo forumasa prve godine (napisa): |
Zasto mi program koji treba zamjeniti realni i cijeli dio broja za broj 15.2 ispisjue 1999.15?
|
Na predavanjima je bilo spomenuto da "realni" brojevi u racunalu nisu realni brojevi ([tex]\mathbb{R}[/tex]). Stovise to nisu cak svi realni brojevi iz nekog intervala, nego samo brojevi oblika [tex] \pm\frac{a}{2^x}, a,x \in \mathbb{N}[/tex] (vise manje, malo tocnija formula je negdje gore u ovom topicu).
veliko mnostvo forumasa prve godine (napisa): | Sto se dogadja s brojevima koji nisu tog oblika? |
Racunalo pri samom ucitavanju tog broja umjesto njega sprema njemu "najblizi" prikazivi broj. Tako ce npr.
15.2 biti prikazan kao 15.19999999999999928946
50.98 kao 50.97999999999999687361
5668.5484 kao 5668.54839999999967403710
itd.
veliko mnostvo forumasa prve godine (napisa): |
Kako onda izbjeci ovo?
|
Necu vam odgovoriti na ovo pitanje (da nebi ispalo da vas poticem da radite ono sto se od vas ne ocekuje), nego cu vam reci ovo:
vsego (napisa): |
Dakle, od nas mozete ocekivat (lupam napamet) 12.375 ([tex]12\frac{3}{8}[/tex]), ali ne i nesto poput 12.1. |
Tj. svi brojevi koje cete na prakticnom kolokviju dobiti kao test primjere ce biti prikazivi u racunalu i vas algoritam koji ne radi za gore navedene brojeve (i jos veliku vecinu slicnih) ce biti ocjenjen kao tocan.
Added after 17 minutes:
jema (napisa): | Kod: | #include <stdio.h>
int main(void)
{
double n,a;
int x,z;
printf("Upisi dec. broj manji od 9999 i s max. 4 decimale: ");
scanf("%lf", &n);
x=(int)n;
a=n-x;
a *= 10000;
z=(int)(a+.5);
while (z%10==0)
{
z/=10;
};
printf("%d.%d",z,x);
return 0;
}
|
evo moj 17. zad. mozda nekom pomogne...ja koliko sam probala radi za sve, a puuuno je krace sto sam vidjela do sad XD... |
z=(int)(a+.5);
Zanimljiva optimizacija tocnosti za neprikazive brojeve, na prvi pogled mi cak izgleda savrseno tocna za brojeve s < 4 decimale
|
|
[Vrh] |
|
|