Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
vsego Site Admin


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

Pridružen/a: 07. 09. 2011. (10:59:19) Postovi: (87)16
Spol: 
|
Postano: 8:25 ned, 20. 11. 2011 Naslov: |
|
|
[quote="simon11"][quote="matematičarka"][quote="simon11"][quote="gflegar"][quote="simon11"]u vezi tog 41. zad. ja ga mnozim sa 10000 pa mi se zna dogoditi da zbog modularne aritmetike broj postane prevelik pa se "prebaci" drugim rijecima ne dobijem dobar rezultat,al program radi za vecinu brojeva.Sad me zanima ako mi asistent kaze da unesem 9998.9999 sto je najveci moguci broj a moj prog.ne radi za taj broj hoce li program biti ocijenjen kao pogresan?[/quote]
Bit ce ocjenjen kao pogresan.
Ali meni nije jasno u koji ti tip podataka pretvaras jer bi cak i takav broj trebao stati u [tt]long int[/tt], kada ti pomnozis [tt]9999.9999[/tt] sa [tt]10000[/tt] dobijes [tex]99 999 999 < 2 000 000 000 < 2^{31} [/tex].
Pretpostavljam da ti je negdje drugdje greska.[/quote]
hmm..da u pravu si za taj slucaj ja imam c=99999999 sto moram podijeliti sa d=10000 i napisem
b=(double)c/double(d);printf("%lg",b); i on mi ispise 10000 :?
ali ispise dobro ako stavim ovako printf("%.4lf",broj); 8)[/quote]
Možda je problem nastaje baš pri samom ispisu 9999.9999 jer ga računalo "zaokruži"? :eyepop2: Gdje je kod?[/quote]
da..skuzio sam to kasnije :D uglavnom moja ideja je sljedeca:neka se ucita neki broj,npr.bas iz zad. 521.75 pomnozim ga s 10000 dobijem 5217500 i onda mu "oduzimam" nule ukoliko ima,potom 52175 invertiram kao sto smo radilli na predavanjima i potom ga podijelim sa 10^3 jer cijeli dio poc.zad ima 3 znamenke eo kod:
[code:1]
#include <stdio.h>
int main (void)
{
long int m,i=0,k,d=1,y,c=0;
double a,x,broj,z,o,p;
scanf("%lg",&a);
x=a-(long int)a;//ovdje se dobije dec.dio ucitanog broja
y=a-x;//ovdje cijeli dio
while (y!=0)
{
y=y/10;
++i;
} //ovaj dio broji koliko znamenaka ima cijeli dio
a=a*10000;//pomnozi se sa 10000 jer je max.broj dec.=4
m=(long int)a;
while (m%10==0)
{
m=m/10;
}//u ovom dijelu se "brisu" nule koje broj moze a i ne mora imati
while(m!=0)
{
c=c*10+m%10;
m=m/10;
}//invertiranje novonastalog broja
for (k=0;k<i;++k)
d=d*10;//potencija broja 10 sa eksp. i koji je jednak broju znam.ucitanog broja(samo cijeli dio)
printf("%ld\n",c);//radi provjere
printf("%ld\n",d);//radi provjere
broj=(double)(c)/(double)(d);
printf("%g",broj);
return 0;
}
[/code:1]
program radi za vecinu "normalnih" brojeva ali ne za jel brojeve koji se ne mogu u potpunosti zapisati kao sto je kolega gflegar objasnio i za neke velike npr.9999.9999 ispise nazalost 1000 :x[/quote]
moj 41.zadatak:
[code:1]#include<stdio.h>
#include<math.h>
int main()
{
double x;
int c,y;
scanf("%lg", &x);
c=(int)x;
y=round((x-c)*10000);
while(y%10==0) y/=10;
while(y>0)
{ printf("%d",y%10);
y=y/10;
}
printf(".");
while(c>0)
{ printf("%d",c%10);
c/=10;
}
return 0;
}
[/code:1]
Je li točan?
simon11 (napisa): | matematičarka (napisa): | simon11 (napisa): | gflegar (napisa): | simon11 (napisa): | u vezi tog 41. zad. ja ga mnozim sa 10000 pa mi se zna dogoditi da zbog modularne aritmetike broj postane prevelik pa se "prebaci" drugim rijecima ne dobijem dobar rezultat,al program radi za vecinu brojeva.Sad me zanima ako mi asistent kaze da unesem 9998.9999 sto je najveci moguci broj a moj prog.ne radi za taj broj hoce li program biti ocijenjen kao pogresan? |
Bit ce ocjenjen kao pogresan.
Ali meni nije jasno u koji ti tip podataka pretvaras jer bi cak i takav broj trebao stati u long int, kada ti pomnozis 9999.9999 sa 10000 dobijes [tex]99 999 999 < 2 000 000 000 < 2^{31} [/tex].
Pretpostavljam da ti je negdje drugdje greska. |
hmm..da u pravu si za taj slucaj ja imam c=99999999 sto moram podijeliti sa d=10000 i napisem
b=(double)c/double(d);printf("%lg",b); i on mi ispise 10000
ali ispise dobro ako stavim ovako printf("%.4lf",broj);  |
Možda je problem nastaje baš pri samom ispisu 9999.9999 jer ga računalo "zaokruži"? Gdje je kod? |
da..skuzio sam to kasnije uglavnom moja ideja je sljedeca:neka se ucita neki broj,npr.bas iz zad. 521.75 pomnozim ga s 10000 dobijem 5217500 i onda mu "oduzimam" nule ukoliko ima,potom 52175 invertiram kao sto smo radilli na predavanjima i potom ga podijelim sa 10^3 jer cijeli dio poc.zad ima 3 znamenke eo kod:
Kod: |
#include <stdio.h>
int main (void)
{
long int m,i=0,k,d=1,y,c=0;
double a,x,broj,z,o,p;
scanf("%lg",&a);
x=a-(long int)a;//ovdje se dobije dec.dio ucitanog broja
y=a-x;//ovdje cijeli dio
while (y!=0)
{
y=y/10;
++i;
} //ovaj dio broji koliko znamenaka ima cijeli dio
a=a*10000;//pomnozi se sa 10000 jer je max.broj dec.=4
m=(long int)a;
while (m%10==0)
{
m=m/10;
}//u ovom dijelu se "brisu" nule koje broj moze a i ne mora imati
while(m!=0)
{
c=c*10+m%10;
m=m/10;
}//invertiranje novonastalog broja
for (k=0;k<i;++k)
d=d*10;//potencija broja 10 sa eksp. i koji je jednak broju znam.ucitanog broja(samo cijeli dio)
printf("%ld\n",c);//radi provjere
printf("%ld\n",d);//radi provjere
broj=(double)(c)/(double)(d);
printf("%g",broj);
return 0;
}
|
program radi za vecinu "normalnih" brojeva ali ne za jel brojeve koji se ne mogu u potpunosti zapisati kao sto je kolega gflegar objasnio i za neke velike npr.9999.9999 ispise nazalost 1000  |
moj 41.zadatak:
Kod: | #include<stdio.h>
#include<math.h>
int main()
{
double x;
int c,y;
scanf("%lg", &x);
c=(int)x;
y=round((x-c)*10000);
while(y%10==0) y/=10;
while(y>0)
{ printf("%d",y%10);
y=y/10;
}
printf(".");
while(c>0)
{ printf("%d",c%10);
c/=10;
}
return 0;
}
|
Je li točan?
|
|
[Vrh] |
|
matematičarka Forumaš(ica)


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

