| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		spik2nick Forumaš(ica)
  
  
  Pridružen/a: 28. 09. 2011. (12:41:01) Postovi: (D)16 
 
		 | 
		
			
				 Postano: 23:03 čet, 17. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zadatak 17:
 Napisati program koji ce ucitati 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: Mozete pretpostaviti da ulazni broj nije veci od 9999 i da nema vise od 4 decimale.
 
 
 Imam samo jedno pitanje vezano uz ispis. Znači na kraju mi program ispisuje nepotrebne nule. Kako bi to mogao kvalitetno riješiti?
 
 [code:1]#include<stdio.h>
 
 int main(void)
 {
     double x,broj=0,baza=1,ostatak=0;
     int intx,i,dec=4;
     scanf("%lg",&x);
 
     intx=(int)(x*10000);
 
     while(intx%10==0)
     {
             intx/=10;
             dec--;
     }
 
     for(i=0;i<dec;i++)
     {
         broj+=(intx%10)*baza;
         intx/=10;
         baza*=10;
     }
 
     while(intx!=0)
     {
         ostatak+=intx%10;
         ostatak*=0.1;
         intx/=10;
     }
 
     broj+=ostatak;
     printf("Naopako: %f",broj);
 
 return 0;
 }
 [/code:1] 
					
					Zadatak 17:
 
Napisati program koji ce ucitati 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: Mozete pretpostaviti da ulazni broj nije veci od 9999 i da nema vise od 4 decimale.
 
 
 
Imam samo jedno pitanje vezano uz ispis. Znači na kraju mi program ispisuje nepotrebne nule. Kako bi to mogao kvalitetno riješiti?
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
 
int main(void)
 
{
 
    double x,broj=0,baza=1,ostatak=0;
 
    int intx,i,dec=4;
 
    scanf("%lg",&x);
 
 
    intx=(int)(x*10000);
 
 
    while(intx%10==0)
 
    {
 
            intx/=10;
 
            dec--;
 
    }
 
 
    for(i=0;i<dec;i++)
 
    {
 
        broj+=(intx%10)*baza;
 
        intx/=10;
 
        baza*=10;
 
    }
 
 
    while(intx!=0)
 
    {
 
        ostatak+=intx%10;
 
        ostatak*=0.1;
 
        intx/=10;
 
    }
 
 
    broj+=ostatak;
 
    printf("Naopako: %f",broj);
 
 
return 0;
 
}
 
 | 	  
					
 
  _________________ Pokušaj je prvi korak prema neuspjehu!! 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		anamarie Forumaš(ica)
  
 
  Pridružen/a: 07. 09. 2011. (10:59:19) Postovi: (87)16 
Spol:   
 
		 | 
		
			
				 Postano: 23:09 čet, 17. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="spik2nick"]Zadatak 17:
 Napisati program koji ce ucitati 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: Mozete pretpostaviti da ulazni broj nije veci od 9999 i da nema vise od 4 decimale.
 
 
 Imam samo jedno pitanje vezano uz ispis. Znači na kraju mi program ispisuje nepotrebne nule. Kako bi to mogao kvalitetno riješiti?
 
 [code:1]#include<stdio.h>
 
 int main(void)
 {
     double x,broj=0,baza=1,ostatak=0;
     int intx,i,dec=4;
     scanf("%lg",&x);
 
     intx=(int)(x*10000);
 
     while(intx%10==0)
     {
             intx/=10;
             dec--;
     }
 
     for(i=0;i<dec;i++)
     {
         broj+=(intx%10)*baza;
         intx/=10;
         baza*=10;
     }
 
     while(intx!=0)
     {
         ostatak+=intx%10;
         ostatak*=0.1;
         intx/=10;
     }
 
     broj+=ostatak;
     printf("Naopako: %f",broj);
 
 return 0;
 }
 [/code:1][/quote]
 hm..može imati maksimalno 4 decimale,znači [b]%.4f[/b]
 a to bi ispisalo 125.7500 
					
					 	  | spik2nick (napisa): | 	 		  Zadatak 17:
 
Napisati program koji ce ucitati 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: Mozete pretpostaviti da ulazni broj nije veci od 9999 i da nema vise od 4 decimale.
 
 
 
Imam samo jedno pitanje vezano uz ispis. Znači na kraju mi program ispisuje nepotrebne nule. Kako bi to mogao kvalitetno riješiti?
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
 
int main(void)
 
{
 
    double x,broj=0,baza=1,ostatak=0;
 
    int intx,i,dec=4;
 
    scanf("%lg",&x);
 
 
    intx=(int)(x*10000);
 
 
    while(intx%10==0)
 
    {
 
            intx/=10;
 
            dec--;
 
    }
 
 
    for(i=0;i<dec;i++)
 
    {
 
        broj+=(intx%10)*baza;
 
        intx/=10;
 
        baza*=10;
 
    }
 
 
    while(intx!=0)
 
    {
 
        ostatak+=intx%10;
 
        ostatak*=0.1;
 
        intx/=10;
 
    }
 
 
    broj+=ostatak;
 
    printf("Naopako: %f",broj);
 
 
return 0;
 
}
 
 | 	 
  | 	  
 
hm..može imati maksimalno 4 decimale,znači %.4f
 
a to bi ispisalo 125.7500
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		boksi Forumaš(ica)
  
 
  Pridružen/a: 02. 09. 2011. (16:37:55) Postovi: (44)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		spik2nick Forumaš(ica)
  
  
  Pridružen/a: 28. 09. 2011. (12:41:01) Postovi: (D)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		anamarie Forumaš(ica)
  
 
  Pridružen/a: 07. 09. 2011. (10:59:19) Postovi: (87)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		lost_soul Forumaš(ica)
  
 
  Pridružen/a: 18. 10. 2009. (17:38:41) Postovi: (133)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		gflegar Forumaš(ica)
  
  
  Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16 
Spol:   
 
		 | 
		
			
				 Postano: 23:24 čet, 17. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="boksi"]nisam sigurna je li moje ok, ispisuje dobro, ali meni djeluje malo prevarantski ;)[/quote]
 
 Meni ne dijeluje, stovise je bi ovo ovako rijesio, jer mi je logicno zakljuciti da za ulaz dobijemo broj [b]formatiran[/b] kao double, a mene su ucili (tu mislim na bivseg olimpijca koji danas radi u google-u) da je najbolje realan broj ucitati tako da ne gubimo na preciznosti.
 
 [code:1]
 #include <stdio.h>
 
 int main(void){
     int c, f;
     scanf("%d.%d", &c, &f);
     while(f % 10 == 0 && f != 0) f/= 10;
     printf("%d.%d", f, c);
     return 0;
 }
 [/code:1]
 (Nisam ovo kompajlirao ali valjda radi :D ) 
					
					 	  | boksi (napisa): | 	 		  nisam sigurna je li moje ok, ispisuje dobro, ali meni djeluje malo prevarantski   | 	  
 
 
Meni ne dijeluje, stovise je bi ovo ovako rijesio, jer mi je logicno zakljuciti da za ulaz dobijemo broj formatiran kao double, a mene su ucili (tu mislim na bivseg olimpijca koji danas radi u google-u) da je najbolje realan broj ucitati tako da ne gubimo na preciznosti.
 
 
 	  | Kod: | 	 		  
 
#include <stdio.h>
 
 
int main(void){
 
    int c, f;
 
    scanf("%d.%d", &c, &f);
 
    while(f % 10 == 0 && f != 0) f/= 10;
 
    printf("%d.%d", f, c);
 
    return 0;
 
}
 
 | 	  
 
(Nisam ovo kompajlirao ali valjda radi   )
					
 
  
					
					
					
  Zadnja promjena: gflegar; 23:50 čet, 17. 11. 2011; ukupno mijenjano 1 put.
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		boksi Forumaš(ica)
  
 
  Pridružen/a: 02. 09. 2011. (16:37:55) Postovi: (44)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		BlameGame Forumaš(ica)
  
 
  Pridružen/a: 14. 09. 2011. (19:17:53) Postovi: (6C)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		PermutiranoPrase Forumaš(ica)
  
  
  Pridružen/a: 10. 09. 2011. (16:08:19) Postovi: (F4)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		spik2nick Forumaš(ica)
  
  
  Pridružen/a: 28. 09. 2011. (12:41:01) Postovi: (D)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		PermutiranoPrase Forumaš(ica)
  
  
  Pridružen/a: 10. 09. 2011. (16:08:19) Postovi: (F4)16 
Spol:   
 
		 | 
		
			
				 Postano: 0:13 pet, 18. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Da, to sam i ja mislila, ali problem je - ne dijelim s nulom. Unesem 1, 2, 4, dijeli se (4-2)/1 i sruši se. :? 
					
					Da, to sam i ja mislila, ali problem je - ne dijelim s nulom. Unesem 1, 2, 4, dijeli se (4-2)/1 i sruši se.  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		
			
				 Postano: 0:17 pet, 18. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="PermutiranoPrase"]Da, to sam i ja mislila, ali problem je - ne dijelim s nulom. Unesem 1, 2, 4, dijeli se (4-2)/1 i sruši se. :?[/quote]
 Daj postaj kompletan kod, jer ovako je nemoguće pronaći problem. 
					
					 	  | PermutiranoPrase (napisa): | 	 		  Da, to sam i ja mislila, ali problem je - ne dijelim s nulom. Unesem 1, 2, 4, dijeli se (4-2)/1 i sruši se.   | 	  
 
Daj postaj kompletan kod, jer ovako je nemoguće pronaći problem.
					
 
  _________________ Extraordinary claims require extraordinary evidence. – Carl Sagan 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		PermutiranoPrase Forumaš(ica)
  
  
  Pridružen/a: 10. 09. 2011. (16:08:19) Postovi: (F4)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Phoenix Forumaš(ica)
  
  
  Pridružen/a: 15. 05. 2010. (18:46:07) Postovi: (164)16 
Sarma: - 
 
		 | 
		
			
				 Postano: 0:26 pet, 18. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Prase, što ti točno radi sljedeća linija? :? 
 
 [code:1]if ((a-a2)/a1 || (a-a2)/a1!=alfa) Fibonacci=0;[/code:1]
 
 Moje zamjerke:
 1) Ispravi ovu liniju gore. Prije nego uđeš u petlju izračunaj [tt]alfa[/tt] preko [tt]a0[/tt], [tt]a1[/tt] i [tt]a2[/tt] pa će ova provjera imati smisla (premda ti prvi uvjet ne treba, dakle samo [tt](a-a2)/a1!=alfa[/tt]).
 2) Uvjet tvoje do-while petlje bi trebao biti [tt]a0==0[/tt].
 
 I da, možda još jedna sitnica: kada provjeravaš je li [tt](a-a2)/a1!=alfa[/tt], stavi da je [tt]alfa2=(a-a2)/a1[/tt] i dodatno provjeri je li [tt]a1*alfa2+a2==a[/tt] (jer zbog cjelobrojnog dijeljenja možeš dobiti drugačije rješenje od željenog). 
					
					Prase, što ti točno radi sljedeća linija?   
 
 
 	  | Kod: | 	 		  | if ((a-a2)/a1 || (a-a2)/a1!=alfa) Fibonacci=0; | 	  
 
 
Moje zamjerke:
 
1) Ispravi ovu liniju gore. Prije nego uđeš u petlju izračunaj alfa preko a0, a1 i a2 pa će ova provjera imati smisla (premda ti prvi uvjet ne treba, dakle samo (a-a2)/a1!=alfa).
 
2) Uvjet tvoje do-while petlje bi trebao biti a0==0.
 
 
I da, možda još jedna sitnica: kada provjeravaš je li (a-a2)/a1!=alfa, stavi da je alfa2=(a-a2)/a1 i dodatno provjeri je li a1*alfa2+a2==a (jer zbog cjelobrojnog dijeljenja možeš dobiti drugačije rješenje od željenog).
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		
			
				 Postano: 0:38 pet, 18. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="PermutiranoPrase"]Zar nije u privitku čitav kod, tj. .c datoteka?[/quote]
 Sorry, nisam vidio :oops:
 
 Uglavnom, našao sam problem:
 [code:1]do {
 	printf("Unesite prvi clan niza, a0, razlicit od 0: ");
 	scanf("%d", &a0);
 	} while (a0=0);
 [/code:1]
 Uvjet za prekid izvršavanja petlje nije testiranje jednakosti ([tt]==[/tt]), nego pridruživanje ([tt]=[/tt]), pa, bez obzira što se unese, varijabli [tt]a0[/tt] se pridruži [tt]0[/tt], a vrijednost izraza [tt]a0=0[/tt] je [tt]0[/tt], što uzrokuje prekid izvršavanja petlje i u daljnjem toku programa varijabla [tt]a0[/tt] ima vrijednost [tt]0[/tt], što onda uzrokuje rušenje programa prilikom dijeljenja.
 
 [b]Preporuka:[/b] uključite opcije [tt]-Wall[/tt] i [tt]-Wextra[/tt] prilikom kompajliranja i onda vam se ovakvo nešto neće događati (tj. kompajler će vas upozoriti na potencijalni problem). 
					
					 	  | PermutiranoPrase (napisa): | 	 		  | Zar nije u privitku čitav kod, tj. .c datoteka? | 	  
 
Sorry, nisam vidio  
 
 
Uglavnom, našao sam problem:
 
 	  | Kod: | 	 		  do {
 
   printf("Unesite prvi clan niza, a0, razlicit od 0: ");
 
   scanf("%d", &a0);
 
   } while (a0=0);
 
 | 	  
 
Uvjet za prekid izvršavanja petlje nije testiranje jednakosti (==), nego pridruživanje (=), pa, bez obzira što se unese, varijabli a0 se pridruži 0, a vrijednost izraza a0=0 je 0, što uzrokuje prekid izvršavanja petlje i u daljnjem toku programa varijabla a0 ima vrijednost 0, što onda uzrokuje rušenje programa prilikom dijeljenja.
 
 
Preporuka: uključite opcije -Wall i -Wextra prilikom kompajliranja i onda vam se ovakvo nešto neće događati (tj. kompajler će vas upozoriti na potencijalni problem).
					
 
  _________________ Extraordinary claims require extraordinary evidence. – Carl Sagan 
					
					
					
  Zadnja promjena: mdoko; 0:41 pet, 18. 11. 2011; ukupno mijenjano 1 put.
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		spik2nick Forumaš(ica)
  
  
  Pridružen/a: 28. 09. 2011. (12:41:01) Postovi: (D)16 
 
		 | 
		
			
				 Postano: 0:41 pet, 18. 11. 2011    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         E evo i moje rješenje fibonaccijevskog niza... Ali pošto nemamo test primjera nisam siguran jel radi točno ono što bi i trebao... Pogledajte...
 
 
 [code:1]#include<stdio.h>
 
 int main(void)
 {
     int n, x=0, y=0, z=0, i, alfa=0,nije=0;
 
     scanf("%d",&n);
 
     for(i=0;i<n;i++)
     {
         z=y;
         y=x;
         scanf("%d",&x);
 
         if(i==2)
             if((x-y)%z==0)
                 alfa=(x-y)/z;
             else
                 nije=1;
 
         if(i>2 && (x-y)%z==0)
         {
             if (alfa!=(x-y)/z)
                 nije=1;
         }
     }
 
 if(nije)
     printf("Ucitani niz nije fibonaccijevski.");
 else
     printf("Ucitani niz brojeva je fibonaccijevski sa alfa = %d",alfa);
 
 
 return 0;
 }
 [/code:1] 
					
					E evo i moje rješenje fibonaccijevskog niza... Ali pošto nemamo test primjera nisam siguran jel radi točno ono što bi i trebao... Pogledajte...
 
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
 
int main(void)
 
{
 
    int n, x=0, y=0, z=0, i, alfa=0,nije=0;
 
 
    scanf("%d",&n);
 
 
    for(i=0;i<n;i++)
 
    {
 
        z=y;
 
        y=x;
 
        scanf("%d",&x);
 
 
        if(i==2)
 
            if((x-y)%z==0)
 
                alfa=(x-y)/z;
 
            else
 
                nije=1;
 
 
        if(i>2 && (x-y)%z==0)
 
        {
 
            if (alfa!=(x-y)/z)
 
                nije=1;
 
        }
 
    }
 
 
if(nije)
 
    printf("Ucitani niz nije fibonaccijevski.");
 
else
 
    printf("Ucitani niz brojeva je fibonaccijevski sa alfa = %d",alfa);
 
 
 
return 0;
 
}
 
 | 	  
					
 
  _________________ Pokušaj je prvi korak prema neuspjehu!! 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |