Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
frutabella Forumaš(ica)
Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
Postano: 23:24 uto, 11. 6. 2013 Naslov: |
|
|
Napisite funkciju drzava procitaj(FILE* niz, unsigned i); koja ce vratiti i-tu strukturu iz niza zapisanog u binarnoj datoteci otvorenoj preko pokazivaca
niz. Brojanje struktura pocinje od 0.
Malo me zbunjuje ovo s vracanjem strukture.
Naime, znam kako ispisati i-tu strukturu:
[code:1]
typedef struct _drzava{
char ime[21];
unsigned brojStan;
double povrsina;
}drzava;
drzava drzave[3]={
"Esp", 1000, 12345,
"Gre", 2000, 54321,
"Ita", 3000, 67890,
};
void procitaj(FILE* niz, unsigned i)
{
int broj=0;
drzava drz;
while(fread(&drz, sizeof(drzava), 1, niz)==1)
{
if(broj==i)
printf("zapis %2d. strukture: %20s, %6u, %8.2f\n", broj,
drz.ime, drz.brojStan, drz.povrsina);
++broj;
}
}
int main (void)
{
FILE *in; unsigned i;
kreiraj("drzavice.txt");
ispisi("drzavice.txt");
if((in=fopen("drzavice.txt", "rb"))==NULL)
{
printf("Greska.\n");
exit(2);
}
printf("\nIspisi strukturu: \n");
procitaj(in, 2);
return 0;
}
[/code:1]
Jel ovo ok rjesenje?
[code:1]
drzava procitaj(FILE* niz, unsigned i)
{
return drzave[i];
}
int main (void)
{
FILE *in;
drzava drz;
kreiraj("drzavice.txt");
ispisi("drzavice.txt");
if((in=fopen("drzavice.txt", "rb"))==NULL)
{
printf("Greska.\n");
exit(2);
}
printf("\nIspisi strukturu: \n");
drz=procitaj(in, 2);
printf(" %s, %u, %lf", drz.ime, drz.brojStan, drz.povrsina );
return 0;
}
[/code:1]
Napisite funkciju drzava procitaj(FILE* niz, unsigned i); koja ce vratiti i-tu strukturu iz niza zapisanog u binarnoj datoteci otvorenoj preko pokazivaca
niz. Brojanje struktura pocinje od 0.
Malo me zbunjuje ovo s vracanjem strukture.
Naime, znam kako ispisati i-tu strukturu:
Kod: |
typedef struct _drzava{
char ime[21];
unsigned brojStan;
double povrsina;
}drzava;
drzava drzave[3]={
"Esp", 1000, 12345,
"Gre", 2000, 54321,
"Ita", 3000, 67890,
};
void procitaj(FILE* niz, unsigned i)
{
int broj=0;
drzava drz;
while(fread(&drz, sizeof(drzava), 1, niz)==1)
{
if(broj==i)
printf("zapis %2d. strukture: %20s, %6u, %8.2f\n", broj,
drz.ime, drz.brojStan, drz.povrsina);
++broj;
}
}
int main (void)
{
FILE *in; unsigned i;
kreiraj("drzavice.txt");
ispisi("drzavice.txt");
if((in=fopen("drzavice.txt", "rb"))==NULL)
{
printf("Greska.\n");
exit(2);
}
printf("\nIspisi strukturu: \n");
procitaj(in, 2);
return 0;
}
|
Jel ovo ok rjesenje?
Kod: |
drzava procitaj(FILE* niz, unsigned i)
{
return drzave[i];
}
int main (void)
{
FILE *in;
drzava drz;
kreiraj("drzavice.txt");
ispisi("drzavice.txt");
if((in=fopen("drzavice.txt", "rb"))==NULL)
{
printf("Greska.\n");
exit(2);
}
printf("\nIspisi strukturu: \n");
drz=procitaj(in, 2);
printf(" %s, %u, %lf", drz.ime, drz.brojStan, drz.povrsina );
return 0;
}
|
|
|
[Vrh] |
|
Leolinus Forumaš(ica)
Pridružen/a: 30. 11. 2012. (16:36:41) Postovi: (10)16
|
Postano: 23:36 uto, 11. 6. 2013 Naslov: |
|
|
[quote="frutabella"]Napisite funkciju drzava procitaj(FILE* niz, unsigned i); koja ce vratiti i-tu strukturu iz niza zapisanog u binarnoj datoteci otvorenoj preko pokazivaca
niz. Brojanje struktura pocinje od 0.
Malo me zbunjuje ovo s vracanjem strukture.
Naime, znam kako ispisati i-tu strukturu:
[/quote]
Postoji jedna dobra funkcija koju možeš
koristiti kada ti je u datoteci sve
binarno strukturirano.
Ako brojanje strukutra počinje od 0, onda se
direktno pozicioniraš na sljedeći način:
[code:1]fseek(in, i*sizeof(drzava),SEEK_SET); // "in" je FILE*
fread(&drz, sizeof(drzava), 1, in)//možeš provjeriti je li se pročitalo
return drz; // ovo je cijeli kod tvoje funkcije pročitaj()[/code:1]
Ovo kaže, pomakni mi se u datoteci in za "i"
bajtova veličine strukutre država, što znači
da će ti se pozicionirati ako želiš i-tu
strukturu pročitati ispred i-te strukutre, i samo
onda trebaš fread pozvati i pročitati strukturu
kao i inače. Naravno, ako ćeš ponovo nešto
raditi s datotekom pozicioniraj se ponovo na
početak.
Ako želiš samo modificirati svoje rješenje umjesto
ispisa samo napišeš return drz; i to će ti vratiti
i-tu strukturu.
frutabella (napisa): | Napisite funkciju drzava procitaj(FILE* niz, unsigned i); koja ce vratiti i-tu strukturu iz niza zapisanog u binarnoj datoteci otvorenoj preko pokazivaca
niz. Brojanje struktura pocinje od 0.
Malo me zbunjuje ovo s vracanjem strukture.
Naime, znam kako ispisati i-tu strukturu:
|
Postoji jedna dobra funkcija koju možeš
koristiti kada ti je u datoteci sve
binarno strukturirano.
Ako brojanje strukutra počinje od 0, onda se
direktno pozicioniraš na sljedeći način:
Kod: | fseek(in, i*sizeof(drzava),SEEK_SET); // "in" je FILE*
fread(&drz, sizeof(drzava), 1, in)//možeš provjeriti je li se pročitalo
return drz; // ovo je cijeli kod tvoje funkcije pročitaj() |
Ovo kaže, pomakni mi se u datoteci in za "i"
bajtova veličine strukutre država, što znači
da će ti se pozicionirati ako želiš i-tu
strukturu pročitati ispred i-te strukutre, i samo
onda trebaš fread pozvati i pročitati strukturu
kao i inače. Naravno, ako ćeš ponovo nešto
raditi s datotekom pozicioniraj se ponovo na
početak.
Ako želiš samo modificirati svoje rješenje umjesto
ispisa samo napišeš return drz; i to će ti vratiti
i-tu strukturu.
|
|
[Vrh] |
|
frutabella Forumaš(ica)
Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
Postano: 0:37 sri, 12. 6. 2013 Naslov: |
|
|
E sad me nesto zbunjuje u vezi tog pozicioniranja:
znaci, ako sam se sa fseek pozicionirala na i-to mjesto, zar onda sljedeci fread ne cita i+1 strukturu u nizu?
Naime, na predavanju je rađena funkcija "dodaj_bonus" koja dodaje bonus na racun n-tog korisnika koji ima stanje na racunu vece od 0.
[code:1]
void dodaj_bonus(const char *f_name, int n)
{
FILE *racuni;
Racun kor;
long file_pos;
const double bonus = 100.0;
if ((racuni = fopen(f_name, "r+b")) == NULL) {
fprintf(stderr, "Ne mogu otvoriti: %s!\n",
f_name);
exit(1);
}
/* Pozicioniranje ispred n-tog zapisa. */
file_pos = (long) ((n - 1) * size);
if (fseek(racuni, file_pos, SEEK_SET)) {
fprintf(stderr,
"Greska u fseek, n = %d.\n", n);
printf("Greska u fseek, n = %d.\n", n);
fclose(racuni);
return; /* Necu exit, za demo! */
}
if (fread(&kor, size, 1, racuni) != 1)
if (ferror(racuni)) {
fprintf(stderr, "Greska u citanju.\n");
exit(2);
}
else if (feof(racuni)) {
fprintf(stderr,
"Kraj datoteke, n = %d.\n", n);
printf("Kraj datoteke, n = %d.\n", n);
fclose(racuni);
return; /* Necu exit, za demo! */
}
if (kor.stanje > 0) {
kor.stanje = kor.stanje + bonus;
fseek(racuni, -size, SEEK_CUR);
if (fwrite(&kor, size, 1, racuni) != 1) {
fprintf(stderr, "Greska u pisanju.\n");
exit(3);
}
}
fclose(racuni);
return;
}
[/code:1]
Buduci da se je pozicionirao prvo na n-1 poziciju u nizu, zakljucila sam da sa sljedecim fread-om procita upravo n-ti zapis.
Onda se opet sa fseek vrati na n-1 poziciju,
tako da onda sa fwrite pise u n-tu poziciju.
U cemu je sad razlika?
(sigurno ima veze s tim da li smo krenuli od nule ili ne, ali ne mogu si razjasniti stvar, cini mi se da i na predavanjima idemo od 0, zar ne?)
[size=9][color=#999999]Added after 8 minutes:[/color][/size]
Sad sam rijesila ovaj pod d) dio zadatka:
Napisite funkciju void zapisi(FILE* niz, unsigned i, drzava X);
koja ce zapisati strukturu X na i-to mjesto u nizu zapisanom u binarnoj datoteci otvorenoj preko pokazivaca niz.
[code:1]
void zapisi(FILE* niz, unsigned i, drzava X)
{
drzava drz;
long file_pos;
file_pos=(long)((i)*sizeof(drzava));
if(fseek(niz, file_pos, SEEK_SET)!=0)
{
printf("Greska u seek.\n");
fclose(niz);
return;
}
if(fread(&drz, sizeof(drzava), 1, niz)==1)
{
strcpy(drz.ime, X.ime);
drz.brojStan=X.brojStan;
drz.povrsina=X.povrsina;
fseek(niz, -sizeof(drzava), SEEK_CUR);
if(fwrite(&drz, sizeof(drzava), 1, niz)!=1)
{
printf("Greska u pisanju.\n");
}
}
fclose(niz);
return;
}
[/code:1]
I radi onako kako si rekao/rekla tek kad pozicioniram na i-to mjesto.
Prvi put sam pozicionirala na i-1 mjesto i ispisivalo je drukcije.
E sad me nesto zbunjuje u vezi tog pozicioniranja:
znaci, ako sam se sa fseek pozicionirala na i-to mjesto, zar onda sljedeci fread ne cita i+1 strukturu u nizu?
Naime, na predavanju je rađena funkcija "dodaj_bonus" koja dodaje bonus na racun n-tog korisnika koji ima stanje na racunu vece od 0.
Kod: |
void dodaj_bonus(const char *f_name, int n)
{
FILE *racuni;
Racun kor;
long file_pos;
const double bonus = 100.0;
if ((racuni = fopen(f_name, "r+b")) == NULL) {
fprintf(stderr, "Ne mogu otvoriti: %s!\n",
f_name);
exit(1);
}
/* Pozicioniranje ispred n-tog zapisa. */
file_pos = (long) ((n - 1) * size);
if (fseek(racuni, file_pos, SEEK_SET)) {
fprintf(stderr,
"Greska u fseek, n = %d.\n", n);
printf("Greska u fseek, n = %d.\n", n);
fclose(racuni);
return; /* Necu exit, za demo! */
}
if (fread(&kor, size, 1, racuni) != 1)
if (ferror(racuni)) {
fprintf(stderr, "Greska u citanju.\n");
exit(2);
}
else if (feof(racuni)) {
fprintf(stderr,
"Kraj datoteke, n = %d.\n", n);
printf("Kraj datoteke, n = %d.\n", n);
fclose(racuni);
return; /* Necu exit, za demo! */
}
if (kor.stanje > 0) {
kor.stanje = kor.stanje + bonus;
fseek(racuni, -size, SEEK_CUR);
if (fwrite(&kor, size, 1, racuni) != 1) {
fprintf(stderr, "Greska u pisanju.\n");
exit(3);
}
}
fclose(racuni);
return;
}
|
Buduci da se je pozicionirao prvo na n-1 poziciju u nizu, zakljucila sam da sa sljedecim fread-om procita upravo n-ti zapis.
Onda se opet sa fseek vrati na n-1 poziciju,
tako da onda sa fwrite pise u n-tu poziciju.
U cemu je sad razlika?
(sigurno ima veze s tim da li smo krenuli od nule ili ne, ali ne mogu si razjasniti stvar, cini mi se da i na predavanjima idemo od 0, zar ne?)
Added after 8 minutes:
Sad sam rijesila ovaj pod d) dio zadatka:
Napisite funkciju void zapisi(FILE* niz, unsigned i, drzava X);
koja ce zapisati strukturu X na i-to mjesto u nizu zapisanom u binarnoj datoteci otvorenoj preko pokazivaca niz.
Kod: |
void zapisi(FILE* niz, unsigned i, drzava X)
{
drzava drz;
long file_pos;
file_pos=(long)((i)*sizeof(drzava));
if(fseek(niz, file_pos, SEEK_SET)!=0)
{
printf("Greska u seek.\n");
fclose(niz);
return;
}
if(fread(&drz, sizeof(drzava), 1, niz)==1)
{
strcpy(drz.ime, X.ime);
drz.brojStan=X.brojStan;
drz.povrsina=X.povrsina;
fseek(niz, -sizeof(drzava), SEEK_CUR);
if(fwrite(&drz, sizeof(drzava), 1, niz)!=1)
{
printf("Greska u pisanju.\n");
}
}
fclose(niz);
return;
}
|
I radi onako kako si rekao/rekla tek kad pozicioniram na i-to mjesto.
Prvi put sam pozicionirala na i-1 mjesto i ispisivalo je drukcije.
|
|
[Vrh] |
|
dodgin_lions Forumaš(ica)
Pridružen/a: 24. 07. 2012. (14:49:47) Postovi: (22)16
Spol:
|
Postano: 17:38 sri, 12. 6. 2013 Naslov: |
|
|
[quote="vsego"]Pisem napamet, pa mozda ima gres(a)ka...
[code:1]char **greska(const char *poruka, char **mat, int i, int *n) {
while (i--) free(mat[i]);
free(mat);
*n = 0;
printf("Greska: %s.\n", poruka);
return NULL;
}
char **ucitaj(int *n) {
int i, j;
char **mat, s[92];
scanf("%d", n);
mat = (char**)malloc(n * sizeof(char *));
for (i = 0; i < *n; i++) {
scanf("%91[^\n]", s); /* dozvoljavam rijeci do 91 znaka, zato da detektiram predugacke rijeci i kad je n == 90 */
if (strlen(s) <> *n)
return greska("Rijec krive duljine", mat, i, n);
for (j = 0; s[j]; j++) /* umjesto s[j] moze ici i j < n, ali ovo bi trebalo biti neznatno brze */
if (s[i] < 'A' || s[i] > 'Z')
return greska("Rijec sadrzi nedozvoljeni znak", mat, i, n);
mat[i] = (char*)malloc(n * sizeof(char));
for (j = 0; s[j]; j++) mat[i][j] = s[j]; /* ne koristim strcpy() jer on kopira i zavrsni '\0', a to ne zelimo */
}
return mat;
}[/code:1]
Ako te funkcija [tt]greska()[/tt] zbunjuje, napravi bez nje (samo moras dva puta pisati isti kod).[/quote]
I mene sad zanima je li ovdje dopušteno korištenje pomoćnog polja s[92].
vsego (napisa): | Pisem napamet, pa mozda ima gres(a)ka...
Kod: | char **greska(const char *poruka, char **mat, int i, int *n) {
while (i--) free(mat[i]);
free(mat);
*n = 0;
printf("Greska: %s.\n", poruka);
return NULL;
}
char **ucitaj(int *n) {
int i, j;
char **mat, s[92];
scanf("%d", n);
mat = (char**)malloc(n * sizeof(char *));
for (i = 0; i < *n; i++) {
scanf("%91[^\n]", s); /* dozvoljavam rijeci do 91 znaka, zato da detektiram predugacke rijeci i kad je n == 90 */
if (strlen(s) <> *n)
return greska("Rijec krive duljine", mat, i, n);
for (j = 0; s[j]; j++) /* umjesto s[j] moze ici i j < n, ali ovo bi trebalo biti neznatno brze */
if (s[i] < 'A' || s[i] > 'Z')
return greska("Rijec sadrzi nedozvoljeni znak", mat, i, n);
mat[i] = (char*)malloc(n * sizeof(char));
for (j = 0; s[j]; j++) mat[i][j] = s[j]; /* ne koristim strcpy() jer on kopira i zavrsni '\0', a to ne zelimo */
}
return mat;
} |
Ako te funkcija greska() zbunjuje, napravi bez nje (samo moras dva puta pisati isti kod). |
I mene sad zanima je li ovdje dopušteno korištenje pomoćnog polja s[92].
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
dodgin_lions Forumaš(ica)
Pridružen/a: 24. 07. 2012. (14:49:47) Postovi: (22)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 20:40 sri, 12. 6. 2013 Naslov: |
|
|
Da ucis programiranje koliko se igras odvjetnika, polaganje kolegija ti ne bi bilo nikakav problem. Da citiram dvije recenice iz texta zadatka (iz posta na koji sam odgovarao):
[quote="Zadatak"]1. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
2. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije koliko je potrebno za drzanje n x n matrice charova.[/quote]
Iz druge recenice zakljucujem da se trazi [tt]char**[/tt] (ili, alternativno, [tt]char*[/tt], no nista sto bi u sebi imalo 90, 91 ili tako neku fixnu vrijednost). U prvoj recenici imam ogranicenje na duljinu stringa, no cemu to sluzi ako smo zakljucili da ne sluzi za deklaraciju matrice?
Dodatno, kako ucitati string ako ne u neki niz znakova (sto se i inace koristi u kolegiju da se olaksa ucitavanje stringova)?
Posto razumijem gradivo, meni je to dovoljno da zakljucim da smijem napraviti sto sam napravio. Kome nije jasno, ponavljam, pitajte dezurnog, ali okanite navlacenja maka na konac natjeravanjem pravnickih izricaja.
Da ucis programiranje koliko se igras odvjetnika, polaganje kolegija ti ne bi bilo nikakav problem. Da citiram dvije recenice iz texta zadatka (iz posta na koji sam odgovarao):
Zadatak (napisa): | 1. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
2. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije koliko je potrebno za drzanje n x n matrice charova. |
Iz druge recenice zakljucujem da se trazi char** (ili, alternativno, char*, no nista sto bi u sebi imalo 90, 91 ili tako neku fixnu vrijednost). U prvoj recenici imam ogranicenje na duljinu stringa, no cemu to sluzi ako smo zakljucili da ne sluzi za deklaraciju matrice?
Dodatno, kako ucitati string ako ne u neki niz znakova (sto se i inace koristi u kolegiju da se olaksa ucitavanje stringova)?
Posto razumijem gradivo, meni je to dovoljno da zakljucim da smijem napraviti sto sam napravio. Kome nije jasno, ponavljam, pitajte dezurnog, ali okanite navlacenja maka na konac natjeravanjem pravnickih izricaja.
_________________ 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] |
|
Leolinus Forumaš(ica)
Pridružen/a: 30. 11. 2012. (16:36:41) Postovi: (10)16
|
Postano: 22:29 sri, 12. 6. 2013 Naslov: |
|
|
[quote="vsego"]Da ucis programiranje koliko se igras odvjetnika, polaganje kolegija ti ne bi bilo nikakav problem. Da citiram dvije recenice iz texta zadatka (iz posta na koji sam odgovarao):
[quote="Zadatak"]1. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
2. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije koliko je potrebno za drzanje n x n matrice charova.[/quote]
Iz druge recenice zakljucujem da se trazi [tt]char**[/tt] (ili, alternativno, [tt]char*[/tt], no nista sto bi u sebi imalo 90, 91 ili tako neku fixnu vrijednost). U prvoj recenici imam ogranicenje na duljinu stringa, no cemu to sluzi ako smo zakljucili da ne sluzi za deklaraciju matrice?
Dodatno, kako ucitati string ako ne u neki niz znakova (sto se i inace koristi u kolegiju da se olaksa ucitavanje stringova)?
Posto razumijem gradivo, meni je to dovoljno da zakljucim da smijem napraviti sto sam napravio. Kome nije jasno, ponavljam, pitajte dezurnog, ali okanite navlacenja maka na konac natjeravanjem pravnickih izricaja.[/quote]
Mislim, kakvo je ovo ponašanje od akademske osobe? Kako ti uopće možeš
iz jednog posta zaključiti koliko netko uči programiranje?
Pitao sam isto pitanje na prošloj stranici jer mi nije bilo jasno koja je
svrha statičko deklariranje unutar funkcija, a u isto vrijeme su
zabranjena korištenja pomoćnih polja. Pitao sam bi li malloc bio ispravan
za razliku od trenutne implementacije.
Gradivo očito kaže da tako definirano polje odlazi i zauzima memoriju u
data dijelu(uvijek se nalazi na istome mjestu, a i predviđanje što se
događa tamo je nemoguće, za razliku od dinamičke alokacije), a ne na
heap-u(priložio sam i testni programčić). Ako je zabrana korištenja
pomoćnih polja iz nekih rozojednorogih razloga, a onda se ispričavam na
primjedbi.
Nitko se ovdje ne igra odvjetnika, također, nitko ovdje ne želi slavno
isticati da je tvoje rješenje pogrešno(pogotovo zato jer odgovaraš
ljudima na pitanja i nepotrebno je uopće potkopavati tvoj trud takvim
glupostima), pitaju se ozbiljna pitanja jer asistenti znaju uzeti sve
bodove jer takve stvari smatraju kardinalnom greškom ili oduzmu dovoljno
bodova da se ni ne približi 80% kriteriju, a zadatak je algoritamski
točno riješen i radi.
Naravno da je zdravo razumski za takve stvari koristiti statičko alocirana
polja, kao što je zdravo razumski i za matrice koje mogu biti 90*90
napraviti obični #define granica i prenositi broj redaka i stupaca kroz
program.
vsego (napisa): | Da ucis programiranje koliko se igras odvjetnika, polaganje kolegija ti ne bi bilo nikakav problem. Da citiram dvije recenice iz texta zadatka (iz posta na koji sam odgovarao):
Zadatak (napisa): | 1. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
2. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije koliko je potrebno za drzanje n x n matrice charova. |
Iz druge recenice zakljucujem da se trazi char** (ili, alternativno, char*, no nista sto bi u sebi imalo 90, 91 ili tako neku fixnu vrijednost). U prvoj recenici imam ogranicenje na duljinu stringa, no cemu to sluzi ako smo zakljucili da ne sluzi za deklaraciju matrice?
Dodatno, kako ucitati string ako ne u neki niz znakova (sto se i inace koristi u kolegiju da se olaksa ucitavanje stringova)?
Posto razumijem gradivo, meni je to dovoljno da zakljucim da smijem napraviti sto sam napravio. Kome nije jasno, ponavljam, pitajte dezurnog, ali okanite navlacenja maka na konac natjeravanjem pravnickih izricaja. |
Mislim, kakvo je ovo ponašanje od akademske osobe? Kako ti uopće možeš
iz jednog posta zaključiti koliko netko uči programiranje?
Pitao sam isto pitanje na prošloj stranici jer mi nije bilo jasno koja je
svrha statičko deklariranje unutar funkcija, a u isto vrijeme su
zabranjena korištenja pomoćnih polja. Pitao sam bi li malloc bio ispravan
za razliku od trenutne implementacije.
Gradivo očito kaže da tako definirano polje odlazi i zauzima memoriju u
data dijelu(uvijek se nalazi na istome mjestu, a i predviđanje što se
događa tamo je nemoguće, za razliku od dinamičke alokacije), a ne na
heap-u(priložio sam i testni programčić). Ako je zabrana korištenja
pomoćnih polja iz nekih rozojednorogih razloga, a onda se ispričavam na
primjedbi.
Nitko se ovdje ne igra odvjetnika, također, nitko ovdje ne želi slavno
isticati da je tvoje rješenje pogrešno(pogotovo zato jer odgovaraš
ljudima na pitanja i nepotrebno je uopće potkopavati tvoj trud takvim
glupostima), pitaju se ozbiljna pitanja jer asistenti znaju uzeti sve
bodove jer takve stvari smatraju kardinalnom greškom ili oduzmu dovoljno
bodova da se ni ne približi 80% kriteriju, a zadatak je algoritamski
točno riješen i radi.
Naravno da je zdravo razumski za takve stvari koristiti statičko alocirana
polja, kao što je zdravo razumski i za matrice koje mogu biti 90*90
napraviti obični #define granica i prenositi broj redaka i stupaca kroz
program.
|
|
[Vrh] |
|
|