Esercizio con matrici

di il
4 risposte

Esercizio con matrici

Salve, potreste indicarmi cosa ho sbagliato in questo esercizio? Grazie mille in anticipo...

la matrice data è la seguente:


5 2 5 5 3 2 9
1 3 5 2 1 6 7
3 5 5 3 2 3 1
2 7 5 1 1 9 0
7 6 5 9 7 4 4
#include <iostream>
using namespace std;

/*1.'estraiVettore' che riceve in ingresso una matrice di interi A e un intero 
z che pu`o assumere i valori 0 o 1.
Se z = 0, la funzione restituisce un array contenente gli elementi di A che si 
trovano nelle posizioni (i, j) con i+j pari.
Se z = 1, la funzione restituisce un array contenente gli elementi che si 
trovano nelle posizioni (i, j) con i+j dispari. 
Ad esempio, se la funzione riceve la matrice sotto riportata e z = 1, viene 
restituito l’array [2, 5, 2, 1, 5, 1, 7, 5, 3, 3, 2, 5, 1, 0, 6, 9, 4].*/

int* estraiVettore (int** A, bool z, int r, int c)
{
    int dim;
    if (z == 0)
        dim = (r*c)/2 + 1;
    else
        dim = (r*c)/2;
        
    int* v = new int[dim];
    
    for (int n=0; n<dim; n++)
        for (int i=0; i<r; i++)
            for (int j=0; j<c; j++)
            {
                if( (z==0) && ((i+j) % 2 != 0))
                    v[n] = A[i][j];
                
                else
                    if ((z == 1) && ((i+j) % 2 != 0))
                        v[n] = A[i][j];
            }
    return v;   
}

/*2.'mediaRighe' che riceve in ingresso una matrice di interi A e due numeri 
interi r1 ed r2 e restituisce il valore medio degli elementi di A che si trovano
nelle righe con indice compreso tra r1 e r2. 
Ad esempio, se la funzione riceve come parametri la matrice sottostante, r1 = 1 
ed r2 = 3, restituisce il valore 3,43
pari alla media dei numeri [1, 3, 5, 2, 1, 6, 7, 3, 5, 5, 3, 2, 3, 1, 2, 7, 5, 
1, 1, 9, 0] che si trovano nelle righe 1, 2 e 3 della matrice.*/

float mediaRighe (int** A, int r1, int r2, int r, int c)
{
    int somma;
    int num = (r2-r1+1)*c;
    
    for (int i=r1; i<r2; i++)
        for (int j=0; j<c; j++)
            somma += A[i][j];
    
    float media = somma/num;
    
    return media;
}

/*3. 'trasponiMatrice' che riceve in ingresso una matrice di interi e ne 
restituisce la trasposta.*/

int** trasponiMatrice (int** A, int c, int r)
{
    int** T = new int* [c];
    for (int i=0; i<c; i++)
        T[c] = new int[r];
        
    for (int i=0; i<c; i++)
        for (int j=0; j<r; j++)
            T[i][j] = A[j][i];
    
    return T;
        
    
}


/*4. un main in cui si leggono le funzioni dei punti 1, 2 e 3.*/

int main()
{
    int** A = new int*[5];
    A[0] = new int[7]{5, 2, 5, 5, 3, 2, 9};
    A[1] = new int[7]{1, 3, 5, 2, 1, 6, 7};
    A[2] = new int[7]{3, 5, 5, 3, 2, 3, 1};
    A[3] = new int[7]{2, 7, 5, 1, 1, 9, 0};
    A[4] = new int[7]{7, 6, 5, 9, 7, 4, 4};
    
    int* v = estraiVettore(A, 1, 5, 7);
    cout << " v = [ " ;
    for(int i=0; i<17; i++)
        cout << v[i] << " ";
    cout << "]" << endl;
    
    cout << mediaRighe(A, 1, 3, 5, 7);
    
    int** T = trasponiMatrice(A, 7, 5);
    for (int i=0; i<7; i++)
    {
        for (int j=0; j<5; j++)
            cout << T[i][j] << " ";
        cout << "/t " << endl;
        
    }
   
    return 0;
  
}

4 Risposte

  • Re: Esercizio con matrici

    Perché credi di avere sbagliato? Spiegati
  • Re: Esercizio con matrici

    oregon ha scritto:


    Perché credi di avere sbagliato? Spiegati
    quando eseguo il programma non viene stampato ciò che mi aspetto, ma un array di soli 4
  • Re: Esercizio con matrici

    Intanto le 3 for nella funzione che estrae il vettore sono sbagliate. Ne servono solo due
    
        int n = 0;    
        for (int i = 0; i < r; i++)
            for (int j = 0; j < c; j++)
                if (z == 0)
                {
                    if (((i + j) % 2) == 0)
                        v[n++] = A[i][j];
                }
                else
                {
                    if (((i + j) % 2) != 0)
                        v[n++] = A[i][j];
                }
    
    Poi nella funzione per la trasposta devi correggere la linea
    T[c] = new int[r];
    in
    T[i] = new int[r];
    Inoltre, quando usi una variabile per la somma, questa va inizializzata

    int somma=0;

    e poi continua a controllare ....
  • Re: Esercizio con matrici

    oregon ha scritto:


    Intanto le 3 for nella funzione che estrae il vettore sono sbagliate. Ne servono solo due
    
        int n = 0;    
        for (int i = 0; i < r; i++)
            for (int j = 0; j < c; j++)
                if (z == 0)
                {
                    if (((i + j) % 2) == 0)
                        v[n++] = A[i][j];
                }
                else
                {
                    if (((i + j) % 2) != 0)
                        v[n++] = A[i][j];
                }
    
    Poi nella funzione per la trasposta devi correggere la linea
    T[c] = new int[r];
    in
    T[i] = new int[r];
    Inoltre, quando usi una variabile per la somma, questa va inizializzata

    int somma=0;

    e poi continua a controllare ....
    Grazie mille, ho sistemato tutto (anche un errore che avevo fatto in mediaRighe) e ora va tutto bene. buona giornata
Devi accedere o registrarti per scrivere nel forum
4 risposte