Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Pomoc oko zadatka
WWW:
Idite na Prethodno  1, 2, 3, 4, 5, 6, 7  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 22:03 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

Ja bih rekao da nije dobro, ali ispisi listu nakon ucitavanja, pa ces saznati. Velik dio programiranja je isprobavanje vlastitih programa.
Ja bih rekao da nije dobro, ali ispisi listu nakon ucitavanja, pa ces saznati. Velik dio programiranja je isprobavanje vlastitih programa.



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 22:26 čet, 23. 5. 2013    Naslov: Citirajte i odgovorite

Evo, mislim da je sad ok. Zaboravila sam ---> prvi=temp

[code:1]
#include<stdio.h>


typedef struct _razlomak* lista;

typedef struct _razlomak{

int brojnik;
int nazivnik;
lista next;

}razlomak;

void ispisi_listu (lista prvi)
{
lista pom;
int brojac=0;

for(pom=prvi; pom!=NULL; pom=pom->next)
{
printf("%d. element liste = %d/%d\n", ++brojac, pom->brojnik, pom->nazivnik);
}
return;
}

lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
{
novi->next=prvi;
prvi=novi;

return prvi;
}

int main (void)
{
lista prvi=NULL;
lista novi, temp, pom, pom2;


while(1){
novi=(lista)malloc(sizeof(razlomak));
printf("Brojnik: ");
scanf("%d", &novi->brojnik);

printf("Nazivnik: ");
scanf("%d", &novi->nazivnik);
if(novi->nazivnik==0) break;

temp=ubaci_razlomak_na_pocetak(prvi, novi);

prvi=temp;

printf("Brojnik/Nazivnik: %d/%d\n\n", temp->brojnik, temp->nazivnik);
}

ispisi_listu(temp);

for(pom=prvi; pom!=NULL; pom=pom2){
pom2=pom->next;
free(pom);
}


return 0;
}
[/code:1][/code]
Evo, mislim da je sad ok. Zaboravila sam → prvi=temp

Kod:

#include<stdio.h>


typedef struct _razlomak* lista;

typedef struct _razlomak{

     int brojnik;
     int nazivnik;
     lista next;

}razlomak;

   void ispisi_listu (lista prvi)
   {
       lista pom;
       int brojac=0;

       for(pom=prvi; pom!=NULL; pom=pom->next)
       {
           printf("%d. element liste = %d/%d\n", ++brojac, pom->brojnik, pom->nazivnik);
       }
       return;
   }

  lista ubaci_razlomak_na_pocetak(lista prvi, lista novi)
  {
     novi->next=prvi;
     prvi=novi;

     return prvi;
  }

  int main (void)
  {
     lista prvi=NULL;
     lista novi, temp, pom, pom2;


     while(1){
         novi=(lista)malloc(sizeof(razlomak));
         printf("Brojnik: ");
         scanf("%d", &novi->brojnik);

         printf("Nazivnik: ");
         scanf("%d", &novi->nazivnik);
         if(novi->nazivnik==0) break;

         temp=ubaci_razlomak_na_pocetak(prvi, novi);

         prvi=temp;

         printf("Brojnik/Nazivnik: %d/%d\n\n", temp->brojnik, temp->nazivnik);
     }

       ispisi_listu(temp);

         for(pom=prvi; pom!=NULL; pom=pom2){
            pom2=pom->next;
            free(pom);
         }


     return 0;
  }
[/code]


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 18:51 uto, 28. 5. 2013    Naslov: Citirajte i odgovorite

Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


[code:1]
#include<stdio.h>

double trag(FILE *in)
{

int n, i, j;
double x, tr=0.0;

fscanf(in, "%d", &n);

for(i=0; i<n; ++i)
for(j=0; j<n; ++j){
fscanf(in, "%lf", &x);

if(i==j) tr+=x;
}
return tr;
}


int main (void){

FILE *in;

if ((in=fopen("matrica.txt", "rt"))== NULL)
{ printf("Greska prilikom ptrvaranja datoteke.\n");
exit(1);
}

printf("Trag je %lg.\n", trag(in));

return 0;


}
[/code:1]
Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


Kod:

#include<stdio.h>

   double trag(FILE *in)
   {

        int n, i, j;
        double x, tr=0.0;

        fscanf(in, "%d", &n);

        for(i=0; i<n; ++i)
          for(j=0; j<n; ++j){
             fscanf(in, "%lf", &x);

             if(i==j) tr+=x;
       }
     return tr;
   }


   int main (void){

     FILE *in;

     if ((in=fopen("matrica.txt", "rt"))== NULL)
    {  printf("Greska prilikom ptrvaranja datoteke.\n");
        exit(1);
    }

   printf("Trag je %lg.\n", trag(in));

    return 0;


   }


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Shirohige
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 16. 11. 2012. (20:19:56)
Postovi: (ED)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
12 = 15 - 3

PostPostano: 20:11 uto, 28. 5. 2013    Naslov: Citirajte i odgovorite

[quote="frutabella"]Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


[code:1]
...
[/code:1][/quote]

Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.
frutabella (napisa):
Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


Kod:

...


Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 21:39 uto, 28. 5. 2013    Naslov: Citirajte i odgovorite

[quote="Shirohige"][quote="frutabella"]Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


[code:1]
...
[/code:1][/quote]

Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.[/quote]

Nisu bili u istom folder. Hvala puno!
Shirohige (napisa):
frutabella (napisa):
Dilema:
Kad zelim isprobati neki program s datotekama, npr, izracunati trag u vec napisanoj datoteci, napisem u notepadu sve sto treba za tu matricu i nazovem tu tekstulanu datoteku matrica.
Ako je to tako, zasto mi ovaj program onda ne radi?


Kod:

...


Meni radi, nisi stavila očito datoteku u isti folder gdje ti je program, a i nedostaje ti stdlib.h zbog exit-a.


Nisu bili u istom folder. Hvala puno!


[Vrh]
Korisnički profil Pošaljite privatnu poruku
nuclear
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 22:52 čet, 30. 5. 2013    Naslov: Citirajte i odgovorite

ja više ne znam što da radim...napisala sam zadaću u svim mogućim oblicima, načinima i sve živo probala i pitala i opet mi ne prihvaća zadaću..ako ima ko volje ovako kasno (da znam da je dan prije ispita) da mi kaže u čemu je problem:

1.problem:
Napišite program koji učitava prirodni broj n ≤ 17 i niz od 2n−1 cijelih brojeva. Program treba kreirati gornjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze po redu u prvom retku i zadnjem stupcu, a za elemente gornjeg trokuta vrijedi:
Mi,j=(2M(i−1,j) −2M(i,j+1)) mod 10287612,
gdje mod označava nenegativni ostatak pri dijeljenju lijevog broja s desnim.
Program treba ispisati elemente glavne dijagonale matrice M (ispisane brojeve odvojite razmakom).

prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..
Moj kod:

[code:1]#include <stdio.h>

int main(){

int n, i, j, br;
int mat[20][20];
scanf("%d", &n);

for(i=0; i<n; i++)
scanf("%d", &mat[i][i]);

for(i=1; i<n; i++)
for(j=0; j<i; j++){
br=5*mat[i-1][j]-5*mat[i][j+1];
if(br<0) br=br*(-1);
br=br%10453729;
mat[i][j]=br;
}

for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
mat[i][j]==0;


for(j=0; j<n; j++)
printf("%d ", mat[n-1][j]);

return 0;}[/code:1]

2.problem:
Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.
Moj kod:

[code:1]#include <stdio.h>
#include <stdlib.h>

void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){

int i = odakle;

while(string[i] == ' ') i += 1;
*pocetak = i;
if(string[*pocetak] == '\0') return;

while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
*kraj = i;
}

void invertiraj(char* string, int pocetak, int kraj){

while(pocetak < kraj){
char tmp = string[pocetak];
string[pocetak] = string[kraj];
string[kraj] = tmp;
kraj -= 1;
pocetak += 1;}
}

void obrisi(char* string, int pocetak, int kraj){
int i = pocetak, j = kraj + 1;
while(string[j] != '\0'){
string[i] = string[j];
i += 1;
j += 1;}
string[i] = string[j];
}

int main(){

char linija[16700];
int pocetak, kraj;
int index_rijeci;

scanf("%[^\n]", linija);

sljedeca_rijec(linija, 0, &pocetak, &kraj);
index_rijeci = 1;

while(linija[pocetak] != '\0'){
if(index_rijeci % 7 == 0) {
obrisi(linija, pocetak, kraj);
sljedeca_rijec(linija, pocetak, &pocetak, &kraj);}
else {
invertiraj(linija, pocetak, kraj);
sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);}
index_rijeci += 1;}

puts(linija);

return 0;}[/code:1]linija
ja više ne znam što da radim...napisala sam zadaću u svim mogućim oblicima, načinima i sve živo probala i pitala i opet mi ne prihvaća zadaću..ako ima ko volje ovako kasno (da znam da je dan prije ispita) da mi kaže u čemu je problem:

1.problem:
Napišite program koji učitava prirodni broj n ≤ 17 i niz od 2n−1 cijelih brojeva. Program treba kreirati gornjetrokutastu matricu M reda n kojoj se učitani brojevi nalaze po redu u prvom retku i zadnjem stupcu, a za elemente gornjeg trokuta vrijedi:
Mi,j=(2M(i−1,j) −2M(i,j+1)) mod 10287612,
gdje mod označava nenegativni ostatak pri dijeljenju lijevog broja s desnim.
Program treba ispisati elemente glavne dijagonale matrice M (ispisane brojeve odvojite razmakom).

prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..
Moj kod:

Kod:
#include <stdio.h>

int main(){

int n, i, j, br;
int mat[20][20];
scanf("%d", &n);

for(i=0; i<n; i++)
    scanf("%d", &mat[i][i]);

for(i=1; i<n; i++)
for(j=0; j<i; j++){
    br=5*mat[i-1][j]-5*mat[i][j+1];
    if(br<0) br=br*(-1);
    br=br%10453729;
    mat[i][j]=br;
}

for(i=0; i<n; i++)
for(j=i+1; j<n; j++)
    mat[i][j]==0;


for(j=0; j<n; j++)
    printf("%d ", mat[n-1][j]);

return 0;}


2.problem:
Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.
Moj kod:

Kod:
#include <stdio.h>
#include <stdlib.h>

void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){

int i = odakle;

while(string[i] == ' ') i += 1;
*pocetak = i;
if(string[*pocetak] == '\0') return;

while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
   *kraj = i;
}

void invertiraj(char* string, int pocetak, int kraj){

while(pocetak < kraj){
   char tmp = string[pocetak];
   string[pocetak] = string[kraj];
   string[kraj] = tmp;
   kraj -= 1;
   pocetak += 1;}
}

void obrisi(char* string, int pocetak, int kraj){
   int i = pocetak, j = kraj + 1;
   while(string[j] != '\0'){
      string[i] = string[j];
      i += 1;
      j += 1;}
   string[i] = string[j];
}

int main(){

char linija[16700];
int pocetak, kraj;
int index_rijeci;

scanf("%[^\n]", linija);

sljedeca_rijec(linija, 0, &pocetak, &kraj);
index_rijeci = 1;

while(linija[pocetak] != '\0'){
   if(index_rijeci % 7 == 0) {
      obrisi(linija, pocetak, kraj);
      sljedeca_rijec(linija, pocetak, &pocetak, &kraj);}
                            else {
      invertiraj(linija, pocetak, kraj);
      sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);}
   index_rijeci += 1;}

puts(linija);

return 0;}
linija


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Shirohige
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 16. 11. 2012. (20:19:56)
Postovi: (ED)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
12 = 15 - 3

PostPostano: 23:14 čet, 30. 5. 2013    Naslov: Citirajte i odgovorite

[quote="nuclear"]
prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..[/quote]

[quote="El_Loco"]Kad konstruiras neki element matrice treba ti element iznad i element zdesna. A ti se po matrici seces s lijeva na desno [/quote]

Znaći, dobro je zadatak postavljen, samo je na tebi da skodiraš da ide pravilnim redoslijedom.


[code:1]...
if(br<0) br=br*(-1);
br=br%10453729;
mat[i][j]=br;
....[/code:1]

Možda bolje ovako (EM1 - a je kongruentno s b modulo n ako n | a-b):

[code:1]br=(((-1)*x[i-1][j])-(2*x[i][j+1])) % 10453729;
while(br<0) b += 10453729;
x[i][j]=br;[/code:1]

[quote="nuclear"]
2.problem:
Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.
[/quote]

Pokušaj staviti char linija[16693]
nuclear (napisa):

prvo što sam primijetila da neke elementi će izračunavati preko elemenata koji još ne postoje, pa ne znam onda jel to tako treba biti ili je krivo postavljen zadatak ili sam ja luda pa ne vidim di je definiran taj element..


El_Loco (napisa):
Kad konstruiras neki element matrice treba ti element iznad i element zdesna. A ti se po matrici seces s lijeva na desno


Znaći, dobro je zadatak postavljen, samo je na tebi da skodiraš da ide pravilnim redoslijedom.


Kod:
...
    if(br<0) br=br*(-1);
    br=br%10453729;
    mat[i][j]=br;
....


Možda bolje ovako (EM1 - a je kongruentno s b modulo n ako n | a-b):

Kod:
br=(((-1)*x[i-1][j])-(2*x[i][j+1])) % 10453729;
while(br<0) b +=  10453729;
x[i][j]=br;


nuclear (napisa):

2.problem:
Napišite program koji učitava jednu liniju teksta s najviše 16692 znakova. Tom tekstu treba izbrisati svaku 7. riječ, a ostalima izokrenuti redoslijed slova (same riječi ostaju u originalnom poretku). Tako dobiveni tekst treba ispisati. Možete pretpostaviti da tekst sadrži samo slova i razmake.


Pokušaj staviti char linija[16693]


[Vrh]
Korisnički profil Pošaljite privatnu poruku
nuclear
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 9:28 pet, 31. 5. 2013    Naslov: Citirajte i odgovorite

[quote="Shirohige"]
Možda bolje ovako (EM1 - a je kongruentno s b modulo n ako n | a-b):

[code:1]br=(((-1)*x[i-1][j])-(2*x[i][j+1])) % 10453729;
while(br<0) b += 10453729;
x[i][j]=br;[/code:1]
[/quote]

hvala...sad radi. ali zašto funkcionira za b+=10453729 ako me traži nenegativni ostatak pri dijeljenju, onda bi taj ostatak i trebao biti taj b, a ako je negativan...samo pomnožim s -1 :D al očito ne.zašto?

pardon..shvatila
Shirohige (napisa):

Možda bolje ovako (EM1 - a je kongruentno s b modulo n ako n | a-b):

Kod:
br=(((-1)*x[i-1][j])-(2*x[i][j+1])) % 10453729;
while(br<0) b +=  10453729;
x[i][j]=br;



hvala...sad radi. ali zašto funkcionira za b+=10453729 ako me traži nenegativni ostatak pri dijeljenju, onda bi taj ostatak i trebao biti taj b, a ako je negativan...samo pomnožim s -1 Very Happy al očito ne.zašto?

pardon..shvatila


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 12:44 pet, 31. 5. 2013    Naslov: Citirajte i odgovorite

@nuclear:

Prvi zadatak ti nema veze s textom (vidi formulu). Cini mi se da si zalijepila text od krivog zadatka (onog koji ucitava rub matrice, umjesto onog koji ucitava dijagonalu).

Drugi zadatak: cini mi se da ne radi dobro kad zadnju rijec NE brises i kad nema razmake na kraju. Naime, u tom slucaju, imas [tt]kraj[/tt] koji je index zadnjeg znaka zadnje rijeci i onda pozoves
[tt]sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);[/tt]
No, u samoj funkciji imas ovo:
[code:1]void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
int i = odakle;

while(string[i] == ' ') i += 1;
*pocetak = i;
if(string[*pocetak] == '\0') return;

while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
*kraj = i;
}[/code:1]
Dakle, tvoj [tt]i[/tt] ([tt]odakle[/tt]) krece od znaka [tt]'\0'[/tt] i povecava se dok god je to nesto razlicito od razmaka, sto moze biti tko zna kad/gdje. I onda nadjes neku nepostojecu rijec (i pitanje je sto se dalje desi) ili ti index izleti iz memorije koja pripada programu, pa program padne. Ne pitaj zasto ti doma radi; moze biti puno faktora kad se izlijece iz "dozvoljene" memorije.

Ne znam ima li jos gresaka. Ovo sam nabrzinu pregledao dok vam jos nije poceo kolokvij (bio sam dva dana na nekom workshopu, pa nisam mogao prije).
@nuclear:

Prvi zadatak ti nema veze s textom (vidi formulu). Cini mi se da si zalijepila text od krivog zadatka (onog koji ucitava rub matrice, umjesto onog koji ucitava dijagonalu).

Drugi zadatak: cini mi se da ne radi dobro kad zadnju rijec NE brises i kad nema razmake na kraju. Naime, u tom slucaju, imas kraj koji je index zadnjeg znaka zadnje rijeci i onda pozoves
sljedeca_rijec(linija, kraj + 1, &pocetak, &kraj);
No, u samoj funkciji imas ovo:
Kod:
void sljedeca_rijec(char* string, int odakle, int* pocetak, int* kraj){
  int i = odakle;

  while(string[i] == ' ') i += 1;
  *pocetak = i;
  if(string[*pocetak] == '\0') return;

  while(string[i+1] != ' ' && string[i+1] != '\0') i += 1;
   *kraj = i;
}

Dakle, tvoj i (odakle) krece od znaka '\0' i povecava se dok god je to nesto razlicito od razmaka, sto moze biti tko zna kad/gdje. I onda nadjes neku nepostojecu rijec (i pitanje je sto se dalje desi) ili ti index izleti iz memorije koja pripada programu, pa program padne. Ne pitaj zasto ti doma radi; moze biti puno faktora kad se izlijece iz "dozvoljene" memorije.

Ne znam ima li jos gresaka. Ovo sam nabrzinu pregledao dok vam jos nije poceo kolokvij (bio sam dva dana na nekom workshopu, pa nisam mogao prije).



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
nuclear
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 10:42 pon, 3. 6. 2013    Naslov: Citirajte i odgovorite

Da, popravila sam sad sve greške. Nisam uopće pomislila da bi kretala od desno na lijevo za matricu. I vidim tek sad da sam dala krivi zadatak, al nema veze, fora je ista :D a ovo s riječima, ne znam zašto, al na kraju je prihvatilo....
Da, popravila sam sad sve greške. Nisam uopće pomislila da bi kretala od desno na lijevo za matricu. I vidim tek sad da sam dala krivi zadatak, al nema veze, fora je ista Very Happy a ovo s riječima, ne znam zašto, al na kraju je prihvatilo....


[Vrh]
Korisnički profil Pošaljite privatnu poruku
zvons
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 18. 11. 2012. (16:13:44)
Postovi: (1B)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 15:47 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

Može pomoć oko samo ovog dijela ovog zadatka:

Osmosmjerka je kvadratna matrica slova, u kojoj rijeci mogu biti ispisane u svih 8 smjerova, pocevsi od
bilo kojeg polja. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
 Napisite funkciju ucitaj koja ucitava osmosmjerku reda n, redak po redak, kao n rijeci (svaka duljine n)
odvojenih prelaskom u novi red. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije
koliko je potrebno za drzanje n  n matrice charova. Vrijednost n se vraca preko varijabilnog argumenta. Ako
bilo koji znak u osmosmjerci nije slovo izmedu A i Z, ili nisu svi reci jednake duljine, funkcija mora ispisati poruku
o gresci i vratiti nul-pokazivac (za n treba vratiti 0). Izlaskom iz funkcije mora biti oslobodena sva memorija,
osim (ako nije nastupila greska) one potrebne za povratnu vrijednost.

:twisted: :?: :?:
Može pomoć oko samo ovog dijela ovog zadatka:

Osmosmjerka je kvadratna matrica slova, u kojoj rijeci mogu biti ispisane u svih 8 smjerova, pocevsi od
bilo kojeg polja. Smijete pretpostaviti da je red osmosmjerke izmedu 1 i 90.
 Napisite funkciju ucitaj koja ucitava osmosmjerku reda n, redak po redak, kao n rijeci (svaka duljine n)
odvojenih prelaskom u novi red. Funkcija vraca osmosmjerku, za koju mora alocirati tocno onoliko memorije
koliko je potrebno za drzanje n  n matrice charova. Vrijednost n se vraca preko varijabilnog argumenta. Ako
bilo koji znak u osmosmjerci nije slovo izmedu A i Z, ili nisu svi reci jednake duljine, funkcija mora ispisati poruku
o gresci i vratiti nul-pokazivac (za n treba vratiti 0). Izlaskom iz funkcije mora biti oslobodena sva memorija,
osim (ako nije nastupila greska) one potrebne za povratnu vrijednost.

Twisted Evil Question Question



_________________
"Hard work never killed anybody, but why take a chance?"
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 16:42 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

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).
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).



_________________
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.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 19:49 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

Zasto mi ne ispisuje sadrzaj datoteke na ekran?

[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>


typedef struct _drzava{

char ime[21];
unsigned brojStan;
double povrsina;

}drzava;

drzava drzave[3]={

"Esp", 1000, 12345,
"Gre", 2000, 54321,
"Ita", 3000, 67890,
};

void kreiraj(const char* f_name)
{

FILE* in;
if((in=fopen(f_name, "wb"))==NULL)
{
fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
exit(0);
}

if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
{
fprintf(stderr, "Greska u pisanju.\n");
exit(1);

}

fclose(in);
return;
}


void ispisi(const char *f_name)
{
FILE *in;
drzava drz;
int broj=0;

if((in=fopen(f_name, "rb")== NULL))
{
fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
exit(2);
}

printf("\nSadrzaj datoteke %s: \n", f_name);

while(fread(&drz, sizeof(drzava), 1, in)==1)
{
++broj;
printf("zapis %2d: %20s, %6u, %8.2f\n \n",
broj, drz.ime, drz.brojStan, drz.povrsina);

}

if(ferror(in))
{
fprintf(stderr, "Greska u citanju.\n");
exit(3);
}

fclose(in);

return;

}

int main (void)
{

kreiraj("drzavice.txt");
ispisi("drzavice.txt");

return 0;

}
[/code:1] :roll:

[size=9][color=#999999]Added after 19 minutes:[/color][/size]

Deklarirajte strukturu drzava koja se sastoji (samo) od sljedecih stavki: ime drzave (string do 20 znakova), broj stanovnika (cijeli broj bez predznaka), te povrsina u km^2 (realni broj dvostruke preciznosti). Niz ovakvih struktura
cuvat ce se u binarnoj datoteci.

Napisite funkciju int usporedi(drzava a, drzava b);
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").

Da li ovo trazeni kod?

[code:1]
typedef struct _drzava{

char ime[21];
unsigned brojStan;
double povrsina;

}drzava;


int usporedi (drzava a, drzava b)
{

if(a.brojStan < b.brojStan) return -1;
if(a.brojStan > b.brojStan) return 1;
else
return 0;

}

[/code:1]

[size=9][color=#999999]Added after 33 minutes:[/color][/size]

b) Napisite funkciju unsigned duljina(FILE* niz);
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.


Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.


[code:1]
unsigned duljina (FILE *niz)
{
drzava drz;
unsigned br=0;

while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;

return br;
}


int main (void)
{
FILE* niz;

if((niz=fopen("niz.txt", "rb"))==NULL)
{
printf("Greska pri otvaranju-\n");
exit(0);
}

printf("Duljina niza struktura je: %u\n", duljina(niz));

fclose (niz);

return 0;
}[/code:1]
Zasto mi ne ispisuje sadrzaj datoteke na ekran?

Kod:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>


typedef struct _drzava{

   char ime[21];
   unsigned brojStan;
   double povrsina;

}drzava;

   drzava drzave[3]={

   "Esp", 1000, 12345,
   "Gre", 2000, 54321,
   "Ita", 3000, 67890,
};

  void kreiraj(const char* f_name)
  {

     FILE* in;
     if((in=fopen(f_name, "wb"))==NULL)
     {
         fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
         exit(0);
     }

     if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
     {
         fprintf(stderr, "Greska u pisanju.\n");
         exit(1);

     }

     fclose(in);
     return;
  }


 void ispisi(const char *f_name)
 {
     FILE *in;
     drzava drz;
     int broj=0;

     if((in=fopen(f_name, "rb")== NULL))
    {
      fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
       exit(2);
    }

    printf("\nSadrzaj datoteke %s: \n", f_name);

    while(fread(&drz, sizeof(drzava), 1, in)==1)
    {
       ++broj;
       printf("zapis %2d: %20s, %6u, %8.2f\n \n",
               broj, drz.ime, drz.brojStan, drz.povrsina);

    }

    if(ferror(in))
    {
       fprintf(stderr, "Greska u citanju.\n");
       exit(3);
    }

    fclose(in);

    return;

 }

    int main (void)
    {

       kreiraj("drzavice.txt");
       ispisi("drzavice.txt");

       return 0;

    }
Rolling Eyes

Added after 19 minutes:

Deklarirajte strukturu drzava koja se sastoji (samo) od sljedecih stavki: ime drzave (string do 20 znakova), broj stanovnika (cijeli broj bez predznaka), te povrsina u km^2 (realni broj dvostruke preciznosti). Niz ovakvih struktura
cuvat ce se u binarnoj datoteci.

Napisite funkciju int usporedi(drzava a, drzava b);
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").

Da li ovo trazeni kod?

Kod:

typedef struct _drzava{

   char ime[21];
   unsigned brojStan;
   double povrsina;

}drzava;


   int usporedi (drzava a, drzava b)
   {

      if(a.brojStan < b.brojStan) return -1;
      if(a.brojStan > b.brojStan) return 1;
      else
      return 0;

   }



Added after 33 minutes:

b) Napisite funkciju unsigned duljina(FILE* niz);
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.


Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.


Kod:

 unsigned duljina (FILE *niz)
   {
       drzava drz;
       unsigned br=0;

       while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;

       return br;
   }


int main (void)
{
       FILE* niz;

       if((niz=fopen("niz.txt", "rb"))==NULL)
       {
           printf("Greska pri otvaranju-\n");
           exit(0);
       }

        printf("Duljina niza struktura je: %u\n", duljina(niz));

     fclose (niz);
     
    return 0;
}


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 20:06 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

[quote="frutabella"]Zasto mi ne ispisuje sadrzaj datoteke na ekran?[/quote]
Zbog ovoga:
[code:1]
if((in=fopen(f_name, "rb")== NULL))
[/code:1]

Naime, [tt]==[/tt] ima veći prioritet od [tt]=[/tt]. Ukratko, krivo si stavila zagrade.


[quote]
Napisite funkciju int usporedi(drzava a, drzava b);
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").

Da li ovo trazeni kod?

[code:1]
typedef struct _drzava{

char ime[21];
unsigned brojStan;
double povrsina;

}drzava;


int usporedi (drzava a, drzava b)
{

if(a.brojStan < b.brojStan) return -1;
if(a.brojStan > b.brojStan) return 1;
else
return 0;

}

[/code:1]
[/quote]
Ne. Države treba usporediti prema [b]gustoći naseljenosti[/b], a ne prema broju stanovnika.



[quote]
b) Napisite funkciju unsigned duljina(FILE* niz);
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.


Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.


[code:1]
unsigned duljina (FILE *niz)
{
drzava drz;
unsigned br=0;

while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;

return br;
}


int main (void)
{
FILE* niz;

if((niz=fopen("niz.txt", "rb"))==NULL)
{
printf("Greska pri otvaranju-\n");
exit(0);
}

printf("Duljina niza struktura je: %u\n", duljina(niz));

fclose (niz);

return 0;
}[/code:1][/quote]
Možeš li attachati datoteku [tt]niz.txt[/tt]. Mislim da bi problem mogao biti u formatu datoteke.
frutabella (napisa):
Zasto mi ne ispisuje sadrzaj datoteke na ekran?

Zbog ovoga:
Kod:

     if((in=fopen(f_name, "rb")== NULL))


Naime, == ima veći prioritet od =. Ukratko, krivo si stavila zagrade.


Citat:

Napisite funkciju int usporedi(drzava a, drzava b);
koja, po uzoru na strcmp, usporeduje te dvije drzave po gustoci naseljenosti (rjede naseljena je \manja").

Da li ovo trazeni kod?

Kod:

typedef struct _drzava{

   char ime[21];
   unsigned brojStan;
   double povrsina;

}drzava;


   int usporedi (drzava a, drzava b)
   {

      if(a.brojStan < b.brojStan) return -1;
      if(a.brojStan > b.brojStan) return 1;
      else
      return 0;

   }



Ne. Države treba usporediti prema gustoći naseljenosti, a ne prema broju stanovnika.



Citat:

b) Napisite funkciju unsigned duljina(FILE* niz);
koja vraca duljinu niza gore opisanih struktura zapisanog u binarnoj datoteci otvorenoj preko pokazivaca niz.


Ako je ovo dobro zapisan poziv funkcije u main-u, onda ne razumijem zasto mi ispisuje samo 1.


Kod:

 unsigned duljina (FILE *niz)
   {
       drzava drz;
       unsigned br=0;

       while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;

       return br;
   }


int main (void)
{
       FILE* niz;

       if((niz=fopen("niz.txt", "rb"))==NULL)
       {
           printf("Greska pri otvaranju-\n");
           exit(0);
       }

        printf("Duljina niza struktura je: %u\n", duljina(niz));

     fclose (niz);
     
    return 0;
}

Možeš li attachati datoteku niz.txt. Mislim da bi problem mogao biti u formatu datoteke.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 20:11 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

Evo ga:
Evo ga:





niz.txt
 Description:

Download
 Filename:  niz.txt
 Filesize:  53 Bytes
 Downloaded:  90 Time(s)

[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 20:18 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

[quote="frutabella"]Evo ga:[/quote]
Kao što sam pretpostavio iz ekstenzije, u datoteci se nalazi tekst, a ne binarne reprezentacije struktura. Samim time, binarno čitanje ne može dati ispravne rezultate.

Edit: U attachmentu je ispravno formatirana datoteka. Podaci su isti, samo sada stvarno imate tri strukture binarno zapisane u datoteku. Naziv sam ostavio isti kako bi bilo očito da ekstenzija nema veze s formatom zapisa datoeke.
frutabella (napisa):
Evo ga:

Kao što sam pretpostavio iz ekstenzije, u datoteci se nalazi tekst, a ne binarne reprezentacije struktura. Samim time, binarno čitanje ne može dati ispravne rezultate.

Edit: U attachmentu je ispravno formatirana datoteka. Podaci su isti, samo sada stvarno imate tri strukture binarno zapisane u datoteku. Naziv sam ostavio isti kako bi bilo očito da ekstenzija nema veze s formatom zapisa datoeke.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan



niz.txt
 Description:

Download
 Filename:  niz.txt
 Filesize:  120 Bytes
 Downloaded:  74 Time(s)

[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
frutabella
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 10. 2010. (16:35:36)
Postovi: (24E)16
Sarma = la pohva - posuda
-5 = 42 - 47

PostPostano: 20:47 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

Znaci u kompletu to bi trebalo sad ovako izgledati:



[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>


typedef struct _drzava{

char ime[21];
unsigned brojStan;
double povrsina;

}drzava;

drzava drzave[3]={

"Esp", 1000, 12345,
"Gre", 2000, 54321,
"Ita", 3000, 67890,
};

void kreiraj(const char* f_name)
{

FILE* in;
if((in=fopen(f_name, "wb"))==NULL)
{
fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
exit(0);
}

if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
{
fprintf(stderr, "Greska u pisanju.\n");
exit(1);

}

fclose(in);
return;
}


void ispisi(const char *f_name)
{
FILE *in;
drzava drz;
int broj=0;

if((in=fopen(f_name, "rb"))== NULL)
{
fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
exit(2);
}

printf("\nSadrzaj datoteke %s: \n", f_name);

while(fread(&drz, sizeof(drzava), 1, in)==1)
{
++broj;
printf("zapis %2d: %20s, %6u, %8.2f\n \n",
broj, drz.ime, drz.brojStan, drz.povrsina);

}

if(ferror(in))
{
fprintf(stderr, "Greska u citanju.\n");
exit(3);
}

fclose(in);

return;

}


unsigned duljina (FILE *niz)
{
drzava drz;
unsigned br=0;

while(fread(&drz, sizeof(drzava), 1, niz)==1) ++br;

return br;
}


int main (void)
{
FILE *in;
kreiraj("drzavice.txt");
ispisi("drzavice.txt");

if((in=fopen("drzavice.txt", "rb"))==NULL)
{
printf("Greska.\n");
exit(2);

}

printf("Duljina niza struktura: %d", duljina(in));

return 0;

}
[/code:1]
Znaci u kompletu to bi trebalo sad ovako izgledati:



Kod:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>


typedef struct _drzava{

   char ime[21];
   unsigned brojStan;
   double povrsina;

}drzava;

   drzava drzave[3]={

   "Esp", 1000, 12345,
   "Gre", 2000, 54321,
   "Ita", 3000, 67890,
};

  void kreiraj(const char* f_name)
  {

     FILE* in;
     if((in=fopen(f_name, "wb"))==NULL)
     {
         fprintf(stderr, "Ne mogu pisati u: %s!\n", f_name);
         exit(0);
     }

     if(fwrite(drzave, sizeof(drzava), 3, in)!=3)
     {
         fprintf(stderr, "Greska u pisanju.\n");
         exit(1);

     }

     fclose(in);
     return;
  }


 void ispisi(const char *f_name)
 {
     FILE *in;
     drzava drz;
     int broj=0;

     if((in=fopen(f_name, "rb"))== NULL)
    {
      fprintf(stderr, "Ne mogu citati iz datoteke %s!\n", f_name);
       exit(2);
    }

    printf("\nSadrzaj datoteke %s: \n", f_name);

    while(fread(&drz, sizeof(drzava), 1, in)==1)
    {
       ++broj;
       printf("zapis %2d: %20s, %6u, %8.2f\n \n",
               broj, drz.ime, drz.brojStan, drz.povrsina);

    }

    if(ferror(in))
    {
       fprintf(stderr, "Greska u citanju.\n");
       exit(3);
    }

    fclose(in);

    return;

 }


     unsigned duljina (FILE *niz)
   {
       drzava drz;
       unsigned br=0;

       while(fread(&drz, sizeof(drzava), 1, niz)==1)  ++br;

       return br;
   }


    int main (void)
    {
       FILE *in;
       kreiraj("drzavice.txt");
       ispisi("drzavice.txt");

       if((in=fopen("drzavice.txt", "rb"))==NULL)
       {
           printf("Greska.\n");
           exit(2);

       }

       printf("Duljina niza struktura: %d", duljina(in));

       return 0;

    }


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Leolinus
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2012. (16:36:41)
Postovi: (10)16
Sarma = la pohva - posuda
= 6 - 5

PostPostano: 21:25 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

Može li netko reći kakav je dogovor kod
alociranja matrica.

Vidio sam neke jako loše pristupe u službenim
rješenjima
poput alociranja grupe pokazivača koji zasebno
pokazuju na retke da bi se omogućio jednostavan
pristup mat[i][j], ali pretpostavljam da je
zabrana korištenja pomoćnih polja iz
performansnih razloga(npr. ovaj s datumima je
također zanemarivo sporiji od rješenja koje bi
spremilo dane mjeseci u pomoćna polja), onda u
službenom rješenju ne bi trebala biti takva
gadorija jer ta matrica je u nekim većim
slučajevima noćna mora za CPU.(cache bi poludio
od duhova)

[code:1]int **mat = (int **)malloc(rows *sizeof(int*));
for(int i = 0; i < rows; i++)
mat[i] = (int *)malloc(cols * sizeof(int));[/code:1]

[code:1]int *mat = (int *)malloc(rows * cols * sizeof(int));[/code:1]

Koji od ova dva će biti nagrađen davanjem
bodova?

Također, ako u zadatku piše da napišemo neku
funkciju koja nešto radi, je li dopušteno
koristiti pomoćne funkcije koje rade podzadatke
unutar te funkcije?
Može li netko reći kakav je dogovor kod
alociranja matrica.

Vidio sam neke jako loše pristupe u službenim
rješenjima
poput alociranja grupe pokazivača koji zasebno
pokazuju na retke da bi se omogućio jednostavan
pristup mat[i][j], ali pretpostavljam da je
zabrana korištenja pomoćnih polja iz
performansnih razloga(npr. ovaj s datumima je
također zanemarivo sporiji od rješenja koje bi
spremilo dane mjeseci u pomoćna polja), onda u
službenom rješenju ne bi trebala biti takva
gadorija jer ta matrica je u nekim većim
slučajevima noćna mora za CPU.(cache bi poludio
od duhova)

Kod:
int **mat = (int **)malloc(rows *sizeof(int*));
for(int i = 0; i < rows; i++)
mat[i] = (int *)malloc(cols * sizeof(int));


Kod:
int *mat = (int *)malloc(rows * cols * sizeof(int));


Koji od ova dva će biti nagrađen davanjem
bodova?

Također, ako u zadatku piše da napišemo neku
funkciju koja nešto radi, je li dopušteno
koristiti pomoćne funkcije koje rade podzadatke
unutar te funkcije?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 21:33 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

[quote="frutabella"]Znaci u kompletu to bi trebalo sad ovako izgledati[/quote]
Kompajlira se i izvršava ok. Preumoran sam da pregledavam detalje.

[size=9][color=#999999]Added after 4 minutes:[/color][/size]

[quote="Leolinus"]
[code:1]int **mat = (int **)malloc(rows *sizeof(int*));
for(int i = 0; i < rows; i++)
mat[i] = (int *)malloc(cols * sizeof(int));[/code:1]

[code:1]int *mat = (int *)malloc(rows * cols * sizeof(int));[/code:1]

Koji od ova dva će biti nagrađen davanjem
bodova?
[/quote]
[b]Disclaimer:[/b] Govorim samo za svoj način bodovanja.

Ja bih za oba pristupa dao bodove. Pri tom pretpostavljam da bi u ovom drugom slučaju pristup elementima matrice bio uredno izvršen.

[quote]
Također, ako u zadatku piše da napišemo neku
funkciju koja nešto radi, je li dopušteno
koristiti pomoćne funkcije koje rade podzadatke
unutar te funkcije?[/quote]
Ne samo da je dopušteno, nego je i preporučeno.
frutabella (napisa):
Znaci u kompletu to bi trebalo sad ovako izgledati

Kompajlira se i izvršava ok. Preumoran sam da pregledavam detalje.

Added after 4 minutes:

Leolinus (napisa):

Kod:
int **mat = (int **)malloc(rows *sizeof(int*));
for(int i = 0; i < rows; i++)
mat[i] = (int *)malloc(cols * sizeof(int));


Kod:
int *mat = (int *)malloc(rows * cols * sizeof(int));


Koji od ova dva će biti nagrađen davanjem
bodova?

Disclaimer: Govorim samo za svoj način bodovanja.

Ja bih za oba pristupa dao bodove. Pri tom pretpostavljam da bi u ovom drugom slučaju pristup elementima matrice bio uredno izvršen.

Citat:

Također, ako u zadatku piše da napišemo neku
funkciju koja nešto radi, je li dopušteno
koristiti pomoćne funkcije koje rade podzadatke
unutar te funkcije?

Ne samo da je dopušteno, nego je i preporučeno.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Leolinus
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2012. (16:36:41)
Postovi: (10)16
Sarma = la pohva - posuda
= 6 - 5

PostPostano: 22:41 uto, 11. 6. 2013    Naslov: Citirajte i odgovorite

[quote="mdoko"]
[b]Disclaimer:[/b] Govorim samo za svoj način
bodovanja.[/quote]
Trebam li upoznati asistente/ispravljače osobno i
probati pogoditi koje su zadatke sastavljali xD?
Jer za ove pomoćne funkcije zna biti jedan
određen miris neoduševljenosti i skine se dosta
bodova.

Što se pomoćnih polja tiče, misli li se na
pomoćna polja u int main-u ili bilo gdje jer
primjećujem u nekim rješenjima u funkciji
(popravni 2012.) pomoćno polje s[92] u koje se
učitava nešto.

Što da se to polje zamijenilo s alociranim poljem
iste duljine?

Što je na kraju dozvoljeno?

Pretpostavljam da se in-place rješenje ne traži?

EDIT: Zbunjen sam jer, ne znam je l' opće poznato,
ali bilo kakvo statičko deklariranje polja
(ne samo u mainu nego i u ostalim funkcijama)
odlazi također u iste memorijske lokacije(stog, bss, data),
a ne na heap tako da deklaracija pomoćnog polja unutar
funkcije nema apsolutno nikakve razlike.

Recimo:

[code:1]#include<stdio.h>
#include<malloc.h>

int func() {
int *sa = (int*) malloc(sizeof(int) * 100);
int s[100] = {0};

printf("Adresa s[2] = %p\n", (void *)&s[2]);
printf("Adresa sa[2] = %p\n", (void *)&sa[2]);
return 0;
}

int main() {
int s[100] = {0};

printf("Adresa s[2] = %p\n", (void *)&s[2]);
func();
func();
return 0;
}[/code:1]
[code:1]
Adresa s[2] = 0x7ffffd0b5428
Adresa s[2] = 0x7ffffd0b5288
Adresa sa[2] = 0xeca018
Adresa s[2] = 0x7ffffd0b5288
Adresa sa[2] = 0xeca1b8
[/code:1]

Ovaj kod jasno pokazuje da polje "s" unutar funkcije
ima statičku adresu i da zauzima prostor u nekom
od navedenih memorijskih blokova.
Tako da je rješenje ili krivo ili ja
nisam dobro upoznat s konvencijama koje asistenti
prihvaćaju/ne prihvaćaju.

EDIT2:
Mislim, ovakve stvari koštaju ljude prolaza(80%
prag), pitam samo zato jer mi nije jasno zašto
vidim toliko kontradiktornosti u rješenjima.
Ili su rješenja tu samo kao algoritamski pristup
i ne drže se zadanih ograničenja na ispitu?
Mislim, da budem jasan, našao sam ovo rješenje
na [url=http://degiorgi.math.hr/forum/viewtopic.php?p=182975#182975]forumu[/url], ali slične stvari znaju biti i u službenim.
mdoko (napisa):

Disclaimer: Govorim samo za svoj način
bodovanja.

Trebam li upoznati asistente/ispravljače osobno i
probati pogoditi koje su zadatke sastavljali xD?
Jer za ove pomoćne funkcije zna biti jedan
određen miris neoduševljenosti i skine se dosta
bodova.

Što se pomoćnih polja tiče, misli li se na
pomoćna polja u int main-u ili bilo gdje jer
primjećujem u nekim rješenjima u funkciji
(popravni 2012.) pomoćno polje s[92] u koje se
učitava nešto.

Što da se to polje zamijenilo s alociranim poljem
iste duljine?

Što je na kraju dozvoljeno?

Pretpostavljam da se in-place rješenje ne traži?

EDIT: Zbunjen sam jer, ne znam je l' opće poznato,
ali bilo kakvo statičko deklariranje polja
(ne samo u mainu nego i u ostalim funkcijama)
odlazi također u iste memorijske lokacije(stog, bss, data),
a ne na heap tako da deklaracija pomoćnog polja unutar
funkcije nema apsolutno nikakve razlike.

Recimo:

Kod:
#include<stdio.h>
#include<malloc.h>

int func() {
   int *sa = (int*) malloc(sizeof(int) * 100);
   int s[100] = {0};
   
   printf("Adresa s[2] = %p\n", (void *)&s[2]);
   printf("Adresa sa[2] = %p\n", (void *)&sa[2]);
   return 0;
}

int main() {
   int s[100] = {0};
   
   printf("Adresa s[2] = %p\n", (void *)&s[2]);
   func();
   func();
   return 0;
}

Kod:

Adresa s[2] = 0x7ffffd0b5428
Adresa s[2] = 0x7ffffd0b5288
Adresa sa[2] = 0xeca018
Adresa s[2] = 0x7ffffd0b5288
Adresa sa[2] = 0xeca1b8


Ovaj kod jasno pokazuje da polje "s" unutar funkcije
ima statičku adresu i da zauzima prostor u nekom
od navedenih memorijskih blokova.
Tako da je rješenje ili krivo ili ja
nisam dobro upoznat s konvencijama koje asistenti
prihvaćaju/ne prihvaćaju.

EDIT2:
Mislim, ovakve stvari koštaju ljude prolaza(80%
prag), pitam samo zato jer mi nije jasno zašto
vidim toliko kontradiktornosti u rješenjima.
Ili su rješenja tu samo kao algoritamski pristup
i ne drže se zadanih ograničenja na ispitu?
Mislim, da budem jasan, našao sam ovo rješenje
na forumu, ali slične stvari znaju biti i u službenim.




Zadnja promjena: Leolinus; 23:24 uto, 11. 6. 2013; ukupno mijenjano 1 put.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Idite na Prethodno  1, 2, 3, 4, 5, 6, 7  Sljedeće
Stranica 6 / 7.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan