Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Gost
|
Postano: 19:08 sub, 10. 6. 2006 Naslov: zadatak |
|
|
jel mi može netko pojasnit ispis ovog zadatka? :?
char x[]={'a','b','c','d'},*px,*py;
py=&x[3]-2;
px=py--;
*px=px[1]-x[2]+'e';
py[2]=--(*px)-*(x+3)+'a';
printf("%c %c %c %c %d",x[0],x[1],x[2],*px,py-px);
trebalo bi ispisat: a d a d -1
jel mi može netko pojasnit ispis ovog zadatka?
char x[]={'a','b','c','d'},*px,*py;
py=&x[3]-2;
px=py–;
*px=px[1]-x[2]+'e';
py[2]=–(*px)-*(x+3)+'a';
printf("%c %c %c %c %d",x[0],x[1],x[2],*px,py-px);
trebalo bi ispisat: a d a d -1
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 19:32 sub, 10. 6. 2006 Naslov: |
|
|
char x[]={'a','b','c','d'},*px,*py;
:arrow: [b]x: a b c d[/b]
py=&x[3]-2
:arrow: py je adresa od x[3] minus 2, tj. adresa onoga tko se nalazi dva mjesta prije x[3], a to je x[1]
:arrow: [b]py = adresa od x[1][/b]
px=py--;
:arrow: py smanji za jedan, a px-u pridruzi staru vrijednost od py
:arrow: [b]px = adresa od x[1]; py = adresa od x[0][/b]
*px=px[1]-x[2]+'e';
:arrow: elementu na koji pokazuje px pridruzi px[1]-x[2]+'e'
:arrow: px[1] = *(px + 1) = prvi nakon onoga na koga pokazuje px = x[2]
:arrow: *px = [b]x[1] = 'e'[/b]
py[2]=--(*px)-*(x+3)+'a';
:arrow: --(*px) smanji sadrzaj onoga na sto pokazuje px (a to je x[1], cija je vrijednost trenutno 'e') i vrati novu vrijednost,
:nosmile: *(x+3) = x[3]
:nosmile: py[2] = *(py + 2) = *(&x[0] + 2) = *(x + 2) = x[2]
:arrow: [b]x[2] = (x[1] = 'd') - x[3] + 'a' = 'a'; x[1] = 'd'[/b]
Iz svega toga:
:nosmile: x[0] = 'a', x[1] = 'd', x[2] = 'a', x[3] = 'd', px = &x[1], py = &x[0]
printf("%c %c %c %c %d",x[0],x[1],x[2],*px,py-px);
:arrow: a d a d -1
:D
char x[]={'a','b','c','d'},*px,*py;
x: a b c d
py=&x[3]-2
py je adresa od x[3] minus 2, tj. adresa onoga tko se nalazi dva mjesta prije x[3], a to je x[1]
py = adresa od x[1]
px=py–;
py smanji za jedan, a px-u pridruzi staru vrijednost od py
px = adresa od x[1]; py = adresa od x[0]
*px=px[1]-x[2]+'e';
elementu na koji pokazuje px pridruzi px[1]-x[2]+'e'
px[1] = *(px + 1) = prvi nakon onoga na koga pokazuje px = x[2]
*px = x[1] = 'e'
py[2]=–(*px)-*(x+3)+'a';
–(*px) smanji sadrzaj onoga na sto pokazuje px (a to je x[1], cija je vrijednost trenutno 'e') i vrati novu vrijednost,
*(x+3) = x[3]
py[2] = *(py + 2) = *(&x[0] + 2) = *(x + 2) = x[2]
x[2] = (x[1] = 'd') - x[3] + 'a' = 'a'; x[1] = 'd'
Iz svega toga:
x[0] = 'a', x[1] = 'd', x[2] = 'a', x[3] = 'd', px = &x[1], py = &x[0]
printf("%c %c %c %c %d",x[0],x[1],x[2],*px,py-px);
a d a d -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] |
|
Gost
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
Postano: 10:30 sub, 24. 6. 2006 Naslov: |
|
|
[quote]Napisite program koji ucitava prirodan broj a, dinamicki alocira mjesto za polje p od a podataka tipa char, te ucitava elemente tog polja. Program treba stvoriti praznu vezanu listu, te iz polja p u vezanu listu
ubaciti sva mala slova koja se pojavljuju u polju p. Ubacivanje u vezanu listu treba realizirati ubacivanjem na kraj vezane liste. Nakon toga, iz liste treba izbaciti svaki treci cvor, tj. treba izbaciti prvi, cetvrti, sedmi, itd.
cvor.[/quote]
Smijem li elemnete polja ucitati kao string?
Smijem li pretpostavit da će biti učitana samo slova?
Citat: | Napisite program koji ucitava prirodan broj a, dinamicki alocira mjesto za polje p od a podataka tipa char, te ucitava elemente tog polja. Program treba stvoriti praznu vezanu listu, te iz polja p u vezanu listu
ubaciti sva mala slova koja se pojavljuju u polju p. Ubacivanje u vezanu listu treba realizirati ubacivanjem na kraj vezane liste. Nakon toga, iz liste treba izbaciti svaki treci cvor, tj. treba izbaciti prvi, cetvrti, sedmi, itd.
cvor. |
Smijem li elemnete polja ucitati kao string?
Smijem li pretpostavit da će biti učitana samo slova?
_________________ Kad sam bila mala htjela sam biti statističarka
[tex]\omega \in \Omega[/tex] 
|
|
[Vrh] |
|
HijenA Forumaš(ica)

