Problema calcolo della matrice

di Anonimizzato8967 il
18 risposte
Salve ragazzi sono Pippo e vi chiedo gentilmente di risolvermi questo piccolo problema ma che può essere grande per chi è alle prime armi come me.Questo programma attraverso un una funzione che mi restituisce il valore booleano true per gli elementi pari della matrice,e false per quelli dispari.Quando nella seconda funzione devo smistare gli elementi in due vettori differenti qui mi si crea un problema che al momento non sono in grado di risolvere.La funzione stampa e leggi sono fatte bene.In attesa di una risposta vi ringrazio in anticipo.






bool elementi_pari(matrice mat,int rig,int col)
{
bool trovato;
int i,j;

for(i=0;i<rig;i++)
for(j=0;j<col;j++)
if(mat[j]%2==0)
return true;
else
return false;

}



void par(matrice mat,vettore vebp,vettore vebd,int rig,int col,int &riembp,int &riembd)
{
int i,j;
bool trovato;
riembp=0,riembd=0;
for(i=0;i<rig;i++)
for(j=0;j<col;j++)
if(trovato){
vebp[riembp]=mat[j];
riembp++;
}
else
vebd[riembd]=mat[j];
riembd++;


}

18 Risposte

  • Non ho capito il problema: Cosa significa true per elementi pari e false per dispari. La somma di tutta la matrice dev'essere pari o dispari?
  • skynet ha scritto:


    Non ho capito il problema: Cosa significa true per elementi pari e false per dispari. La somma di tutta la matrice dev'essere pari o dispari?
    true gli elementi pari ,false quelli dispari.
  • Si ma cosa significa. m[0][0] con valore 4 mi da true ma m[0][1] di valore 3 mi da false. Tu stai controllando tutta la matrice o stai controllando un valore. Vuoi mettere in due vettori distinti gli elementi true/false?
  • Sto controllando tutta la matrice e poi i risultati devono andare in due vettori distinti uno per gli elementi true e l'altro per il false.
  • E qual'e il problema che ti si crea? Stai passando le variabili per riferimento o per valore?
  • Ho provato sia per riferimento e sia per valore,ma il problema è sempre lo stesso quando stampo i vettori questi hanno valori sbagliati tutti si trovano in quelli false
  • Fa vedere le dichiarazioni delle funzioni, non solo lo sviluppo.
  • Okkè allora posto tutto il codice....

    bool elementi_pari(matrice mat,int rig,int col)
    {
    bool trovato;
    int i,j;

    for(i=0;i<rig;i++)
    for(j=0;j<col;j++)
    if(mat[j]%2==0)
    return true;
    else
    return false;

    }



    void par(matrice mat,vettore vebp,vettore vebd,int rig,int col,int &riembp,int &riembd)
    {
    int i,j;
    bool trovato;
    riembp=0,riembd=0;
    for(i=0;i<rig;i++)
    for(j=0;j<col;j++)
    if(trovato){
    vebp[riembp]=mat[j];
    riembp++;
    }
    else
    vebd[riembd]=mat[j];
    riembd++;


    }



    int main()
    {
    matrice mat;
    vettore vebp, vebd;
    int rig,col;
    int riembp,riembd;


    leggimat(mat,rig,col);
    stampamat(mat,rig,col);
    par(mat,vebp,vebd,rig,col,riembp,riembd);
    cout<<"elementi pari";
    stampavet(vebp,riembp);
    cout<<endl;
    cout<<"elementi dispari \n";
    stampavet(vebd,riembd);
    cout<<endl;

    system("pause");

    }


    questo ho fatto ho omesso sia leggimat stampamat e stampavet perchè quelle sono ok
  • Madonna sei duro però. Come sono definiti le funzioni?
    cos'è matrice? e definito come int ** o cosa.
    Così non stai passando gli elementi per riferimento ma per valore, per forza che i risultati sono sbagliati.
  • Const int max=50;
    typedef int matrice[max][max];
    typedef int vettore[max];

    si avevo fatto anche per riferimento e non andava mi faresti vedere come va la cosa ?
  • La definizione giusta dovrebbe essere questa
    
    void par(matrice &mat,vettore &vebp,vettore &vebd,int rig,int col,int &riembp,int &riembd)
    
  • Si così avevo fatto prima e poi lo svolgimento ? per piacere ovviamente XD
  • 
    void par(matrice mat,vettore vebp,vettore vebd,int rig,int col,int &riembp,int &riembd)
    {
    int i,j;
    bool trovato;
    riembp=0,riembd=0;
    for(i=0;i<rig;i++)
    for(j=0;j<col;j++)
    if(elementi_pari(mat,i,j)){
    vebp[riembp]=mat[i][j];
    riembp++;
    }
    else
    vebd[riembd]=mat[i][j];
    riembd++;
    
    
    }
    
    devi definire anche elementi pari così
    
    bool elementi_pari(matrice &mat,int rig,int col)
    {
       return ((mat[rig][col] % 2) == 0);
    }
    
  • Okok grazie veramente gentile
Devi accedere o registrarti per scrivere nel forum
18 risposte