| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 20:52 sri, 2. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         @Redeemer: Baci oko na skriptu za vjezbe, poglavlje 4.3. Ako razumijes sto se dogadja u memoriji (a tamo je objasnjeno i nacrtano), trebalo bi ti biti kad takva zamjena radi, a kad ne (i zasto). 
					
					@Redeemer: Baci oko na skriptu za vjezbe, poglavlje 4.3. Ako razumijes sto se dogadja u memoriji (a tamo je objasnjeno i nacrtano), trebalo bi ti biti kad takva zamjena radi, a kad ne (i zasto).
					_________________ 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] | 
		 | 
	
	
		la mer Forumaš(ica)
  
 
  Pridružen/a: 19. 09. 2012. (17:39:46) Postovi: (F)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		celeste Forumaš(ica)
  
 
  Pridružen/a: 31. 10. 2009. (11:56:09) Postovi: (23)16 
 
		 | 
		
			
				 Postano: 15:04 čet, 17. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zadatak uchitava broj i niz brojeva i sortira ih po sumi znamenaka. Zanima me znachi li ovo da sam koristila pomochni niz obzirom da sam sumu znamenaka spremila u prvotni niz i onda ga sortirala?
 
 [code:1]#include <stdio.h>
 #include <stdlib.h>
 
 int main(){
     int n,a[200],i,s=0,t,d,m,j;
     scanf("%d",&n);
     for(i=0;i<n;i++){
         scanf("%d",&a[i]);}
     for(i=0;i<n;i++){
         t=a[i];
         if(t<0) t=-t;
         s=0;
         while(t>0){
             d=t%10;
             s=s+d;
             t=t/10;}
             a[i]=s;}
     for(i=0;i<n-1;i++){
         for(j=i+1;j<n;j++){
         if(a[i]>a[j]){
            m=a[i];
            a[i]=a[j];
            a[j]=m;}}}
     for(i=0;i<n;i++){
         printf("%d\n",a[i]);}
 
         return 0;
 }
 [/code:1] 
					
					Zadatak uchitava broj i niz brojeva i sortira ih po sumi znamenaka. Zanima me znachi li ovo da sam koristila pomochni niz obzirom da sam sumu znamenaka spremila u prvotni niz i onda ga sortirala?
 
 
 	  | Kod: | 	 		  #include <stdio.h>
 
#include <stdlib.h>
 
 
int main(){
 
    int n,a[200],i,s=0,t,d,m,j;
 
    scanf("%d",&n);
 
    for(i=0;i<n;i++){
 
        scanf("%d",&a[i]);}
 
    for(i=0;i<n;i++){
 
        t=a[i];
 
        if(t<0) t=-t;
 
        s=0;
 
        while(t>0){
 
            d=t%10;
 
            s=s+d;
 
            t=t/10;}
 
            a[i]=s;}
 
    for(i=0;i<n-1;i++){
 
        for(j=i+1;j<n;j++){
 
        if(a[i]>a[j]){
 
           m=a[i];
 
           a[i]=a[j];
 
           a[j]=m;}}}
 
    for(i=0;i<n;i++){
 
        printf("%d\n",a[i]);}
 
 
        return 0;
 
}
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		JustLovely Forumaš(ica)
  
  
  Pridružen/a: 07. 09. 2011. (09:16:02) Postovi: (E)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 1:04 pet, 18. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Probas, pa saznas. 8)
 
 Zadatak 11.6.15. brise samo jedan element. Bolja referenca je zadatak 11.6.10.
 
 Pristup koji ti pokusavas dobiti ima kvadratnu slozenost (ovaj u 11.6.10. ima linearnu), no ako bas zelis tako, onda bi to ovako trebalo ici:
 [code:1]for (i = 0; i < *n; ) {
   if (x[i] == min) {
     for (j = i + 1; j < *n; j++)
       x[j - 1] = x[j];
     (*n)--;
   } else
     i++[/code:1]
 Poanta: ako obrisemo element, onda on dolazi na mjesto [tt]i[/tt] i tek ga treba provjeriti, sto znaci da [tt]i[/tt] u tom slucaju ne povecavamo. Umjesto da ga smanjimo i povecamo, bolje je inkrement prebaciti iz [tt]for()[/tt] u [tt]else[/tt]. 
					
					Probas, pa saznas.  
 
 
Zadatak 11.6.15. brise samo jedan element. Bolja referenca je zadatak 11.6.10.
 
 
Pristup koji ti pokusavas dobiti ima kvadratnu slozenost (ovaj u 11.6.10. ima linearnu), no ako bas zelis tako, onda bi to ovako trebalo ici:
 
 	  | Kod: | 	 		  for (i = 0; i < *n; ) {
 
  if (x[i] == min) {
 
    for (j = i + 1; j < *n; j++)
 
      x[j - 1] = x[j];
 
    (*n)--;
 
  } else
 
    i++ | 	  
 
Poanta: ako obrisemo element, onda on dolazi na mjesto i i tek ga treba provjeriti, sto znaci da i u tom slucaju ne povecavamo. Umjesto da ga smanjimo i povecamo, bolje je inkrement prebaciti iz for() u else.
					_________________ 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] | 
		 | 
	
	
		JustLovely Forumaš(ica)
  
  
  Pridružen/a: 07. 09. 2011. (09:16:02) Postovi: (E)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		patakenjac Forumaš(ica)
  
 
  Pridružen/a: 23. 10. 2011. (17:34:05) Postovi: (2F)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 13:13 sri, 30. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="patakenjac"]I može li hint za 2. zadatak[/quote]
 
 Tupi kut ima negativni kosinus. To znaci da treba provjeriti je li
 [tex]a^2 > b^2 + c^2 \quad \text{ili} \quad b^2 > a^2 + c^2 \quad \text{ili} \quad c^2 > a^2 + b^2[/tex].
 Naravno, da bi nesto bilo tupokutni trokut, treba prvo provjeriti je li uopce trokut, sto znaci da treba provjeriti da je [tex]a,b,c > 0[/tex] i nejednakost trokuta:
 [tex]a < b + c \quad \text{i} \quad b < a + c \quad \text{i} \quad c < a + b[/tex].
 Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).
 
 [quote="patakenjac"]i rješenje 3. http://degiorgi.math.hr/prog1/kolokviji/p1-kolokvij-1213-2.pdf[/quote]
 
 Rutinski sort i trazenje. Ne pise mi se cijelo rjesenje, sorry. 
					
					 	  | patakenjac (napisa): | 	 		  | I može li hint za 2. zadatak | 	  
 
 
Tupi kut ima negativni kosinus. To znaci da treba provjeriti je li
 
[tex]a^2 > b^2 + c^2 \quad \text{ili} \quad b^2 > a^2 + c^2 \quad \text{ili} \quad c^2 > a^2 + b^2[/tex].
 
Naravno, da bi nesto bilo tupokutni trokut, treba prvo provjeriti je li uopce trokut, sto znaci da treba provjeriti da je [tex]a,b,c > 0[/tex] i nejednakost trokuta:
 
[tex]a < b + c \quad \text{i} \quad b < a + c \quad \text{i} \quad c < a + b[/tex].
 
Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja).
 
 
 
 
Rutinski sort i trazenje. Ne pise mi se cijelo rjesenje, sorry.
					_________________ 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] | 
		 | 
	
	
		hendrix Forumaš(ica)
  
 
  Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16 
 
		 | 
		
			
				 Postano: 20:33 sri, 30. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="vsego"]Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).[/quote]
 
 Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do [tt]n-2[/tt], druga do [tt]n-1[/tt], a samo treća do [tt]n[/tt]? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.) 
					
					 	  | vsego (napisa): | 	 		  | Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja). | 	  
 
 
Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do n-2, druga do n-1, a samo treća do n? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 20:48 sri, 30. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="hendrix"][quote="vsego"]Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po [tt]i[/tt], ide od 1 do [tt]n[/tt], druga, po [tt]j[/tt], ide od [tt]i[/tt]+1 do [tt]n[/tt], a treca ide [tt]j[/tt]+1 do [tt]n[/tt] (time sprijecis ponavljanja).[/quote]
 Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do [tt]n-2[/tt], druga do [tt]n-1[/tt], a samo treća do [tt]n[/tt]? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.)[/quote]
 
 Traze se troclani skupovi, a student matematike vjerojatno zna da su skupovi [tex]\{i,j,k\}[/tex] i [tex]\{j,i,k\}[/tex] jednaki te da nisu troclani ako su neki od tih indeksa jednaki.
 
 Sto se petlje tice, recimo da je [tt]i = n-1[/tt]. Tada u prvom koraku unutrasnje (tj. srednje) petlje imamo [tt]j = i+1 = n[/tt]. Posto je uvjet petlje [tt]j < n[/tt], ta se nece niti jednom izvrtiti. Bilo bi preglednije kako si napisao, ali radi i ovako, a nisam htio zapiliti s detaljima. Ipak je to samo skica. 
					
					 	  | hendrix (napisa): | 	 		   	  | vsego (napisa): | 	 		  | Po meni, najbolje je napisati funkciju koja vraca 1 ako su uvjeti zadovoljeni, a nulu inace i onda tu funkciju zavrtis u tri petlje; prva, recimo po i, ide od 1 do n, druga, po j, ide od i+1 do n, a treca ide j+1 do n (time sprijecis ponavljanja). | 	  
 
Ako se ide metodom izbjegavanja ponavljanja (ako je to potrebno - ja sam to napravio na kolokviju pa se kasnije pitao je li bilo potrebno), ne bi li onda prva petlja trebala ići do n-2, druga do n-1, a samo treća do n? Jer inače se ponovi ovo "s kraja" petlji. (Ili sam nešto propustio.) | 	  
 
 
Traze se troclani skupovi, a student matematike vjerojatno zna da su skupovi [tex]\{i,j,k\}[/tex] i [tex]\{j,i,k\}[/tex] jednaki te da nisu troclani ako su neki od tih indeksa jednaki.
 
 
Sto se petlje tice, recimo da je i = n-1. Tada u prvom koraku unutrasnje (tj. srednje) petlje imamo j = i+1 = n. Posto je uvjet petlje j < n, ta se nece niti jednom izvrtiti. Bilo bi preglednije kako si napisao, ali radi i ovako, a nisam htio zapiliti s detaljima. Ipak je to samo skica.
					_________________ 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] | 
		 | 
	
	
		hendrix Forumaš(ica)
  
 
  Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16 
 
		 | 
		
			
				 Postano: 21:00 sri, 30. 1. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Istina, kao i mnogo puta dosad, propustio sam očitije/jednostavnije rješenje. :D
 
 Glede prvog dijela, ja sam na kolokviju imao grupu s uređenim trojkama pa otud i "razilaženje" u postovima iznad (zato sam se i zbunio poslije kolokvija jer nisam znao što mi je na kraju pisalo), pretpostavio sam da je u svim grupama bilo isto, sad vidim da ipak nije. 
					
					Istina, kao i mnogo puta dosad, propustio sam očitije/jednostavnije rješenje.  
 
 
Glede prvog dijela, ja sam na kolokviju imao grupu s uređenim trojkama pa otud i "razilaženje" u postovima iznad (zato sam se i zbunio poslije kolokvija jer nisam znao što mi je na kraju pisalo), pretpostavio sam da je u svim grupama bilo isto, sad vidim da ipak nije.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vitezzzzz Forumaš(ica)
  
 
  Pridružen/a: 08. 04. 2013. (10:17:56) Postovi: (1)16 
 
		 | 
		
			
				 Postano: 16:59 sub, 18. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ako može mala pomoć oko zadatka iz predprošlog kolokvija 3.zadatak:
 
 Elementi vezane liste trebaju sadrzavati po jedan string ime s najvise 10 znakova i dva cijela broja start i end.
 
 Napisite funkciju osam(element *first, element second), gdje je first pokazivac na prvi element liste, koja ubacuje element second u listu first i to prije osmog elementa liste. Ako lista ima manje od osam elementa, funkcija ne radi nista.
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 typedef struct _element {
   char ime[11];
   int start, end;
   struct _element *next;
 } element;
 
 element *osam(element *first, element second)
 {
     element *t, *osam, *n=(element*)malloc(sizoef(element));
     int i=0, n=0;
 
     strcpy(n->ime,second.ime)
     n->start=second.start;
     n->end=second.end;
 
     for(t=first;t;t=t->next) n++;
     
     if (n<8) return first;
     
     for(t=first;t;t=t->next)
     {
         i++;
         if(i==7)
         {
             osam= t->next;
             t->next=second;
             second->next=osam;
         }
     }
     return first;
 }
 
 
 Moje pitanje je može li se ta funkcija napisati na ovaj način, tj. jeli ovo ispravno???
 Hvala 
					
					Ako može mala pomoć oko zadatka iz predprošlog kolokvija 3.zadatak:
 
 
Elementi vezane liste trebaju sadrzavati po jedan string ime s najvise 10 znakova i dva cijela broja start i end.
 
 
Napisite funkciju osam(element *first, element second), gdje je first pokazivac na prvi element liste, koja ubacuje element second u listu first i to prije osmog elementa liste. Ako lista ima manje od osam elementa, funkcija ne radi nista.
 
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
 
typedef struct _element {
 
  char ime[11];
 
  int start, end;
 
  struct _element *next;
 
} element;
 
 
element *osam(element *first, element second)
 
{
 
    element *t, *osam, *n=(element*)malloc(sizoef(element));
 
    int i=0, n=0;
 
 
    strcpy(n→ime,second.ime)
 
    n→start=second.start;
 
    n→end=second.end;
 
 
    for(t=first;t;t=t→next) n++;
 
    
 
    if (n<  return first;
 
    
 
    for(t=first;t;t=t→next)
 
    {
 
        i++;
 
        if(i==7)
 
        {
 
            osam= t→next;
 
            t→next=second;
 
            second→next=osam;
 
        }
 
    }
 
    return first;
 
}
 
 
 
Moje pitanje je može li se ta funkcija napisati na ovaj način, tj. jeli ovo ispravno???
 
Hvala
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 16:40 sri, 22. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Pomoc u vezi prvog zadatka s proslogodinjeg kolokvija:
 
 http://degiorgi.math.hr/prog2/kolokviji/p2-kolokvij-1112-2.pdf
 
 Moj kod za upis i ispis: (bez predzadnjeg i zadnjeg dijela zadatka)
 
 [code:1]
 typedef struct _drzava{
   char naziv[21];
   unsigned populacija;
   double povrsina;
 } drzava;
 
 struct _drzava*ucitaj(unsigned *n){
   struct _drzava*niz=NULL;
   char ime[21];
   int i;
 
   for(i=1; i<*n; ++i){
 
     printf("Upisi %d. drzavu: \n", i);
     scanf(" %[^\n]", ime);
     niz=(drzava*)realloc(niz,i*sizeof(drzava));
     strcpy(niz[i].naziv, ime);                           
  /*ovdje u rjesenju pise        strcpy(niz[*n].naziv, ime), ne znam zasto  /*
  
    printf("Upisi populaciju i povrsinu: \n");
     scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
   }
   return niz;
 }
 
  int main (void){
 
     unsigned n;
 
     drzava *a=ucitaj(&n);
 
     ispisi(a,n);
 
     return 0;
 
  }
 
 [/code:1]
 
 Rjesenje s neta kad isprobam ne radi.  :cry: 
 
 Ako ne rijesim zadnji dio prvog zadatka, onda ucitavanje nema ogranicenja?
 Mozda razmisljam pogresno, ali gdje se onda ucitava taj n pa da program zna kad zavrsiti s ucitavanjem? 
					
					Pomoc u vezi prvog zadatka s proslogodinjeg kolokvija:
 
 
http://degiorgi.math.hr/prog2/kolokviji/p2-kolokvij-1112-2.pdf
 
 
Moj kod za upis i ispis: (bez predzadnjeg i zadnjeg dijela zadatka)
 
 
 	  | Kod: | 	 		  
 
typedef struct _drzava{
 
  char naziv[21];
 
  unsigned populacija;
 
  double povrsina;
 
} drzava;
 
 
struct _drzava*ucitaj(unsigned *n){
 
  struct _drzava*niz=NULL;
 
  char ime[21];
 
  int i;
 
 
  for(i=1; i<*n; ++i){
 
 
    printf("Upisi %d. drzavu: \n", i);
 
    scanf(" %[^\n]", ime);
 
    niz=(drzava*)realloc(niz,i*sizeof(drzava));
 
    strcpy(niz[i].naziv, ime);                           
 
 /*ovdje u rjesenju pise        strcpy(niz[*n].naziv, ime), ne znam zasto  /*
 
 
 
   printf("Upisi populaciju i povrsinu: \n");
 
    scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
 
  }
 
  return niz;
 
}
 
 
 int main (void){
 
 
    unsigned n;
 
 
    drzava *a=ucitaj(&n);
 
 
    ispisi(a,n);
 
 
    return 0;
 
 
 }
 
 
 | 	  
 
 
Rjesenje s neta kad isprobam ne radi.    
 
 
Ako ne rijesim zadnji dio prvog zadatka, onda ucitavanje nema ogranicenja?
 
Mozda razmisljam pogresno, ali gdje se onda ucitava taj n pa da program zna kad zavrsiti s ucitavanjem?
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 19:04 sri, 22. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ti u funkciju posaljes adresu cijelog broja [tt]n[/tt] i tamo onda to koristis... a gdje mu zadajes vrijednost? Ili, ako hoces drugacije: koliko puta ce se tvoja [tt]for[/tt]-petlja u funkciji [tt]ucitaj()[/tt] izvrsiti?
 Hint: u funkciji fali [tt]scanf("%d", n);[/tt] (da, [b]bez[/b] [tt]&[/tt]!).
 
 P.S. Kad vec imas [tt]typedef[/tt], ne treba ti [tt]struct _drzava[/tt] u svakoj deklaraciji; stavi ekvivalentnu deklaraciju [tt]drzava[/tt], da ustedis na pisanju (na kolokviju nema copy/paste-a). 
					
					Ti u funkciju posaljes adresu cijelog broja n i tamo onda to koristis... a gdje mu zadajes vrijednost? Ili, ako hoces drugacije: koliko puta ce se tvoja for-petlja u funkciji ucitaj() izvrsiti?
 
Hint: u funkciji fali scanf("%d", n); (da, bez &!).
 
 
P.S. Kad vec imas typedef, ne treba ti struct _drzava u svakoj deklaraciji; stavi ekvivalentnu deklaraciju drzava, da ustedis na pisanju (na kolokviju nema copy/paste-a).
					_________________ 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: 17:53 čet, 23. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]
 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 typedef struct _drzava{
   char naziv[21];
   unsigned populacija;
   double povrsina;
 } drzava;
 
   drzava*ucitaj(unsigned *n){
 
   drzava*niz=NULL;
   char ime[21];
   int i;
 
   printf("Upisi broj drzava: \n");
   scanf("%d", n);
   for(i=1; i<=*n; ++i){
 
 
     printf("Upisi %d. drzavu: \n", i);
     scanf(" %[^\n]", ime);
     niz=(drzava*)realloc(niz,i*sizeof(drzava));
     if(!strcmp(ime, "kraj")) return niz;
     strcpy(niz[*n].naziv, ime);
     printf("Upisi populaciju i povrsinu: \n");
     scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
   }
   return niz;
 }
 
 void ispisi(drzava *niz, unsigned n){
   unsigned i;
   printf("%-20s %10s %10s\n","Ime","Stanovnika","Povrsina");
   for(i=1;i<=n;++i)
     printf(" %-20s %10u %10f\n",niz[i].naziv,niz[i].populacija,niz[i].povrsina);
 }
 
 int main (void){
 
     unsigned n;
 
     drzava *a=ucitaj(&n);
 
     ispisi(a,n);
 
     free (a);
     return 0;
 
  }
 [/code:1]
 
 1. Ne ispisuje mi dobro imena drzava, zadnu upisanu drzavu dobro ispise, a prethodne ne.
 
 2. zasto u funkciji ucitaj radimo
 
 [code:1] strcpy(niz[*n].naziv, ime)[/code:1]
 
 a ne
 
 [code:1]strcpy(niz[i].naziv, ime)[/code:1]
 
 3. Zasto moramo inicijalizirati ----> drzava*niz=NULL?
 Da ne koristimo realloc, onda ne bi trebali? 
					
					 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<stdlib.h>
 
#include<string.h>
 
typedef struct _drzava{
 
  char naziv[21];
 
  unsigned populacija;
 
  double povrsina;
 
} drzava;
 
 
  drzava*ucitaj(unsigned *n){
 
 
  drzava*niz=NULL;
 
  char ime[21];
 
  int i;
 
 
  printf("Upisi broj drzava: \n");
 
  scanf("%d", n);
 
  for(i=1; i<=*n; ++i){
 
 
 
    printf("Upisi %d. drzavu: \n", i);
 
    scanf(" %[^\n]", ime);
 
    niz=(drzava*)realloc(niz,i*sizeof(drzava));
 
    if(!strcmp(ime, "kraj")) return niz;
 
    strcpy(niz[*n].naziv, ime);
 
    printf("Upisi populaciju i povrsinu: \n");
 
    scanf("%u\n %lf",&niz[i].populacija,&niz[i].povrsina);
 
  }
 
  return niz;
 
}
 
 
void ispisi(drzava *niz, unsigned n){
 
  unsigned i;
 
  printf("%-20s %10s %10s\n","Ime","Stanovnika","Povrsina");
 
  for(i=1;i<=n;++i)
 
    printf(" %-20s %10u %10f\n",niz[i].naziv,niz[i].populacija,niz[i].povrsina);
 
}
 
 
int main (void){
 
 
    unsigned n;
 
 
    drzava *a=ucitaj(&n);
 
 
    ispisi(a,n);
 
 
    free (a);
 
    return 0;
 
 
 }
 
 | 	  
 
 
1. Ne ispisuje mi dobro imena drzava, zadnu upisanu drzavu dobro ispise, a prethodne ne.
 
 
2. zasto u funkciji ucitaj radimo
 
 
 	  | Kod: | 	 		  |  strcpy(niz[*n].naziv, ime) | 	  
 
 
a ne
 
 
 	  | Kod: | 	 		  | strcpy(niz[i].naziv, ime) | 	  
 
 
3. Zasto moramo inicijalizirati ----> drzava*niz=NULL?
 
Da ne koristimo realloc, onda ne bi trebali?
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 18:00 čet, 23. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ovako nabrzinu, cini mi se da si u pravu i da treba ici [tt]i[/tt]. Ovaj [tt]*n[/tt] je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se [tt]n[/tt] ne ucitava.
 
 Takodjer, petlje bi trebale ici od 0 do [tt]<n[/tt]. Isprobaj, pa javi je l' ok. :)
 
 Inace, ovdje ne treba [tt]realloc()[/tt], ako se oslanjamo na to da je [tt]n[/tt] ucitan. Dosta je nakon [tt]scanf("%d", n);[/tt] staviti [tt]malloc()[/tt].
 
 Ref. 3. da, zbog [tt]realloc()[/tt]. 
					
					Ovako nabrzinu, cini mi se da si u pravu i da treba ici i. Ovaj *n je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se n ne ucitava.
 
 
Takodjer, petlje bi trebale ici od 0 do <n. Isprobaj, pa javi je l' ok.  
 
 
Inace, ovdje ne treba realloc(), ako se oslanjamo na to da je n ucitan. Dosta je nakon scanf("%d", n); staviti malloc().
 
 
Ref. 3. da, zbog realloc().
					_________________ 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: 18:34 čet, 23. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="vsego"]Ovako nabrzinu, cini mi se da si u pravu i da treba ici [tt]i[/tt]. Ovaj [tt]*n[/tt] je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se [tt]n[/tt] ne ucitava.
 
 Takodjer, petlje bi trebale ici od 0 do [tt]<n[/tt]. Isprobaj, pa javi je l' ok. :)
 
 Inace, ovdje ne treba [tt]realloc()[/tt], ako se oslanjamo na to da je [tt]n[/tt] ucitan. Dosta je nakon [tt]scanf("%d", n);[/tt] staviti [tt]malloc()[/tt].
 
 Ref. 3. da, zbog [tt]realloc()[/tt].[/quote]
 
 
 E, radi sad, super. Hvala. 
					
					 	  | vsego (napisa): | 	 		  Ovako nabrzinu, cini mi se da si u pravu i da treba ici i. Ovaj *n je vjerojatno ostatak od copy/paste-a iz verzije u kojoj se n ne ucitava.
 
 
Takodjer, petlje bi trebale ici od 0 do <n. Isprobaj, pa javi je l' ok.  
 
 
Inace, ovdje ne treba realloc(), ako se oslanjamo na to da je n ucitan. Dosta je nakon scanf("%d", n); staviti malloc().
 
 
Ref. 3. da, zbog realloc(). | 	  
 
 
 
E, radi sad, super. Hvala.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 21:27 čet, 23. 5. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Definirajte tip podatka "razlomak" za pohranu jednog razlomka u listu (tako da bude moguce deklarirati varijablu razlomak r;) te napisite funkciju koja dodaje jedan razlomak (određen parametrima x, y ---->ja sam ih nazvala brojnik, nazivnik) na pocetak razlomka. Napisite i kako se funkcija poziva. 
 
 Da li je ovo rjesenje dobro?
 
 [code:1]#include<stdio.h>
 
 
 typedef struct _razlomak* lista;
 
 typedef struct _razlomak{
 
      int brojnik;
      int nazivnik;
      lista next;
 
 }razlomak;
 
 
   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: \n");
          scanf("%d", &novi->nazivnik);
          if(novi->nazivnik==0) break;
 
          temp=ubaci_razlomak_na_pocetak(prvi, novi);
 
          printf("Brojnik/Nazivnik: %d/%d\n", temp->brojnik, temp->nazivnik);
      }
 
 
          for(pom=prvi; pom!=NULL; pom=pom2){
             pom2=pom->next;
             free(pom);
          }
 
 
      return 0;
   }
 
 [/code:1]
 
 Imam rjesenje od prosle godine od jednog asistenta:
 
 [code:1]
 
 #include <stdio.h>
 #include <stdlib.h>
 
 typedef struct __cvor
 {
 	int br, naz;
 	
 	struct __cvor *next;
 } cvor;
 
 typedef cvor razlomak;
 
 
 cvor *dodaj( cvor *L, int x, int y )
 {
 	cvor *novi;
 	
 	novi = (cvor *) malloc( sizeof( cvor ) );
 	novi->br = x;
 	novi->naz = y;
 	
 	novi->next = L;
 	L = novi;
 	
 	return L;
 }
 
 int main( void )
 {
 	cvor *L = NULL, *tren;
 	
 	while( 1 )
 	{
 		int x, y;
 		scanf( "%d %d", &x, &y );
 		if( y == 0 )
 			break;
 		
 		L = dodaj( L, x, y );
 	}
 	
 	for( tren = L; tren != NULL; tren = tren->next )
 		printf( "%d/%d ", tren->br, tren->naz );
 	
 	while( L != NULL )
 	{
 		cvor *temp = L;
 		L = L->next;
 		free( temp );
 	}
 	
 	
 	return 0;
 }
 [/code:1]
 
 Da li programi rade isto? 
					
					Definirajte tip podatka "razlomak" za pohranu jednog razlomka u listu (tako da bude moguce deklarirati varijablu razlomak r  te napisite funkciju koja dodaje jedan razlomak (određen parametrima x, y ---->ja sam ih nazvala brojnik, nazivnik) na pocetak razlomka. Napisite i kako se funkcija poziva. 
 
 
Da li je ovo rjesenje dobro?
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
 
 
typedef struct _razlomak* lista;
 
 
typedef struct _razlomak{
 
 
     int brojnik;
 
     int nazivnik;
 
     lista next;
 
 
}razlomak;
 
 
 
  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: \n");
 
         scanf("%d", &novi->nazivnik);
 
         if(novi->nazivnik==0) break;
 
 
         temp=ubaci_razlomak_na_pocetak(prvi, novi);
 
 
         printf("Brojnik/Nazivnik: %d/%d\n", temp->brojnik, temp->nazivnik);
 
     }
 
 
 
         for(pom=prvi; pom!=NULL; pom=pom2){
 
            pom2=pom->next;
 
            free(pom);
 
         }
 
 
 
     return 0;
 
  }
 
 
 | 	  
 
 
Imam rjesenje od prosle godine od jednog asistenta:
 
 
 	  | Kod: | 	 		  
 
 
#include <stdio.h>
 
#include <stdlib.h>
 
 
typedef struct __cvor
 
{
 
   int br, naz;
 
   
 
   struct __cvor *next;
 
} cvor;
 
 
typedef cvor razlomak;
 
 
 
cvor *dodaj( cvor *L, int x, int y )
 
{
 
   cvor *novi;
 
   
 
   novi = (cvor *) malloc( sizeof( cvor ) );
 
   novi->br = x;
 
   novi->naz = y;
 
   
 
   novi->next = L;
 
   L = novi;
 
   
 
   return L;
 
}
 
 
int main( void )
 
{
 
   cvor *L = NULL, *tren;
 
   
 
   while( 1 )
 
   {
 
      int x, y;
 
      scanf( "%d %d", &x, &y );
 
      if( y == 0 )
 
         break;
 
      
 
      L = dodaj( L, x, y );
 
   }
 
   
 
   for( tren = L; tren != NULL; tren = tren->next )
 
      printf( "%d/%d ", tren->br, tren->naz );
 
   
 
   while( L != NULL )
 
   {
 
      cvor *temp = L;
 
      L = L->next;
 
      free( temp );
 
   }
 
   
 
   
 
   return 0;
 
}
 
 | 	  
 
 
Da li programi rade isto?
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |