| 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:
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
 
 
  	  | 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.
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.
 
 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:
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).
 
  	  | 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.
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)?
 
 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 
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 [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:
   
 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).
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: [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.
 
 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].
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.
 
 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).
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...  :?
 
 
  	  | 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:
 
 
 -----> sto je moj m 	  | Kod: |  	  | if (n%strlen(s))
 n=(n/strlen(s)+1)*strlen(s)
 | 
 
 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: 
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.
 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] |  | 
	
		|  |