[C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Utorak, 22. Septembar 2015, 22:54
od display_error
Kako sabrati proizvoljan broj matrica?
Korisnik treba da unese broj matrica i nihove elemente.
Program ispisuje matricu zbira [inlmath]n[/inlmath] matrica.

Može li neko može da pregleda moj kod pošto imam i nekih sintaksnih grešaka, i kodom da pokaže kako sabrati matrice:

Kôd: Obelež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);
    ispis(rez);
    for(i=0;i<n;i++)
        obrisi(niz+i);
    free(niz);
    free(rez);
    return 0;
}

Hvala.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Sreda, 23. Septembar 2015, 21:27
od Miladin Jovic
Dakle, unosi se broj matrica. Obeležimo ga sa [inlmath]n[/inlmath]. Sve te matrice, da bi se mogle sabirati, moraju biti istog tipa. Kako znamo tip matrica? Da li se i tip unosi sa tastature?

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Sreda, 23. Septembar 2015, 22:24
od display_error
@Miladin Jovic

Pored broja matrica unosi se i dimenzija svake, kao i elementi.
Matrice su kvadratne i da bi se mogle sabrati podrazumeva se da budu istog formata.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 11:25
od Miladin Jovic
Da li moramo koristiti dinamičku alokaciju memorije? Ako nije obavezno koristiti dinamičku alokaciju, mogu postaviti moje rešenje.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 12:45
od Miladin Jovic
Uradio sam na dva načina, evo ovog koji koristi i jedan i drugi način alokacije memorije

Kôd: Obeleži sve
#include<stdio.h>
#include<stdlib.h>
void Ucitaj(int tip,int *a[tip])
{
    int i,j;
    for(i=0;i<tip;i++)
        for(j=0;j<tip;j++)
        {
            printf("Unesite clan:");
            scanf("%d",&a[i][j]);
        }
}

void Sumiraj(int tip,int *suma[],int *a[])
{
    int i,j;
    for(i=0;i<tip;i++)
        for(j=0;j<tip;j++)
    suma[i][j]+=a[i][j];
}

int main()
{
    int n,tip; /* n broj matrica, tip dimenzija kvadratne matrice */
    printf("Unesite broj matrica:");
    scanf("%d",&n);
    printf("Unesite tip matrice:");
    scanf("%d",&tip);
    int* a[tip]; /* matrica u koju ucitavamo*/
    int* suma[tip]; /* matrica koja cuva sumu*/
    int i;
    for(i=0;i<tip;i++)
    {
        suma[i]=(int*)calloc(tip,sizeof(int));
        a[i]=(int*)malloc(tip*sizeof(int)); /*alociranje i postavljanje matrice koja cuva sumu na nula matricu*/
    }
    for(i=1;i<n;i++)
    {
        printf("Unesite %d. matricu:\n");
        Ucitaj(tip,a);
        Sumiraj(tip,suma,a);
    }
    int j;
    for(i=0;i<tip;i++)
    {
        for(j=0;j<tip;j++) printf("%d ",suma[i][j]);
        free(suma[i]);
        putchar('\n');
    } /* stampanje matrice */
    return 0;
}

Verovatno to sve može i bolje i kraće. Ovde stvarno ne vidim potrebu da se koriste strukture kao matrice. Da li je to možda u uslovu zadatku izričito rečeno?

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 12:54
od display_error
@Miladin Jovic

Hvala na odgovoru.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 13:04
od display_error
@Miladin Jovic

Program ti ne radi.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 13:24
od Miladin Jovic
U čemu je problem? Kod mene prolazi kompajliranje, i rade mi test primeri. Ako nije greška u kompajliranju, daj mi test primer koji si probao.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 14:35
od display_error
Program samo ispiše jednu matricu koju učitam, bez obzira na uneti broj.

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 14:48
od Miladin Jovic
Miladin Jovic je napisao:
Kôd: Obeleži sve
....
int main()
{
    int n,tip; /* n broj matrica, tip dimenzija kvadratne matrice */
    printf("Unesite broj matrica:");
    scanf("%d",&n);
    printf("Unesite tip matrice:");
    scanf("%d",&tip);
    int* a[tip]; /* matrica u koju ucitavamo*/
    int* suma[tip]; /* matrica koja cuva sumu*/
    int i;
    for(i=0;i<tip;i++)
    {
        suma[i]=(int*)calloc(tip,sizeof(int));
        a[i]=(int*)malloc(tip*sizeof(int)); /*alociranje i postavljanje matrice koja cuva sumu na nula matricu*/
    }
    for(i=1;i<n;i++) /*OVDE TREBA <= , IZOSTAVIO SAM PRI PREKUCAVANJU */
    {
        printf("Unesite %d. matricu:\n");/*OVDE TREBA i zbog %d. */
        Ucitaj(tip,a);
        Sumiraj(tip,suma,a);
    }
    int j;
    ....

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 15:16
od Daniel
@display_error
Ako program koji ti je Miladin napisao ne radi (ja ne znam C, pa ne mogu to da proverim), mogao bi i ti malo da se potrudiš da nađeš grešku, a ne da očekuješ od drugih da ti urade sve...

Re: [C] Sabiranje proizvoljnog broja kvadratnih matrica

PostPoslato: Četvrtak, 24. Septembar 2015, 17:34
od desideri
Sem toga što reče Daniel,
ovo je pre svega matematički forum.
Ja znam C# i VB a C, C++ , Pascal itd mi nisu poznati. Sintaksu ne znam.
Ovo je lak zadatak, da se rešiti u bilo kom programskom jeziku. Naravno, uz poznavanje sintakse.
Molim te da ne postavljaš pitanja koja se tiču sintakse. Ovo je potforum "Matematika u programiranju", a ne potforum "Programiranje". Nema tog čoveka (čast izuzecima, ako ih uopšte ima) koji znaju sintaksu svih programskih jezika.
Daniel ti je lepo rekao (evo neću citirati, parafraziram) da sam nađeš grešku ako nije u redu ovo što je Miladin Jović napisao. A ja bih rekao da je to ok i da je greška ili u kucanju ili u tvom kompajleru.