C: Sabiranje proizvoljnog broja kvadratnih matrica

Teme vezane za console/GUI programiranje u C/C++ jeziku
9 post(ov)a • Stranica: 1/1.

C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la displayerror » 21 ruj 2015, 18:33

Potrebna mi je pomoć oko sljedećeg zadatka:

Napisati program (korišćenjem strukture za definisanje kvadratne matrice, dinamički alocirane) za sabiranje proizvoljnog broja matrica.
Format matrice nije veći od 10.

Prototipovi funkcija:
Kod: Označi sve
void citaj_matricu(MATRICA *pm);

Kod: Označi sve
void zbir(MATRICA *niz, int *n, MATRICA *rez);

Kod: Označi sve
void ispis(MATRICA *pm);


U glavnom programu učitati podatke i formirati dinamički niz od n matrica.
Rezultat smjestiti u matricu zbir i ispisati rezultat.

Kod: Označi sve
#include<stdio.h>
#include<stdlib.h>
#define MAX 10

typedef struct
{
    int **matrica;
    int format;
}MATRICA;

void citaj_matricu(MATRICA *pm)
{
   do
   {
       printf("format=");
       scanf("%d",&pm->format);
   }
   while(pm->format < 1 || pm->format > MAX);
   pm->matrica=(int **)calloc(pm->format,sizeof(int *));
   int i,j,b=0;
   for(i=0;i<pm->format;i++)
   {
      pm->matrica[i]=(int *)calloc(pm->format,sizeof(int));
      for(j=0;j<pm->format;j++,b++)
        pm->matrica[i][j]=b;
   }
   for(i=0;i<pm->format;i++)
   for(j=0;j<pm->format;j++)
   {
       printf("mat[%d][%d]",i,j);
       scanf("%d",&pm->matrica[i][j]);
   }
}

void zbir(MATRICA *niz,int *n,MATRICA *rez)
{
   do
   {
       printf("broj matrica:");
       scanf("%d",n);
   }
   while(*n < 1);
   niz=(MATRICA *)malloc(*n * sizeof(MATRICA));
   rez=(MATRICA *)malloc(rez->format *sizeof(MATRICA));
   int i;
   for(i=0;i<*n;i++)
   {
       /*SABIRANJE???*/
   }
}

void ispis(MATRICA *pm)
{
    int i,j;
    for(i=0;i<pm->format;i++){
        for(j=0;j<pm->format;j++){
                printf("%d\t",pm->matrica[i][j]);
        }
    printf("\n");
    }
}

void obrisi(MATRICA *pm)
{
    int i;
    for(i=0;i<pm->format;i++)
        free(pm->matrica[i]);
}

int main()/*problem sa dinamickom alokacijom */
{
    MATRICA *niz;
    MATRICA *rez;
    int i,n;
    for(i=0;i<n;i++)
    {
        printf("%d. matrica:",i+1);
        citaj_matricu(niz+i);
    }
    zbir(niz,&n,rez);/*funkcija je void tipa,
    kako smjestiti rezultat u promjenjivu?*/
    ispis(rez);
    for(i=0;i<n;i++)
        obrisi(niz+i);
    free(niz);
    free(rez);
    return 0;
}


Može li neko da pokaže kako da se sabere 'n' matrica?
Kako smjestiti rezultat u promjenjivu (funkcija za zbir je void tipa)?
Ne mogu da pronađem grešku (kod neće da kompajlira).

Hvala.

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la Armin » 21 ruj 2015, 22:07

Svrha sabiranja je da imaš dvije ili više različitih matrica koje sabiraš. U zadatku koji si naveo pokazuješ rad sa samo jednom matricom pa samim tim i funkcija sabiraj koju si napisao nema smisla u takvom kontekstu.

Potrebno ti je da ti funkcija za sabiranje prima sljedeće parametre ukoliko je povratni tip void:

    * Pokazivač na prvu matricu
    * Pokazivač na drugu matricu
    * Dimenzije matrice
    * Pokazivač na rezultantnu matricu

Drugi način je da ti funkcija vraća povratni tip matrice, u kojem bi imao samo jedan parametar manje.

Budući da sam radio diplomski rad na temu matrica, mogu ti poslat link na dokument u poruci da pogledaš, ukoliko želiš detaljniji odgovor.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la displayerror » 22 ruj 2015, 00:00

@Armin

Možda nisi shvatio šta je zadatak. Znam izvršiti aritmetičke opreracije nad dvije matrice, ali korisnik unosi n matrica
a rezultat je njihov zbir.
Argumenti funkcije zbir() su niz matrica, broj matrica (n), rezultat.

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la gagiD » 22 ruj 2015, 00:49

@displayerror
"Prirodno" je da funcija zbir() sabira dvije matrice. A neka zbirNMatrica() da sabira vise njih.

Meni nije jasno kako imas problem s n ako znas sabrati dvije.

"1 + 1 + 1 + 1" => "(((1 + 1) + 1) + 1)"

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la displayerror » 22 ruj 2015, 13:56

@gagiD
Možeš li da pokažeš kroz kod kako se sabira proizvoljan broj matrica,
ja nikako ne mogu da shvatim?

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la gagiD » 22 ruj 2015, 14:40

@displayerror

Nemam bas vremena.

Evo neki psudo kod:
Kod: Označi sve
zbir = niz[0]; // zbir na pocetku ima vrijednost prve matrice u nizu(mozes napravit funkciju kopirajMatricu())

for (int i = 1; i < n; ++i)
     zbir(zbir, niz[i], 666, &zbir); // saberi kopiju zbira i i-te matrice a rezultat ide u "pravi" zbir


btw. ako imas mogucnost da isti zadatak uradis u C++ bilo bi mnogo lakse.
Klasa Matrica koja bi imala implemantiran operator+ i operator+=, kod bi izgledao kao da sabiras integere.

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la Armin » 24 ruj 2015, 10:34

displayerror je napisao/la:@Armin

Možda nisi shvatio šta je zadatak. Znam izvršiti aritmetičke opreracije nad dvije matrice, ali korisnik unosi n matrica
a rezultat je njihov zbir.
Argumenti funkcije zbir() su niz matrica, broj matrica (n), rezultat.


U tom slučaju ne vidim šta ti predstavlja problem. Ako znaš matematički riješit problem, treba da znaš i funkciju adekvatno prilagodit. Logično, ako si funkciju napravio tako da sabira dvije matrice, ne može ih sabrat deset. Znači, ili napravi novu funkciju koja će iskoristit tu postojeću funkciju, i njom prođi kroz niz matrica, provjeri da li zadovoljavaju uslov za sabiranje i saberi ih, ili modifikuj postojeću.

Generalno, kako sam shvatio ti samo želiš da ti neko postavi urađen zadatak ovdje. Ispravi me ako griješim.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la Evi » 25 ruj 2015, 14:09

[-( pa rješite čovjeku zadatak što ste takvi pa to je samo jedan zadatak. ja da znam ja bi ti rješila! =)) :)

Re: C: Sabiranje proizvoljnog broja kvadratnih matrica

PostPostao/la gagiD » 25 ruj 2015, 21:23

Mislim da svako nakon max. 2h istrazivanja moze rjesiti ovaj zadatak :)


9 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.