| 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] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 22:26 čet, 23. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Evo, mislim da je sad ok. Zaboravila sam ---> prvi=temp
 
 [code:1]
 #include<stdio.h>
 
 
 typedef struct _razlomak* lista;
 
 typedef struct _razlomak{
 
      int brojnik;
      int nazivnik;
      lista next;
 
 }razlomak;
 
    void ispisi_listu (lista prvi)
    {
        lista pom;
        int brojac=0;
 
        for(pom=prvi; pom!=NULL; pom=pom->next)
        {
            printf("%d. element liste = %d/%d\n", ++brojac, pom->brojnik, pom->nazivnik);
        }
        return;
    }
 
   lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
   {
      novi->next=prvi;
      prvi=novi;
 
      return prvi;
   }
 
   int main (void)
   {
      lista prvi=NULL;
      lista novi, temp, pom, pom2;
 
 
      while(1){
          novi=(lista)malloc(sizeof(razlomak));
          printf("Brojnik: ");
          scanf("%d", &novi->brojnik);
 
          printf("Nazivnik: ");
          scanf("%d", &novi->nazivnik);
          if(novi->nazivnik==0) break;
 
          temp=ubaci_razlomak_na_pocetak(prvi, novi);
 
          prvi=temp;
 
          printf("Brojnik/Nazivnik: %d/%d\n\n", temp->brojnik, temp->nazivnik);
      }
 
        ispisi_listu(temp);
 
          for(pom=prvi; pom!=NULL; pom=pom2){
             pom2=pom->next;
             free(pom);
          }
 
 
      return 0;
   }
 [/code:1][/code] 
					
					Evo, mislim da je sad ok. Zaboravila sam → prvi=temp
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
 
 
typedef struct _razlomak* lista;
 
 
typedef struct _razlomak{
 
 
     int brojnik;
 
     int nazivnik;
 
     lista next;
 
 
}razlomak;
 
 
   void ispisi_listu (lista prvi)
 
   {
 
       lista pom;
 
       int brojac=0;
 
 
       for(pom=prvi; pom!=NULL; pom=pom->next)
 
       {
 
           printf("%d. element liste = %d/%d\n", ++brojac, pom->brojnik, pom->nazivnik);
 
       }
 
       return;
 
   }
 
 
  lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
 
  {
 
     novi->next=prvi;
 
     prvi=novi;
 
 
     return prvi;
 
  }
 
 
  int main (void)
 
  {
 
     lista prvi=NULL;
 
     lista novi, temp, pom, pom2;
 
 
 
     while(1){
 
         novi=(lista)malloc(sizeof(razlomak));
 
         printf("Brojnik: ");
 
         scanf("%d", &novi->brojnik);
 
 
         printf("Nazivnik: ");
 
         scanf("%d", &novi->nazivnik);
 
         if(novi->nazivnik==0) break;
 
 
         temp=ubaci_razlomak_na_pocetak(prvi, novi);
 
 
         prvi=temp;
 
 
         printf("Brojnik/Nazivnik: %d/%d\n\n", temp->brojnik, temp->nazivnik);
 
     }
 
 
       ispisi_listu(temp);
 
 
         for(pom=prvi; pom!=NULL; pom=pom2){
 
            pom2=pom->next;
 
            free(pom);
 
         }
 
 
 
     return 0;
 
  }
 
 | 	  [/code]
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 18:51 uto, 28. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Dilema: 
 Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 [code:1]
 #include<stdio.h>
 
    double trag(FILE *in)
    {
 
         int n, i, j;
         double x, tr=0.0;
 
         fscanf(in, "%d", &n);
 
         for(i=0; i<n; ++i)
           for(j=0; j<n; ++j){
              fscanf(in, "%lf", &x);
 
              if(i==j) tr+=x;
        }
      return tr;
    }
 
 
    int main (void){
 
      FILE *in;
 
      if ((in=fopen("matrica.txt", "rt"))== NULL)
     {  printf("Greska prilikom ptrvaranja datoteke.\n");
         exit(1);
     }
 
    printf("Trag je %lg.\n", trag(in));
 
     return 0;
 
 
    }
 [/code:1] 
					
					Dilema: 
 
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 
Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
 
   double trag(FILE *in)
 
   {
 
 
        int n, i, j;
 
        double x, tr=0.0;
 
 
        fscanf(in, "%d", &n);
 
 
        for(i=0; i<n; ++i)
 
          for(j=0; j<n; ++j){
 
             fscanf(in, "%lf", &x);
 
 
             if(i==j) tr+=x;
 
       }
 
     return tr;
 
   }
 
 
 
   int main (void){
 
 
     FILE *in;
 
 
     if ((in=fopen("matrica.txt", "rt"))== NULL)
 
    {  printf("Greska prilikom ptrvaranja datoteke.\n");
 
        exit(1);
 
    }
 
 
   printf("Trag je %lg.\n", trag(in));
 
 
    return 0;
 
 
 
   }
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Shirohige Forumaš(ica)
  
 
  Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16 
Spol:   
 
		 | 
		
			
				 Postano: 20:11 uto, 28. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="frutabella"]Dilema: 
 Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 [code:1]
 ...
 [/code:1][/quote]
 
 Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a. 
					
					 	  | frutabella (napisa): | 	 		  Dilema: 
 
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 
Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 
 | 	  
 
 
Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 21:39 uto, 28. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="Shirohige"][quote="frutabella"]Dilema: 
 Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 [code:1]
 ...
 [/code:1][/quote]
 
 Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.[/quote]
 
 Nisu bili u istom folder. Hvala puno! 
					
					 	  | Shirohige (napisa): | 	 		   	  | frutabella (napisa): | 	 		  Dilema: 
 
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
 
Ako je to tako, zasto mi ovaj program onda ne radi?
 
 
 
 | 	  
 
 
Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a. | 	  
 
 
Nisu bili u istom folder. Hvala puno!
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		nuclear Forumaš(ica)
  
  
  Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16 
Spol:   
 
		 | 
		
			
				 Postano: 22:52 čet, 30. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         ja više ne znam što da radim...napisala sam zadaću u svim mogućim oblicima, načinima i sve živo probala i pitala i opet mi ne prihvaća zadaću..ako ima ko volje ovako kasno (da znam da je dan prije ispita) da mi kaže u čemu je problem:
 
 1.problem:
 Napišite program koji učitava prirodni broj n ≤ 17 i niz od 2n−1 cijelih brojeva. Program treba kreirati gornjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze po redu u prvom retku i zadnjem stupcu, a za elemente gornjeg trokuta vrijedi: 
 Mi,j=(2M(i−1,j) −2M(i,j+1)) mod 10287612,
 gdje mod označava nenegativni ostatak pri dijeljenju lijevog broja s desnim.
 Program treba ispisati elemente glavne dijagonale matrice M (ispisane brojeve odvojite razmakom).
 
 prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..
 Moj kod:
 
 [code:1]#include <stdio.h>
 
 int main(){
 
 int n, i, j, br;
 int mat[20][20];
 scanf("%d", &n);
 
 for(i=0; i<n; i++)
     scanf("%d", &mat[i][i]);
 
 for(i=1; i<n; i++)
 for(j=0; j<i; j++){
     br=5*mat[i-1][j]-5*mat[i][j+1];
     if(br<0) br=br*(-1);
     br=br%10453729;
     mat[i][j]=br;
 }
 
 for(i=0; i<n; i++)
 for(j=i+1; j<n; j++)
     mat[i][j]==0;
 
 
 for(j=0; j<n; j++)
     printf("%d ", mat[n-1][j]);
 
 return 0;}[/code:1]
 
 2.problem:
 Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.
 Moj kod:
 
 [code:1]#include <stdio.h>
 #include <stdlib.h>
 
 void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
 
 int i = odakle;
 
 while(string[i] == ' ') i += 1;
 *pocetak = i;
 if(string[*pocetak] == '\0') return;
 
 while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
 	*kraj = i;
 }
 
 void invertiraj(char* string, int pocetak, int kraj){
 
 while(pocetak < kraj){
 	char tmp = string[pocetak];
 	string[pocetak] = string[kraj];
 	string[kraj] = tmp;
 	kraj -= 1;
 	pocetak += 1;}
 }
 
 void obrisi(char* string, int pocetak, int kraj){
 	int i = pocetak, j = kraj + 1;
 	while(string[j] != '\0'){
 		string[i] = string[j];
 		i += 1;
 		j += 1;}
 	string[i] = string[j];
 }
 
 int main(){
 
 char linija[16700];
 int pocetak, kraj;
 int index_rijeci;
 
 scanf("%[^\n]", linija);
 
 sljedeca_rijec(linija, 0, &pocetak, &kraj);
 index_rijeci = 1;
 
 while(linija[pocetak] != '\0'){
 	if(index_rijeci % 7 == 0) {
 		obrisi(linija, pocetak, kraj);
 		sljedeca_rijec(linija, pocetak, &pocetak, &kraj);}
                             else {
 		invertiraj(linija, pocetak, kraj);
 		sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);}
 	index_rijeci += 1;}
 
 puts(linija);
 
 return 0;}[/code:1]linija 
					
					ja više ne znam što da radim...napisala sam zadaću u svim mogućim oblicima, načinima i sve živo probala i pitala i opet mi ne prihvaća zadaću..ako ima ko volje ovako kasno (da znam da je dan prije ispita) da mi kaže u čemu je problem:
 
 
1.problem:
 
Napišite program koji učitava prirodni broj n ≤ 17 i niz od 2n−1 cijelih brojeva. Program treba kreirati gornjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze po redu u prvom retku i zadnjem stupcu, a za elemente gornjeg trokuta vrijedi: 
 
Mi,j=(2M(i−1,j) −2M(i,j+1)) mod 10287612,
 
gdje mod označava nenegativni ostatak pri dijeljenju lijevog broja s desnim.
 
Program treba ispisati elemente glavne dijagonale matrice M (ispisane brojeve odvojite razmakom).
 
 
prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..
 
Moj kod:
 
 
 	  | Kod: | 	 		  #include <stdio.h>
 
 
int main(){
 
 
int n, i, j, br;
 
int mat[20][20];
 
scanf("%d", &n);
 
 
for(i=0; i<n; i++)
 
    scanf("%d", &mat[i][i]);
 
 
for(i=1; i<n; i++)
 
for(j=0; j<i; j++){
 
    br=5*mat[i-1][j]-5*mat[i][j+1];
 
    if(br<0) br=br*(-1);
 
    br=br%10453729;
 
    mat[i][j]=br;
 
}
 
 
for(i=0; i<n; i++)
 
for(j=i+1; j<n; j++)
 
    mat[i][j]==0;
 
 
 
for(j=0; j<n; j++)
 
    printf("%d ", mat[n-1][j]);
 
 
return 0;} | 	  
 
 
2.problem:
 
Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.
 
Moj kod:
 
 
 	  | Kod: | 	 		  #include <stdio.h>
 
#include <stdlib.h>
 
 
void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
 
 
int i = odakle;
 
 
while(string[i] == ' ') i += 1;
 
*pocetak = i;
 
if(string[*pocetak] == '\0') return;
 
 
while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
 
   *kraj = i;
 
}
 
 
void invertiraj(char* string, int pocetak, int kraj){
 
 
while(pocetak < kraj){
 
   char tmp = string[pocetak];
 
   string[pocetak] = string[kraj];
 
   string[kraj] = tmp;
 
   kraj -= 1;
 
   pocetak += 1;}
 
}
 
 
void obrisi(char* string, int pocetak, int kraj){
 
   int i = pocetak, j = kraj + 1;
 
   while(string[j] != '\0'){
 
      string[i] = string[j];
 
      i += 1;
 
      j += 1;}
 
   string[i] = string[j];
 
}
 
 
int main(){
 
 
char linija[16700];
 
int pocetak, kraj;
 
int index_rijeci;
 
 
scanf("%[^\n]", linija);
 
 
sljedeca_rijec(linija, 0, &pocetak, &kraj);
 
index_rijeci = 1;
 
 
while(linija[pocetak] != '\0'){
 
   if(index_rijeci % 7 == 0) {
 
      obrisi(linija, pocetak, kraj);
 
      sljedeca_rijec(linija, pocetak, &pocetak, &kraj);}
 
                            else {
 
      invertiraj(linija, pocetak, kraj);
 
      sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);}
 
   index_rijeci += 1;}
 
 
puts(linija);
 
 
return 0;} | 	  linija
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Shirohige Forumaš(ica)
  
 
  Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		nuclear Forumaš(ica)
  
  
  Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 12:44 pet, 31. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         @nuclear:
 
 Prvi zadatak ti nema veze s textom (vidi formulu). Cini mi se da si zalijepila text od krivog zadatka (onog koji ucitava rub matrice, umjesto onog koji ucitava dijagonalu).
 
 Drugi zadatak: cini mi se da ne radi dobro kad zadnju rijec NE brises i kad nema razmake na kraju. Naime, u tom slucaju, imas [tt]kraj[/tt] koji je index zadnjeg znaka zadnje rijeci i onda pozoves
 [tt]sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);[/tt]
 No, u samoj funkciji imas ovo:
 [code:1]void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
   int i = odakle;
 
   while(string[i] == ' ') i += 1;
   *pocetak = i;
   if(string[*pocetak] == '\0') return;
 
   while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
    *kraj = i;
 }[/code:1]
 Dakle, tvoj [tt]i[/tt] ([tt]odakle[/tt]) krece od znaka [tt]'\0'[/tt] i povecava se dok god je to nesto razlicito od razmaka, sto moze biti tko zna kad/gdje. I onda nadjes neku nepostojecu rijec (i pitanje je sto se dalje desi) ili ti index izleti iz memorije koja pripada programu, pa program padne. Ne pitaj zasto ti doma radi; moze biti puno faktora kad se izlijece iz "dozvoljene" memorije.
 
 Ne znam ima li jos gresaka. Ovo sam nabrzinu pregledao dok vam jos nije poceo kolokvij (bio sam dva dana na nekom workshopu, pa nisam mogao prije). 
					
					@nuclear:
 
 
Prvi zadatak ti nema veze s textom (vidi formulu). Cini mi se da si zalijepila text od krivog zadatka (onog koji ucitava rub matrice, umjesto onog koji ucitava dijagonalu).
 
 
Drugi zadatak: cini mi se da ne radi dobro kad zadnju rijec NE brises i kad nema razmake na kraju. Naime, u tom slucaju, imas kraj koji je index zadnjeg znaka zadnje rijeci i onda pozoves
 
sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);
 
No, u samoj funkciji imas ovo:
 
 	  | Kod: | 	 		  void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
 
  int i = odakle;
 
 
  while(string[i] == ' ') i += 1;
 
  *pocetak = i;
 
  if(string[*pocetak] == '\0') return;
 
 
  while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
 
   *kraj = i;
 
} | 	  
 
Dakle, tvoj i (odakle) krece od znaka '\0' i povecava se dok god je to nesto razlicito od razmaka, sto moze biti tko zna kad/gdje. I onda nadjes neku nepostojecu rijec (i pitanje je sto se dalje desi) ili ti index izleti iz memorije koja pripada programu, pa program padne. Ne pitaj zasto ti doma radi; moze biti puno faktora kad se izlijece iz "dozvoljene" memorije.
 
 
Ne znam ima li jos gresaka. Ovo sam nabrzinu pregledao dok vam jos nije poceo kolokvij (bio sam dva dana na nekom workshopu, pa nisam mogao prije).
					_________________ 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] | 
		 | 
	
	
		nuclear Forumaš(ica)
  
  
  Pridružen/a: 13. 11. 2011. (17:40:12) Postovi: (74)16 
Spol:   
 
		 | 
		
			
				 Postano: 10:42 pon, 3. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Da, popravila sam sad sve greške. Nisam uopće pomislila da bi kretala od desno na lijevo za matricu. I vidim tek sad da sam dala krivi zadatak, al nema veze, fora je ista :D a ovo s riječima, ne znam zašto, al na kraju je prihvatilo.... 
					
					Da, popravila sam sad sve greške. Nisam uopće pomislila da bi kretala od desno na lijevo za matricu. I vidim tek sad da sam dala krivi zadatak, al nema veze, fora je ista   a ovo s riječima, ne znam zašto, al na kraju je prihvatilo....
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		zvons Forumaš(ica)
  
 
  Pridružen/a: 18. 11. 2012. (16:13:44) Postovi: (1B)16 
 
		 | 
		
			
				 Postano: 15:47 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Može pomoć oko samo ovog dijela ovog zadatka:
 
 Osmosmjerka je kvadratna matrica slova, u kojoj rijeci mogu biti ispisane u svih 8 smjerova, pocevsi od
 bilo kojeg polja. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
  Napisite funkciju ucitaj koja ucitava osmosmjerku reda n, redak po redak, kao n rijeci (svaka duljine n)
 odvojenih prelaskom u novi red. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije
 koliko je potrebno za drzanje n  n matrice charova. Vrijednost n se vraca preko varijabilnog argumenta. Ako
 bilo koji znak u osmosmjerci nije slovo izmedu A i Z, ili nisu svi reci jednake duljine, funkcija mora ispisati poruku
 o gresci i vratiti nul-pokazivac (za n treba vratiti 0). Izlaskom iz funkcije mora biti oslobodena sva memorija,
 osim (ako nije nastupila greska) one potrebne za povratnu vrijednost.
 
  :twisted:  :?:  :?: 
					
					Može pomoć oko samo ovog dijela ovog zadatka:
 
 
Osmosmjerka je kvadratna matrica slova, u kojoj rijeci mogu biti ispisane u svih 8 smjerova, pocevsi od
 
bilo kojeg polja. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
 
 Napisite funkciju ucitaj koja ucitava osmosmjerku reda n, redak po redak, kao n rijeci (svaka duljine n)
 
odvojenih prelaskom u novi red. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije
 
koliko je potrebno za drzanje n  n matrice charova. Vrijednost n se vraca preko varijabilnog argumenta. Ako
 
bilo koji znak u osmosmjerci nije slovo izmedu A i Z, ili nisu svi reci jednake duljine, funkcija mora ispisati poruku
 
o gresci i vratiti nul-pokazivac (za n treba vratiti 0). Izlaskom iz funkcije mora biti oslobodena sva memorija,
 
osim (ako nije nastupila greska) one potrebne za povratnu vrijednost.
 
 
        
					
 
  _________________ "Hard work never killed anybody, but why take a chance?" 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 16:42 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Pisem napamet, pa mozda ima gres(a)ka...
 
 [code:1]char **greska(const char *poruka, char **mat, int i, int *n) {
   while (i--) free(mat[i]);
   free(mat);
   *n = 0;
   printf("Greska: %s.\n", poruka);
   return NULL;
 }
 
 char **ucitaj(int *n) {
   int i, j;
   char **mat, s[92];
 
   scanf("%d", n);
 
   mat = (char**)malloc(n * sizeof(char *));
   for (i = 0; i < *n; i++) {
     scanf("%91[^\n]", s); /* dozvoljavam rijeci do 91 znaka, zato da detektiram predugacke rijeci i kad je n == 90 */
     if (strlen(s) <> *n)
       return greska("Rijec krive duljine", mat, i, n);
     for (j = 0; s[j]; j++) /* umjesto s[j] moze ici i j < n, ali ovo bi trebalo biti neznatno brze */
       if (s[i] < 'A' || s[i] > 'Z')
         return greska("Rijec sadrzi nedozvoljeni znak", mat, i, n);
     mat[i] = (char*)malloc(n * sizeof(char));
     for (j = 0; s[j]; j++) mat[i][j] = s[j]; /* ne koristim strcpy() jer on kopira i zavrsni '\0', a to ne zelimo */
   }
   return mat;
 }[/code:1]
 
 Ako te funkcija [tt]greska()[/tt] zbunjuje, napravi bez nje (samo moras dva puta pisati isti kod). 
					
					Pisem napamet, pa mozda ima gres(a)ka...
 
 
 	  | Kod: | 	 		  char **greska(const char *poruka, char **mat, int i, int *n) {
 
  while (i--) free(mat[i]);
 
  free(mat);
 
  *n = 0;
 
  printf("Greska: %s.\n", poruka);
 
  return NULL;
 
}
 
 
char **ucitaj(int *n) {
 
  int i, j;
 
  char **mat, s[92];
 
 
  scanf("%d", n);
 
 
  mat = (char**)malloc(n * sizeof(char *));
 
  for (i = 0; i < *n; i++) {
 
    scanf("%91[^\n]", s); /* dozvoljavam rijeci do 91 znaka, zato da detektiram predugacke rijeci i kad je n == 90 */
 
    if (strlen(s) <> *n)
 
      return greska("Rijec krive duljine", mat, i, n);
 
    for (j = 0; s[j]; j++) /* umjesto s[j] moze ici i j < n, ali ovo bi trebalo biti neznatno brze */
 
      if (s[i] < 'A' || s[i] > 'Z')
 
        return greska("Rijec sadrzi nedozvoljeni znak", mat, i, n);
 
    mat[i] = (char*)malloc(n * sizeof(char));
 
    for (j = 0; s[j]; j++) mat[i][j] = s[j]; /* ne koristim strcpy() jer on kopira i zavrsni '\0', a to ne zelimo */
 
  }
 
  return mat;
 
} | 	  
 
 
Ako te funkcija greska() zbunjuje, napravi bez nje (samo moras dva puta pisati isti kod).
					_________________ 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] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 19:49 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zasto mi ne ispisuje sadrzaj datoteke na ekran?
 
 [code:1]
 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #include<ctype.h>
 
 
 typedef struct _drzava{
 
    char ime[21];
    unsigned brojStan;
    double povrsina;
 
 }drzava;
 
    drzava drzave[3]={
 
    "Esp", 1000, 12345,
    "Gre", 2000, 54321,
    "Ita", 3000, 67890,
 };
 
   void kreiraj(const char* f_name)
   {
 
      FILE* in;
      if((in=fopen(f_name, "wb"))==NULL)
      {
          fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
          exit(0);
      }
 
      if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
      {
          fprintf(stderr, "Greska u pisanju.\n");
          exit(1);
 
      }
 
      fclose(in);
      return;
   }
 
 
  void ispisi(const char *f_name)
  {
      FILE *in;
      drzava drz;
      int broj=0;
 
      if((in=fopen(f_name, "rb")== NULL))
     {
       fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
        exit(2);
     }
 
     printf("\nSadrzaj datoteke %s: \n", f_name);
 
     while(fread(&drz, sizeof(drzava), 1, in)==1)
     {
        ++broj;
        printf("zapis %2d: %20s, %6u, %8.2f\n \n",
                broj, drz.ime, drz.brojStan, drz.povrsina);
 
     }
 
     if(ferror(in))
     {
        fprintf(stderr, "Greska u citanju.\n");
        exit(3);
     }
 
     fclose(in);
 
     return;
 
  }
 
     int main (void)
     {
 
        kreiraj("drzavice.txt");
        ispisi("drzavice.txt");
 
        return 0;
 
     }
 [/code:1] :roll: 
  [size=9][color=#999999]Added after 19 minutes:[/color][/size]
   Deklarirajte strukturu drzava koja se sastoji (samo) od sljedecih stavki: ime drzave (string do 20 znakova), broj stanovnika (cijeli broj bez predznaka), te povrsina u km^2 (realni broj dvostruke preciznosti). Niz ovakvih struktura
 cuvat ce se u binarnoj datoteci.
 
 Napisite funkciju int usporedi(drzava a, drzava b);
 koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").
 
 Da li ovo trazeni kod?
 
 [code:1]
 typedef struct _drzava{
 
    char ime[21];
    unsigned brojStan;
    double povrsina;
 
 }drzava;
 
 
    int usporedi (drzava a, drzava b)
    {
 
       if(a.brojStan < b.brojStan) return -1;
       if(a.brojStan > b.brojStan) return 1;
       else
       return 0;
 
    }
 
 [/code:1] 
  [size=9][color=#999999]Added after 33 minutes:[/color][/size]
   b) Napisite funkciju unsigned duljina(FILE* niz);
 koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.
 
 
 Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.
 
 
 [code:1]
  unsigned duljina (FILE *niz)
    {
        drzava drz;
        unsigned br=0;
 
        while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;
 
        return br;
    }
 
 
 int main (void)
 {
        FILE* niz;
 
        if((niz=fopen("niz.txt", "rb"))==NULL)
        {
            printf("Greska pri otvaranju-\n");
            exit(0);
        }
 
         printf("Duljina niza struktura je: %u\n", duljina(niz));
 
      fclose (niz);
      
     return 0;
 }[/code:1] 
					
					Zasto mi ne ispisuje sadrzaj datoteke na ekran?
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<stdlib.h>
 
#include<string.h>
 
#include<ctype.h>
 
 
 
typedef struct _drzava{
 
 
   char ime[21];
 
   unsigned brojStan;
 
   double povrsina;
 
 
}drzava;
 
 
   drzava drzave[3]={
 
 
   "Esp", 1000, 12345,
 
   "Gre", 2000, 54321,
 
   "Ita", 3000, 67890,
 
};
 
 
  void kreiraj(const char* f_name)
 
  {
 
 
     FILE* in;
 
     if((in=fopen(f_name, "wb"))==NULL)
 
     {
 
         fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
 
         exit(0);
 
     }
 
 
     if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
 
     {
 
         fprintf(stderr, "Greska u pisanju.\n");
 
         exit(1);
 
 
     }
 
 
     fclose(in);
 
     return;
 
  }
 
 
 
 void ispisi(const char *f_name)
 
 {
 
     FILE *in;
 
     drzava drz;
 
     int broj=0;
 
 
     if((in=fopen(f_name, "rb")== NULL))
 
    {
 
      fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
 
       exit(2);
 
    }
 
 
    printf("\nSadrzaj datoteke %s: \n", f_name);
 
 
    while(fread(&drz, sizeof(drzava), 1, in)==1)
 
    {
 
       ++broj;
 
       printf("zapis %2d: %20s, %6u, %8.2f\n \n",
 
               broj, drz.ime, drz.brojStan, drz.povrsina);
 
 
    }
 
 
    if(ferror(in))
 
    {
 
       fprintf(stderr, "Greska u citanju.\n");
 
       exit(3);
 
    }
 
 
    fclose(in);
 
 
    return;
 
 
 }
 
 
    int main (void)
 
    {
 
 
       kreiraj("drzavice.txt");
 
       ispisi("drzavice.txt");
 
 
       return 0;
 
 
    }
 
 | 	     
 
 
Added after 19 minutes:
 
 
 Deklarirajte strukturu drzava koja se sastoji (samo) od sljedecih stavki: ime drzave (string do 20 znakova), broj stanovnika (cijeli broj bez predznaka), te povrsina u km^2 (realni broj dvostruke preciznosti). Niz ovakvih struktura
 
cuvat ce se u binarnoj datoteci.
 
 
Napisite funkciju int usporedi(drzava a, drzava b);
 
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").
 
 
Da li ovo trazeni kod?
 
 
 	  | Kod: | 	 		  
 
typedef struct _drzava{
 
 
   char ime[21];
 
   unsigned brojStan;
 
   double povrsina;
 
 
}drzava;
 
 
 
   int usporedi (drzava a, drzava b)
 
   {
 
 
      if(a.brojStan < b.brojStan) return -1;
 
      if(a.brojStan > b.brojStan) return 1;
 
      else
 
      return 0;
 
 
   }
 
 
 | 	   
 
 
Added after 33 minutes:
 
 
 b) Napisite funkciju unsigned duljina(FILE* niz);
 
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.
 
 
 
Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.
 
 
 
 	  | Kod: | 	 		  
 
 unsigned duljina (FILE *niz)
 
   {
 
       drzava drz;
 
       unsigned br=0;
 
 
       while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;
 
 
       return br;
 
   }
 
 
 