Pridružen/a: 23. 01. 2004. (16:46:04) Postovi: (3D2)16
Spol: 
Lokacija: Prazan skup ;-)
|
Postano: 11:17 sub, 24. 6. 2006 Naslov: |
|
|
[quote="nana"][quote]Napisite program koji ucitava prirodan broj a, dinamicki alocira mjesto za polje p od a podataka tipa char, te ucitava elemente tog polja. Program treba stvoriti praznu vezanu listu, te iz polja p u vezanu listu
ubaciti sva mala slova koja se pojavljuju u polju p. Ubacivanje u vezanu listu treba realizirati ubacivanjem na kraj vezane liste. Nakon toga, iz liste treba izbaciti svaki treci cvor, tj. treba izbaciti prvi, cetvrti, sedmi, itd.
cvor.[/quote]
Smijem li elemnete polja ucitati kao string? [/quote]
ako mislis na deklaraciju:
[code:1]
char polje_znakova[100];[/code:1]
onda da jer se takvo polje znakova zapravo interpretira kao string.
[quote]
Smijem li pretpostavit da će biti učitana samo slova?[/quote]
kod ucitavanja stringova je svejedno sto upisujes jer se svaki znak upisuje u to polje u obliku ASCII koda (zato i jest velicina jednog chara 1 bajt, odnosno 8 bitova, odnosno mogucih 256 kombinacija koda). tako da je odgovor: ne. ne mozes pretpostaviti da se ucitavaju samo slova jer su i brojevi i specijalni znakovi isto tako dio ASCII standarda. eventualno mozes napomenuti kod upisa da trazis da se upisuju samo slova.
nana (napisa): | Citat: | Napisite program koji ucitava prirodan broj a, dinamicki alocira mjesto za polje p od a podataka tipa char, te ucitava elemente tog polja. Program treba stvoriti praznu vezanu listu, te iz polja p u vezanu listu
ubaciti sva mala slova koja se pojavljuju u polju p. Ubacivanje u vezanu listu treba realizirati ubacivanjem na kraj vezane liste. Nakon toga, iz liste treba izbaciti svaki treci cvor, tj. treba izbaciti prvi, cetvrti, sedmi, itd.
cvor. |
Smijem li elemnete polja ucitati kao string? |
ako mislis na deklaraciju:
Kod: |
char polje_znakova[100]; |
onda da jer se takvo polje znakova zapravo interpretira kao string.
Citat: |
Smijem li pretpostavit da će biti učitana samo slova? |
kod ucitavanja stringova je svejedno sto upisujes jer se svaki znak upisuje u to polje u obliku ASCII koda (zato i jest velicina jednog chara 1 bajt, odnosno 8 bitova, odnosno mogucih 256 kombinacija koda). tako da je odgovor: ne. ne mozes pretpostaviti da se ucitavaju samo slova jer su i brojevi i specijalni znakovi isto tako dio ASCII standarda. eventualno mozes napomenuti kod upisa da trazis da se upisuju samo slova.
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
|
[Vrh] |
|
HijenA Forumaš(ica)

Pridružen/a: 23. 01. 2004. (16:46:04) Postovi: (3D2)16
Spol: 
Lokacija: Prazan skup ;-)
|
Postano: 12:28 sub, 24. 6. 2006 Naslov: |
|
|
[quote="nana"][quote="HijenA"] [code:1]
char polje_znakova[100];[/code:1]
onda da jer se takvo polje znakova zapravo interpretira kao string.
[/quote]Treba dinamički alocirati tako da mi ovo ne bi prošlo.[/quote]
svejedno moras znati otprilike duljinu stringa, barem koliko ja znam. ako koristis pointer, sto moras napravit u ovom slucaju, moras ga inicijalizirati jer sama deklaracija pointera nista ne znaci. dakle...mora biti nekakvo gornje ogranicenje duljine stringa i do te duljine normalnim putem malloc funkcijom rezervirati mjesto u memoriji:
[code:1]
int n; // neka konstanta broja znakova
char* string;
...
string=(char *) malloc(sizeof(char)*n);
...
[/code:1]
ili, ako imamo neki pocetni string sa fiksnom duljinom:
[code:1]
char string1[100];
char* string2;
...
string2=(char *) malloc(strlen(string1)+1);
...
[/code:1]
ovaj +1 je uvijek dobro dodat zbog end string znaka, odnosno '\0' :-)
[quote]
Nisam mislila na deklaraciju već kod učitavanja polja. Mogu li ga učitat kao string ili znak po znak?[/quote]
mozes i kao jedno i kao drugo. zavisno od implementacije.
[quote]
Ovo za mala velika slova mislila sam mogu li korisniku reć da učitava samo slova.[/quote]
mozes...no to moras naznaciti na pocetku programa.
[quote]
[size=9]sve me strah da li ću na analizi proć uz ovakvo neprecizno izražavanje :cry: [/size][/quote]
nah...naj se brinut :-)
nana (napisa): | HijenA (napisa): | Kod: |
char polje_znakova[100]; |
onda da jer se takvo polje znakova zapravo interpretira kao string.
| Treba dinamički alocirati tako da mi ovo ne bi prošlo. |
svejedno moras znati otprilike duljinu stringa, barem koliko ja znam. ako koristis pointer, sto moras napravit u ovom slucaju, moras ga inicijalizirati jer sama deklaracija pointera nista ne znaci. dakle...mora biti nekakvo gornje ogranicenje duljine stringa i do te duljine normalnim putem malloc funkcijom rezervirati mjesto u memoriji:
Kod: |
int n; // neka konstanta broja znakova
char* string;
...
string=(char *) malloc(sizeof(char)*n);
...
|
ili, ako imamo neki pocetni string sa fiksnom duljinom:
Kod: |
char string1[100];
char* string2;
...
string2=(char *) malloc(strlen(string1)+1);
...
|
ovaj +1 je uvijek dobro dodat zbog end string znaka, odnosno '\0'
Citat: |
Nisam mislila na deklaraciju već kod učitavanja polja. Mogu li ga učitat kao string ili znak po znak? |
mozes i kao jedno i kao drugo. zavisno od implementacije.
Citat: |
Ovo za mala velika slova mislila sam mogu li korisniku reć da učitava samo slova. |
mozes...no to moras naznaciti na pocetku programa.
Citat: |
sve me strah da li ću na analizi proć uz ovakvo neprecizno izražavanje |
nah...naj se brinut
|
|
[Vrh] |
|
Geliriell Forumaš(ica)


Pridružen/a: 05. 10. 2005. (14:48:40) Postovi: (84)16
Spol: 
|
Postano: 20:33 sub, 24. 6. 2006 Naslov: |
|
|
Zasto mi je odmah u prvom prolasku kroz prvu for petlju i=5???
[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char prvi[]="12345";
char drugi[]="67890";
int i,size;
char *pc;
size=strlen(prvi)+strlen(drugi)+1;
printf("prvi=%s\n",prvi);
printf("drugi=%s\n",drugi);
printf("%d",size);
pc=(char*)malloc(size);
for(i=0; i<strlen(prvi); i++);
{
pc[i]=prvi[i];
}
for(i=0; i<strlen(drugi); i++);
{
pc[i+strlen(prvi)]=drugi[i];
}
pc[size-1]='\0';
printf("pc=%s\n",pc);
getchar();
free(pc);
return 0;
}
[/code:1]
Zasto mi je odmah u prvom prolasku kroz prvu for petlju i=5???
Kod: |
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char prvi[]="12345";
char drugi[]="67890";
int i,size;
char *pc;
size=strlen(prvi)+strlen(drugi)+1;
printf("prvi=%s\n",prvi);
printf("drugi=%s\n",drugi);
printf("%d",size);
pc=(char*)malloc(size);
for(i=0; i<strlen(prvi); i++);
{
pc[i]=prvi[i];
}
for(i=0; i<strlen(drugi); i++);
{
pc[i+strlen(prvi)]=drugi[i];
}
pc[size-1]='\0';
printf("pc=%s\n",pc);
getchar();
free(pc);
return 0;
}
|
|
|
[Vrh] |
|
Geliriell Forumaš(ica)


Pridružen/a: 05. 10. 2005. (14:48:40) Postovi: (84)16
Spol: 
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 21:20 sub, 24. 6. 2006 Naslov: |
|
|
[quote="nana"][quote]mozes...no to moras naznaciti na pocetku programa. [/quote]
Samo me zanimalo mogu li u ovom slucaju to zahtjevat. Jer mi se čini da ne smijem uvijek. Onda bi to u neku ruku bilo jednostavnije za isprogramirat kada bi uvijek mogla.[/quote]
Klasika: ne smijes uvesti ogranicenje koje zadatak ne postavlja; sve ostalo se racuna da ce biti bas kako i pise, pa se mozes tako i ponasati. :D
Dakle, ako ja trazim program koji radi sa slovima, on mora [b]tocno[/b] raditi sa slovima. 8) Ako ja upisem neki znak koji nije slovo, program smije raditi stogod jer tu nisam nista definirao u zadatku. :)
nana (napisa): | Citat: | mozes...no to moras naznaciti na pocetku programa. |
Samo me zanimalo mogu li u ovom slucaju to zahtjevat. Jer mi se čini da ne smijem uvijek. Onda bi to u neku ruku bilo jednostavnije za isprogramirat kada bi uvijek mogla. |
Klasika: ne smijes uvesti ogranicenje koje zadatak ne postavlja; sve ostalo se racuna da ce biti bas kako i pise, pa se mozes tako i ponasati.
Dakle, ako ja trazim program koji radi sa slovima, on mora tocno raditi sa slovima. Ako ja upisem neki znak koji nije slovo, program smije raditi stogod jer tu nisam nista definirao u zadatku.
_________________ 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] |
|
fatima Gost
|
Postano: 23:08 sub, 24. 6. 2006 Naslov: |
|
|
[code:1]#include <stdio.h>
main()
{
int x[]={1, 3, 5, 6}, *px, *py;
px=x+x[0]; py=px++;
*py=*px-*(x+1);
*px=py[1] - x[0] + x[3]--;
printf ("%d %d %d %d %d", x[1], x[2], x[3], *px, py-px);
scanf ("%%");
}[/code:1]
jel mi može ko pojasnit što bi trebao ispisat ovaj zadatak?????
Kod: | #include <stdio.h>
main()
{
int x[]={1, 3, 5, 6}, *px, *py;
px=x+x[0]; py=px++;
*py=*px-*(x+1);
*px=py[1] - x[0] + x[3]--;
printf ("%d %d %d %d %d", x[1], x[2], x[3], *px, py-px);
scanf ("%%");
} |
jel mi može ko pojasnit što bi trebao ispisat ovaj zadatak?????
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 7:56 ned, 25. 6. 2006 Naslov: |
|
|
NHF, ali logika je identicna onome gore, pa prouci to. 8)
Kad program compiliras i izvedes vidjet ces sto ispisuje, pa usporedi s gornjim objasnjenjima. :) Ako za neku konkretnu varijablu nije jasno, napisi sto ti mislis da ispisuje i sto stvarno ispisuje, pa cemo naci gdje grijesis. ;)
NHF, ali logika je identicna onome gore, pa prouci to.
Kad program compiliras i izvedes vidjet ces sto ispisuje, pa usporedi s gornjim objasnjenjima. Ako za neku konkretnu varijablu nije jasno, napisi sto ti mislis da ispisuje i sto stvarno ispisuje, pa cemo naci gdje grijesis.
_________________ 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] |
|
Gost
|
Postano: 8:24 ned, 25. 6. 2006 Naslov: |
|
|
Probat ću ti raspisati svaki red, možda bude jasnije:
int x[]={1, 3, 5, 6}
To znaci x[0]=1, x[1]=3, x[2]=5, x[3]=6.
px=x+x[0]; py=px++;
px i x su pokazivaci, x pokazuje na x[0]. (aritmetika nad pokazivacima : px = uzmi x(taj pokazuje na prvoga) i pomakni se za 1 integer (jer imamo +x[0], a to je 1. ) Sada px pokazuje na x[1].
py=px++;
pokazivac py pokazuje isto gdje i px (znaci py pokazuje na x[1]) s time da jos moramo pomaknuti pokazivac px za jedno mjesto, dakle px pokazuje sada na x[2].
*py=*px-*(x+1);
operator dereferenciranja. Vrijednost na koju pokazuje py upisi :ono na sto pokazuje px oduzmi za ono sto pise kad se od nultog elementa pomaknemo za 1: dakle *py=5-3=2, tj. x[1]=2 (jer py pokazuje na x[1]).
*px=py[1] - x[0] + x[3]--;
sada moramo promijeniti vrijednost na koju pokazuje px (tj. x[2]).
py pokazuje na x[1] (ujedno i py[0] pokazuje na to). Dakle py[1] pokazuje na x[2]. sada to izracunamo *px=5-1+6=10 s time da x[3]=5 jer imamo na kraju x[3]--. Sada je x[2]=10.
konacno ispis: 2 10 5 10 -1.
zasto -1? jer pokazivac px pokazujena na x[2], a py na x[1]. Razlika u adresama je -1, tj. preciznije razlika je (px - py)/sizeof(int) jer imamo polje intova.
Nadam se da sam pomogao.
Meni bi trebala pomoc oko stringova, npr. 4. zadatak iz zadace ili drugi s zadatka za vjezbu sto se nalazi na degiorgi.math.hr/c. Mislim, samo mi dajte hint. Unaprijed zahvaljujem.
Probat ću ti raspisati svaki red, možda bude jasnije:
int x[]={1, 3, 5, 6}
To znaci x[0]=1, x[1]=3, x[2]=5, x[3]=6.
px=x+x[0]; py=px++;
px i x su pokazivaci, x pokazuje na x[0]. (aritmetika nad pokazivacima : px = uzmi x(taj pokazuje na prvoga) i pomakni se za 1 integer (jer imamo +x[0], a to je 1. ) Sada px pokazuje na x[1].
py=px++;
pokazivac py pokazuje isto gdje i px (znaci py pokazuje na x[1]) s time da jos moramo pomaknuti pokazivac px za jedno mjesto, dakle px pokazuje sada na x[2].
*py=*px-*(x+1);
operator dereferenciranja. Vrijednost na koju pokazuje py upisi :ono na sto pokazuje px oduzmi za ono sto pise kad se od nultog elementa pomaknemo za 1: dakle *py=5-3=2, tj. x[1]=2 (jer py pokazuje na x[1]).
*px=py[1] - x[0] + x[3]–;
sada moramo promijeniti vrijednost na koju pokazuje px (tj. x[2]).
py pokazuje na x[1] (ujedno i py[0] pokazuje na to). Dakle py[1] pokazuje na x[2]. sada to izracunamo *px=5-1+6=10 s time da x[3]=5 jer imamo na kraju x[3]–. Sada je x[2]=10.
konacno ispis: 2 10 5 10 -1.
zasto -1? jer pokazivac px pokazujena na x[2], a py na x[1]. Razlika u adresama je -1, tj. preciznije razlika je (px - py)/sizeof(int) jer imamo polje intova.
Nadam se da sam pomogao.
Meni bi trebala pomoc oko stringova, npr. 4. zadatak iz zadace ili drugi s zadatka za vjezbu sto se nalazi na degiorgi.math.hr/c. Mislim, samo mi dajte hint. Unaprijed zahvaljujem.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 10:13 ned, 25. 6. 2006 Naslov: |
|
|
[quote="Anonymous"]Meni bi trebala pomoc oko stringova, npr. 4. zadatak iz zadace ili drugi s zadatka za vjezbu sto se nalazi na degiorgi.math.hr/c. Mislim, samo mi dajte hint. Unaprijed zahvaljujem.[/quote]
4. zadatak iz zadace (koju je netko negdje na Forumu cijelu rijesio):[list=1][*]Prebroji koliko takvih razmaka ima
[code:1]brojac = 0;
for(i = 1; i < strlen(text); i++)
if (text[i-1] = ' ' && (text[i] = '.' || text[i] = '?' || text[i] = '!' || text[i] = ',')) {
j = i - 1;
while (j >= 0 && text[j] == ' ') j--;
brojac += (i - j - 1);
}[/code:1][*]Alociraj memoriju za novi string:
[code:1]novi = (char *)malloc(strlen(text) - brojac + 1);[/code:1]
Mozes i bez ova dva koraka; samo deklariras [tt]char novi[1000];[/tt] ali to je zato jer tako pise u zadatku. :? Da se trazi tocna alokacija, bez ogranicenja na duljinju texta, ove dvije tocke bi bile potrebne. 8)
[*]Napuni string [tt]novi[/tt] s podacima:
[code:1]novi[0] = text[k=0];
for(i = 1; i < strlen(text); i++)
if (text[i-1] = ' ' && (text[i] = '.' || text[i] = '?' || text[i] = '!' || text[i] = ',')) {
j = i - 1;
while (j >= 0 && text[j] == ' ') j--, k--;
} else novi[++k] = text[i];[/code:1]
Ovo je pisano dosta napamet, pa je moguce da sam fulao neki detalj. :blush: No, pitao si za ideju i nadam se da je ona jasna. 8)
[*]Na kraju, nemoj zaboraviti postaviti [tt]'\0'[/tt] na kraj novog stringa: [tt]novi[++k] = '\0';[/tt][/list:o]
Onaj iz zadataka za vjezbu je jos laksi, jer ubacujes [b]jednu[/b] crticu (za razliku od zadace gdje brises, opcenito, po [b]nekoliko[/b] razmaka). :D Dakle, klasika: jedna petlja za prebrojati koliko crtica trebas i druga petlja koja radi to isto, samo sto ne broji nego dodaje crtice (i usput kopira ostale znakove). 8) Trebaju ti dva indeksa (u primjeru od zadace, ja sam ih nazvao [tt]i[/tt] i [tt]k[/tt]) za pozicioniranje u dva stringa. 8)
Jasnije? :D
Anonymous (napisa): | Meni bi trebala pomoc oko stringova, npr. 4. zadatak iz zadace ili drugi s zadatka za vjezbu sto se nalazi na degiorgi.math.hr/c. Mislim, samo mi dajte hint. Unaprijed zahvaljujem. |
4. zadatak iz zadace (koju je netko negdje na Forumu cijelu rijesio):- Prebroji koliko takvih razmaka ima
Kod: | brojac = 0;
for(i = 1; i < strlen(text); i++)
if (text[i-1] = ' ' && (text[i] = '.' || text[i] = '?' || text[i] = '!' || text[i] = ',')) {
j = i - 1;
while (j >= 0 && text[j] == ' ') j--;
brojac += (i - j - 1);
} | Alociraj memoriju za novi string:
Kod: | novi = (char *)malloc(strlen(text) - brojac + 1); |
Mozes i bez ova dva koraka; samo deklariras char novi[1000]; ali to je zato jer tako pise u zadatku. Da se trazi tocna alokacija, bez ogranicenja na duljinju texta, ove dvije tocke bi bile potrebne.
Napuni string novi s podacima:
Kod: | novi[0] = text[k=0];
for(i = 1; i < strlen(text); i++)
if (text[i-1] = ' ' && (text[i] = '.' || text[i] = '?' || text[i] = '!' || text[i] = ',')) {
j = i - 1;
while (j >= 0 && text[j] == ' ') j--, k--;
} else novi[++k] = text[i]; |
Ovo je pisano dosta napamet, pa je moguce da sam fulao neki detalj. No, pitao si za ideju i nadam se da je ona jasna.
Na kraju, nemoj zaboraviti postaviti '\0' na kraj novog stringa: novi[++k] = '\0';
Onaj iz zadataka za vjezbu je jos laksi, jer ubacujes jednu crticu (za razliku od zadace gdje brises, opcenito, po nekoliko razmaka). Dakle, klasika: jedna petlja za prebrojati koliko crtica trebas i druga petlja koja radi to isto, samo sto ne broji nego dodaje crtice (i usput kopira ostale znakove). Trebaju ti dva indeksa (u primjeru od zadace, ja sam ih nazvao i i k) za pozicioniranje u dva stringa.
Jasnije?
_________________ 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] |
|
Gost
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
fireball Forumaš(ica)


Pridružen/a: 07. 10. 2005. (18:49:17) Postovi: (4AB)16
Spol: 
Lokacija: s rukom u vatri i nogom u grobu
|
|
[Vrh] |
|
nana Forumaš(ica)


Pridružen/a: 29. 11. 2005. (12:24:35) Postovi: (2AD)16
Spol: 
|
Postano: 15:47 ned, 25. 6. 2006 Naslov: |
|
|
[code:1]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE* ulaz;
char *p;
int n,a,i;
char tmp[7];
ulaz=fopen("novcici.txt","rt");
fscanf(ulaz,"%d",&n);
p=(char*)malloc((n+1)*sizeof(char));
for (i=0;i<n;i++) p[i]='P';
p[n]='\0';
while (fscanf(ulaz,"%s %d",tmp,&a)==2){
if ((strcmp(tmp, "izbaci"))==0) p[a-1]='-';
if ((strcmp(tmp, "okreni"))==0) p[a-1]='G';
}
printf("%s",p);
fclose(ulaz);
free(p);
return 0;
}
[/code:1]
Za pokretanje ovog programa potrebno je imat tekstualnu datoteku "novcici.txt."
Kod: | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE* ulaz;
char *p;
int n,a,i;
char tmp[7];
ulaz=fopen("novcici.txt","rt");
fscanf(ulaz,"%d",&n);
p=(char*)malloc((n+1)*sizeof(char));
for (i=0;i<n;i++) p[i]='P';
p[n]='\0';
while (fscanf(ulaz,"%s %d",tmp,&a)==2){
if ((strcmp(tmp, "izbaci"))==0) p[a-1]='-';
if ((strcmp(tmp, "okreni"))==0) p[a-1]='G';
}
printf("%s",p);
fclose(ulaz);
free(p);
return 0;
}
|
Za pokretanje ovog programa potrebno je imat tekstualnu datoteku "novcici.txt."
_________________ Kad sam bila mala htjela sam biti statističarka
[tex]\omega \in \Omega[/tex] 
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
|