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

Alokacija, relokacija
WWW:
Idite na 1, 2  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
ekatarina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 15:04 čet, 24. 4. 2008    Naslov: Alokacija, relokacija Citirajte i odgovorite

U jednom zadatku treba napisati funkciju koja ce matrici na kraj dodati jedan redak u kojem ce pisati sume stupaca.

U mainu je ta matrica dinamički alocirana na neku m*n dimenziju, i ja sam pokušala u funkciji realcirati novi redak za tu matricu ovako:

[code:1]
void f(double **a, int m ,int n)
{
a= (double**) realloc (a, (m+1)*sizeof (double*));
a[m+1] = (double *) malloc(n*sizeof(double));

[/code:1]

i kada izvođenje programa dođe do tog dijela, javlja mi grešku i neće dalje ništa.

molim da mi ukažete ne moju sigurno jako glupu pogrešku...
U jednom zadatku treba napisati funkciju koja ce matrici na kraj dodati jedan redak u kojem ce pisati sume stupaca.

U mainu je ta matrica dinamički alocirana na neku m*n dimenziju, i ja sam pokušala u funkciji realcirati novi redak za tu matricu ovako:

Kod:

void f(double **a, int m ,int n)
{
a= (double**) realloc (a, (m+1)*sizeof (double*));
    a[m+1] = (double *) malloc(n*sizeof(double));
   


i kada izvođenje programa dođe do tog dijela, javlja mi grešku i neće dalje ništa.

molim da mi ukažete ne moju sigurno jako glupu pogrešku...


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


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

PostPostano: 15:26 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

Nije li novi redak [tt]a[m][/tt] (a ne [tt]a[m+1][/tt])? ;)
Nije li novi redak a[m] (a ne a[m+1])? Wink



_________________
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
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: 15:35 čet, 24. 4. 2008    Naslov: Re: Alokacija, relokacija Citirajte i odgovorite

Uoci da u matrici koja ima m+1 redak indeks zadnjeg retka je [tt]m[/tt], a ne [tt]m+1[/tt].

Dakle, program ti se rusi, jer pises po tko zna cemu.
Uoci da u matrici koja ima m+1 redak indeks zadnjeg retka je m, a ne m+1.

Dakle, program ti se rusi, jer pises po tko zna cemu.



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


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 17:45 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

Eto.... Ne znam šta da kažem. U taj sam kod zurila sat vremena razbijajući glavu time šta bi moglo biti.. :tapsh: :wall:
Eto.... Ne znam šta da kažem. U taj sam kod zurila sat vremena razbijajući glavu time šta bi moglo biti.. Tapsh, tapsh,... Brick wall


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


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 18:07 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

Opet neće, evo cijeli kod:

[code:1]
#include <stdio.h>
void f(double **a, int m ,int n)
{
int stupac, red;
a= (double**) realloc (a, (m+1)*sizeof (double*));
a[m] = (double *) malloc(n*sizeof(double));

for(stupac=0; stupac < n; stupac++)
{
double suma=0;
for(red=0; red<m +1; red++)
suma+=a[red][stupac];
a[m][stupac]=suma;
}
return;
}


int main(void){
double **a;
int brojRedaka, brojStupaca, red, stupac;

scanf("%d %d", &brojRedaka, &brojStupaca);

a= (double **) malloc (brojRedaka * sizeof(double *));

for(red=0; red<brojRedaka; red++)
a[red]= (double *) malloc (brojStupaca * sizeof(double));

printf ("ucitajte.\n");

for(red=0; red<brojRedaka; red++)
for(stupac=0; stupac<brojStupaca; stupac++)
scanf("%lf", &a[red][stupac]);

printf("ispis.\n");
for(red=0; red<brojRedaka; red++)
{
for(stupac=0; stupac<brojStupaca; stupac++)
printf("%5g", a[red][stupac]);
printf("\n");
}

f(a, brojRedaka, brojStupaca);
printf("Novi ispis\n");
for(red=0; red < brojRedaka+1; red++)
{
for (stupac=0; stupac < brojStupaca; stupac++)
printf("%5g", a[red][stupac]);
printf("\n");
}

for(red=0; red<brojRedaka+1; red++) free(a[red]);
free(a);
scanf("%%");
return 0;
}
[/code:1]
Opet neće, evo cijeli kod:

Kod:

#include <stdio.h>
void f(double **a, int m ,int n)
{
    int stupac, red;
    a= (double**) realloc (a, (m+1)*sizeof (double*));
    a[m] = (double *) malloc(n*sizeof(double));
   
    for(stupac=0; stupac < n; stupac++)
    {
        double suma=0;
                for(red=0; red<m +1; red++)
                suma+=a[red][stupac];
        a[m][stupac]=suma;
    }
  return;
 } 


int main(void){
double **a;
int brojRedaka, brojStupaca, red, stupac;

scanf("%d %d", &brojRedaka, &brojStupaca);

a= (double **) malloc (brojRedaka * sizeof(double *));

for(red=0; red<brojRedaka; red++)
a[red]= (double *) malloc (brojStupaca * sizeof(double));

printf ("ucitajte.\n");

for(red=0; red<brojRedaka; red++)
for(stupac=0; stupac<brojStupaca; stupac++)
scanf("%lf", &a[red][stupac]);

printf("ispis.\n");
for(red=0; red<brojRedaka; red++)
{
for(stupac=0; stupac<brojStupaca; stupac++)
printf("%5g", a[red][stupac]);
printf("\n");
}

f(a, brojRedaka, brojStupaca);
printf("Novi ispis\n");
for(red=0; red < brojRedaka+1; red++)
{
    for (stupac=0; stupac < brojStupaca; stupac++)
        printf("%5g", a[red][stupac]);
                printf("\n");
}

for(red=0; red<brojRedaka+1; red++) free(a[red]);
free(a);
scanf("%%");   
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: 18:22 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.

Ovako:
[code:1]
void f(double ***a, int m ,int n)
{
int stupac, red;
*a= (double**) realloc (*a, (m+1)*sizeof (double*));
(*a)[m] = (double *) malloc(n*sizeof(double));

for(stupac=0; stupac < n; stupac++)
{
double suma=0;
for(red=0; red<m +1; red++)
suma+=(*a)[red][stupac];
(*a)[m][stupac]=suma;
}
return;
}
[/code:1]
Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.

Ovako:
Kod:

void f(double ***a, int m ,int n)
{
    int stupac, red;
    *a= (double**) realloc (*a, (m+1)*sizeof (double*));
    (*a)[m] = (double *) malloc(n*sizeof(double));
   
    for(stupac=0; stupac < n; stupac++)
    {
        double suma=0;
                for(red=0; red<m +1; red++)
                suma+=(*a)[red][stupac];
        (*a)[m][stupac]=suma;
    }
  return;
 } 



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


Pridružen/a: 19. 09. 2006. (09:43:16)
Postovi: (76)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 2
Lokacija: varaždin

PostPostano: 20:18 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

ili mozes realocirati matricu prije poziva funkcije.. ja sam tako napravila, bas sam jucer pitala za taj zadatak bratica(on je inace apsolvent na rac.smjeru), on provjerio, zadatak je radio sta treba i ja bila sretna jer konacno znam nesta isprogramirat kak treba!! :D :D :D
ili mozes realocirati matricu prije poziva funkcije.. ja sam tako napravila, bas sam jucer pitala za taj zadatak bratica(on je inace apsolvent na rac.smjeru), on provjerio, zadatak je radio sta treba i ja bila sretna jer konacno znam nesta isprogramirat kak treba!! Very Happy Very Happy Very Happy


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


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

PostPostano: 20:47 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

Ali ako funkcija treba dodati redak, onda relokacija spada unutra, a ne prije poziva funkcije, ne? :?

Inace, ovako kako je napisan zadatak, moze se sloziti i da funkcija samo vraca novu matricu:
[code:1]double **f(double **a, int m, int n) {
int stupac, red;
a = (double **)realloc(a, (m+1) * sizeof (double*));
a[m] = (double *)malloc(n * sizeof(double));

for(stupac=0; stupac < n; stupac++) {
double suma=0;
for (red = 0; red < m+1; ++red)
suma += a[red][stupac];
a[m][stupac]=suma;
}

return a;
}[/code:1]

@Marko: Ima li onaj [tt]return;[/tt] neku svrhu? :-k
Ali ako funkcija treba dodati redak, onda relokacija spada unutra, a ne prije poziva funkcije, ne? Confused

Inace, ovako kako je napisan zadatak, moze se sloziti i da funkcija samo vraca novu matricu:
Kod:
double **f(double **a, int m, int n) {
  int stupac, red;
  a = (double **)realloc(a, (m+1) * sizeof (double*));
  a[m] = (double *)malloc(n * sizeof(double));

  for(stupac=0; stupac < n; stupac++) {
    double suma=0;
    for (red = 0; red < m+1; ++red)
      suma += a[red][stupac];
    a[m][stupac]=suma;
  }

  return a;
}


@Marko: Ima li onaj return; neku svrhu? Think



_________________
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
tihy
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 09. 2006. (09:43:16)
Postovi: (76)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 2
Lokacija: varaždin

PostPostano: 20:50 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

pa neznam, meni radi i ako stavim prije poziva f-je... kaj se nebi smjelo tak? a ja se vec ponadala da znam i ja nesta.. :cry:
pa neznam, meni radi i ako stavim prije poziva f-je... kaj se nebi smjelo tak? a ja se vec ponadala da znam i ja nesta.. Crying or Very sad


[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:55 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

[quote="vsego"]
Ima li onaj [tt]return;[/tt] neku svrhu? :-k[/quote]
Nema, ali ne smeta. Ja copy-pasteao kod ekatarinin kod i dodao par zvjezdica.
vsego (napisa):

Ima li onaj return; neku svrhu? Think

Nema, ali ne smeta. Ja copy-pasteao kod ekatarinin kod i dodao par zvjezdica.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
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:58 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

[quote="tihy"]pa neznam, meni radi i ako stavim prije poziva f-je... kaj se nebi smjelo tak? a ja se vec ponadala da znam i ja nesta.. :cry:[/quote]
Radi, ali je pogresno rjesenje zadatka. Zadatak kaze da treba funkciju koja ce matrici na kraj dodati jedan redak... Dodavanje retka se sastoji od realokacije polja pointera na retke i alokacije novog retka. Dakle, zadatak eksplicitno trazi da realokacija bude u funkciji.
tihy (napisa):
pa neznam, meni radi i ako stavim prije poziva f-je... kaj se nebi smjelo tak? a ja se vec ponadala da znam i ja nesta.. Crying or Very sad

Radi, ali je pogresno rjesenje zadatka. Zadatak kaze da treba funkciju koja ce matrici na kraj dodati jedan redak... Dodavanje retka se sastoji od realokacije polja pointera na retke i alokacije novog retka. Dakle, zadatak eksplicitno trazi da realokacija bude u funkciji.



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


Pridružen/a: 19. 09. 2006. (09:43:16)
Postovi: (76)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 2
Lokacija: varaždin

PostPostano: 21:01 čet, 24. 4. 2008    Naslov: Citirajte i odgovorite

a-haaa :oops:
ok, hvala! :)
a-haaa Embarassed
ok, hvala! Smile


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


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 12:44 pet, 25. 4. 2008    Naslov: Citirajte i odgovorite

[quote="mdoko"]Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.

[/quote]

Moram priznati da mi ovaj dio nije jasan.U analognom primjeru iz druge grupe je trebalo dodati stupac i tamo smjestiti produkte redaka. Napravila sam napraviti program gdje funkcija prima matircu a, doda joj jedan stupac i ne vraća ništa.

[code:1]
void **f(int **a, int m, int n)
{int red, stupac;
for(red=0; red<m; red++)
a[red] = (int*)realloc(a[red], (n+1)*sizeof(int));
zb

for(red=0; red<m; red++)
{
int produkt=1;
for(stupac=0; stupac<n; stupac++)
produkt*=a[red][stupac];
a[red][n]=produkt;


}
}
[/code:1]

I dio poziva i ispisa te nove matrice:
[code:1]
f(a, brojRedaka, brojStupaca);
ispis(a, brojRedaka, brojStupaca + 1);
[/code:1]

Dakle, ona je uspjela promijeniti matricu a iz maina. Zašto tu nisam morala koristiti ***? Niti je ona morala vraćati novu matricu, nego je jednostavno promijenila staru, a stekla sam dojam, da funkcija to ne može zbog onoga pointera na pointer ***.
mdoko (napisa):
Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.



Moram priznati da mi ovaj dio nije jasan.U analognom primjeru iz druge grupe je trebalo dodati stupac i tamo smjestiti produkte redaka. Napravila sam napraviti program gdje funkcija prima matircu a, doda joj jedan stupac i ne vraća ništa.

Kod:

void **f(int **a, int m, int n)
{int red, stupac;
    for(red=0; red<m; red++)
    a[red] = (int*)realloc(a[red], (n+1)*sizeof(int));
    zb

    for(red=0; red<m; red++)
    {
               int produkt=1;
               for(stupac=0; stupac<n; stupac++)
                             produkt*=a[red][stupac];
               a[red][n]=produkt;
               
 
    }
}


I dio poziva i ispisa te nove matrice:
Kod:

f(a, brojRedaka, brojStupaca);
    ispis(a, brojRedaka, brojStupaca + 1);


Dakle, ona je uspjela promijeniti matricu a iz maina. Zašto tu nisam morala koristiti ***? Niti je ona morala vraćati novu matricu, nego je jednostavno promijenila staru, a stekla sam dojam, da funkcija to ne može zbog onoga pointera na pointer ***.


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


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

PostPostano: 14:58 pet, 25. 4. 2008    Naslov: Citirajte i odgovorite

Je, ali dodavanje stupca je produljavanje svih redaka, sto znaci da ne mijenjas [tt]a[/tt], nego samo sve [tt]a[i][/tt]-jeve. 8)
Je, ali dodavanje stupca je produljavanje svih redaka, sto znaci da ne mijenjas a, nego samo sve a[i]-jeve. Cool



_________________
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
ekatarina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 13:50 sub, 26. 4. 2008    Naslov: Citirajte i odgovorite

A zar nisu i oni isto pointeri, pa zašto mi tu ne treba vrijednost pointera da bi ga promijenila, kako reče mdoko?
A zar nisu i oni isto pointeri, pa zašto mi tu ne treba vrijednost pointera da bi ga promijenila, kako reče mdoko?


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


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

PostPostano: 14:04 sub, 26. 4. 2008    Naslov: Citirajte i odgovorite

[quote="ekatarina"]A zar nisu i oni isto pointeri, pa zašto mi tu ne treba vrijednost pointera da bi ga promijenila, kako reče mdoko?[/quote]

Treba ti i mijenjas ju, [b]ali[/b]:

[b]Dodavanje retka:[/b]
[code:1]a = (double**)realloc(a, (m+1)*sizeof(double*));
a[m] = (double*)realloc(a, n*sizeof(double));[/code:1]
[b]Dodavanje stupca:[/b]
[code:1]for (i = 0; i < m; ++i)
a[i] = (double*)realloc(a, (n+1)*sizeof(double));[/code:1]

Dakle, kad dodajes redak, mijenjas varijablu [tt]a[/tt], pa ju moras i vratiti u glavni program; kad dodajes stupac, mijenjas elemente od [tt]a[/tt] (dakle "varijable" [tt]a[i][/tt]"), ali ne i samu varijablu [tt]a[/tt], pa ju ne trebas niti vracati iz funkcije. :)

Jasnije? :D
ekatarina (napisa):
A zar nisu i oni isto pointeri, pa zašto mi tu ne treba vrijednost pointera da bi ga promijenila, kako reče mdoko?


Treba ti i mijenjas ju, ali:

Dodavanje retka:
Kod:
a = (double**)realloc(a, (m+1)*sizeof(double*));
a[m] = (double*)realloc(a, n*sizeof(double));

Dodavanje stupca:
Kod:
for (i = 0; i < m; ++i)
  a[i] = (double*)realloc(a, (n+1)*sizeof(double));


Dakle, kad dodajes redak, mijenjas varijablu a, pa ju moras i vratiti u glavni program; kad dodajes stupac, mijenjas elemente od a (dakle "varijable" a[i]"), ali ne i samu varijablu a, pa ju ne trebas niti vracati iz funkcije. Smile

Jasnije? Very Happy



_________________
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
ekatarina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 19:49 sub, 26. 4. 2008    Naslov: Citirajte i odgovorite

:moze: :thankyou:
Svidja mi se ta ideja! Thank you


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


Pridružen/a: 19. 09. 2006. (09:43:16)
Postovi: (76)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 2
Lokacija: varaždin

PostPostano: 15:02 pon, 28. 4. 2008    Naslov: Citirajte i odgovorite

a zasto f-ja mora vracat matricu, ako u zadatku ne pise da nesto vraca? :?

pise da f-ja samo treba matrici dodati redak u kojem ce pisati sume stupaca...
a zasto f-ja mora vracat matricu, ako u zadatku ne pise da nesto vraca? Confused

pise da f-ja samo treba matrici dodati redak u kojem ce pisati sume stupaca...


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


Pridružen/a: 19. 09. 2006. (09:43:16)
Postovi: (76)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 2
Lokacija: varaždin

PostPostano: 15:19 pon, 28. 4. 2008    Naslov: Citirajte i odgovorite

zadatak je da program treba ispisati sumu svih elemenata a[i][j] t.d. i+j prost broj, i napisati f-ju koja ce matrici na kraj dodati redak u kojem ce pisati sume stupaca

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

int prost(int n){
int i;
n = (n < 0? -n: n);
if(n==0 || n==1) return 0;
for(i=2; i<n; ++i)
if((n%i) == 0) return 0;
return 1;
}

double **dodaj(double **a, int b, int c){
int i, j;
double sum;
a=(double**)realloc(a,(b+1)*sizeof(double*));
a[b]=(double*)malloc(c*sizeof(double));

for(j=0; j<c; j++){
sum=0;
for(i=0; i<b; ++i)
sum += a[i][j];
a[b][j] = sum;
}
//return a;
}

int main(void){
int b, c, i, j;
double **a, sum = 0;
scanf("%d %d", &b, &c);

a=(double**)malloc(b*sizeof(double*));
for(i=0; i<b; ++i)
a[i]=(double*)malloc(c*sizeof(double));

for(i=0; i<b; ++i)
for(j=0; j<c; ++j) scanf("%lf", a[i][j]);

for(i=0; i<b; ++i)
for(j=0; j<c; ++j)
if(prost(i+j)) sum += a[i][j];
printf("\nSuma je %g.", sum);

dodaj(a, b, c);

for(i=0; i<=b; ++i){
for(j=0; j<c; ++j)
printf("%g", a[i][j]);
printf("\n");
}
for(i=0; i<=b; ++i) free(a[i]);
free(a);

scanf("%%");
return 0;
}[/code:1]

jel ovo radi kako treba?
zadatak je da program treba ispisati sumu svih elemenata a[i][j] t.d. i+j prost broj, i napisati f-ju koja ce matrici na kraj dodati redak u kojem ce pisati sume stupaca

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

int prost(int n){
    int i;
    n = (n < 0? -n: n);
    if(n==0 || n==1) return 0;
    for(i=2; i<n; ++i)
        if((n%i) == 0) return 0;
    return 1;
}

double **dodaj(double **a, int b, int c){
    int i, j;
    double sum;
    a=(double**)realloc(a,(b+1)*sizeof(double*));
    a[b]=(double*)malloc(c*sizeof(double));
   
    for(j=0; j<c; j++){
        sum=0;
        for(i=0; i<b; ++i)
                sum += a[i][j];
        a[b][j] = sum;
    }
    //return a;
}

int main(void){
    int b, c, i, j;
    double **a, sum = 0;
    scanf("%d %d", &b, &c);
   
    a=(double**)malloc(b*sizeof(double*));
    for(i=0; i<b; ++i)
        a[i]=(double*)malloc(c*sizeof(double));
   
    for(i=0; i<b; ++i)
        for(j=0; j<c; ++j) scanf("%lf", a[i][j]);
   
    for(i=0; i<b; ++i)
        for(j=0; j<c; ++j)
                if(prost(i+j)) sum += a[i][j];
    printf("\nSuma je %g.", sum);
   
    dodaj(a, b, c);
   
    for(i=0; i<=b; ++i){
        for(j=0; j<c; ++j)
                printf("%g", a[i][j]);
        printf("\n");
    }
    for(i=0; i<=b; ++i) free(a[i]);
    free(a);
   
    scanf("%%");
    return 0;
}


jel ovo radi kako treba?


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


Pridružen/a: 25. 11. 2007. (19:22:50)
Postovi: (161)16
Spol: žensko
Sarma = la pohva - posuda
30 = 47 - 17

PostPostano: 16:15 pon, 28. 4. 2008    Naslov: Citirajte i odgovorite

[quote]Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.
[/quote]

[quote]Dakle, kad dodajes redak, mijenjas varijablu a, pa ju moras i vratiti u glavni program[/quote]

Ako sam dobro shvatila, onda tvoj program neće uspjeti dodati matrici jedan redak, jer nisi upotrijebila ***
Citat:
Kada realociras nesto, onda trebas promijeniti vrijednost pointera, a buduci da to radis u funkciji, onda ti treba pointer na taj pointer.


Citat:
Dakle, kad dodajes redak, mijenjas varijablu a, pa ju moras i vratiti u glavni program


Ako sam dobro shvatila, onda tvoj program neće uspjeti dodati matrici jedan redak, jer nisi upotrijebila ***


[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 1, 2  Sljedeće
Stranica 1 / 2.

 
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