Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
krilo Forumaš(ica)
Pridružen/a: 01. 11. 2016. (14:45:48) Postovi: (4E)16
Spol:
|
Postano: 14:52 pon, 24. 4. 2017 Naslov: Pointeri et stringovi |
|
|
Da ne švrljam po topicu o "rekurzijama"...
Malo me zbunjuju funkcije iz [tt]<ctype.h>[/tt] datoteke... Zašto piše u njihovom prototipu da primaju [tt]int[/tt] ako provjeravaju [tt]char[/tt]? (Nije mi baš jasno kako poziv funkcionira u računalu, tj. kako se to unutra interpretira.)
Rješavam zadatak iz kolokvija i imam problem s pointerima:
Napišite program koji učitava broj prodavača n jedne trgovine, a zatim, redom, iznose računa koje je pojedini prodavač naplatio. Iznos je realni broj strogo veći od nula. Između iznosa svaka dva prodavača unosi se 0.
(a) Potrebno je kreirati dinamički alocirano polje prodavaci, u kojem će, u i-tom retku, na prvom mjestu biti oznaka prodavača (na početku je to upravo i), zatim iznosi naplaćenih računa i-tog prodavača, i = 0, . . . , n−1, a posljednji element svakog retka ima vrijednost 0 i označava kraj retka. Pri tom, alocirajte točno onoliko memorije koliko vam je potrebno.
Za to pravim funkciju [tt]al_uc_racune[/tt] koja bi alocirala memoriju za "manje" nizove i postavila njihove prve elemente kao oznake prodavača. (Note: prije poziva dotične funkcije u glavnom programu već imam učitan broj prodavača i alocirano polje [tt]prodavaci[/tt]: [tt]prodavaci=(double**)malloc(sizeof(double)*n);[/tt].)
[code:1]void al_uc_racune(double **prodavaci, int n)
{
int i, j;
for (i=0; i<n; i++)
{
prodavaci[i][0]=i; //prvi u manjem nizu je broj (oznaka) prodavaca
for (j=1; ; j++)
{
prodavaci[i][j]=(double*)malloc(sizeof(double)); (*)
scanf ("%g", prodavaci[i][j]);
if (prodavaci[i][j]==0) break;
}
}
}[/code:1]
1) Nije mi jasno zašto neće compiler alocirati memoriju za svaki pojedini račun (*). Probala sam isto s pointerima, umjesto [tt]prodavaci[i][j][/tt] staviti [tt](*(prodavaci+i)[j])[/tt] ali ni to ne štima, pa je očito da ne kužim pointersku aritmetiku i kretanje po "matrici" pomoću pointera. Koliko postoji ekvivalentrnih zapisa za dvodimenzionalno polje kad zapisujemo pomoću pointera i sa klasičnim zagradama ([][])?
2) Neka je u nekom xy programu inicijaliziran [tt]int *ptr[/tt]. Jasno mi je da (*ptr) označava vrijednost na koju pointer pokazuje, ali koje je značenje (ptr) u toj "sintagmi"? Vječito malloc-om (ptr)-u (a ne (*ptr)-u) pridružujem nešto, a iskreno nemam pojma što (ptr) jest, osim imena samog pointera. Prvo sam mislila da je to neka adresa, ali mi to nema smisla je *ptr baš pointer, a ne varijabla. Može neko objašnjenje?
Da ne švrljam po topicu o "rekurzijama"...
Malo me zbunjuju funkcije iz <ctype.h> datoteke... Zašto piše u njihovom prototipu da primaju int ako provjeravaju char? (Nije mi baš jasno kako poziv funkcionira u računalu, tj. kako se to unutra interpretira.)
Rješavam zadatak iz kolokvija i imam problem s pointerima:
Napišite program koji učitava broj prodavača n jedne trgovine, a zatim, redom, iznose računa koje je pojedini prodavač naplatio. Iznos je realni broj strogo veći od nula. Između iznosa svaka dva prodavača unosi se 0.
(a) Potrebno je kreirati dinamički alocirano polje prodavaci, u kojem će, u i-tom retku, na prvom mjestu biti oznaka prodavača (na početku je to upravo i), zatim iznosi naplaćenih računa i-tog prodavača, i = 0, . . . , n−1, a posljednji element svakog retka ima vrijednost 0 i označava kraj retka. Pri tom, alocirajte točno onoliko memorije koliko vam je potrebno.
Za to pravim funkciju al_uc_racune koja bi alocirala memoriju za "manje" nizove i postavila njihove prve elemente kao oznake prodavača. (Note: prije poziva dotične funkcije u glavnom programu već imam učitan broj prodavača i alocirano polje prodavaci: prodavaci=(double**)malloc(sizeof(double)*n);.)
Kod: | void al_uc_racune(double **prodavaci, int n)
{
int i, j;
for (i=0; i<n; i++)
{
prodavaci[i][0]=i; //prvi u manjem nizu je broj (oznaka) prodavaca
for (j=1; ; j++)
{
prodavaci[i][j]=(double*)malloc(sizeof(double)); (*)
scanf ("%g", prodavaci[i][j]);
if (prodavaci[i][j]==0) break;
}
}
} |
1) Nije mi jasno zašto neće compiler alocirati memoriju za svaki pojedini račun (*). Probala sam isto s pointerima, umjesto prodavaci[i][j] staviti (*(prodavaci+i)[j]) ali ni to ne štima, pa je očito da ne kužim pointersku aritmetiku i kretanje po "matrici" pomoću pointera. Koliko postoji ekvivalentrnih zapisa za dvodimenzionalno polje kad zapisujemo pomoću pointera i sa klasičnim zagradama ([][])?
2) Neka je u nekom xy programu inicijaliziran int *ptr. Jasno mi je da (*ptr) označava vrijednost na koju pointer pokazuje, ali koje je značenje (ptr) u toj "sintagmi"? Vječito malloc-om (ptr)-u (a ne (*ptr)-u) pridružujem nešto, a iskreno nemam pojma što (ptr) jest, osim imena samog pointera. Prvo sam mislila da je to neka adresa, ali mi to nema smisla je *ptr baš pointer, a ne varijabla. Može neko objašnjenje?
|
|
[Vrh] |
|
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: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 21:36 pon, 24. 4. 2017 Naslov: Re: Pointeri et stringovi |
|
|
[quote="krilo"]Malo me zbunjuju funkcije iz [tt]<ctype.h>[/tt] datoteke... Zašto piše u njihovom prototipu da primaju [tt]int[/tt] ako provjeravaju [tt]char[/tt]? (Nije mi baš jasno kako poziv funkcionira u računalu, tj. kako se to unutra interpretira.)[/quote]
For all intents and purposes, ponasaj se kao da rade s [tt]char[/tt]-ovima. Rijec je o kompatibilnim tipovima, jer se [tt]char[/tt] cuvao kao ASCII vrijednost. Zasto su stavili [tt]int[/tt] je pomalo tehnicka stvar; zagooglaj ako te zanimaju detalji.
[quote="krilo"]Rješavam zadatak iz kolokvija i imam problem s pointerima:
Napišite program koji učitava broj prodavača n jedne trgovine, a zatim, redom, iznose računa koje je pojedini prodavač naplatio. Iznos je realni broj strogo veći od nula. Između iznosa svaka dva prodavača unosi se 0.
(a) Potrebno je kreirati dinamički alocirano polje prodavaci, u kojem će, u i-tom retku, na prvom mjestu biti oznaka prodavača (na početku je to upravo i), zatim iznosi naplaćenih računa i-tog prodavača, i = 0, . . . , n−1, a posljednji element svakog retka ima vrijednost 0 i označava kraj retka. Pri tom, alocirajte točno onoliko memorije koliko vam je potrebno.
Za to pravim funkciju [tt]al_uc_racune[/tt] koja bi alocirala memoriju za "manje" nizove i postavila njihove prve elemente kao oznake prodavača. (Note: prije poziva dotične funkcije u glavnom programu već imam učitan broj prodavača i alocirano polje [tt]prodavaci[/tt]: [tt]prodavaci=(double**)malloc(sizeof(double)*n);[/tt].)
[code:1]void al_uc_racune(double **prodavaci, int n)
{
int i, j;
for (i=0; i<n; i++)
{
prodavaci[i][0]=i; //prvi u manjem nizu je broj (oznaka) prodavaca
for (j=1; ; j++)
{
prodavaci[i][j]=(double*)malloc(sizeof(double)); (*)
scanf ("%g", prodavaci[i][j]);
if (prodavaci[i][j]==0) break;
}
}
}[/code:1]
1) Nije mi jasno zašto neće compiler alocirati memoriju za svaki pojedini račun (*). Probala sam isto s pointerima, umjesto [tt]prodavaci[i][j][/tt] staviti [tt](*(prodavaci+i)[j])[/tt] ali ni to ne štima, pa je očito da ne kužim pointersku aritmetiku i kretanje po "matrici" pomoću pointera. Koliko postoji ekvivalentrnih zapisa za dvodimenzionalno polje kad zapisujemo pomoću pointera i sa klasičnim zagradama ([][])?[/quote]
[tt]prodavaci[/tt] treba biti pointer na niz, a svaki njegov element treba opet biti pointer na niz. Dakle, treba alocirati [tt]prodavaci[/tt] (sto mozda radis izvan funkcije), a zatim i svaki [tt]prodavaci[i][/tt]. Elementi [tt]prodavaci[i][j][/tt] su najobicniji brojevi; njih ne alociramo.
Posto ne znamo unaprijed koliko [tt]prodavaci[i][/tt] ima elemenata, treba koristiti [tt]realloc[/tt].
[quote="krilo"]2) Neka je u nekom xy programu inicijaliziran [tt]int *ptr[/tt]. Jasno mi je da (*ptr) označava vrijednost na koju pointer pokazuje, ali koje je značenje (ptr) u toj "sintagmi"? Vječito malloc-om (ptr)-u (a ne (*ptr)-u) pridružujem nešto, a iskreno nemam pojma što (ptr) jest, osim imena samog pointera. Prvo sam mislila da je to neka adresa, ali mi to nema smisla je *ptr baš pointer, a ne varijabla. Može neko objašnjenje?[/quote]
To je tzv. implicitna deklaracija. Basically, kad deklariras [tt]int *ptr[/tt], kazes "zelim alocirati [tt]*ptr[/tt] koji je tipa [tt]int[/tt]". No, compiler zna da je [tt]*ptr[/tt] "ono na sto [tt]ptr[/tt] pokazuje", pa "pametno" zakljuci da zapravo zelis deklarirati "pointer na [tt]int[/tt] koji ces zvati [tt]ptr[/tt]".
Kad kazes
[code:1]ptr = (double*)malloc(n * sizeof(double));[/code:1]
Zapravo kazes:[list=1][*][tt]malloc(n * size(double))[/tt] sto znaci "alociraj [tt]n * size(double)[/tt] byteova memorije", tj. "alociraj onoliko memorije koliko mi treba da pospremim [tt]n[/tt] vrijednosti tipa [tt]double[/tt]".
[*]Posto [tt]malloc(...)[/tt] vraca "pointer na memoriju neodredjenog tipa" (tzv. void-pointer, odnosno [tt]void*[/tt]), a [tt]ptr[/tt] je tipa [tt]double*[/tt], onda zelimo compileru reci da ne pridruzujemo "razlicite" tipove slucajno. Tome sluzi cast operator [tt](double*)[/tt] koji kaze "vrijednost s desne strane tretiraj kao da je tipa [tt]double*[/tt]. Posto su svi pointeri jednake velicine, ti tipovi su kompatibilni, pa nema problema.[/list:o]Dakle, adresa novoalocirane memorije (ilitiga "pointer na tu memoriju") se sprema u varijablu [tt]ptr[/tt].
krilo (napisa): | Malo me zbunjuju funkcije iz <ctype.h> datoteke... Zašto piše u njihovom prototipu da primaju int ako provjeravaju char? (Nije mi baš jasno kako poziv funkcionira u računalu, tj. kako se to unutra interpretira.) |
For all intents and purposes, ponasaj se kao da rade s char-ovima. Rijec je o kompatibilnim tipovima, jer se char cuvao kao ASCII vrijednost. Zasto su stavili int je pomalo tehnicka stvar; zagooglaj ako te zanimaju detalji.
krilo (napisa): | Rješavam zadatak iz kolokvija i imam problem s pointerima:
Napišite program koji učitava broj prodavača n jedne trgovine, a zatim, redom, iznose računa koje je pojedini prodavač naplatio. Iznos je realni broj strogo veći od nula. Između iznosa svaka dva prodavača unosi se 0.
(a) Potrebno je kreirati dinamički alocirano polje prodavaci, u kojem će, u i-tom retku, na prvom mjestu biti oznaka prodavača (na početku je to upravo i), zatim iznosi naplaćenih računa i-tog prodavača, i = 0, . . . , n−1, a posljednji element svakog retka ima vrijednost 0 i označava kraj retka. Pri tom, alocirajte točno onoliko memorije koliko vam je potrebno.
Za to pravim funkciju al_uc_racune koja bi alocirala memoriju za "manje" nizove i postavila njihove prve elemente kao oznake prodavača. (Note: prije poziva dotične funkcije u glavnom programu već imam učitan broj prodavača i alocirano polje prodavaci: prodavaci=(double**)malloc(sizeof(double)*n);.)
Kod: | void al_uc_racune(double **prodavaci, int n)
{
int i, j;
for (i=0; i<n; i++)
{
prodavaci[i][0]=i; //prvi u manjem nizu je broj (oznaka) prodavaca
for (j=1; ; j++)
{
prodavaci[i][j]=(double*)malloc(sizeof(double)); (*)
scanf ("%g", prodavaci[i][j]);
if (prodavaci[i][j]==0) break;
}
}
} |
1) Nije mi jasno zašto neće compiler alocirati memoriju za svaki pojedini račun (*). Probala sam isto s pointerima, umjesto prodavaci[i][j] staviti (*(prodavaci+i)[j]) ali ni to ne štima, pa je očito da ne kužim pointersku aritmetiku i kretanje po "matrici" pomoću pointera. Koliko postoji ekvivalentrnih zapisa za dvodimenzionalno polje kad zapisujemo pomoću pointera i sa klasičnim zagradama ([][])? |
prodavaci treba biti pointer na niz, a svaki njegov element treba opet biti pointer na niz. Dakle, treba alocirati prodavaci (sto mozda radis izvan funkcije), a zatim i svaki prodavaci[i]. Elementi prodavaci[i][j] su najobicniji brojevi; njih ne alociramo.
Posto ne znamo unaprijed koliko prodavaci[i] ima elemenata, treba koristiti realloc.
krilo (napisa): | 2) Neka je u nekom xy programu inicijaliziran int *ptr. Jasno mi je da (*ptr) označava vrijednost na koju pointer pokazuje, ali koje je značenje (ptr) u toj "sintagmi"? Vječito malloc-om (ptr)-u (a ne (*ptr)-u) pridružujem nešto, a iskreno nemam pojma što (ptr) jest, osim imena samog pointera. Prvo sam mislila da je to neka adresa, ali mi to nema smisla je *ptr baš pointer, a ne varijabla. Može neko objašnjenje? |
To je tzv. implicitna deklaracija. Basically, kad deklariras int *ptr, kazes "zelim alocirati *ptr koji je tipa int". No, compiler zna da je *ptr "ono na sto ptr pokazuje", pa "pametno" zakljuci da zapravo zelis deklarirati "pointer na int koji ces zvati ptr".
Kad kazes
Kod: | ptr = (double*)malloc(n * sizeof(double)); |
Zapravo kazes:- malloc(n * size(double)) sto znaci "alociraj n * size(double) byteova memorije", tj. "alociraj onoliko memorije koliko mi treba da pospremim n vrijednosti tipa double".
- Posto malloc(...) vraca "pointer na memoriju neodredjenog tipa" (tzv. void-pointer, odnosno void*), a ptr je tipa double*, onda zelimo compileru reci da ne pridruzujemo "razlicite" tipove slucajno. Tome sluzi cast operator (double*) koji kaze "vrijednost s desne strane tretiraj kao da je tipa double*. Posto su svi pointeri jednake velicine, ti tipovi su kompatibilni, pa nema problema.
Dakle, adresa novoalocirane memorije (ilitiga "pointer na tu memoriju") se sprema u varijablu ptr.
_________________ 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] |
|
krilo Forumaš(ica)
Pridružen/a: 01. 11. 2016. (14:45:48) Postovi: (4E)16
Spol:
|
Postano: 6:43 uto, 25. 4. 2017 Naslov: |
|
|
:thankyou: Hvala lijepo na objašnjenju! :thankyou:
[quote]Posto ne znamo unaprijed koliko prodavaci[i] ima elemenata, treba koristiti realloc.[/quote]
Ma bi ja to koristila, ali sam u skripti pročitala da je realloc spor, pa sam ga odlučila ne upotrijebiti unless absolutely neccessary. Nadalje budem.
I još jedna sitnica, da budem 100% sigurna: Kad inicijaliziram i alociram [tt]int **niz[/tt], onda je u zapisu jednog elementa "većeg" niza [tt]niz[i]==**(niz+i)[/tt] ili [tt]niz[i]==*(*niz+i)[/tt] ili pak [tt]niz[i]==(**niz)+i[/tt]? Ovo potonje mislim da nije, ali u globalu mi nije jasno kako da se properly krećem po "matrici" pomoću pointerske aritmetike. (I kako tek onda moram pisati za [tt]niz[i][j][/tt]?)
(I koja je fora s unosom nule između računa dva prodavača? Cijelo vrijeme unosim doubleove, ali ne mogu prekinuti petlju unosa jer ne znam kako da unesem [tt]int 0[/tt] u double niz a da program ne pošandrca. Znam da ne mogu konvertirati [tt](double) prodavaci[i][j][/tt] u int pa to usporediti jer postoje mogućnosti računa poput 0.00005; probala sam usporediti u [tt]if[/tt]-u double i float, ali malo radi pa malo ne radi. :tso: )
Hvala lijepo na objašnjenju!
Citat: | Posto ne znamo unaprijed koliko prodavaci[i] ima elemenata, treba koristiti realloc. |
Ma bi ja to koristila, ali sam u skripti pročitala da je realloc spor, pa sam ga odlučila ne upotrijebiti unless absolutely neccessary. Nadalje budem.
I još jedna sitnica, da budem 100% sigurna: Kad inicijaliziram i alociram int **niz, onda je u zapisu jednog elementa "većeg" niza niz[i]==**(niz+i) ili niz[i]==*(*niz+i) ili pak niz[i]==(**niz)+i? Ovo potonje mislim da nije, ali u globalu mi nije jasno kako da se properly krećem po "matrici" pomoću pointerske aritmetike. (I kako tek onda moram pisati za niz[i][j]?)
(I koja je fora s unosom nule između računa dva prodavača? Cijelo vrijeme unosim doubleove, ali ne mogu prekinuti petlju unosa jer ne znam kako da unesem int 0 u double niz a da program ne pošandrca. Znam da ne mogu konvertirati (double) prodavaci[i][j] u int pa to usporediti jer postoje mogućnosti računa poput 0.00005; probala sam usporediti u if-u double i float, ali malo radi pa malo ne radi. )
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 16:49 uto, 25. 4. 2017 Naslov: |
|
|
[quote="krilo"]Ma bi ja to koristila, ali sam u skripti pročitala da je realloc spor, pa sam ga odlučila ne upotrijebiti unless absolutely neccessary. Nadalje budem.[/quote]
Nema spasa ako duljina niza nije poznata unaprijed. Postoje nacini da se ubrza, ali nemojmo komplicirati. ;) Poanta te opaske je da ne alocirate element po element ako duljinu znate unaprijed, te da ste svjesni da postoji performance problem.
[quote="krilo"]I još jedna sitnica, da budem 100% sigurna: Kad inicijaliziram...[/quote]
Imam dojam da brkas "deklarirati" (najaviti compileru da ces koristiti adresu nekog tipa i s nekim imenom) i "inicijalizirati" (zadati varijabli pocetnu vrijednost).
[quote="krilo"]...i alociram [tt]int **niz[/tt], onda je u zapisu jednog elementa "većeg" niza [tt]niz[i]==**(niz+i)[/tt] ili [tt]niz[i]==*(*niz+i)[/tt] ili pak [tt]niz[i]==(**niz)+i[/tt]?[/quote]
Ni jedno. Ako je [tt]niz[/tt] tipa "pointer na pointer na nesto", onda je [tt]**niz[/tt] tipa "nesto" dok je [tt]niz[i][/tt] tipa "pointer na nesto".
Ima negdje u skripti to raspisano (Napomene 4.2.2. i 4.2.3.), ali za element slobodno pisi [tt]niz[i][j][/tt], osim ako se bas explicitno trazi pointerski (sumnam da bude).
[quote="krilo"](I koja je fora s unosom nule između računa dva prodavača? Cijelo vrijeme unosim doubleove, ali ne mogu prekinuti petlju unosa jer ne znam kako da unesem [tt]int 0[/tt] u double niz a da program ne pošandrca. Znam da ne mogu konvertirati [tt](double) prodavaci[i][j][/tt] u int pa to usporediti jer postoje mogućnosti računa poput 0.00005; probala sam usporediti u [tt]if[/tt]-u double i float, ali malo radi pa malo ne radi. :tso: )[/quote]
Nula je nula. Probaj na jednostavnom primjeru:
[code:1]#include<stdio.h>
int main(void) {
double x;
scanf("%lf", &x);
printf("%s nula\n", (x == 0 ? "Je" : "Nije"));
return 0;
}[/code:1]
Dakle, ucitas [tt]double x[/tt]. Ako je [tt]x == 0[/tt] prekines ucitavanje tok prodavaca; ako nije, doalociras niz i pridruziz vrijednost varijable [tt]x[/tt] novom elementu.
krilo (napisa): | Ma bi ja to koristila, ali sam u skripti pročitala da je realloc spor, pa sam ga odlučila ne upotrijebiti unless absolutely neccessary. Nadalje budem. |
Nema spasa ako duljina niza nije poznata unaprijed. Postoje nacini da se ubrza, ali nemojmo komplicirati. Poanta te opaske je da ne alocirate element po element ako duljinu znate unaprijed, te da ste svjesni da postoji performance problem.
krilo (napisa): | I još jedna sitnica, da budem 100% sigurna: Kad inicijaliziram... |
Imam dojam da brkas "deklarirati" (najaviti compileru da ces koristiti adresu nekog tipa i s nekim imenom) i "inicijalizirati" (zadati varijabli pocetnu vrijednost).
krilo (napisa): | ...i alociram int **niz, onda je u zapisu jednog elementa "većeg" niza niz[i]==**(niz+i) ili niz[i]==*(*niz+i) ili pak niz[i]==(**niz)+i? |
Ni jedno. Ako je niz tipa "pointer na pointer na nesto", onda je **niz tipa "nesto" dok je niz[i] tipa "pointer na nesto".
Ima negdje u skripti to raspisano (Napomene 4.2.2. i 4.2.3.), ali za element slobodno pisi niz[i][j], osim ako se bas explicitno trazi pointerski (sumnam da bude).
krilo (napisa): | (I koja je fora s unosom nule između računa dva prodavača? Cijelo vrijeme unosim doubleove, ali ne mogu prekinuti petlju unosa jer ne znam kako da unesem int 0 u double niz a da program ne pošandrca. Znam da ne mogu konvertirati (double) prodavaci[i][j] u int pa to usporediti jer postoje mogućnosti računa poput 0.00005; probala sam usporediti u if-u double i float, ali malo radi pa malo ne radi. ) |
Nula je nula. Probaj na jednostavnom primjeru:
Kod: | #include<stdio.h>
int main(void) {
double x;
scanf("%lf", &x);
printf("%s nula\n", (x == 0 ? "Je" : "Nije"));
return 0;
} |
Dakle, ucitas double x. Ako je x == 0 prekines ucitavanje tok prodavaca; ako nije, doalociras niz i pridruziz vrijednost varijable x novom elementu.
_________________ 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.
Zadnja promjena: vsego; 23:14 uto, 25. 4. 2017; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
krilo Forumaš(ica)
Pridružen/a: 01. 11. 2016. (14:45:48) Postovi: (4E)16
Spol:
|
Postano: 19:30 uto, 25. 4. 2017 Naslov: |
|
|
[quote="vsego"]Imam dojam da brkas "deklarirati" (najaviti compileru da ces koristiti adresu nekog tipa i s nekim imenom) i "inicijalizirati" (zadati varijabli pocetnu vrijednost).[/quote]
Imaš dobar dojam. :facepalm:
Ne znam kako sam previdjela spomenute napomene, hvala na uputi.
[quote="vsego"]Dakle, ucitas [tt]double x[/tt]. Ako je [tt]x == 0[/tt] prekines ucitavanje tok prodavaca; ako nije, doalociras niz i pridruziz vrijednost varijable [tt]x[/tt] novom elementu.[/quote]
Upravo sam i to radila 'till it hit me da je problem u [tt]scanf[/tt]-u, tj. slovima [tt]%g[/tt], [tt]%f[/tt] i [tt]%lf[/tt]... Stajao mi je tamo [tt]%g[/tt] koji očito ne valja.
Što dalje idem, to više kužim da ne kužim elementarno. :nuts2:
:thankyou:
vsego (napisa): | Imam dojam da brkas "deklarirati" (najaviti compileru da ces koristiti adresu nekog tipa i s nekim imenom) i "inicijalizirati" (zadati varijabli pocetnu vrijednost). |
Imaš dobar dojam.
Ne znam kako sam previdjela spomenute napomene, hvala na uputi.
vsego (napisa): | Dakle, ucitas double x. Ako je x == 0 prekines ucitavanje tok prodavaca; ako nije, doalociras niz i pridruziz vrijednost varijable x novom elementu. |
Upravo sam i to radila 'till it hit me da je problem u scanf-u, tj. slovima %g, %f i %lf... Stajao mi je tamo %g koji očito ne valja.
Što dalje idem, to više kužim da ne kužim elementarno.
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
|