int main (void)
 
{
 
       FILE* niz;
 
 
       if((niz=fopen("niz.txt", "rb"))==NULL)
 
       {
 
           printf("Greska pri otvaranju-\n");
 
           exit(0);
 
       }
 
 
        printf("Duljina niza struktura je: %u\n", duljina(niz));
 
 
     fclose (niz);
 
     
 
    return 0;
 
} | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		
			
				 Postano: 20:06 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="frutabella"]Zasto mi ne ispisuje sadrzaj datoteke na ekran?[/quote]
 Zbog ovoga:
 [code:1]
      if((in=fopen(f_name, "rb")== NULL))
 [/code:1] 
 
 Naime, [tt]==[/tt] ima veći prioritet od [tt]=[/tt]. Ukratko, krivo si stavila zagrade.
 
 
 [quote]
 Napisite funkciju int usporedi(drzava a, drzava b);
 koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").
 
 Da li ovo trazeni kod?
 
 [code:1]
 typedef struct _drzava{
 
    char ime[21];
    unsigned brojStan;
    double povrsina;
 
 }drzava;
 
 
    int usporedi (drzava a, drzava b)
    {
 
       if(a.brojStan < b.brojStan) return -1;
       if(a.brojStan > b.brojStan) return 1;
       else
       return 0;
 
    }
 
 [/code:1]
 [/quote]
 Ne. Države treba usporediti prema [b]gustoći naseljenosti[/b], a ne prema broju stanovnika.
 
  
 
 [quote]
  b) Napisite funkciju unsigned duljina(FILE* niz);
 koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.
 
 
 Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.
 
 
 [code:1]
  unsigned duljina (FILE *niz)
    {
        drzava drz;
        unsigned br=0;
 
        while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;
 
        return br;
    }
 
 
 int main (void)
 {
        FILE* niz;
 
        if((niz=fopen("niz.txt", "rb"))==NULL)
        {
            printf("Greska pri otvaranju-\n");
            exit(0);
        }
 
         printf("Duljina niza struktura je: %u\n", duljina(niz));
 
      fclose (niz);
      
     return 0;
 }[/code:1][/quote]
 Možeš li attachati datoteku [tt]niz.txt[/tt]. Mislim da bi problem mogao biti u formatu datoteke. 
					
					 	  | frutabella (napisa): | 	 		  | Zasto mi ne ispisuje sadrzaj datoteke na ekran? | 	  
 
Zbog ovoga:
 
 	  | Kod: | 	 		  
 
     if((in=fopen(f_name, "rb")== NULL))
 
 | 	   
 
 
Naime, == ima veći prioritet od =. Ukratko, krivo si stavila zagrade.
 
 
 
 	  | Citat: | 	 		  
 
Napisite funkciju int usporedi(drzava a, drzava b);
 
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").
 
 
Da li ovo trazeni kod?
 
 
 	  | Kod: | 	 		  
 
typedef struct _drzava{
 
 
   char ime[21];
 
   unsigned brojStan;
 
   double povrsina;
 
 
}drzava;
 
 
 
   int usporedi (drzava a, drzava b)
 
   {
 
 
      if(a.brojStan < b.brojStan) return -1;
 
      if(a.brojStan > b.brojStan) return 1;
 
      else
 
      return 0;
 
 
   }
 
 
 | 	  
 
 | 	  
 
Ne. Države treba usporediti prema gustoći naseljenosti, a ne prema broju stanovnika.
 
 
 
 
 
 	  | Citat: | 	 		  
 
 b) Napisite funkciju unsigned duljina(FILE* niz);
 
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.
 
 
 
Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.
 
 
 
 	  | Kod: | 	 		  
 
 unsigned duljina (FILE *niz)
 
   {
 
       drzava drz;
 
       unsigned br=0;
 
 
       while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;
 
 
       return br;
 
   }
 
 
 
int main (void)
 
{
 
       FILE* niz;
 
 
       if((niz=fopen("niz.txt", "rb"))==NULL)
 
       {
 
           printf("Greska pri otvaranju-\n");
 
           exit(0);
 
       }
 
 
        printf("Duljina niza struktura je: %u\n", duljina(niz));
 
 
     fclose (niz);
 
     
 
    return 0;
 
} | 	 
  | 	  
 
Možeš li attachati datoteku niz.txt. Mislim da bi problem mogao biti u formatu datoteke.
					
 
  _________________ Extraordinary claims require extraordinary evidence. – Carl Sagan 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 20:47 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Znaci u kompletu to bi trebalo sad ovako izgledati:
 
 
 
 [code:1]
 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 #include<ctype.h>
 
 
 typedef struct _drzava{
 
    char ime[21];
    unsigned brojStan;
    double povrsina;
 
 }drzava;
 
    drzava drzave[3]={
 
    "Esp", 1000, 12345,
    "Gre", 2000, 54321,
    "Ita", 3000, 67890,
 };
 
   void kreiraj(const char* f_name)
   {
 
      FILE* in;
      if((in=fopen(f_name, "wb"))==NULL)
      {
          fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
          exit(0);
      }
 
      if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
      {
          fprintf(stderr, "Greska u pisanju.\n");
          exit(1);
 
      }
 
      fclose(in);
      return;
   }
 
 
  void ispisi(const char *f_name)
  {
      FILE *in;
      drzava drz;
      int broj=0;
 
      if((in=fopen(f_name, "rb"))== NULL)
     {
       fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
        exit(2);
     }
 
     printf("\nSadrzaj datoteke %s: \n", f_name);
 
     while(fread(&drz, sizeof(drzava), 1, in)==1)
     {
        ++broj;
        printf("zapis %2d: %20s, %6u, %8.2f\n \n",
                broj, drz.ime, drz.brojStan, drz.povrsina);
 
     }
 
     if(ferror(in))
     {
        fprintf(stderr, "Greska u citanju.\n");
        exit(3);
     }
 
     fclose(in);
 
     return;
 
  }
 
 
      unsigned duljina (FILE *niz)
    {
        drzava drz;
        unsigned br=0;
 
        while(fread(&drz, sizeof(drzava), 1, niz)==1)  ++br;
 
        return br;
    }
 
 
     int main (void)
     {
        FILE *in;
        kreiraj("drzavice.txt");
        ispisi("drzavice.txt");
 
        if((in=fopen("drzavice.txt", "rb"))==NULL)
        {
            printf("Greska.\n");
            exit(2);
 
        }
 
        printf("Duljina niza struktura: %d", duljina(in));
 
        return 0;
 
     }
 [/code:1] 
					
					Znaci u kompletu to bi trebalo sad ovako izgledati:
 
 
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<stdlib.h>
 
#include<string.h>
 
#include<ctype.h>
 
 
 
typedef struct _drzava{
 
 
   char ime[21];
 
   unsigned brojStan;
 
   double povrsina;
 
 
}drzava;
 
 
   drzava drzave[3]={
 
 
   "Esp", 1000, 12345,
 
   "Gre", 2000, 54321,
 
   "Ita", 3000, 67890,
 
};
 
 
  void kreiraj(const char* f_name)
 
  {
 
 
     FILE* in;
 
     if((in=fopen(f_name, "wb"))==NULL)
 
     {
 
         fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
 
         exit(0);
 
     }
 
 
     if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
 
     {
 
         fprintf(stderr, "Greska u pisanju.\n");
 
         exit(1);
 
 
     }
 
 
     fclose(in);
 
     return;
 
  }
 
 
 
 void ispisi(const char *f_name)
 
 {
 
     FILE *in;
 
     drzava drz;
 
     int broj=0;
 
 
     if((in=fopen(f_name, "rb"))== NULL)
 
    {
 
      fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
 
       exit(2);
 
    }
 
 
    printf("\nSadrzaj datoteke %s: \n", f_name);
 
 
    while(fread(&drz, sizeof(drzava), 1, in)==1)
 
    {
 
       ++broj;
 
       printf("zapis %2d: %20s, %6u, %8.2f\n \n",
 
               broj, drz.ime, drz.brojStan, drz.povrsina);
 
 
    }
 
 
    if(ferror(in))
 
    {
 
       fprintf(stderr, "Greska u citanju.\n");
 
       exit(3);
 
    }
 
 
    fclose(in);
 
 
    return;
 
 
 }
 
 
 
     unsigned duljina (FILE *niz)
 
   {
 
       drzava drz;
 
       unsigned br=0;
 
 
       while(fread(&drz, sizeof(drzava), 1, niz)==1)  ++br;
 
 
       return br;
 
   }
 
 
 
    int main (void)
 
    {
 
       FILE *in;
 
       kreiraj("drzavice.txt");
 
       ispisi("drzavice.txt");
 
 
       if((in=fopen("drzavice.txt", "rb"))==NULL)
 
       {
 
           printf("Greska.\n");
 
           exit(2);
 
 
       }
 
 
       printf("Duljina niza struktura: %d", duljina(in));
 
 
       return 0;
 
 
    }
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Leolinus Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2012. (16:36:41) Postovi: (10)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Leolinus Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2012. (16:36:41) Postovi: (10)16 
 
		 | 
		
			
				 Postano: 22:41 uto, 11. 6. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="mdoko"]
 [b]Disclaimer:[/b] Govorim samo za svoj način
 bodovanja.[/quote]
 Trebam li upoznati asistente/ispravljače osobno i
 probati pogoditi koje su zadatke sastavljali xD?
 Jer za ove pomoćne funkcije zna biti jedan
 određen miris neoduševljenosti i skine se dosta
 bodova.
 
 Što se pomoćnih polja tiče, misli li se na
 pomoćna polja u int main-u ili bilo gdje jer
 primjećujem u nekim rješenjima u funkciji
 (popravni 2012.) pomoćno polje s[92] u koje se
 učitava nešto.
 
 Što da se to polje zamijenilo s alociranim poljem
 iste duljine?
 
 Što je na kraju dozvoljeno? 
 
 Pretpostavljam da se in-place rješenje ne traži?
 
 EDIT: Zbunjen sam jer, ne znam je l' opće poznato,
 ali bilo kakvo statičko deklariranje polja
 (ne samo u mainu nego i u ostalim funkcijama)
 odlazi također u iste memorijske lokacije(stog, bss, data),
 a ne na heap tako da deklaracija pomoćnog polja unutar
 funkcije nema apsolutno nikakve razlike.
 
 Recimo:
 
 [code:1]#include<stdio.h>
 #include<malloc.h>
 
 int func() {
 	int *sa = (int*) malloc(sizeof(int) * 100);
 	int s[100] = {0};
 	
 	printf("Adresa s[2] = %p\n", (void *)&s[2]);
 	printf("Adresa sa[2] = %p\n", (void *)&sa[2]);
 	return 0;
 }
 
 int main() {
 	int s[100] = {0};
 	
 	printf("Adresa s[2] = %p\n", (void *)&s[2]);
 	func();
 	func();
 	return 0;
 }[/code:1]
 [code:1]
 Adresa s[2] = 0x7ffffd0b5428
 Adresa s[2] = 0x7ffffd0b5288
 Adresa sa[2] = 0xeca018
 Adresa s[2] = 0x7ffffd0b5288
 Adresa sa[2] = 0xeca1b8
 [/code:1]
 
 Ovaj kod jasno pokazuje da polje "s" unutar funkcije
 ima statičku adresu i da zauzima prostor u nekom
 od navedenih memorijskih blokova.
 Tako da je rješenje ili krivo ili ja
 nisam dobro upoznat s konvencijama koje asistenti
 prihvaćaju/ne prihvaćaju.
 
 EDIT2:
 Mislim, ovakve stvari koštaju ljude prolaza(80%
 prag), pitam samo zato jer mi nije jasno zašto
 vidim toliko kontradiktornosti u rješenjima.
 Ili su rješenja tu samo kao algoritamski pristup
 i ne drže se zadanih ograničenja na ispitu?
 Mislim, da budem jasan, našao sam ovo rješenje
 na [url=http://degiorgi.math.hr/forum/viewtopic.php?p=182975#182975]forumu[/url], ali slične stvari znaju biti i u službenim. 
					
					 	  | mdoko (napisa): | 	 		  
 
Disclaimer: Govorim samo za svoj način
 
bodovanja. | 	  
 
Trebam li upoznati asistente/ispravljače osobno i
 
probati pogoditi koje su zadatke sastavljali xD?
 
Jer za ove pomoćne funkcije zna biti jedan
 
određen miris neoduševljenosti i skine se dosta
 
bodova.
 
 
Što se pomoćnih polja tiče, misli li se na
 
pomoćna polja u int main-u ili bilo gdje jer
 
primjećujem u nekim rješenjima u funkciji
 
(popravni 2012.) pomoćno polje s[92] u koje se
 
učitava nešto.
 
 
Što da se to polje zamijenilo s alociranim poljem
 
iste duljine?
 
 
Što je na kraju dozvoljeno? 
 
 
Pretpostavljam da se in-place rješenje ne traži?
 
 
EDIT: Zbunjen sam jer, ne znam je l' opće poznato,
 
ali bilo kakvo statičko deklariranje polja
 
(ne samo u mainu nego i u ostalim funkcijama)
 
odlazi također u iste memorijske lokacije(stog, bss, data),
 
a ne na heap tako da deklaracija pomoćnog polja unutar
 
funkcije nema apsolutno nikakve razlike.
 
 
Recimo:
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
#include<malloc.h>
 
 
int func() {
 
   int *sa = (int*) malloc(sizeof(int) * 100);
 
   int s[100] = {0};
 
   
 
   printf("Adresa s[2] = %p\n", (void *)&s[2]);
 
   printf("Adresa sa[2] = %p\n", (void *)&sa[2]);
 
   return 0;
 
}
 
 
int main() {
 
   int s[100] = {0};
 
   
 
   printf("Adresa s[2] = %p\n", (void *)&s[2]);
 
   func();
 
   func();
 
   return 0;
 
} | 	  
 
 	  | Kod: | 	 		  
 
Adresa s[2] = 0x7ffffd0b5428
 
Adresa s[2] = 0x7ffffd0b5288
 
Adresa sa[2] = 0xeca018
 
Adresa s[2] = 0x7ffffd0b5288
 
Adresa sa[2] = 0xeca1b8
 
 | 	  
 
 
Ovaj kod jasno pokazuje da polje "s" unutar funkcije
 
ima statičku adresu i da zauzima prostor u nekom
 
od navedenih memorijskih blokova.
 
Tako da je rješenje ili krivo ili ja
 
nisam dobro upoznat s konvencijama koje asistenti
 
prihvaćaju/ne prihvaćaju.
 
 
EDIT2:
 
Mislim, ovakve stvari koštaju ljude prolaza(80%
 
prag), pitam samo zato jer mi nije jasno zašto
 
vidim toliko kontradiktornosti u rješenjima.
 
Ili su rješenja tu samo kao algoritamski pristup
 
i ne drže se zadanih ograničenja na ispitu?
 
Mislim, da budem jasan, našao sam ovo rješenje
 
na forumu, ali slične stvari znaju biti i u službenim.
					
 
  
					
					
					
  Zadnja promjena: Leolinus; 23:24 uto, 11. 6. 2013; ukupno mijenjano 1 put.
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |