Matrice i vektori c++

poruka: 14
|
čitano: 7.787
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
Matrice i vektori c++

znaci ovo je moj program i ako bi mi itko mogao pomoci oko problema...imam funkciju skalarni produkt SkProdukt koju moram koristiti za pomnozit matricu i vektor u funkciji PomnoziMatVekt...e sad moj problem je kako napravit da mi ta funkcija vraca produkt koji je oblika vektor? unaprijed hvala

 

#include <iostream>
#include <iomanip>
#include <math.h>
#include <vector>
#include <assert.h>
using namespace std;


 
struct Vektor3D
{
    vector<double> e;   
   
    Vektor3D() {
       e.resize(3);
       }
    Vektor3D(double pX, double pY, double pZ) {
       e.resize(3);
       e[0]=pX;
       e[1]=pY;
       e[2]=pZ;
       }

    Vektor3D(vector<double> p) {   
       assert( p.size()==3 );
       e=p;
    }

};
vector<double> komponente;

struct Matrica3D
{
    vector< Vektor3D > r;   

    Matrica3D() {
       r.resize(3);
       }
    Matrica3D(Vektor3D a, Vektor3D b, Vektor3D c){
       r.resize(3);
       r[0] = a;
       r[1] = b;
       r[2] = c;
       }
    Matrica3D(vector< vector<double> > p) {
       r.resize(3);
       assert( p.size()==3 );      
       r[0] = Vektor3D( p[0] );
       r[1] = Vektor3D( p[1] );
       r[2] = Vektor3D( p[2] );
       }
};

Vektor3D Zbroji(Vektor3D v1, Vektor3D v2) {
    return Vektor3D(
             v1.e[0]+v2.e[0],
             v1.e[1]+v2.e[1],
             v1.e[2]+v2.e[2]
             );
    }

double SkProdukt(Vektor3D v1, Vektor3D v2) {
    return v1.e[0]*v2.e[0] + v1.e[1]*v2.e[1] + v1.e[2]*v2.e[2];
    }

Vektor3D DobaviStupac(Matrica3D m, int i){   
    assert(i>=0 && i<3);
    return Vektor3D( m.r[0].e[i], m.r[1].e[i], m.r[2].e[i]);
    }

Vektor3D DobaviRedak(Matrica3D m, int i){   
    assert(i>=0 && i<3);
    return m.r[i];
    }
void IspisiVektor(Vektor3D a)
{
    cout<<a.e[0]<<"i+ "<<a.e[1]<<"j+ "<<a.e[2]<<"k"<<endl;
}

void Ispisi(Vektor3D a)
{
    cout<<a.e[0]<<" "<<a.e[1]<<" "<<a.e[2]<<" "<<endl;
}

void IspisiMatricu(Matrica3D m)
{
    Ispisi(DobaviRedak(m,0));
    Ispisi(DobaviRedak(m,1));
    Ispisi(DobaviRedak(m,2));
}


Vektor3D PomnoziMatVekt(Matrica3D m ,Vektor3D a)
{
   
    SkProdukt (m.r[0], a);
    SkProdukt (m.r[1], a);
    SkProdukt (m.r[2], a);
   
  
}




int main()
{   
    Vektor3D vektor1 (5,7,3);
    Vektor3D vektor2 (4,5,6);
    Vektor3D vektor3 (6,9,3);
    Vektor3D vektor4 (1,2,3);
    Vektor3D vektor5 (2,3,4);

    Matrica3D m1 (vektor1,vektor2,vektor3);
    Matrica3D m2 (vektor4,vektor5,vektor1);

    IspisiVektor(vektor1);
    IspisiMatricu(m1);
}

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Matrice i vektori c++

 

 

#include <iostream>
#include <iomanip>
#include <math.h>
#include <vector>
#include <assert.h>
using namespace std;



struct Vektor3D
{
    vector<double> e;

    Vektor3D() {
       e.resize(3);
       }
    Vektor3D(double pX, double pY, double pZ) {
       e.resize(3);
       e[0]=pX;
       e[1]=pY;
       e[2]=pZ;
       }

    Vektor3D(vector<double> p) {
       assert( p.size()==3 );
       e=p;
    }

};
vector<double> komponente;

struct Matrica3D
{
    vector< Vektor3D > r;

    Matrica3D() {
       r.resize(3);
       }
    Matrica3D(Vektor3D a, Vektor3D b, Vektor3D c){
       r.resize(3);
       r[0] = a;
       r[1] = b;
       r[2] = c;
       }
    Matrica3D(vector< vector<double> > p) {
       r.resize(3);
       assert( p.size()==3 );
       r[0] = Vektor3D( p[0] );
       r[1] = Vektor3D( p[1] );
       r[2] = Vektor3D( p[2] );
       }
};

Vektor3D Zbroji(Vektor3D v1, Vektor3D v2) {
    return Vektor3D(
             v1.e[0]+v2.e[0],
             v1.e[1]+v2.e[1],
             v1.e[2]+v2.e[2]
             );
    }

double SkProdukt(Vektor3D v1, Vektor3D v2) {
    return v1.e[0]*v2.e[0] + v1.e[1]*v2.e[1] + v1.e[2]*v2.e[2];
    }

Vektor3D DobaviStupac(Matrica3D m, int i){
    assert(i>=0 && i<3);
    return Vektor3D( m.r[0].e[i], m.r[1].e[i], m.r[2].e[i]);
    }

Vektor3D DobaviRedak(Matrica3D m, int i){
    assert(i>=0 && i<3);
    return m.r[i];
    }
void IspisiVektor(Vektor3D a)
{
    cout<<a.e[0]<<"i+ "<<a.e[1]<<"j+ "<<a.e[2]<<"k"<<endl;
}

void Ispisi(Vektor3D a)
{
    cout<<a.e[0]<<" "<<a.e[1]<<" "<<a.e[2]<<" "<<endl;
}

void IspisiMatricu(Matrica3D m)
{
    Ispisi(DobaviRedak(m,0));
    Ispisi(DobaviRedak(m,1));
    Ispisi(DobaviRedak(m,2));
}





Vektor3D PomnoziMatVekt(Matrica3D m ,Vektor3D a)
{
    /* da li si na
       ovo
       mislio? */

    return Vektor3D(
    SkProdukt (m.r[0], a),
    SkProdukt (m.r[1], a),
    SkProdukt (m.r[2], a)
    );
}





int main()
{
    Vektor3D vektor1 (5,7,3);
    Vektor3D vektor2 (4,5,6);
    Vektor3D vektor3 (6,9,3);
    Vektor3D vektor4 (1,2,3);
    Vektor3D vektor5 (2,3,4);

    Matrica3D m1 (vektor1,vektor2,vektor3);
    Matrica3D m2 (vektor4,vektor5,vektor1);

    IspisiVektor(vektor1);
    IspisiMatricu(m1);
}

http:/https://play.google.com/store/apps/details?id=org.kde.necessitas.example.SMASHHH
10 godina
neaktivan
offline
Matrice i vektori c++

Da da puno fala,ja san nesto slicno pokusao napraviti pa nije radilo,mozda nisan napisao kako treba,fala :D

 

 
0 0 hvala 0
10 godina
neaktivan
offline
Re: Matrice i vektori c++

Ali mi sad ako ovako napisem i u mainu stavim PomnozivMatVekt(m1,vektor1) ne ispise nista kad pokrenem :/

14 godina
neaktivan
offline
Re: Matrice i vektori c++

/*pisem s mobitela

tako da je indent ravan nuli

, dosta je muke uopce postati

u kod-stilu a kamoli ga urediti

*/

 

#include <iostream>

#include <iomanip>

#include <math.h>

#include <vector>

#include <assert.h>

using namespace std;

 

 

struct Vektor3D

{

vector < double >e;

 

Vektor3D()

{

e.resize(3);

}

Vektor3D(double pX, double pY, double pZ)

{

e.resize(3);

e[0] = pX;

e[1] = pY;

e[2] = pZ;

}

 

Vektor3D(vector < double >p)

{

assert(p.size() == 3);

e = p;

}

 

};

 

vector < double >komponente;

 

struct Matrica3D

{

vector < Vektor3D > r;

 

Matrica3D()

{

r.resize(3);

}

Matrica3D(Vektor3D a, Vektor3D b, Vektor3D c)

{

r.resize(3);

r[0] = a;

r[1] = b;

r[2] = c;

}

Matrica3D(vector < vector < double > >p)

{

r.resize(3);

assert(p.size() == 3);

r[0] = Vektor3D(p[0]);

r[1] = Vektor3D(p[1]);

r[2] = Vektor3D(p[2]);

}

};

 

Vektor3D Zbroji(Vektor3D v1, Vektor3D v2)

{

return Vektor3D(v1.e[0] + v2.e[0], v1.e[1] + v2.e[1], v1.e[2] + v2.e[2]);

}

 

double SkProdukt(Vektor3D v1, Vektor3D v2)

{

return v1.e[0] * v2.e[0] + v1.e[1] * v2.e[1] + v1.e[2] * v2.e[2];

}

 

Vektor3D DobaviStupac(Matrica3D m, int i)

{

assert(i >= 0 && i < 3);

return Vektor3D(m.r[0].e[i], m.r[1].e[i], m.r[2].e[i]);

}

 

Vektor3D DobaviRedak(Matrica3D m, int i)

{

assert(i >= 0 && i < 3);

return m.r[i];

}

 

void IspisiVektor(Vektor3D a)

{

cout << a.e[0] << "i+ " << a.e[1] << "j+ " << a.e[2] << "k" << endl;

}

 

void Ispisi(Vektor3D a)

{

cout << a.e[0] << " " << a.e[1] << " " << a.e[2] << " " << endl;

}

 

void IspisiMatricu(Matrica3D m)

{

Ispisi(DobaviRedak(m, 0));

Ispisi(DobaviRedak(m, 1));

Ispisi(DobaviRedak(m, 2));

}

 

 

Vektor3D PomnoziMatVekt(Matrica3D m, Vektor3D a)

{

  return Vektor3D(

SkProdukt(m.r[0], a) ,

SkProdukt(m.r[1], a) , 

SkProdukt(m.r[2], a)

);

 

 

}

 

 

 

 

int main()

{

Vektor3D vektor1(5, 7, 3);

Vektor3D vektor2(4, 5, 6);

Vektor3D vektor3(6, 9, 3);

Vektor3D vektor4(1, 2, 3);

Vektor3D vektor5(2, 3, 4);

 

Matrica3D m1(vektor1, vektor2, vektor3);

Matrica3D m2(vektor4, vektor5, vektor1);

 

IspisiVektor(vektor1);

IspisiMatricu(m1);

 

/**

* dodaj

**/

IspisiVektor( PomnoziMatVekt(m1,vektor1) );

 

return 0;

}

 

http:/https://play.google.com/store/apps/details?id=org.kde.necessitas.example.SMASHHH
Poruka je uređivana zadnji put ned 16.3.2014 15:13 (nik_02).
10 godina
neaktivan
offline
Re: Matrice i vektori c++

zahvaljujem na trudu,puno ste pomogli :) sad je sve ok fala vam puno :D

 

8 godina
neaktivan
offline
Matrice i vektori c++

Ako moze pomoc, trebam da napravim program nastajanja ekspanzije matrice, tacnije zadatak je slijedeci: 

Neka je A neka matrica formata m x n . Pod p x q ekspanzijom matrice A smatramo novu matricu formata m*p x n*q koja se dobija tako što se svaki element , matrice A zamijeni blokom formata p x q pri čemu su svi elementi tog bloka jednaki , . Na primjer, ukoliko matrica A glasi A ={(3,5),(4,-1),(0,2)}  njena 2 x 4 ekspanzija glasi {(3,3,3,3,5,5,5,5),(3,3,3,3,5,5,5,5),(4,4,4,4,-1,-1,-1,-1),(4,4,4,4,-1,-1,-1,-1),(0,0,0,0,2,2,2,2),(0,0,0,0,2,2,2,2)} Napišite funkciju “EkspanzijaMatrice” sa parametra. Prvi parametar je matrica A sa realnim elementima koja je organizirana kao vektor vektōrâ realnih brojeva (tj. vektor čiji su elementi vektori realnih brojeva, i to tipa “double”), dok su drugi i treći parametar cijeli brojevi i . Funkcija treba da kreira i kao rezultat vrati p x q ekspanziju matrice A. U slučaju da je neki od parametara ili nula ili negativan, funkcija treba da baci izuzetak tipa “domain_error” uz prateći tekst “Nelegalni parametri”. U slučaju da prvi parametar nema ispravnu formu matrice, odnosno ukoliko svi redovi proslijeđenog vektora vektōrâ nemaju isti broj elemenata, treba baciti izuzetak tipa “domain_error” uz prateći tekst “Nekorektna matrica”. Napisanu funkciju demonstrirajte u testnom programu u kojem se sa tastature prvo traži unos dva cijela broja i , zatim elementi matrice A formata m x n , te konačno dva cijela broja p  i q . Program nakon toga treba da pozivom napisane funkcije kreira p x qekspanziju matrice A i da ispiše njene elemente na ekran, svaki red u posebnom redu na ekranu.

Obavezno predvidite hvatanje izuzetaka koji bi eventualno mogli biti bačeni iz funkcije.  

 

 

Pokusavala sam puno toga, ali nije mi uspijevalo. Ponestalo mi je ideja.....:(

 
0 1 hvala 0
10 godina
neaktivan
offline
Re: Matrice i vektori c++
dada858 kaže...

Ako moze pomoc, trebam da napravim program nastajanja ekspanzije matrice, tacnije zadatak je slijedeci: 

Neka je A neka matrica formata m x n . Pod p x q ekspanzijom matrice A smatramo novu matricu formata m*p x n*q koja se dobija tako što se svaki element , matrice A zamijeni blokom formata p x q pri čemu su svi elementi tog bloka jednaki , . Na primjer, ukoliko matrica A glasi A ={(3,5),(4,-1),(0,2)}  njena 2 x 4 ekspanzija glasi {(3,3,3,3,5,5,5,5),(3,3,3,3,5,5,5,5),(4,4,4,4,-1,-1,-1,-1),(4,4,4,4,-1,-1,-1,-1),(0,0,0,0,2,2,2,2),(0,0,0,0,2,2,2,2)} Napišite funkciju “EkspanzijaMatrice” sa parametra. Prvi parametar je matrica A sa realnim elementima koja je organizirana kao vektor vektōrâ realnih brojeva (tj. vektor čiji su elementi vektori realnih brojeva, i to tipa “double”), dok su drugi i treći parametar cijeli brojevi i . Funkcija treba da kreira i kao rezultat vrati p x q ekspanziju matrice A. U slučaju da je neki od parametara ili nula ili negativan, funkcija treba da baci izuzetak tipa “domain_error” uz prateći tekst “Nelegalni parametri”. U slučaju da prvi parametar nema ispravnu formu matrice, odnosno ukoliko svi redovi proslijeđenog vektora vektōrâ nemaju isti broj elemenata, treba baciti izuzetak tipa “domain_error” uz prateći tekst “Nekorektna matrica”. Napisanu funkciju demonstrirajte u testnom programu u kojem se sa tastature prvo traži unos dva cijela broja i , zatim elementi matrice A formata m x n , te konačno dva cijela broja p  i q . Program nakon toga treba da pozivom napisane funkcije kreira p x qekspanziju matrice A i da ispiše njene elemente na ekran, svaki red u posebnom redu na ekranu.

Obavezno predvidite hvatanje izuzetaka koji bi eventualno mogli biti bačeni iz funkcije.  

 

 

Pokusavala sam puno toga, ali nije mi uspijevalo. Ponestalo mi je ideja.....:(

 Stavi kod koji si napisala pa ce ti onda netko moci pomoci...

8 godina
neaktivan
offline
Re: Matrice i vektori c++

U par primjera radi uredu, ali u vecini ne, ne razumijem zasto .......ako neko mozda zna dobro bi mi dosla pomoc?

 

#include <iostream>
#include <vector>
#include <stdexcept>
#include <iomanip>

typedef std::vector<std::vector<double>> Matrica;

Matrica EkspanzijaMatrice(Matrica A,int p, int q){
if(p<=0 || q<=0) throw std::domain_error("Nelegalni parametri.");
int br_kolona(A[0].size());

if(br_kolona==0) return A;

for(int i=0;i<A.size();i++){
if(A[i].size()!=br_kolona) throw std::domain_error("Nekorektna matrica.");
}

Matrica a(A.size()*p,
std::vector<double>(br_kolona*q));
std::vector<double> v ;
for(int i=0;i<A.size();i++)
for(int j=0;j<A[i].size();j++)
v.push_back(A[i][j]);
int i(0);
for(int j=0;j<a.size();j++){
for(int k=0;k<a[j].size();k++){
a[j][k]=v[i];
if(k==(a[j].size()/2)-1) i++;
}
i--;
if((j+1)%p==0) i+=p;

}
return a;
}
int main() {
std::cout << "Unesite dva broja: " ;
int m,n;
std::cin >>m >>n;
Matrica A(m,std::vector<double>(n));
std::cout << "Unesite elemente matrice: " << std::endl;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
std::cout << "Unesite A[" << i+1 << "][" << j+1 << "] element matrice: " ;
double x;
std::cin >> x;
A[i][j]=x;
}
}
std::cout << "Unesite dva broja: ";
int p,q;
std::cin >> p >> q;
try{
A=EkspanzijaMatrice(A,p,q);
for(int i=0;i<A.size();i++){
for(int j=0;j<A[i].size();j++){
std::cout << std::setw(5) << A[i][j] ;
}
std::cout << std::endl;
}
}
catch(std::domain_error izuzetak){
std::cout << izuzetak.what() << std::endl;
}

return 0;
}

Poruka je uređivana zadnji put uto 15.3.2016 11:51 (dada858).
9 godina
offline
Matrice i vektori c++

zar nebi bilo lakse stavit using namespace std; 

prije int main-a? nego pisati svaki put? 

Moj PC  
0 0 hvala 0
8 godina
neaktivan
offline
Re: Matrice i vektori c++

nekome vjerovatno bi,ali kod nas na fakultetu preporucuju ovako, pa sam tako i navikla :(

12 godina
neaktivan
offline
Re: Matrice i vektori c++
dada858 kaže...

nekome vjerovatno bi,ali kod nas na fakultetu preporucuju ovako, pa sam tako i navikla :(

Ne postoji niti jedan opravdani razlog za ne korištenje imenika std. Više spavaj kod kuće pa ćeš manje spavati na predavanju

Poruka je uređivana zadnji put uto 15.3.2016 23:58 (TracerCPP).
8 godina
neaktivan
offline
Re: Matrice i vektori c++

Mislim da to sto sam koristila std je manje bitno od samog zadatka.....

6 godina
neaktivan
offline
Matrice i vektori c++

pozdrav imam problema sa ovim zadatkom pa ako moze pomoc bio bi zahvalan

 

Napravi program koji će unositi n definiranih vektora. Za svaki vektor se bilježe komponente i,j,k.
Prvi parametar je broj vektora koji unosi korisnik, a ostale parametre unosi korisnik kao i,j,k.
Nakon toga ispisuju se sve unesene točke koje je korisnik unjeo i intenzitet vektora.

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice