| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		jejo Forumaš(ica)
  
  
  Pridružen/a: 28. 11. 2006. (19:25:36) Postovi: (102)16 
Spol:   
 
		 | 
		
			
				 Postano: 22:10 pet, 24. 4. 2009    Naslov: zadaci za prvi kolokvij prog2 | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         evo, rjesavam pomalo zadatke iz skripte pa me zanima ovaj zadatak:
 Zadatak 3.10. Napisite program slican onom u prethodnom zadatku, ali umjesto horizontalne i vertikalne linije napravite “kriz” od linija paralelnih s glavnom i sporednom dijagonalom.
 
 a taj prethodni zadatak je: 
 Zadatak 3.9. Napisite program koji ucitava cijele brojeve i, j E N0,
 i, j < 10, te kreira i ispisuje tablicu m s 10 × 10 znakova koja na svim
 mjestima ima tockice, osim na horizontalnoj i vertikalnoj liniji koje
 prolaze elementom mi,j (na te linije treba staviti zvjezdice).
 
 ja neznam kak bi trebao unos glasit za to..
 moze neki mali hint ili nesto? 
 fala puno :) 
					
					evo, rjesavam pomalo zadatke iz skripte pa me zanima ovaj zadatak:
 
Zadatak 3.10. Napisite program slican onom u prethodnom zadatku, ali umjesto horizontalne i vertikalne linije napravite “kriz” od linija paralelnih s glavnom i sporednom dijagonalom.
 
 
a taj prethodni zadatak je: 
 
Zadatak 3.9. Napisite program koji ucitava cijele brojeve i, j E N0,
 
i, j < 10, te kreira i ispisuje tablicu m s 10 × 10 znakova koja na svim
 
mjestima ima tockice, osim na horizontalnoj i vertikalnoj liniji koje
 
prolaze elementom mi,j (na te linije treba staviti zvjezdice).
 
 
ja neznam kak bi trebao unos glasit za to..
 
moze neki mali hint ili nesto? 
 
fala puno  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		lucika Forumaš(ica)
  
  
  Pridružen/a: 22. 11. 2007. (17:52:27) Postovi: (12F)16 
Spol:   
 
		 | 
		
			
				 Postano: 22:28 pet, 24. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]
 #include <stdio.h>
 
 int main( void )
 {
 	int i, j, red, stup;
 	char tablica[ 10 ][ 10 ];
 	
 	scanf( "%d%d", &i, &j );
 	
 	for( red = 0; red < 10; ++red )
 	    for( stup = 0; stup < 10; ++stup )
 	        tablica[ red ][ stup ] = '.';
 
 	red = i; stup = 0;
 	while( red >= 0 )
 	{
 		tablica[ red ][ stup ] = '*';
 		--red; ++stup;
 	}
 	
 	red = j; stup = 0;
 	while( red < 10 )
 	{
 		tablica[ red ][ stup ] = '*';
 		++red; ++stup;
 	}
 
 
 	for( red = 0; red < 10; ++red )
 	{
 		for( stup = 0; stup < 10; ++stup )
 		    printf( "%c", tablica[ red ][ stup ] );
 		    
 		printf( "\n" );
 	}
 
 	return 0;
 }
 [/code:1] 
					
					 	  | Kod: | 	 		  
 
#include <stdio.h>
 
 
int main( void )
 
{
 
   int i, j, red, stup;
 
   char tablica[ 10 ][ 10 ];
 
   
 
   scanf( "%d%d", &i, &j );
 
   
 
   for( red = 0; red < 10; ++red )
 
       for( stup = 0; stup < 10; ++stup )
 
           tablica[ red ][ stup ] = '.';
 
 
   red = i; stup = 0;
 
   while( red >= 0 )
 
   {
 
      tablica[ red ][ stup ] = '*';
 
      --red; ++stup;
 
   }
 
   
 
   red = j; stup = 0;
 
   while( red < 10 )
 
   {
 
      tablica[ red ][ stup ] = '*';
 
      ++red; ++stup;
 
   }
 
 
 
   for( red = 0; red < 10; ++red )
 
   {
 
      for( stup = 0; stup < 10; ++stup )
 
          printf( "%c", tablica[ red ][ stup ] );
 
          
 
      printf( "\n" );
 
   }
 
 
   return 0;
 
}
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 22:44 pet, 24. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         @lucika: Cijenim trud, ali isprobaj program... meni (copy/paste) ne radi ispravno. :?
 
 Unos je [tt]scanf("%d %d", &i, &j);[/tt]. 8)
 
 Hint za rjesavanje: "zraku" od mjesta (i, j) prema gore lijevo slozis ovako:
 
 [code:1]k = i; l = j;
 while (k > 0 && l > 0) {
   a[k][l] = '*';
   --k;
   --l;
 }[/code:1]
 
 Sad to ponovis cetiri puta (ili, bolje, upetljas u pametno slozen u petlju/petlje) i stvar je rijesena. 8)
 
 Moze se to, naravno, i daleko bolje rijesiti, no mislim da vam je ovako lakse. :) 
					
					@lucika: Cijenim trud, ali isprobaj program... meni (copy/paste) ne radi ispravno.  
 
 
Unos je scanf("%d %d", &i, &j);.  
 
 
Hint za rjesavanje: "zraku" od mjesta (i, j) prema gore lijevo slozis ovako:
 
 
 	  | Kod: | 	 		  k = i; l = j;
 
while (k > 0 && l > 0) {
 
  a[k][l] = '*';
 
  --k;
 
  --l;
 
} | 	  
 
 
Sad to ponovis cetiri puta (ili, bolje, upetljas u pametno slozen u petlju/petlje) i stvar je rijesena.  
 
 
Moze se to, naravno, i daleko bolje rijesiti, no mislim da vam je ovako lakse.  
					_________________ 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] | 
		 | 
	
	
		Gino Forumaš(ica)
  
 
  Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16 
Lokacija: Pula 
		 | 
		
			
				 Postano: 23:15 pet, 24. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         neznam dal sam shvatio dobro zadatak... 
 al valjda je ovako nekako
 [code:1]#include <stdio.h>
 int main(void){
     int i,j,k,l;
     char m[10][10];
     scanf("%d %d",&i,&j);
     for(k=0;k<10;k++)
     for(l=0;l<10;l++)
     m[k][l]='.';
     m[i][j]='*';
     for(k=1;k<10;k++){
                       if(i-k>=0 && j+k<10)m[i-k][j+k]='*';
                       if(i-k<10 && j+k<10)m[i+k][j+k]='*';
                       if(i-k>=0 && j-k>=0)m[i-k][j-k]='*';
                       if(i+k<10 && j-k>=0)m[i+k][j-k]='*';
                       }
     for(i=0;i<10;i++){
                       for(j=0;j<10;j++)
                       printf("%c",m[i][j]);
                       printf("\n");
                       }
     system("pause");
     return 0;
     }[/code:1] 
					
					neznam dal sam shvatio dobro zadatak... 
 
al valjda je ovako nekako
 
 	  | Kod: | 	 		  #include <stdio.h>
 
int main(void){
 
    int i,j,k,l;
 
    char m[10][10];
 
    scanf("%d %d",&i,&j);
 
    for(k=0;k<10;k++)
 
    for(l=0;l<10;l++)
 
    m[k][l]='.';
 
    m[i][j]='*';
 
    for(k=1;k<10;k++){
 
                      if(i-k>=0 && j+k<10)m[i-k][j+k]='*';
 
                      if(i-k<10 && j+k<10)m[i+k][j+k]='*';
 
                      if(i-k>=0 && j-k>=0)m[i-k][j-k]='*';
 
                      if(i+k<10 && j-k>=0)m[i+k][j-k]='*';
 
                      }
 
    for(i=0;i<10;i++){
 
                      for(j=0;j<10;j++)
 
                      printf("%c",m[i][j]);
 
                      printf("\n");
 
                      }
 
    system("pause");
 
    return 0;
 
    } | 	  
					
 
  _________________ Mario Berljafa 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Milojko Forumaš(ica)
  
  
  Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16 
Spol:   
Lokacija: Hilbertov hotel 
		 | 
		
			
				 Postano: 0:20 sub, 25. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]#include <stdio.h>
 
 int main() {
     char a[10][10];
     int i, j, k, l;
     printf("Ukucaj i: "); scanf("%d", &i);
     printf("Ukucaj j: "); scanf("%d", &j);
     for (k = 0; k < 10; ++k) {
         for (l = 0; l < 10; ++l) a[k][l] = '.';
         }
     for (k = 0; k < 10; ++k) {
         if ((k+i) <= 10 && (9-k-j) >= 0){
                   a[k][k+i] = '*';
                   a[k][9-k-j] = '*';
                   }
         }
     for (k = 0; k < 10; ++k) {
         for (l = 0; l < 10; ++l) 
             printf("%2c", a[k][l]);
         printf("\n");
         }
     scanf("%%");
     return 0;
 }[/code:1]
 mislim da valja. 
  [size=9][color=#999999]Added after 7 minutes:[/color][/size]
   @Gino: [tt]stdlib[/tt] :p 
 
 e, a men nije posve jasno pitanje zadatka. jel to mora bit baš križ, il mora, npr, kad [tt]k+i[/tt] postane veći ili jednak od deset, a [tt]9-k-j[/tt] još nije spalo na nulu, dalje crtati zvjezdice u pravcu kak je počeo? mislim, pitanje je malo glupo formulirano, al, probajte pokrenti. moj ga nacrta dok može crtat križ, Ginov je ova druga verzija, čini mi se 
					
					 	  | Kod: | 	 		  #include <stdio.h>
 
 
int main() {
 
    char a[10][10];
 
    int i, j, k, l;
 
    printf("Ukucaj i: "); scanf("%d", &i);
 
    printf("Ukucaj j: "); scanf("%d", &j);
 
    for (k = 0; k < 10; ++k) {
 
        for (l = 0; l < 10; ++l) a[k][l] = '.';
 
        }
 
    for (k = 0; k < 10; ++k) {
 
        if ((k+i) <= 10 && (9-k-j) >= 0){
 
                  a[k][k+i] = '*';
 
                  a[k][9-k-j] = '*';
 
                  }
 
        }
 
    for (k = 0; k < 10; ++k) {
 
        for (l = 0; l < 10; ++l) 
 
            printf("%2c", a[k][l]);
 
        printf("\n");
 
        }
 
    scanf("%%");
 
    return 0;
 
} | 	  
 
mislim da valja. 
 
 
Added after 7 minutes:
 
 
 @Gino: stdlib :p 
 
 
e, a men nije posve jasno pitanje zadatka. jel to mora bit baš križ, il mora, npr, kad k+i postane veći ili jednak od deset, a 9-k-j još nije spalo na nulu, dalje crtati zvjezdice u pravcu kak je počeo? mislim, pitanje je malo glupo formulirano, al, probajte pokrenti. moj ga nacrta dok može crtat križ, Ginov je ova druga verzija, čini mi se
					_________________ Sedam je prost broj   
Bolonja je smeće i to pod hitno treba mijenjat  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 1:52 sub, 25. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. :? Za i = 2, j = 5 radi dobro. :)
 
 Ovo od Milojka niti za jedan od ta dva primjera ne radi dobro. :(
 
 Evo vam program koji radi, da mozete usporedjivati:
 
 [code:1]#include <stdio.h>
 
 int main() {
   char a[10][10];
   int i, j, k, l, smjer;
   scanf("%d %d", &i, &j);
   for (k = 0; k < 10; ++k)
     for (l = 0; l < 10; ++l)
       a[k][l] = '.';
   for (smjer = 0; smjer < 4; ++smjer) {
     k = i;
     l = j;
     while (k >= 0 && l >= 0 && k < 10 && l < 10) {
       a[k][l] = '*';
       k += 1 - 2 * (smjer / 2);
       l += 1 - 2 * (smjer % 2);
     }
   }
   for (k = 0; k < 10; ++k) {
     for (l = 0; l < 10; ++l)
       printf("%c", a[k][l]);
     printf("\n");
   }
 
   return 0;
 }[/code:1]
 
 Isprobah za navedene primjere, no solidno sam uvjeren da je i inace dobar. :)
 
 Da objasnim eskapadu sa smjerom: varijabla [tt]smjer[/tt] poprima vrijednosti 0, 1, 2, 3; binarno, to je 00, 01, 10 i 11, pa kad gledamo izraze [tt]smjer / 2[/tt] i [tt]smjer % 2[/tt] dobijemo sva cetiri uredjena para nula i jedinica, a od toga onda dobijamo sve moguce parove -1 i +1:
 
 [table][tt]smjer[/tt]   [tt]smjer / 2[/tt]   [tt]smjer % 2[/tt]   [tt]2 * (smjer / 2)[/tt]   [tt]2 * (smjer % 2)[/tt]   [tt]1 - 2 * (smjer / 2)[/tt]   [tt]1 - 2 * (smjer % 2)[/tt]
 0   0   0   0   0   1   1
 1   1   0   2   0   -1   1
 2   0   1   0   2   1   -1
 3   1   1   2   2   -1   -1[/table]
 
 Kao sto gore rekoh, ovo je simpaticno, ali i nepotrebno... moze se jednostavno [tt]while()[/tt] petlju napisati 4 puta, varirajuci [tt]++[/tt] i [tt]--[/tt], te uvjete u petlji. 8)
 
 Inace, ako se sjetite price o glavnoj i sporednoj dijagonali (kod prve je [tt]k - l[/tt] konstantan, a kod druge je to [tt]k + l[/tt]), program mozete i ovako napisati:
 
 [code:1]#include <stdio.h>
 
 int main() {
   char a[10][10];
   int i, j, k, l;
   scanf("%d %d", &i, &j);
   for (k = 0; k < 10; ++k)
     for (l = 0; l < 10; ++l)
       a[k][l] = (k + l == i + j || k - l == i - j ? '*' : '.');
   for (k = 0; k < 10; ++k) {
     for (l = 0; l < 10; ++l)
       printf("%c", a[k][l]);
     printf("\n");
   }
 
   return 0;
 }[/code:1]
 
 Naravno, matrica vise uopce nije potrebna (no, treba ju sloziti jer to zadatak trazi!) i ispis bi se mogao i direktno napraviti. :D 
					
					Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2.   Za i = 2, j = 5 radi dobro.  
 
 
Ovo od Milojka niti za jedan od ta dva primjera ne radi dobro.  
 
 
Evo vam program koji radi, da mozete usporedjivati:
 
 
 	  | Kod: | 	 		  #include <stdio.h>
 
 
int main() {
 
  char a[10][10];
 
  int i, j, k, l, smjer;
 
  scanf("%d %d", &i, &j);
 
  for (k = 0; k < 10; ++k)
 
    for (l = 0; l < 10; ++l)
 
      a[k][l] = '.';
 
  for (smjer = 0; smjer < 4; ++smjer) {
 
    k = i;
 
    l = j;
 
    while (k >= 0 && l >= 0 && k < 10 && l < 10) {
 
      a[k][l] = '*';
 
      k += 1 - 2 * (smjer / 2);
 
      l += 1 - 2 * (smjer % 2);
 
    }
 
  }
 
  for (k = 0; k < 10; ++k) {
 
    for (l = 0; l < 10; ++l)
 
      printf("%c", a[k][l]);
 
    printf("\n");
 
  }
 
 
  return 0;
 
} | 	  
 
 
Isprobah za navedene primjere, no solidno sam uvjeren da je i inace dobar.  
 
 
Da objasnim eskapadu sa smjerom: varijabla smjer poprima vrijednosti 0, 1, 2, 3; binarno, to je 00, 01, 10 i 11, pa kad gledamo izraze smjer / 2 i smjer % 2 dobijemo sva cetiri uredjena para nula i jedinica, a od toga onda dobijamo sve moguce parove -1 i +1:
 
 
| smjer | smjer / 2 | smjer % 2 | 2 * (smjer / 2) | 2 * (smjer % 2) | 1 - 2 * (smjer / 2) | 1 - 2 * (smjer % 2) | 
|---|
 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |  | 1 | 1 | 0 | 2 | 0 | -1 | 1 |  | 2 | 0 | 1 | 0 | 2 | 1 | -1 |  | 3 | 1 | 1 | 2 | 2 | -1 | -1 |   
 
 
Kao sto gore rekoh, ovo je simpaticno, ali i nepotrebno... moze se jednostavno while() petlju napisati 4 puta, varirajuci ++ i –, te uvjete u petlji.  
 
 
Inace, ako se sjetite price o glavnoj i sporednoj dijagonali (kod prve je k - l konstantan, a kod druge je to k + l), program mozete i ovako napisati:
 
 
 	  | Kod: | 	 		  #include <stdio.h>
 
 
int main() {
 
  char a[10][10];
 
  int i, j, k, l;
 
  scanf("%d %d", &i, &j);
 
  for (k = 0; k < 10; ++k)
 
    for (l = 0; l < 10; ++l)
 
      a[k][l] = (k + l == i + j || k - l == i - j ? '*' : '.');
 
  for (k = 0; k < 10; ++k) {
 
    for (l = 0; l < 10; ++l)
 
      printf("%c", a[k][l]);
 
    printf("\n");
 
  }
 
 
  return 0;
 
} | 	  
 
 
Naravno, matrica vise uopce nije potrebna (no, treba ju sloziti jer to zadatak trazi!) i ispis bi se mogao i direktno napraviti.  
					_________________ 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] | 
		 | 
	
	
		Gino Forumaš(ica)
  
 
  Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16 
Lokacija: Pula 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Bubba Forumaš s poteškoćama u pisanju
  
  
  Pridružen/a: 17. 11. 2006. (18:09:12) Postovi: (53)16 
Spol:   
 
		 | 
		
			
				 Postano: 10:51 sub, 25. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="vsego"]Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2. :? Za i = 2, j = 5 radi dobro. :)[/quote][code:1]    for(k=1;k<10;++k){
                       if(i-k>=0 && j+k<10)
 						  m[i-k][j+k]='*';
                       if(i-k<10 && j+k<10)
 						  m[i+k][j+k]='*';
                       if(i-k>=0 && j-k>=0)
 						  m[i-k][j-k]='*';
                       if(i+k<10 && j-k>=0)
 						  m[i+k][j-k]='*';
                       }[/code:1]Kada je I = 5 a j = 2 te k > 5, jasno je zasto dolazi do [i]segmentation faulta[/i] (drugi [i]if[/i]) - pristupa se nealociranom dijelu dvodimenzionalnog polja.
 
 @gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...
 
 Takodjer, imaj na umu da system(); funkcija obicno znaci neportabilnost, a u ovom slucaju ti je bespotrebna. Ako vec nemozes bez nje, napravi nesto ovako:
 
 [code:1]	#ifdef _WIN32 
 	system ("pause");
 	#endif[/code:1]
 
 pa ce se tvoj kod bez problema kompajlirati i na newindows platformama. 
					
					 	  | vsego (napisa): | 	 		  Ovo sto je Gino napravio, meni padne sa "segementation fault" za i = 5, j = 2.   Za i = 2, j = 5 radi dobro.   | 	 
  	  | Kod: | 	 		      for(k=1;k<10;++k){
 
                      if(i-k>=0 && j+k<10)
 
                    m[i-k][j+k]='*';
 
                      if(i-k<10 && j+k<10)
 
                    m[i+k][j+k]='*';
 
                      if(i-k>=0 && j-k>=0)
 
                    m[i-k][j-k]='*';
 
                      if(i+k<10 && j-k>=0)
 
                    m[i+k][j-k]='*';
 
                      } | 	  Kada je I = 5 a j = 2 te k > 5, jasno je zasto dolazi do segmentation faulta (drugi if) - pristupa se nealociranom dijelu dvodimenzionalnog polja.
 
 
@gino - Koristi malloc(); ili dovoljno veliku konstantu pri deklariranju polja. Ovo su ozbiljne greske u C na relativno trivijalnom primjeru; pripazi na njih...
 
 
Takodjer, imaj na umu da system(); funkcija obicno znaci neportabilnost, a u ovom slucaju ti je bespotrebna. Ako vec nemozes bez nje, napravi nesto ovako:
 
 
 	  | Kod: | 	 		     #ifdef _WIN32 
 
   system ("pause");
 
   #endif | 	  
 
 
pa ce se tvoj kod bez problema kompajlirati i na newindows platformama.
					_________________ Biolozi misle da su kemičari. Kemičari misle da su fizičari. Fizičari misle da su bogovi. A Bog misli da je matematičar...
 
§  http://math2.ath.cx §  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Gino Forumaš(ica)
  
 
  Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16 
Lokacija: Pula 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		moi Forumaš(ica)
  
 
  Pridružen/a: 21. 02. 2007. (13:39:09) Postovi: (26)16 
Spol:   
 
		 | 
		
			
				 Postano: 17:58 pon, 27. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]#include<stdio.h>
 #include<stdlib.h>
 
 int f(int x){
     int i,b,br=0;
     
     if (x<0) return f(-x);
 
     for(i=2;i<10;i++){ 
                         while(x){
                                b=x%i;
                                x=x/i;
                                br++;
                                }
                                if(br==2)
                                return i;
                                } 
     if(x==0)return 0;
     return f(x/5);
 }
 
 int main(){
     
     int n;
     
     printf("n=\n");
     scanf("%d", &n);
     
     printf("Poziv fje je %d\n",f(n));
     
     system("pause");
     return 0;
 }
 [/code:1]
 Može li mi netko objasniti zašto ovaj program ne radi dobro, odnosno ispisuje "Poziv fje je 0 " za svaki broj koji unesem. To je 1. zadatak sa popravnog kolokvija od prošle godine. 
					
					 	  | Kod: | 	 		  #include<stdio.h>
 
#include<stdlib.h>
 
 
int f(int x){
 
    int i,b,br=0;
 
    
 
    if (x<0) return f(-x);
 
 
    for(i=2;i<10;i++){ 
 
                        while(x){
 
                               b=x%i;
 
                               x=x/i;
 
                               br++;
 
                               }
 
                               if(br==2)
 
                               return i;
 
                               } 
 
    if(x==0)return 0;
 
    return f(x/5);
 
}
 
 
int main(){
 
    
 
    int n;
 
    
 
    printf("n=\n");
 
    scanf("%d", &n);
 
    
 
    printf("Poziv fje je %d\n",f(n));
 
    
 
    system("pause");
 
    return 0;
 
}
 
 | 	  
 
Može li mi netko objasniti zašto ovaj program ne radi dobro, odnosno ispisuje "Poziv fje je 0 " za svaki broj koji unesem. To je 1. zadatak sa popravnog kolokvija od prošle godine.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Luuka Forumaš(ica)
  
  
  Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16 
Spol:   
Lokacija: Hakuna Matata 
		 | 
		
			
				 Postano: 18:05 pon, 27. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Pretpostavljam da ti gornja fja pocijepa x do te mjere da je x<5. I onda imaš cjelobrojno dijeljenje ( x/5 ) koje u tom slučaju vrati 0... a što bi program trebao radit? 
					
					Pretpostavljam da ti gornja fja pocijepa x do te mjere da je x<5. I onda imaš cjelobrojno dijeljenje ( x/5 ) koje u tom slučaju vrati 0... a što bi program trebao radit?
					_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
 
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy    
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		moi Forumaš(ica)
  
 
  Pridružen/a: 21. 02. 2007. (13:39:09) Postovi: (26)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Luuka Forumaš(ica)
  
  
  Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16 
Spol:   
Lokacija: Hakuna Matata 
		 | 
		
			
				 Postano: 18:32 pon, 27. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]#include<stdio.h>
 #include<stdlib.h>
 
 int f(int x)
 {
     int i,br=0,temp;
    
     if (x<0) return f(-x);
     if(x==0)return 0;
 
     
     for(i=2;i<10;i++)
     {
       temp=x;
       br=0;
       while(temp){
                  temp/=i;
                  br++;
                }
                if(br==2)
                 return i;
     }
     
     return f(x/5);
 }
 
 int main(){
    
     int n;
    
     printf("n= ");
     scanf("%d", &n);
    
     printf("Poziv fje je %d\n",f(n));
    
     system("pause");
     return 0;
 } [/code:1]
 
 Ovo bi trebalo bit bolje... dakle greška ti je bila što si cijepala x, pa ti za iduću bazu ostao na nuli... i nisi brojač stavila na nulu za svaku bazu... i uvjet x==0 je najbolje provjerit odmah, jer ovo kasnije je suvišno za taj slučaj... sad je valjda to to... :D 
					
					 	  | Kod: | 	 		  #include<stdio.h>
 
#include<stdlib.h>
 
 
int f(int x)
 
{
 
    int i,br=0,temp;
 
   
 
    if (x<0) return f(-x);
 
    if(x==0)return 0;
 
 
    
 
    for(i=2;i<10;i++)
 
    {
 
      temp=x;
 
      br=0;
 
      while(temp){
 
                 temp/=i;
 
                 br++;
 
               }
 
               if(br==2)
 
                return i;
 
    }
 
    
 
    return f(x/5);
 
}
 
 
int main(){
 
   
 
    int n;
 
   
 
    printf("n= ");
 
    scanf("%d", &n);
 
   
 
    printf("Poziv fje je %d\n",f(n));
 
   
 
    system("pause");
 
    return 0;
 
}  | 	  
 
 
Ovo bi trebalo bit bolje... dakle greška ti je bila što si cijepala x, pa ti za iduću bazu ostao na nuli... i nisi brojač stavila na nulu za svaku bazu... i uvjet x==0 je najbolje provjerit odmah, jer ovo kasnije je suvišno za taj slučaj... sad je valjda to to...  
					_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
 
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy    
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		moi Forumaš(ica)
  
 
  Pridružen/a: 21. 02. 2007. (13:39:09) Postovi: (26)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Luuka Forumaš(ica)
  
  
  Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16 
Spol:   
Lokacija: Hakuna Matata 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Gino Forumaš(ica)
  
 
  Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16 
Lokacija: Pula 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Gino Forumaš(ica)
  
 
  Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16 
Lokacija: Pula 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		lucika Forumaš(ica)
  
  
  Pridružen/a: 22. 11. 2007. (17:52:27) Postovi: (12F)16 
Spol:   
 
		 | 
		
			
				 Postano: 13:15 uto, 28. 4. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zadatak 2.5 (pismeni ispit, 28.11.2005). Napišite rekurzivnu funk-
 ciju koja uzima barem jedan argument x ∈ N. Funkcija treba vratiti broj
 na koliko različitih načina se x može prikazati kao suma brojeva 2, 3 i
 5, neovisno o redoslijedu sumanada (tj. 2 + 3 + 3 je isto što i 3 + 2 + 3
 i 3 + 3 + 2, pa se to broji samo kao jedan način).
 
 i sad, u 4.liniji koda piše:
 
 i f ( x == 0) return 1 ;
 
 zašto???jel to znači da se 0 može na jedan način prikazati kao suma brojeva 2, 3 i 5  :?: 
					
					Zadatak 2.5 (pismeni ispit, 28.11.2005). Napišite rekurzivnu funk-
 
ciju koja uzima barem jedan argument x ∈ N. Funkcija treba vratiti broj
 
na koliko različitih načina se x može prikazati kao suma brojeva 2, 3 i
 
5, neovisno o redoslijedu sumanada (tj. 2 + 3 + 3 je isto što i 3 + 2 + 3
 
i 3 + 3 + 2, pa se to broji samo kao jedan način).
 
 
i sad, u 4.liniji koda piše:
 
 
i f ( x == 0) return 1 ;
 
 
zašto???jel to znači da se 0 može na jedan način prikazati kao suma brojeva 2, 3 i 5   
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |