| 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 
		 | 
		
			
				 Postano: 19:15 sri, 6. 3. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="ivanaaaa"]ma prilično sam sigurna da se nećete snaći u tome, dost je komplicirani taj program i svašta nešto radi, pa sam ja izvukla van pojednostavljeno da pitam :D[/quote]
 
 Na stranu prispodoba da se Marko nece snaci u nekom kodu [ :lol: ], meni se cini da si previse pojednostavila. Imam dojam da zapravo ne radis sa stringom nego s nizom stringova, a u tom slucaju ti je vjerojatno deklaracija kriva. No, za to provjeriti, treba vidjeti relevantne dijelove koda, bez pojednostavljivanja. 
					
					 	  | ivanaaaa (napisa): | 	 		  ma prilično sam sigurna da se nećete snaći u tome, dost je komplicirani taj program i svašta nešto radi, pa sam ja izvukla van pojednostavljeno da pitam   | 	  
 
 
Na stranu prispodoba da se Marko nece snaci u nekom kodu [   ], meni se cini da si previse pojednostavila. Imam dojam da zapravo ne radis sa stringom nego s nizom stringova, a u tom slucaju ti je vjerojatno deklaracija kriva. No, za to provjeriti, treba vidjeti relevantne dijelove koda, bez pojednostavljivanja.
					_________________ 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] | 
		 | 
	
	
		ivanaaaa Forumaš(ica)
  
 
  Pridružen/a: 24. 10. 2011. (19:36:26) Postovi: (31)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		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 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 22:21 ned, 31. 3. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ovo je kod kako sortirati rjecnik:
 
 [code:1]
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
     #define MAX_BROJ 100
     #define MAX_DULJ 80
 
     char w[MAX_BROJ * MAX_DULJ];
 
     char* p[MAX_BROJ];
 
     int broj_rijeci;
 
        int unos (char* p[]){
 
          char* q=w;
          int flag=1, broj=0, dulj;
 
          while(flag){
 
            if(gets(q)==NULL) return -1;
            if ((dulj=strlen(q))==0) return broj;
 
            if(broj>=MAX_BROJ) return -1;
 
            p[broj]=q;
            ++broj;
 
            q+=dulj+1;
 
          }
        }
 
          void sort(char* p[], int n){
 
             int i, j, ind_min;
 
             char* temp;
 
 
             for(i=0; i<n-1; ++i){
 
                  ind_min=i;
 
                  for(j=i+1; j<n; ++j)
 
                     if(strcmp(p[j], p[ind_min])<0)
                     ind_min=j;
 
                     if(i!=ind_min){
                     temp=p[i];
                     p[i]=p[ind_min];
                     p[ind_min]=temp;
                     }
 
                  }
 
 
             return;
     }
 
 
         void ispis(char* p[]){
 
         int i;
 
         for(i=0; i<broj_rijeci; i++)
         puts(p[i]);
 
         return;
 
         }
 
 
         int main (void){
 
         if((broj_rijeci=unos(p))>=0){
 
         printf ("Broj rijeci: %d\n", broj_rijeci);
         sort(p, broj_rijeci);
 
         ispis(p);
 
         }
 
         else
               printf ("Previse rijeci na ulazu\n");
 
               return 0;
 
         }
 [/code:1]
 
 E sad me zanima
 
 1) kako promijeniti program tako da se polja w i p  dinamicki alociraju.
 
 2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci  
 
 2.1)odnosno kad se ne zna 
					
					Ovo je kod kako sortirati rjecnik:
 
 
 	  | Kod: | 	 		  
 
#include <stdio.h>
 
#include <string.h>
 
#include <stdlib.h>
 
 
    #define MAX_BROJ 100
 
    #define MAX_DULJ 80
 
 
    char w[MAX_BROJ * MAX_DULJ];
 
 
    char* p[MAX_BROJ];
 
 
    int broj_rijeci;
 
 
       int unos (char* p[]){
 
 
         char* q=w;
 
         int flag=1, broj=0, dulj;
 
 
         while(flag){
 
 
           if(gets(q)==NULL) return -1;
 
           if ((dulj=strlen(q))==0) return broj;
 
 
           if(broj>=MAX_BROJ) return -1;
 
 
           p[broj]=q;
 
           ++broj;
 
 
           q+=dulj+1;
 
 
         }
 
       }
 
 
         void sort(char* p[], int n){
 
 
            int i, j, ind_min;
 
 
            char* temp;
 
 
 
            for(i=0; i<n-1; ++i){
 
 
                 ind_min=i;
 
 
                 for(j=i+1; j<n; ++j)
 
 
                    if(strcmp(p[j], p[ind_min])<0)
 
                    ind_min=j;
 
 
                    if(i!=ind_min){
 
                    temp=p[i];
 
                    p[i]=p[ind_min];
 
                    p[ind_min]=temp;
 
                    }
 
 
                 }
 
 
 
            return;
 
    }
 
 
 
        void ispis(char* p[]){
 
 
        int i;
 
 
        for(i=0; i<broj_rijeci; i++)
 
        puts(p[i]);
 
 
        return;
 
 
        }
 
 
 
        int main (void){
 
 
        if((broj_rijeci=unos(p))>=0){
 
 
        printf ("Broj rijeci: %d\n", broj_rijeci);
 
        sort(p, broj_rijeci);
 
 
        ispis(p);
 
 
        }
 
 
        else
 
              printf ("Previse rijeci na ulazu\n");
 
 
              return 0;
 
 
        }
 
 | 	  
 
 
E sad me zanima
 
 
1) kako promijeniti program tako da se polja w i p  dinamicki alociraju.
 
 
2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci  
 
 
2.1)odnosno kad se ne zna
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 22:38 ned, 31. 3. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="frutabella"]1) kako promijeniti program tako da se polja w i p  dinamicki alociraju.[/quote]
 
 [tt]char *w, **p;[/tt] + [tt]malloc()[/tt] / [tt]realloc()[/tt]
 
 [quote="frutabella"]2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci[/quote]
 
 Napravis da je [tt]w[/tt] automatski niz elemenata tipa [tt]char[MAX_LEN+1][/tt] (ako je maximalni broj rijeci zadan) ili da je pointer na [tt]char[MAX_LEN+1][/tt] (ako maximalni broj rijeci nije zadan), pri cemu je [tt]MAX_LEN[/tt] najveca duljina pojedine rijeci.
 
 [quote="frutabella"]2.1)odnosno kad se ne zna[/quote]
 
 Napravis da je [tt]w[/tt] automatski niz pointera na [tt]char[/tt] (ako je maximalni broj rijeci zadan) ili da je tipa [tt]char**[/tt] (ako maximalni broj rijeci nije zadan). U oba slucaja, pojedine rijeci alociras s
 [tt]w[i] = (char*)malloc((duljina+1) * sizeof(char));[/tt],
 a u drugom slucaju, prije alociranja rijeci, trebas i produljiti niz:
 [tt]w = (char**)realloc(w, (++n) * sizeof(char*));[/tt] (onda ovo gore [tt]w[i][/tt] postaje [tt]w[n-1][/tt]) 
					
					 	  | frutabella (napisa): | 	 		  | 1) kako promijeniti program tako da se polja w i p  dinamicki alociraju. | 	  
 
 
char *w, **p; + malloc() / realloc()
 
 
 	  | frutabella (napisa): | 	 		  | 2) i kako umjesto polja w koristiti dinamicku alokaciju za svaku ucitanu rijec, ako se zna max duljina rijeci | 	  
 
 
Napravis da je w automatski niz elemenata tipa char[MAX_LEN+1] (ako je maximalni broj rijeci zadan) ili da je pointer na char[MAX_LEN+1] (ako maximalni broj rijeci nije zadan), pri cemu je MAX_LEN najveca duljina pojedine rijeci.
 
 
 	  | frutabella (napisa): | 	 		  | 2.1)odnosno kad se ne zna | 	  
 
 
Napravis da je w automatski niz pointera na char (ako je maximalni broj rijeci zadan) ili da je tipa char** (ako maximalni broj rijeci nije zadan). U oba slucaja, pojedine rijeci alociras s
 
w[i] = (char*)malloc((duljina+1) * sizeof(char));,
 
a u drugom slucaju, prije alociranja rijeci, trebas i produljiti niz:
 
w = (char**)realloc(w, (++n) * sizeof(char*)); (onda ovo gore w[i] postaje w[n-1])
					_________________ 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: 1:49 pon, 1. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Ovo ce pitanje zvucati glupo, ali jednostavno nisam ovo razumjela.
 
 Znaci ovo je program koji ispisuje argumente komande linije:
 
 [code:1]#include<stdio.h>
 
 
    int main (int argc, char *argv[])
    {
       int i;
 
       printf("argc: %d\n", argc);
       for(i=0; i<argc; ++i)
           printf("argv[%d]:  %s\n", i, argv[i]);
 
           return 0;
 
    }
 
 [/code:1]
 
 Ja ocito ne znam sta je komanda linija  :oops: , pa ne znam, gdje sad treba utipkati npr.
 
 arg_1 Ja sam mala Ruza, mamina sam kci. 
					
					Ovo ce pitanje zvucati glupo, ali jednostavno nisam ovo razumjela.
 
 
Znaci ovo je program koji ispisuje argumente komande linije:
 
 
 	  | Kod: | 	 		  #include<stdio.h>
 
 
 
   int main (int argc, char *argv[])
 
   {
 
      int i;
 
 
      printf("argc: %d\n", argc);
 
      for(i=0; i<argc; ++i)
 
          printf("argv[%d]:  %s\n", i, argv[i]);
 
 
          return 0;
 
 
   }
 
 
 | 	  
 
 
Ja ocito ne znam sta je komanda linija    , pa ne znam, gdje sad treba utipkati npr.
 
 
arg_1 Ja sam mala Ruza, mamina sam kci.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 3:00 pon, 1. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Upravo to predavanje iz kojeg si uzela kod, pise ti na prethodnom slideu:
 [quote="[url=http://web.math.pmf.unizg.hr/~singer/P2_1213/06.pdf]Predavanje 6[/url], slide 58"]Ako program pozovemo s
 [code:1]ime.exe jedan dva tri[/code:1]
 ...[/quote]
 Dakle, digni Command prompt ili kako se vec komandna linija zove (pretpostavljam da koristis Win, jer ljudi koji koriste operativne sustave znaju sto je komandna linija), odi u direktorij gdje ti se nalazi program ([tt]c:[/tt] ili koja je vec particija, pa [tt]cd \put\do\direktorija[/tt]) i onda tamo upisi tocno sto ti tu gore pise.
 
 Ako i dalje nije jasno, copi nekog demosa. Tekstualno opisivanje je nespretno, a pokaze se u minutu-dvije (cini mi se da prof. i pokazu na predavanjima). 
					
					Upravo to predavanje iz kojeg si uzela kod, pise ti na prethodnom slideu:
 
 	  | Predavanje 6, slide 58 (napisa): | 	 		  Ako program pozovemo s
 
 	  | Kod: | 	 		  | ime.exe jedan dva tri | 	  
 
... | 	  
 
Dakle, digni Command prompt ili kako se vec komandna linija zove (pretpostavljam da koristis Win, jer ljudi koji koriste operativne sustave znaju sto je komandna linija), odi u direktorij gdje ti se nalazi program (c: ili koja je vec particija, pa cd \put\do\direktorija) i onda tamo upisi tocno sto ti tu gore pise.
 
 
Ako i dalje nije jasno, copi nekog demosa. Tekstualno opisivanje je nespretno, a pokaze se u minutu-dvije (cini mi se da prof. i pokazu na predavanjima).
					_________________ 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 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		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: 1:35 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Napisite funkciju int palindrom (char *s) koja vraća 1 ako je string s palindrom, inace treba vratiti 0.
 
 Npr. "anavolimilovana" je palindrom, ali "ana voli milovana" nije. 
 
 
 Moj kod:
 
 [code:1]
 #include<stdio.h>
 #include<ctype.h>
 #include<string.h>
 #include<stdlib.h>
 
     int palindrom (char s[])
     {
         int n, i, j;
 
         n=strlen(s);
         j=n-1;
 
        for(i=0; s[i]!='\0' ; ++i)
        {
           if (isblank(s[i])|| isblank(s[j])) return 0;
           if(s[i]==s[j])  --j;
 
           else return 0;
 
        }
 
           s[i]='\0';
 
           return 1;
 
    }
 
      int main (void)
      {
 
         char s[100];
 
         printf("Unesi string: ");
 
         scanf("%s", s);
 
         printf("Da li je string palindrom: %d", palindrom(s));
 
 
         return 0;
 
 
 
      }
 [/code:1]
 
 Ne znam zasto mi "ana voli milovana" ispisuje da je palindrom, dok recimo "petra rtep" ispisuje da nije (znaci ispisuje pravilno)? 
					
					Napisite funkciju int palindrom (char *s) koja vraća 1 ako je string s palindrom, inace treba vratiti 0.
 
 
Npr. "anavolimilovana" je palindrom, ali "ana voli milovana" nije. 
 
 
 
Moj kod:
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<ctype.h>
 
#include<string.h>
 
#include<stdlib.h>
 
 
    int palindrom (char s[])
 
    {
 
        int n, i, j;
 
 
        n=strlen(s);
 
        j=n-1;
 
 
       for(i=0; s[i]!='\0' ; ++i)
 
       {
 
          if (isblank(s[i])|| isblank(s[j])) return 0;
 
          if(s[i]==s[j])  --j;
 
 
          else return 0;
 
 
       }
 
 
          s[i]='\0';
 
 
          return 1;
 
 
   }
 
 
     int main (void)
 
     {
 
 
        char s[100];
 
 
        printf("Unesi string: ");
 
 
        scanf("%s", s);
 
 
        printf("Da li je string palindrom: %d", palindrom(s));
 
 
 
        return 0;
 
 
 
 
     }
 
 | 	  
 
 
Ne znam zasto mi "ana voli milovana" ispisuje da je palindrom, dok recimo "petra rtep" ispisuje da nije (znaci ispisuje pravilno)?
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		quark Forumaš(ica)
  
  
  Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16 
Spol:   
 
		 | 
		
			
				 Postano: 2:08 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Dakle, [tt]%s[/tt] ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom  :D 
 
 No, ako i točno učitaš string, ne radi ti kod.
 Naime uvjet if [tt](isblank(s[i])|| isblank(s[j])) return 0;[/tt] ne štima.
 Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.
 
 I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.
 
 I čemu ovaj [tt]s[i]='\0'[/tt] ?  :shock: 
					
					Dakle, %s ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom    
 
 
No, ako i točno učitaš string, ne radi ti kod.
 
Naime uvjet if (isblank(s[i])|| isblank(s[j])) return 0; ne štima.
 
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.
 
 
I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.
 
 
I čemu ovaj s[i]='\0' ?   
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 2:41 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="quark"]Dakle, [tt]%s[/tt] ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom  :D 
 
 No, ako i točno učitaš string, ne radi ti kod.
 Naime uvjet if [tt](isblank(s[i])|| isblank(s[j])) return 0;[/tt] ne štima.
 Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.
 
 I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.
 
 I čemu ovaj [tt]s[i]='\0'[/tt] ?  :shock:[/quote]
 
 
 Istina, radim nepotrebne stvari.
 
 A ovo zadnje shvacam da ne treba,
 ali, ako bi trebali ispisati taj palindrom, onda bi to trebali valjda napisati, jel da? (mozda sam to imala u mislima dok sam pisala)
 
 Hvala! 
 
 [size=9][color=#999999]Added after 25 minutes:[/color][/size]
 
  http://degiorgi.math.hr/prog2/materijali/p2-vjezbe.pdf
 
 str. 89 (po skripti), zad 5.4.2.
 
 Zadatak sam sama pokusala rijesiti bez gledanja u rjesenje,
 dobro ispise ali nešto nije uredu (javlja da windows trazi rjesenje problema).
 Zanima me gdje grijesim?
 
 
 [code:1]
 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>
 #include<ctype.h>
 
     int main (void){
 
        char s[20];
        int n, t, m, i;
        char *s2;
 
        printf("Unesit broj n: ");
        scanf("%d", &n);
 
        printf("Unesi string: ");
        scanf("%s", s);
 
        t=strlen(s);
 
        if(n%t==0) n=n/t;
 
        else
                   n=n/t+1;
 
        m=n*t;
 
 
        s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */
 
        if(s2==NULL)
        {
            printf ("Greska!\n");
 
            exit(0);
        }
 
 
        strcpy(s2, s);
 
        for(i=0; i<m; ++i)
 
        strcat(s2, s);
 
         s2[i]='\0';      
 
         printf("Ispisi string: %s", s2);
 
         free(s2);
 
 
         return 0;
     }
 
 [/code:1] 
					
					 	  | quark (napisa): | 	 		  Dakle, %s ti kupi do prve praznine; dakle, petr nije palindrom, a ana je palindrom    
 
 
No, ako i točno učitaš string, ne radi ti kod.
 
Naime uvjet if (isblank(s[i])|| isblank(s[j])) return 0; ne štima.
 
Pitanje je logike - disjunkcija je istinita i ako su oba istinita: dakle, kada na simetričnim mjestima imaš razmak, f-ja ti vraća 0.
 
 
I ne shvaćam uopće čemu posebna briga za razmak? To je char kao i svaki drugi. Ako se na simetričnim mjestima nalazi razmak - ok, ako se ne nalazi, returnaš 0. Dakle, dovoljan ti je jedan if.
 
 
I čemu ovaj s[i]='\0' ?    | 	  
 
 
 
Istina, radim nepotrebne stvari.
 
 
A ovo zadnje shvacam da ne treba,
 
ali, ako bi trebali ispisati taj palindrom, onda bi to trebali valjda napisati, jel da? (mozda sam to imala u mislima dok sam pisala)
 
 
Hvala! 
 
 
Added after 25 minutes:
 
 
 http://degiorgi.math.hr/prog2/materijali/p2-vjezbe.pdf
 
 
str. 89 (po skripti), zad 5.4.2.
 
 
Zadatak sam sama pokusala rijesiti bez gledanja u rjesenje,
 
dobro ispise ali nešto nije uredu (javlja da windows trazi rjesenje problema).
 
Zanima me gdje grijesim?
 
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<string.h>
 
#include<stdlib.h>
 
#include<ctype.h>
 
 
    int main (void){
 
 
       char s[20];
 
       int n, t, m, i;
 
       char *s2;
 
 
       printf("Unesit broj n: ");
 
       scanf("%d", &n);
 
 
       printf("Unesi string: ");
 
       scanf("%s", s);
 
 
       t=strlen(s);
 
 
       if(n%t==0) n=n/t;
 
 
       else
 
                  n=n/t+1;
 
 
       m=n*t;
 
 
 
       s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */
 
 
       if(s2==NULL)
 
       {
 
           printf ("Greska!\n");
 
 
           exit(0);
 
       }
 
 
 
       strcpy(s2, s);
 
 
       for(i=0; i<m; ++i)
 
 
       strcat(s2, s);
 
 
        s2[i]='\0';      
 
 
        printf("Ispisi string: %s", s2);
 
 
        free(s2);
 
 
 
        return 0;
 
    }
 
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 8:44 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         U string [tt]s2[/tt] trpas [tt]m+1[/tt] kopiju stringa [tt]s[/tt] ([tt]strcpy()[/tt] ubaci jednu, a onda petlja sa [tt]strcat()[/tt]-om napravi jos [tt]m[/tt]), iako si alocirala memoriju za najvise [tt]m[/tt] [b]znakova[/b] (plus nul-znak).
 
 Sto se prethodnog zadatka tice, quark je u pravu: [tt]s[i]='\0';[/tt] je cisti vishak, i to iz dva razloga.
 1. String u funkciji ne mijenjas, pa on vec ima [tt]'\0'[/tt] tocno tamo gdje to treba biti.
 2. Kad [tt]for()[/tt] petlja zavrsi, [tt]i[/tt] je upravo index od [tt]'\0'[/tt], pa [tt]s[i]='\0';[/tt] postavlja [tt]s[i][/tt] na vrijednost koju taj znak vec ima. 
					
					U string s2 trpas m+1 kopiju stringa s (strcpy() ubaci jednu, a onda petlja sa strcat()-om napravi jos m), iako si alocirala memoriju za najvise m znakova (plus nul-znak).
 
 
Sto se prethodnog zadatka tice, quark je u pravu: s[i]='\0'; je cisti vishak, i to iz dva razloga.
 
1. String u funkciji ne mijenjas, pa on vec ima '\0' tocno tamo gdje to treba biti.
 
2. Kad for() petlja zavrsi, i je upravo index od '\0', pa s[i]='\0'; postavlja s[i] na vrijednost koju taj znak vec ima.
					_________________ 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: 22:41 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [quote="vsego"]U string [tt]s2[/tt] trpas [tt]m+1[/tt] kopiju stringa [tt]s[/tt] ([tt]strcpy()[/tt] ubaci jednu, a onda petlja sa [tt]strcat()[/tt]-om napravi jos [tt]m[/tt]), iako si alocirala memoriju za najvise [tt]m[/tt] [b]znakova[/b] (plus nul-znak).
 
 Sto se prethodnog zadatka tice, quark je u pravu: [tt]s[i]='\0';[/tt] je cisti vishak, i to iz dva razloga.
 1. String u funkciji ne mijenjas, pa on vec ima [tt]'\0'[/tt] tocno tamo gdje to treba biti.
 2. Kad [tt]for()[/tt] petlja zavrsi, [tt]i[/tt] je upravo index od [tt]'\0'[/tt], pa [tt]s[i]='\0';[/tt] postavlja [tt]s[i][/tt] na vrijednost koju taj znak vec ima.[/quote]
 
 
 Ourajt, mislim da sam skontala. 
 
 Znaci moram alocirati (m+1)*t znakova, tj.
 s2=(char*)malloc(((m+1)*t)*sizeof(char));
 
 Sad radi za unos n=17, i Pero  :D
 ali opet ne radi za recimo n=15, Petar. :S 
					
					 	  | vsego (napisa): | 	 		  U string s2 trpas m+1 kopiju stringa s (strcpy() ubaci jednu, a onda petlja sa strcat()-om napravi jos m), iako si alocirala memoriju za najvise m znakova (plus nul-znak).
 
 
Sto se prethodnog zadatka tice, quark je u pravu: s[i]='\0'; je cisti vishak, i to iz dva razloga.
 
1. String u funkciji ne mijenjas, pa on vec ima '\0' tocno tamo gdje to treba biti.
 
2. Kad for() petlja zavrsi, i je upravo index od '\0', pa s[i]='\0'; postavlja s[i] na vrijednost koju taj znak vec ima. | 	  
 
 
 
Ourajt, mislim da sam skontala. 
 
 
Znaci moram alocirati (m+1)*t znakova, tj.
 
s2=(char*)malloc(((m+1)*t)*sizeof(char));
 
 
Sad radi za unos n=17, i Pero   
 
ali opet ne radi za recimo n=15, Petar. :S
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 23:42 uto, 2. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Meni se cini da u [tt]n[/tt] trpas koliko kopija treba, a u [tt]m[/tt] duljinu novog stringa. Dakle, [tt]malloc()[/tt] je (bio) ok, ali for petlja je trebala ici od 1 do [tt]<n[/tt], umjesto od 0 do [tt]<m[/tt].
 
 Ako i dalje ne radi, molim aktualnu verziju, da ne pricamo napamet. 
					
					Meni se cini da u n trpas koliko kopija treba, a u m duljinu novog stringa. Dakle, malloc() je (bio) ok, ali for petlja je trebala ici od 1 do <n, umjesto od 0 do <m.
 
 
Ako i dalje ne radi, molim aktualnu verziju, da ne pricamo napamet.
					_________________ 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: 1:27 sri, 3. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         I meni je logicno da bi trebalo u for petlji ici do n, umjesto m, ali sad ispisuje pogresno (i jos trazi rjesenje problema).
 
 [code:1]
 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>
 #include<ctype.h>
 
     int main (void){
 
        char s[20];
        int n, t, m, i;
        char *s2;
 
        printf("Unesit broj n: ");
        scanf("%d", &n);
 
        printf("Unesi string: ");
        scanf("%s", s);
 
        t=strlen(s);
 
        if(n%t==0) n=n/t;
 
        else
                   n=n/t+1;
 
        m=n*t;
 
 
        s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */
 
        if(s2==NULL)
        {
            printf ("Greska!\n");
 
            exit(0);
        }
 
 
        strcpy(s2, s);
 
      for(i=0; i<n; ++i)
 
        strcat(s2, s);
 
         s2[i]='\0';     
 
         printf("Ispisi string: %s", s2);
 
         free(s2);
 
 
         return 0;
     } 
 [/code:1]
 
 
 U sluzbenim rjesenjima stoji:
 
 [code:1]
 if (n%strlen(s))
 n=(n/strlen(s)+1)*strlen(s) [/code:1]  -----> sto je moj m
 
 zatim
 
 [code:1]
  s2=(char*)malloc((n+1)*sizeof(char)); 
 
 strcpy(s2,s);
 
 while(strlen(s2)<n) strcat(s2, s);     
 
 /*ovo isto ide do n (sto je m iz moje price) */
 
 [/code:1]
 
 
 Sad sam tek zbunjena...  :? 
					
					I meni je logicno da bi trebalo u for petlji ici do n, umjesto m, ali sad ispisuje pogresno (i jos trazi rjesenje problema).
 
 
 	  | Kod: | 	 		  
 
#include<stdio.h>
 
#include<string.h>
 
#include<stdlib.h>
 
#include<ctype.h>
 
 
    int main (void){
 
 
       char s[20];
 
       int n, t, m, i;
 
       char *s2;
 
 
       printf("Unesit broj n: ");
 
       scanf("%d", &n);
 
 
       printf("Unesi string: ");
 
       scanf("%s", s);
 
 
       t=strlen(s);
 
 
       if(n%t==0) n=n/t;
 
 
       else
 
                  n=n/t+1;
 
 
       m=n*t;
 
 
 
       s2=(char*)malloc((m+1)*sizeof(char));  /* m+1  zbog '\0' */
 
 
       if(s2==NULL)
 
       {
 
           printf ("Greska!\n");
 
 
           exit(0);
 
       }
 
 
 
       strcpy(s2, s);
 
 
     for(i=0; i<n; ++i)
 
 
       strcat(s2, s);
 
 
        s2[i]='\0';     
 
 
        printf("Ispisi string: %s", s2);
 
 
        free(s2);
 
 
 
        return 0;
 
    } 
 
 | 	  
 
 
 
U sluzbenim rjesenjima stoji:
 
 
 	  | Kod: | 	 		  
 
if (n%strlen(s))
 
n=(n/strlen(s)+1)*strlen(s)  | 	    -----> sto je moj m
 
 
zatim
 
 
 	  | Kod: | 	 		  
 
 s2=(char*)malloc((n+1)*sizeof(char)); 
 
 
strcpy(s2,s);
 
 
while(strlen(s2)<n) strcat(s2, s);     
 
 
/*ovo isto ide do n (sto je m iz moje price) */
 
 
 | 	  
 
 
 
Sad sam tek zbunjena...   
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		frutabella Forumaš(ica)
  
 
  Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16 
 
		 | 
		
			
				 Postano: 3:34 sri, 3. 4. 2013    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zadaca: 
 Napišite program koji učitava jednu riječ s najviše 11387 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "rlk".
 
 [code:1]
 
 #include<stdio.h>
 #include<string.h>
 
 
     int main (void)
     {
 
         char rijec[11388], podstring[]="rlk";
 
         int br=0, i, j=0;
 
         scanf("%s", rijec);
 
 
         for(i=0; i<strlen(rijec); ++i)
         {
              if(rijec[i]==podstring[j]) ++j;
 
              if(podstring[j]=='\0')
              {
                 ++br;
                 j=0;
              }
         }
 
 
         printf("%d", br);
 
         return 0;
 
     }
 [/code:1]
 
 Ispisuje mi sve dobro (bar ja mislim), ali ne znam zbog cega onda nije prihvaceno kao tocno rjesenje. 
					
					Zadaca: 
 
Napišite program koji učitava jednu riječ s najviše 11387 znakova, te ispisuje koliko se puta u toj riječi pojavljuje podstring "rlk".
 
 
 	  | Kod: | 	 		  
 
 
#include<stdio.h>
 
#include<string.h>
 
 
 
    int main (void)
 
    {
 
 
        char rijec[11388], podstring[]="rlk";
 
 
        int br=0, i, j=0;
 
 
        scanf("%s", rijec);
 
 
 
        for(i=0; i<strlen(rijec); ++i)
 
        {
 
             if(rijec[i]==podstring[j]) ++j;
 
 
             if(podstring[j]=='\0')
 
             {
 
                ++br;
 
                j=0;
 
             }
 
        }
 
 
 
        printf("%d", br);
 
 
        return 0;
 
 
    }
 
 | 	  
 
 
Ispisuje mi sve dobro (bar ja mislim), ali ne znam zbog cega onda nije prihvaceno kao tocno rjesenje.
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |