Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Transponovanje matrice u funkciji...

[es] :: Art of Programming :: Transponovanje matrice u funkciji...

[ Pregleda: 10066 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fimalbonegaculo
product development, team lead,
developer, sys-admin
beograd

Član broj: 395
Poruke: 161
212.165.87.*

ICQ: 81662016


+1 Profil

icon Transponovanje matrice u funkciji...02.06.2003. u 17:10 - pre 223 meseci
Zapetljao sam se ovdje.
Imam ovaj kod i treba da matricu transponujem u funkciji.
Riješio sam to ovako, ali mi se čini da postoji ljepše rješenje.
Da ne bih puno pričao evo kod:
Code:

#include    <stdio.h>
#define MAX 10

void citaj  (int* p, int n);
void pisi   (int* p, int n);
void transp (int* p, int n);

int main() 
{
    int n;
    int mat[MAX][MAX];
    
    printf ("Unesite red matrice: "); scanf("%d",&n);

    printf("%d",sizeof(mat[0]));
    citaj   (mat[0],n);
    pisi    (mat[0],n);

    transp  (mat[0],n);
    pisi    (mat[0],n);

    getch   ();
}

/*
    funkcije citaj, pisi i transp
    odradjuju posao...
*/

void citaj(int* p, int n)
{
    int i, j, *ptr;
    
    printf ("\nUnesite elemente matrice po vrstama: \n");
    
    ptr = (int *)p;

    for (i=0;i<=n-1;i++) {
        for (j=0;j<=n-1;j++){
            printf("mat[%d][%d]: ",i,j);
            scanf("%d", ptr++);
        }
        for (j=0;j<=MAX-n-1;j++,ptr++) *ptr = 0;
    }
    for (i=0;i<=MAX-n-1;i++,ptr++) *ptr = 0;  
}

/*
    pisi
*/
void pisi(int *p, int n)
{
    int i, j, *ptr;
    
    printf ("\nElementi matrice: \n");
    
    ptr = (int *)p;

    for (i=0;i<=n-1;i++) {
        for (j=0;j<=n-1;j++) printf("%3d",*(ptr++));
            printf("\n");
        for (j=0;j<=MAX-n-1;j++,ptr++);
    }
    for (i=0;i<=MAX-n-1;i++,ptr++);
}

/*
    transp
*/
void transp(int *p, int n)
{
    int i, j, *ptr, tmp1, tmp[MAX][MAX];
    
    printf ("\nTransponujem matricu...");
    
    ptr = (int *)p;

    for (i=0;i<=MAX-1;i++)
        for (j=0;j<=MAX-1;j++)
            tmp[i][j] = *(ptr++);
            
    ptr = (int *)p;

    for (i=0;i<=MAX-1;i++)
        for (j=0;j<=MAX-1;j++) {
            *ptr = tmp[j][i];
            ptr++;
        }
   
    printf ("\t\t[ OK ]\n");

}

"if you fail to plan, you plan to fail"
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Transponovanje matrice u funkciji...02.06.2003. u 18:43 - pre 223 meseci
Konacno se pojavila tema koja je po meni za "Art of Programming", i sta se desi? - Ode u C/C++ diskusionu grupu! :)

Zasto nisi zadovoljan svojim resenjem?
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

fimalbonegaculo
product development, team lead,
developer, sys-admin
beograd

Član broj: 395
Poruke: 161
212.165.87.*

ICQ: 81662016


+1 Profil

icon Re: Transponovanje matrice u funkciji...02.06.2003. u 19:29 - pre 223 meseci
Tek učim C, ali mi se čini nepotrebnim da prvo prebacim mulri-dim polje u tmp promjenjivu pa da ga onda obradim. Vjerovatno može direktno sa pokazivačima... Nešto kao prvih 0-(MAX-1) je jedna vrsta, jeli, a onda kao od MAX pa do 2*MAX-1 je druga i tako dalje... pa ... onda ... ne znam ni ja.. Tako nešto
"if you fail to plan, you plan to fail"
 
Odgovor na temu

alkal
Aleksandar Kalanj
Beograd

Član broj: 7960
Poruke: 26
*.etf.bg.ac.yu

Jabber: alkal@elitesecurity.org
Sajt: wapdata.co.cc


Profil

icon Re: Transponovanje matrice u funkciji...02.06.2003. u 20:26 - pre 223 meseci
Mislim da je ovo razumljivije:

Code:

#include <stdio.h>

#define MAX 100

typedef struct {    /* Definicija tipa kvadratne matrice. */
    int n;
    int element[MAX][MAX];
} Matrica;

int upis (Matrica *mat) {
    int i, j, n;
    printf ("Unesi red kvadratne matrice: ");
    scanf ("%d", &n);
    if (n > MAX) return 0;    /* U slucaju prekoracenja vrati 0 (false). */
    mat->n = n;
    for (i=0; i<n; i++)
        for (j=0; j<n; j++) {
            printf ("mat[%d][%d]: ", i, j);
            scanf ("%d", &(mat->element[i][j]));
        }
    return 1;
}

void ispis (Matrica *mat) {
    int i, j, n;
    n = mat->n;
    printf ("----Kvadratna matrica:----\n");
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            printf ("mat[%d][%d] = %d\n", i, j, mat->element[i][j]);
}

void transponuj (Matrica *mat1, Matrica *mat2) {
    int i, j, n;
    n = mat2->n = mat1->n;
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            mat2->element[j][i] = mat1->element[i][j];
}

int main () {
    Matrica mat1, mat2;
    
    if ( upis (&mat1) == 0 ) { printf ("Prekoracenje!\n"); return 1; }
    ispis (&mat1);

    transponuj (&mat1, &mat2);
    ispis (&mat2);

    return 0;    /* Normalan zavrsetak programa. */
}


Iako ovaj program radi samo sa kvadratnim matricama nije ga teško uopštiti.
Za opšti slučaj bi definicija tipa matrice bila:

Code:

typedef struct {    /* Definicija tipa matrice. */
    int vrste;               /* Broj vrsta. */
    int kolone;              /* Broj kolona. */
    int element[MAX][MAX];
} Matrica;

Izvorni kod programa je priložen uz poruku.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Art of Programming :: Transponovanje matrice u funkciji...

[ Pregleda: 10066 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.