Pridružen/a: 26. 10. 2011. (14:16:34) Postovi: (84)16
Spol: 
|
Postano: 13:12 ned, 20. 11. 2011 Naslov: |
|
|
imam pitanje u vezi 9.zadatka..
Zadatak 9:
Napisati program koji ´ce unositi realne brojeve dvostruke preciznosti (double) sve dok se ne unese broj manji od nule ili broj
ve´ci od 1000. Svaki uneseni broj treba zaokruˇziti na drugu decimalu i pridodati ga u sumu. Program treba ispisati konaˇcnu
sumu.
moj kod:
#include <stdio.h>
int main(void) {
double x, x1, sum=0;
do {
scanf("%lg", &x);
if(x>=0 && x<=1000) {
x = x*100;
x1=(int)x;
x1=x1/100;
sum = sum+x1;
}
else break;
} while(1);
printf("suma = %g\n", sum);
return 0;
}
i za odredene unesene brojeve mi ispisuje rjesenje 95.34, a ako provjeravam u digitronu tamo je rjesenje 95.35..
je li to jako bitna razlika ili ?? -.-''
[size=9][color=#999999]Added after 21 minutes:[/color][/size]
Zadatak 17:
Napisati program koji ´ce uˇcitati ulazni double broj, a zatim ispisati onaj broj koji bi nastao zamjenom cijelog i decimalnog
dijela. Primjerice, ukoliko je ulazni broj bio 75.125, program ´ce ispisati broj 125.75.
Napomena: Moˇzete pretpostaviti da ulazni broj nije ve´ci od 9999 i da nema viˇse od 4 decimale.
#include <stdio.h>
int main(void) {
double x, d, c, c1, br;
int d1, i=0, t, j;
scanf("%lg", &x);
c=(int)x;
d=x-c;
d=d*10000;
d1=(int)d;
while(d1%10==0) d1=d1/10;
t=c;
while(t>0) {
t=t/10;
++i;
}
for(j=1;j<=i;j++) {
c = c/10;
}
br=c+d1;
printf("%g\n", br);
return 0;
}
za neke brojeve ne ispisuje dobro.. moze mala pomoc di je greska?? :oops:
imam pitanje u vezi 9.zadatka..
Zadatak 9:
Napisati program koji ´ce unositi realne brojeve dvostruke preciznosti (double) sve dok se ne unese broj manji od nule ili broj
ve´ci od 1000. Svaki uneseni broj treba zaokruˇziti na drugu decimalu i pridodati ga u sumu. Program treba ispisati konaˇcnu
sumu.
moj kod:
#include <stdio.h>
int main(void) {
double x, x1, sum=0;
do {
scanf("%lg", &x);
if(x>=0 && x⇐1000) {
x = x*100;
x1=(int)x;
x1=x1/100;
sum = sum+x1;
}
else break;
} while(1);
printf("suma = %g\n", sum);
return 0;
}
i za odredene unesene brojeve mi ispisuje rjesenje 95.34, a ako provjeravam u digitronu tamo je rjesenje 95.35..
je li to jako bitna razlika ili ?? -.-''
Added after 21 minutes:
Zadatak 17:
Napisati program koji ´ce uˇcitati ulazni double broj, a zatim ispisati onaj broj koji bi nastao zamjenom cijelog i decimalnog
dijela. Primjerice, ukoliko je ulazni broj bio 75.125, program ´ce ispisati broj 125.75.
Napomena: Moˇzete pretpostaviti da ulazni broj nije ve´ci od 9999 i da nema viˇse od 4 decimale.
#include <stdio.h>
int main(void) {
double x, d, c, c1, br;
int d1, i=0, t, j;
scanf("%lg", &x);
c=(int)x;
d=x-c;
d=d*10000;
d1=(int)d;
while(d1%10==0) d1=d1/10;
t=c;
while(t>0) {
t=t/10;
++i;
}
for(j=1;j⇐i;j++) {
c = c/10;
}
br=c+d1;
printf("%g\n", br);
return 0;
}
za neke brojeve ne ispisuje dobro.. moze mala pomoc di je greska??
|
|
[Vrh] |
|
PermutiranoPrase Forumaš(ica)


Pridružen/a: 10. 09. 2011. (16:08:19) Postovi: (F4)16
Spol: 
|
Postano: 13:44 ned, 20. 11. 2011 Naslov: |
|
|
Hmm, čini mi se da ti ne zaokružuješ na drugu decimalu već samo odbacuješ sve decimale iza druge.
Moraš provjeriti koja ti je treća decimala - s (int) (x*1000)%10 nađeš zadnju znamenku tj.treću decimalu. Ako je treća decimala veća ili jednaka 5, onda računaš (int) (x*100+1)/100, a ako nije, onda računaš normalno, (int) x*100/100. (Nadam se da nisam ništ slučajno krivo rekla. :D)
A ovo drugo ti je vjerojatno (nisam proučavala čitav kod) ista stvar koja je već prodiskutirana masovno na zadnjih par stranica.
Hmm, čini mi se da ti ne zaokružuješ na drugu decimalu već samo odbacuješ sve decimale iza druge.
Moraš provjeriti koja ti je treća decimala - s (int) (x*1000)%10 nađeš zadnju znamenku tj.treću decimalu. Ako je treća decimala veća ili jednaka 5, onda računaš (int) (x*100+1)/100, a ako nije, onda računaš normalno, (int) x*100/100. (Nadam se da nisam ništ slučajno krivo rekla. )
A ovo drugo ti je vjerojatno (nisam proučavala čitav kod) ista stvar koja je već prodiskutirana masovno na zadnjih par stranica.
|
|
[Vrh] |
|
matematičarka Forumaš(ica)


Pridružen/a: 01. 10. 2011. (18:19:07) Postovi: (38)16
Lokacija: Planet Zemlja
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 15:37 ned, 20. 11. 2011 Naslov: |
|
|
Again, predavanje 9 (cak se i zove "potenciranje baze" i obradjeno je s obje grupe). Nije tocno to, ali je itekako primjenjivo: s time nadjes najvecu potrebnu potenciju baze, a u svakom iducem koraku tu potenciju dijelis s [tt]b[/tt].
Again, predavanje 9 (cak se i zove "potenciranje baze" i obradjeno je s obje grupe). Nije tocno to, ali je itekako primjenjivo: s time nadjes najvecu potrebnu potenciju baze, a u svakom iducem koraku tu potenciju dijelis s b.
_________________ 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] |
|
BlameGame Forumaš(ica)

Pridružen/a: 14. 09. 2011. (19:17:53) Postovi: (6C)16
|
Postano: 16:19 ned, 20. 11. 2011 Naslov: |
|
|
22. moj opet
probala sam premjestat sum i opet mi ibaci sve brojeve od 1 do k
?? jel ista korektno?
#include <stdio.h>
int main(void) {
int k, i, sum, p = 1;
scanf("%d", &k);
for(i = 1; i < k; i++)
{
sum = 0;
if(i % p == 0)
{
sum += p;
if(sum > i);
printf("%d\n", i);
}
p++;
}
return 0;
}
22. moj opet
probala sam premjestat sum i opet mi ibaci sve brojeve od 1 do k
?? jel ista korektno?
#include <stdio.h>
int main(void) {
int k, i, sum, p = 1;
scanf("%d", &k);
for(i = 1; i < k; i++)
{
sum = 0;
if(i % p == 0)
{
sum += p;
if(sum > i);
printf("%d\n", i);
}
p++;
}
return 0;
}
|
|
[Vrh] |
|
matematičarka Forumaš(ica)


Pridružen/a: 01. 10. 2011. (18:19:07) Postovi: (38)16
Lokacija: Planet Zemlja
|
Postano: 16:32 ned, 20. 11. 2011 Naslov: |
|
|
[code:1]
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int n, b, k=0, bmax=1, n1, i, z=0;
scanf("%d %d",&n, &b);
n1=n;
while(n1>0)
{
k++;
n1/=b;
}
for(i=1;i<k;++i)
{
bmax*=b;
}
while(n>0 || k!=0)
{
z=n/bmax;
printf("%d\n", z);
n=n-z*bmax;
bmax/=b;
--k;
}
return 0;
}
[/code:1]
Nadam se da je ovo prihvatljivo jer nemam više inspiracije za pokušati išta novo.
Kod: |
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int n, b, k=0, bmax=1, n1, i, z=0;
scanf("%d %d",&n, &b);
n1=n;
while(n1>0)
{
k++;
n1/=b;
}
for(i=1;i<k;++i)
{
bmax*=b;
}
while(n>0 || k!=0)
{
z=n/bmax;
printf("%d\n", z);
n=n-z*bmax;
bmax/=b;
--k;
}
return 0;
}
|
Nadam se da je ovo prihvatljivo jer nemam više inspiracije za pokušati išta novo.
_________________ Google is my best friend!
Coffee is my addiction! 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 16:37 ned, 20. 11. 2011 Naslov: |
|
|
Uvjet u zadnjoj petlji ne bi trebao ovisiti o [tt]n[/tt], nego o [tt]bmax[/tt]. Ovako, ako imas [tex]n = x b^k[/tex], uvijek ce ti pogubiti zadnjih [tex]k[/tex] znamenaka.
Usput, [tt]for[/tt] je nepotreban i moze se uredno spojiti s while:
[code:1] n1 = n / b;
while(n1 > 0)
{
bmax *= b;
n1 /= b;
}[/code:1]
[b]Edit:[/b] Eh, kad izeditiras kod dok netko pise reply... onda reply ispadne besmislen. :?
Uvjet u zadnjoj petlji ne bi trebao ovisiti o n, nego o bmax. Ovako, ako imas [tex]n = x b^k[/tex], uvijek ce ti pogubiti zadnjih [tex]k[/tex] znamenaka.
Usput, for je nepotreban i moze se uredno spojiti s while:
Kod: | n1 = n / b;
while(n1 > 0)
{
bmax *= b;
n1 /= b;
} |
Edit: Eh, kad izeditiras kod dok netko pise reply... onda reply ispadne besmislen.
_________________ 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] |
|
matematičarka Forumaš(ica)


Pridružen/a: 01. 10. 2011. (18:19:07) Postovi: (38)16
Lokacija: Planet Zemlja
|
Postano: 17:12 ned, 20. 11. 2011 Naslov: |
|
|
[quote="vsego"]Uvjet u zadnjoj petlji ne bi trebao ovisiti o [tt]n[/tt], nego o [tt]bmax[/tt]. Ovako, ako imas [tex]n = x b^k[/tex], uvijek ce ti pogubiti zadnjih [tex]k[/tex] znamenaka.
Usput, [tt]for[/tt] je nepotreban i moze se uredno spojiti s while:
[code:1] n1 = n / b;
while(n1 > 0)
{
bmax *= b;
n1 /= b;
}[/code:1]
[b]Edit:[/b] Eh, kad izeditiras kod dok netko pise reply... onda reply ispadne besmislen. :?[/quote]
nema veze. ovo je puno elegantnije od mojeg "namiještanja". Hvala na pomoći i strpljenju. :D
vsego (napisa): | Uvjet u zadnjoj petlji ne bi trebao ovisiti o n, nego o bmax. Ovako, ako imas [tex]n = x b^k[/tex], uvijek ce ti pogubiti zadnjih [tex]k[/tex] znamenaka.
Usput, for je nepotreban i moze se uredno spojiti s while:
Kod: | n1 = n / b;
while(n1 > 0)
{
bmax *= b;
n1 /= b;
} |
Edit: Eh, kad izeditiras kod dok netko pise reply... onda reply ispadne besmislen.  |
nema veze. ovo je puno elegantnije od mojeg "namiještanja". Hvala na pomoći i strpljenju.
_________________ Google is my best friend!
Coffee is my addiction! 
|
|
[Vrh] |
|
Vishykc Forumaš(ica)


Pridružen/a: 23. 10. 2010. (14:38:08) Postovi: (6A)16
Spol: 
Lokacija: Zagreb
|
Postano: 18:34 ned, 20. 11. 2011 Naslov: |
|
|
Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb;
printf("Upisite bazu broja (b <= 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = znamb % b;
printf(" %d\b", znamb);
n /= b;
}
return 0;
}
Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb;
printf("Upisite bazu broja (b <= 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = znamb % b;
printf(" %d\b", znamb);
n /= b;
}
return 0;
}
_________________ U matematici se sve smije, osim pogriješiti!
|
|
[Vrh] |
|
Zenon Forumaš(ica)


Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 18:50 ned, 20. 11. 2011 Naslov: |
|
|
Dečki, mislim da sam napokon riješio "hrvatsku matricu". :P
Valja li? Ako ne, onda mi hintovi ne pomažu i može li mi onda netko konkretno riješiti zadatak? :P
[code:1]#include<stdio.h>
int main(void)
{
int n,m,i,j,a,b,ODGOVOR=1;
scanf("%d %d",&m,&n);
for ( i=0; i<m; i++)
{
for ( j=0; j<n; j++ )
{
if ( i==0 && j==0 ) scanf("%d",&a);
else
{
scanf("%d",&b);
if ( (i+j)%2==1 && b==a ) ODGOVOR=0;
}
}
}
if (ODGOVOR) printf("DA");
else printf("NE");
return 0;
}[/code:1]
Dečki, mislim da sam napokon riješio "hrvatsku matricu".
Valja li? Ako ne, onda mi hintovi ne pomažu i može li mi onda netko konkretno riješiti zadatak?
Kod: | #include<stdio.h>
int main(void)
{
int n,m,i,j,a,b,ODGOVOR=1;
scanf("%d %d",&m,&n);
for ( i=0; i<m; i++)
{
for ( j=0; j<n; j++ )
{
if ( i==0 && j==0 ) scanf("%d",&a);
else
{
scanf("%d",&b);
if ( (i+j)%2==1 && b==a ) ODGOVOR=0;
}
}
}
if (ODGOVOR) printf("DA");
else printf("NE");
return 0;
} |
|
|
[Vrh] |
|
vsego Site Admin


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

Pridružen/a: 07. 09. 2011. (10:59:19) Postovi: (87)16
Spol: 
|
Postano: 18:55 ned, 20. 11. 2011 Naslov: |
|
|
[quote="Vishykc"]Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,[b]p=1[/b];
printf("Upisite bazu broja (b <= 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = [b]znamb[/b] % b; //zašto znamb,valjda n
printf(" %d[b]\b[/b]", znamb); //da toga nema ispisalo 201[b]1[/b],ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
}[/quote]
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b;
Vishykc (napisa): | Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,p=1;
printf("Upisite bazu broja (b ⇐ 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = znamb % b; //zašto znamb,valjda n
printf(" %d\b", znamb); //da toga nema ispisalo 2011,ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
} |
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b;
|
|
[Vrh] |
|
matkec Forumaš(ica)


Pridružen/a: 14. 05. 2010. (16:21:29) Postovi: (8C)16
|
Postano: 19:08 ned, 20. 11. 2011 Naslov: |
|
|
[quote="anamarie"][quote="Vishykc"]Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,[b]p=1[/b];
printf("Upisite bazu broja (b <= 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = [b]znamb[/b] % b; //zašto znamb,valjda n
printf(" %d[b]\b[/b]", znamb); //da toga nema ispisalo 201[b]1[/b],ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
}[/quote]
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b;[/quote]
Dakako kod ovog rješenja, z isto mora na početku biti deklariran i inicijaliziran na nulu.
No i ovo rješenje nije baš neko. Npr, kad bi bilo n=2048 i b=2, tvoj z bi bio otprilike 100 miljardi i to ne bi stalo u int, tj. dobije se krivo rješenje.
Hint: [spoiler]u neku varijablu x spremi vrijednost broja koji se piše obratnim redoslijedom od broja n u bazi b, a zatim mu ispiši znamenku po znamenku.
(npr. n=38, b=2 -> x=58 (jer se je njegov zapis 2011 u bazi 3) -> tom broju znamo ispisati znamenke počevši od desne)
(takvo nešto se radilo u zadatku 32, mislim...) [/spoiler]
anamarie (napisa): | Vishykc (napisa): | Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,p=1;
printf("Upisite bazu broja (b ⇐ 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = znamb % b; //zašto znamb,valjda n
printf(" %d\b", znamb); //da toga nema ispisalo 2011,ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
} |
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b; |
Dakako kod ovog rješenja, z isto mora na početku biti deklariran i inicijaliziran na nulu.
No i ovo rješenje nije baš neko. Npr, kad bi bilo n=2048 i b=2, tvoj z bi bio otprilike 100 miljardi i to ne bi stalo u int, tj. dobije se krivo rješenje.
Hint: Spoiler [hidden; click to show]: | u neku varijablu x spremi vrijednost broja koji se piše obratnim redoslijedom od broja n u bazi b, a zatim mu ispiši znamenku po znamenku.
(npr. n=38, b=2 → x=58 (jer se je njegov zapis 2011 u bazi 3) → tom broju znamo ispisati znamenke počevši od desne)
(takvo nešto se radilo u zadatku 32, mislim...) |
|
|
[Vrh] |
|
Vishykc Forumaš(ica)


Pridružen/a: 23. 10. 2010. (14:38:08) Postovi: (6A)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
logikaus Forumaš(ica)

Pridružen/a: 12. 10. 2011. (17:55:23) Postovi: (45)16
|
Postano: 19:29 ned, 20. 11. 2011 Naslov: zadatak 41 |
|
|
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
double n,d=0,f;
int a=0,br=0,c=0,i,j,dec=0;
scanf("%lg",&n);
a=int(n);
printf("%f-%d=%f je\n",n,a,(n-a));
f=(n-a)*10000;
printf("f=%lg \n",f);
dec=int(f);
printf("dec odma na pocetku je je dec=%d \n",dec);
if ((dec>0) && ((dec%10)==0))
{
while ((dec%10)==0)
{
dec=dec/10;
}
}
printf("prije a dec=%d \n",dec);
for (i=0;a!=0;i++)
{
br=(a%10)*pow(10,(3-i))+br;
if ((a/10)==0)
{
d=pow(10,(3-i));
c=int(d);
br=br/c;
}
a=a/10;
printf("broj %d \n", i);
system("pause");
}
a=dec;
dec=0;
for (i=0;a!=0;i++)
{
dec=(a%10)*pow(10,(3-i))+dec;
if ((a/10)==0)
{
d=pow(10,(3-i));
c=int(d);
dec=dec/c;
}
a=a/10;
printf("broj %d, a dec=%d \n", i,dec);
system("pause");
}
printf("znamenke su %4d.%d ",dec,br);
system("pause");
return 0;
}
za neke brojeve dobivam tocan rezultat, a za neke ne..
kod ne radi npr. za 1222.3454 a za neke druge radi najnormalnije ^^
pretpostavljam da je problem u ovom redu: f=(n-a)*10000;
ali ne znam to popraviti...
pa ako ne'ko zna, molim za pomoc ili mi mozete dati svoj kod da vidim kako ste vi rjesili, hvala =)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
double n,d=0,f;
int a=0,br=0,c=0,i,j,dec=0;
scanf("%lg",&n);
a=int(n);
printf("%f-%d=%f je\n",n,a,(n-a));
f=(n-a)*10000;
printf("f=%lg \n",f);
dec=int(f);
printf("dec odma na pocetku je je dec=%d \n",dec);
if ((dec>0) && ((dec%10)==0))
{
while ((dec%10)==0)
{
dec=dec/10;
}
}
printf("prije a dec=%d \n",dec);
for (i=0;a!=0;i++)
{
br=(a%10)*pow(10,(3-i))+br;
if ((a/10)==0)
{
d=pow(10,(3-i));
c=int(d);
br=br/c;
}
a=a/10;
printf("broj %d \n", i);
system("pause");
}
a=dec;
dec=0;
for (i=0;a!=0;i++)
{
dec=(a%10)*pow(10,(3-i))+dec;
if ((a/10)==0)
{
d=pow(10,(3-i));
c=int(d);
dec=dec/c;
}
a=a/10;
printf("broj %d, a dec=%d \n", i,dec);
system("pause");
}
printf("znamenke su %4d.%d ",dec,br);
system("pause");
return 0;
}
za neke brojeve dobivam tocan rezultat, a za neke ne..
kod ne radi npr. za 1222.3454 a za neke druge radi najnormalnije ^^
pretpostavljam da je problem u ovom redu: f=(n-a)*10000;
ali ne znam to popraviti...
pa ako ne'ko zna, molim za pomoc ili mi mozete dati svoj kod da vidim kako ste vi rjesili, hvala =)
|
|
[Vrh] |
|
matkec Forumaš(ica)


Pridružen/a: 14. 05. 2010. (16:21:29) Postovi: (8C)16
|
|
[Vrh] |
|
anamarie Forumaš(ica)

Pridružen/a: 07. 09. 2011. (10:59:19) Postovi: (87)16
Spol: 
|
Postano: 19:44 ned, 20. 11. 2011 Naslov: |
|
|
[quote="matkec"][quote="anamarie"][quote="Vishykc"]Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,[b]p=1[/b];
printf("Upisite bazu broja (b <= 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = [b]znamb[/b] % b; //zašto znamb,valjda n
printf(" %d[b]\b[/b]", znamb); //da toga nema ispisalo 201[b]1[/b],ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
}[/quote]
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b;[/quote]
Dakako kod ovog rješenja, z isto mora na početku biti deklariran i inicijaliziran na nulu.
No i ovo rješenje nije baš neko. Npr, kad bi bilo n=2048 i b=2, tvoj z bi bio otprilike 100 miljardi i to ne bi stalo u int, tj. dobije se krivo rješenje.
Hint: [spoiler]u neku varijablu x spremi vrijednost broja koji se piše obratnim redoslijedom od broja n u bazi b, a zatim mu ispiši znamenku po znamenku.
(npr. n=38, b=2 -> x=58 (jer se je njegov zapis 2011 u bazi 3) -> tom broju znamo ispisati znamenke počevši od desne)
(takvo nešto se radilo u zadatku 32, mislim...) [/spoiler][/quote]
Hvala ti,mislila sam da mi je zadatak točan,ne bih to nikad skužila!
matkec (napisa): | anamarie (napisa): | Vishykc (napisa): | Dobra večer! Molim pomoć oko 40. zadatka. Čini mi se da imam dobru ideju, samo ne ide realizacija. Naime, uzmem broj u bazi 10 i bazu 3 npr. Ostatak pri dijeljenju s 3 je znamenka koju tražim i želim ju ispisati a ispred nje dodavati slijedeće znamenke. Probal sam s \b, ali očito onda iduću znamenku napiše preko ove... Evo kratki kodić
#include <stdio.h>
int main(void){
int n, b, znamb,p=1;
printf("Upisite bazu broja (b ⇐ 10): "); scanf("%d", &b);
printf("Unesite prirodan broj u bazi 10: "); scanf("%d", &n);
while (n > 0){
znamb = znamb % b; //zašto znamb,valjda n
printf(" %d\b", znamb); //da toga nema ispisalo 2011,ali se svaki put vraćaš unatrag i brišeš,pa ti ostane samo 1
n /= b;
}
return 0;
} |
evo i dio mog koda koji sam ja stavila u while petlju
z+=(n%b)*p;
p*=10;
n=n/b; |
Dakako kod ovog rješenja, z isto mora na početku biti deklariran i inicijaliziran na nulu.
No i ovo rješenje nije baš neko. Npr, kad bi bilo n=2048 i b=2, tvoj z bi bio otprilike 100 miljardi i to ne bi stalo u int, tj. dobije se krivo rješenje.
Hint: Spoiler [hidden; click to show]: | u neku varijablu x spremi vrijednost broja koji se piše obratnim redoslijedom od broja n u bazi b, a zatim mu ispiši znamenku po znamenku.
(npr. n=38, b=2 → x=58 (jer se je njegov zapis 2011 u bazi 3) → tom broju znamo ispisati znamenke počevši od desne)
(takvo nešto se radilo u zadatku 32, mislim...) |
|
Hvala ti,mislila sam da mi je zadatak točan,ne bih to nikad skužila!
|
|
[Vrh] |
|
|