[ mladi_topal @ 04.01.2010. 21:23 ] @
Svaka pomoc je dobrodosla. Trebam napisati program, a ne snalazim se najbolje u c++, pa ako neko zna da ispise ovaj program bio bi mu zahvalan..
"Napisati program u programskom jeziku c++ koji od korisnika trazi da se unese dvodimenzionalna matrica a[5][5]. Program treba da ispise inverzu matrice.."
Unaprijed hvala....
[ R A V E N @ 04.01.2010. 22:18 ] @
'Googlaj' "insert invese matrix write C++ program", to je prilično čest školski primjer.
[ mladi_topal @ 04.01.2010. 22:52 ] @
Googlo sam ga ali mi izbacuje gresku, ne znam u cemu je greska.....Ako imas vremena pogledaj...
Code:

01    // matrix inversioon
02    // the result is put in Y
03    void MatrixInversion(float **A, int order, float **Y)
04    {
05        // get the determinant of a
06        double det = 1.0/CalcDeterminant(A,order);
07     
08        // memory allocation
09        float *temp = new float[(order-1)*(order-1)];
10        float **minor = new float*[order-1];
11        for(int i=0;i<order-1;i++)
12            minor[i] = temp+(i*(order-1));
13     
14        for(int j=0;j<order;j++)
15        {
16            for(int i=0;i<order;i++)
17            {
18                // get the co-factor (matrix) of A(j,i)
19                GetMinor(A,minor,j,i,order);
20                Y[i][j] = det*CalcDeterminant(minor,order-1);
21                if( (i+j)%2 == 1)
22                    Y[i][j] = -Y[i][j];
23            }
24        }
25     
26        // release memory
27        delete [] minor[0];
28        delete [] minor;
29    }
30     
31    // calculate the cofactor of element (row,col)
32    int GetMinor(float **src, float **dest, int row, int col, int order)
33    {
34        // indicate which col and row is being copied to dest
35        int colCount=0,rowCount=0;
36     
37        for(int i = 0; i < order; i++ )
38        {
39            if( i != row )
40            {
41                colCount = 0;
42                for(int j = 0; j < order; j++ )
43                {
44                    // when j is not the element
45                    if( j != col )
46                    {
47                        dest[rowCount][colCount] = src[i][j];
48                        colCount++;
49                    }
50                }
51                rowCount++;
52            }
53        }
54     
55        return 1;
56    }
57     
58    // Calculate the determinant recursively.
59    double CalcDeterminant( float **mat, int order)
60    {
61        // order must be >= 0
62        // stop the recursion when matrix is a single element
63        if( order == 1 )
64            return mat[0][0];
65     
66        // the determinant value
67        float det = 0;
68     
69        // allocate the cofactor matrix
70        float **minor;
71        minor = new float*[order-1];
72        for(int i=0;i<order-1;i++)
73            minor[i] = new float[order-1];
74     
75        for(int i = 0; i < order; i++ )
76        {
77            // get minor of element (0,i)
78            GetMinor( mat, minor, 0, i , order);
79            // the recusion is here!
80            det += pow( -1.0, i ) * mat[0][i] * CalcDeterminant( minor,order-1 );
81        }
82     
83        // release memory
84        for(int i=0;i<order-1;i++)
85            delete [] minor[i];
86        delete [] minor;
87     
88        return det;
89    }


[Ovu poruku je menjao X Files dana 07.01.2010. u 18:55 GMT+1]
[ R A V E N @ 05.01.2010. 05:49 ] @
Da li znaš šta obavlja bilo jedna linija kôda u gornjem programu?
[ mladi_topal @ 05.01.2010. 09:34 ] @
Kolega, bicu iskren... Ja jos uvijek nemam programiranje u c++ na fax-u, to dolazi tek u drugoj godini, a u srednjoj sam programirao u pascalu, pohadjao sam Gimnaziju... Obecao sam jednoj kolegici da cu joj to ako ikako mognem uraditi, vidim da zelis pomoci pa ako imas vremena molim te da mi to popravis s tim da se unosi matrica a[5][5]... Unaprijed hvala...
[ R A V E N @ 05.01.2010. 12:04 ] @
Je li ona išta zna? To je samo da se pokaže za neku zadaću ili tako nešto? Šta će na ispitu? Matrica se unosi preko dvostruke ugniježđene for petlje, eto toliko ću ti pomoći. A kolegici prenesi od mene nepopularan savjet da uči, jer padao sam i ja ispit kad nisam znao.
[ mladi_topal @ 05.01.2010. 12:15 ] @
Zna ona neke osnove, ali je problem sto je profesor takav da dodje na sat, zada im program i ne zanima ga kako ce to odraditi, samo kaze da se snadju, ja sam malo pregledao njene sveske, skripte od tog profesora ali nema tu nista..... i onda sam pretrazivao po netu i dosao do ovdje...
[ Mihajlo Cvetanović @ 05.01.2010. 12:24 ] @
Ne možemo da ti pomognemo ako ne znamo koja je greška u pitanju. Uradi copy-paste greške koju ti kompajler daje. E sad, ako je ovaj listing koji si ti nama dao istovetan kodu koji kompajliraš onda moraš da skineš brojeve na početku svake linije. To nije deo C++ koda. Takođe, nedostaju ti #include direktive na početku koda.
[ mladi_topal @ 05.01.2010. 12:29 ] @
evo sad sam pricao s njom, kaze da je uspjela nesto uraditi, ali kad pokrene program trazi joj da unese matricu, a kad unese onda joj samo izbaci inverse ali nema inverzn e matrice...
[ mladi_topal @ 05.01.2010. 12:41 ] @
Code:

#include <iostream>
using namespace std;
int main (){
    
    int inverz;
    int a[5][5];
    
    for (int i=0; i<5; i++){
    for (int j=0; j<5; j++){
        cin>> a[i][j];
        }
    }
    for (int i=0; i<5; i++){
        inverz=a[i][0];
        for (int j=0; j<5; j++){
                
        }
    }
    
    cout<<"inverz matrice "<<endl;
            
            
    system ("pause");
    return 1;
}


ovako je ona pokusala... ako neko moze da ovo popravi...

[Ovu poruku je menjao Mihajlo Cvetanović dana 05.01.2010. u 14:04 GMT+1]
[ Mihajlo Cvetanović @ 05.01.2010. 13:12 ] @
Ulepšao sam kod sa [code ] tagovima i uz malo editovanja. Kad se ovako posmatra normalno je da se ništa ne ispisuje, jer se ništa i ne dešava.

1. Potrebne su ti dve matrice, ulazna i izlazna. Ne možeš da radiš na istoj matrici, jer ti trebaju svi podaci ulazne matrice tokom cele operacije (ako je inverzija ono što mislim da jeste).
2. Kako se dobija inverzna matrica?
3. Kako se ispisuje sadržaj matrice?

Ne volim da dajem gotova rešenja, bolje da se čovek malo pomuči.
[ the_tosic @ 05.01.2010. 13:19 ] @
Ako program samo treba da ispise inverznu matricu onda je dovoljno staviti
Code:
for(i=0;i<5;i++){
for(j=0;j<5;j++)
cout << a[j][i]  ;
}
;).
[ R A V E N @ 05.01.2010. 13:40 ] @
Na Internetu postoji mnogo, mnogo resursa za učenje C/C++-a, mada mnogi nisu sveobuhvatni, ali malo tamo, malo ovamo i znanje se kompletira. Čak se mogu naći i knjige koje pokrivaju prilično opširne i ozbiljne teme.
[ night-shift @ 05.01.2010. 14:16 ] @
http://en.wikipedia.org/wiki/I...ix#Methods_of_matrix_inversion

http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/determinant/
[ mladi_topal @ 05.01.2010. 14:48 ] @
Puno vam hvala, uspio sam nesto da napravim, nadam se da ce biti ispravno...sve najbolje...
[ fLuXx @ 05.01.2010. 17:46 ] @
Ono sto night-shift pokusava da kaze je da to sto vi radite nije inverzna matrica. To sto vi radite je transponovana matrica. Inverzna matrica matrice A je 1/det(A) * adj(A), gde je adj(A) adjungovana matrica. Pogledajte te wiki linkove sto je ostavio, bice vam jasno.
[ mladi_topal @ 05.01.2010. 18:31 ] @
Primjetio sam da je transponovana, ali nisam jos odradio inverznu, puno ti hvala.......
[ wiktor91 @ 06.01.2010. 10:54 ] @
Ovaj kod koj je dao autor teme tj. kojeg je našao na netu nemože raditi ako ga se kompajlira zato jer to nije kompletan source spreman za kompajl nego funkcija koja se može koristiti u main() ili več negdje, ta funkcija sama po sebi neče ništa raditi ako se i uspije ovako iskompajlirati zato jer je treba prvo pozvati negdje u programu.

Sad bi ti mogao tu funkciju prenjeti u main() ali iskreno da ti kažem NEDA mi se i smatram da bi ta tvoja frendica mogla i sama bez problema napraviti ako je več odlučila upisati faks na kojem ima programiranje. Bilo bi logično pretpostaviti da ako je več upisala takav faks da če i sama znati rješiti zadatak ali šta češ, zna se kakvi sve ljudi pokušaju na faksu pa obično padnu nakon prve godine dok dođe do izražaja njihovo (ne)znanje i nezainteresiranost.
[ mladi_topal @ 07.01.2010. 13:26 ] @
iskreno ni meni se ne da raditi na ovom vise...imam ja svojih obaveza... ali ako neko ima vremena evo je transponovana matrica koju sam ja dobio, a treba mi inverzna..
Code:

#include <iostream>
using namespace std;
int main (){
    
    int inverz;
    int a[5][5];
    
    for (int i=0; i<5; i++){
    for (int j=0; j<5; j++){
        cin>> a[i][j];
        }
        }
        for (int i=0; i<5; i++){
          inverz=a[i][0];
        for (int j=0; j<5; j++){
                
            }
            }
            cout<<"inverz matrice "<<endl;
            
            for(int i=0;i<5; i++){
            for(int j=0;j<5; j++)
            cout << a[j][i]  ;
            }
        
            system ("pause");
            return 1;
            }



[Ovu poruku je menjao X Files dana 07.01.2010. u 18:56 GMT+1]
[ mladi_topal @ 21.01.2010. 02:21 ] @
Napisao sam program, s tim da je profesor smanjio na matricu A[3][3], pa ako kome bude trebao:

Napisati program u programskom jeziku C/C++ koji od korisnika traži da se unese
dvodimenzionalna matrica A dimenzija [3][3]. Program treba da ispiše inverznu
matricu A
Code:

#include<iostream>
using namespace std;
int main()
{
    int A[3][3]; //deklarisanje matrice 3 sa 3
    cout<<"UNesite matricu: "<<endl;
    for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
     cin>>A[i][j];   // petlje za unosenje marice sa tastature
     
     int At[3][3];  // deklarisanje transponirane matrice
     int predznak=-1;
     for(int i=0; i<3;i++)
     for(int j=0;j<3;j++)
     {
             At[i][j]=A[j][i];      // dobijanje transponirane matrice
                                    // obrtanjem redova i kolona glavne matrice
             }
             cout<<"Transponirana matrica : "<<endl;
     for(int i=0;i<3;i++)
{
     cout<<" ";
for(int j=0;j<3;j++)
cout<<At[i][j]<<" ";
cout<<endl;
}
int Aadj[3][3];
for(int i=0; i<3;i++)
{
        for(int j=0;j<3;j++)   // dobijanje adjungovane matrice sa 4
                               // ugnjezdene petlje
        {
                int sub[4];    // poddeterminanta
                               
                int br=0;      //brojac 
                predznak*=-1;
                for(int k=0;k<3;k++)  /* dobijaju se elementi adjungovane matrice
                                       tako shto se provjerava svaki element
                                       transponirane matrice da li se nalazi u istom
                                       redu ili koloni kao i element
                                       za koji trazimo poddeterminantu*/
                for(int l=0;l<3;l++)
                {
                        if(k!=i && l!=j)
                        {
                                sub[br]=At[k][l];
                                br++;
                                }
                                }
                  
                Aadj[i][j]=((sub[0]*sub[3])-(sub[1]*sub[2]))*predznak;
                //racunanje poddeterminante i elementa adjungovane matrice
                }
                }
                cout<<"Adjungovana matrica: "<<endl;
     for(int i=0;i<3;i++)
{
     cout<<" ";
for(int j=0;j<3;j++)
cout<<Aadj[i][j]<<" ";
cout<<endl;
}
                //racunanje determinante po formuli koju sam izveo na papiru
 int detA=(A[0][0]*A[0][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1]) -    
  (A[2][0]*A[1][1]*A[0][2]+A[2][1]*A[1][2]*A[0][0]+A[2][2]*A[1][0]*A[0][1]);
 float Ainverz[3][3];
  for(int i=0;i<3; i++)
  for(int j=0;j<3;j++)
   Ainverz[i][j]=(float)Aadj[i][j]/(float)detA;
  
  cout<<"Inverzna matrica izgleda ovako: "<<endl;
     for(int i=0;i<3;i++)
{
     cout<<" ";
for(int j=0;j<3;j++)
cout<<Ainverz[i][j]<<"   ";
cout<<endl;
}
  
system("PAUSE");
return 0;
}


[Ovu poruku je menjao X Files dana 21.01.2010. u 07:32 GMT+1]