Esercizio c++ con matrici

di il
3 risposte

Esercizio c++ con matrici

Salve, potete aiutarmi con questo esercizio? Allego ciò che sono riuscita a fare, ma arrivata a un certo punto mi blocco e non so più come continuare

Si realizzino le seguenti funzioni:

1. sommeCrescenti che riceve una matrice A di dimensioni n*m, e due interi n ed m. e restituisce true se, per ogni riga, la somma degli elementi è minore della somma degli elementi della riga successiva, false altrimenti. Più formalmente, restituisce true se per ogni i appartenente all'intervallo [0, n-1], la somma degli elementi presenti sulla riga di indice i è minore della somma degli elementi presenti sulla riga di indice i+1, false altrimenti.

2. annullaDuplicati che riceve una matrice A di dimensioni n*m, e due interi n ed m, e restituisce una matrice M di uguali dimensioni. In particolare, l'elemento M[j] sarà uguale a A[j] se il valore di A[j] non è presente in nessun altro elemento sulla colonna j di A; in caso contrario, M[j] sarà uguale a 0.

3. Un metodo main nel quale:
a. si crea una matrice di interi M di dimensioni n*m, con n ed m scelti a piacere;
b. si invocano opportunamente le funzioni definite ai punti 1 e 2 passando come input la matrice M e gli interi n ed m;
c. si stampano gli output delle funzioni invocate.


#include <iostream>
using namespace std;

bool sommeCrescenti (int** A, int n, int m)
{
    
    for (int i=0; i<n; i++)
    {
        int somma = 0;
        int somma_successiva = 0;
    
        for (int j=0; j<m; j++)
        {
            somma += A[i][j];
            somma_successiva += A[i+1][j];
        }
        if (somma > somma_successiva)
            return false;
    }
    
    return true;
}


int** annullaDuplicati(int** A, int n, int m)
{
    int** M = new int[n];
    for (int i=0; i<n; i++)
        M[i] = new int[m];

}

3 Risposte

  • Re: Esercizio c++ con matrici

    Così è troppo generico... anche il titolo dei thread sta diventando monotono. Devi essere più precisa. Cosa non sai fare, cosa hai provato a scrivere, dove trovi difficoltà o errori?

    Una cosa è risolvere piccoli errori un'altra fare da tutor sulle matrici
  • Re: Esercizio c++ con matrici

    oregon ha scritto:


    Così è troppo generico... anche il titolo dei thread sta diventando monotono. Devi essere più precisa. Cosa non sai fare, cosa hai provato a scrivere, dove trovi difficoltà o errori?

    Una cosa è risolvere piccoli errori un'altra fare da tutor sulle matrici
    #include <iostream>
    using namespace std;
    
    bool sommeCrescenti (int** A, int n, int m)
    {
       
        for (int i=0; i<n-1; i++)
        {
            int somma = 0;
            int somma_successiva = 0;
       
            for (int j=0; j<m; j++)
            {
                somma += A[i][j];
                somma_successiva += A[i+1][j];
            }
            if (somma >= somma_successiva)
                return false;
        }
        
        return true;
    }
    
    
    int** annullaDuplicati(int** A, int n, int m)
    {
        int** M = new int*[n];
        for (int i=0; i<n; i++)
            M[i] = new int[m];
    
        for (int j=0;j<m;j++)
    	{
    	    for (int k=0;k<n;k++)
    		{
    		    for (int i=0;i<m;i++)
    		    {
    				if (A[k][j]==A[i][j]&&k!=i)
    			    	M[i][j]=0;
    			
    			    if (A[k][j]!=A[i][j]&&k!=i)
    			        M[i][j]=A[i][j];
    			}
    		}
    	}
    	return M;
            
        
    }
    
    
    int main()
    {
        int n, m;
        cout << "inserire il numero di righe: ";
        cin >> n;
        cout << endl << "inserire il numero di colonne: ";
        cin >> m;
        
        int** A = new int*[n];
        for (int i=0; i<n; i++)
            A[i] = new int[m];
    
        for (int i=0; i<n; i++)
            for (int j=0; j<m; j++)
            {
                cout << "inserire elemento ["<<i<<"]["<<j<<"] :";
                cin >> A[i][j];
            }
            
        if (sommeCrescenti)
            cout << "tutte le righe hanno somma maggiore di quella precedente" << endl;
        else
            cout << "non tutte le righe hanno somma maggiore di quella precedente" << endl;
            
        int** M = annullaDuplicati(A, n, m);
        for (int i=0; i<n; i++)
        {
            for (int j=0; j<m; j++)
                cout << M[i][j] << " ";
                
            cout << endl;   
        }   
    }

    questo è ciò che sono riuscita a scrivere, ma c'è un errore nella funzione annullaDuplicati, perché quando stampo su video il suo return le prime due righe sono corrette, quindi supponendo di avere una matrice A di partenza

    A = 2 3 5 2 1
    3 2 4 5 1
    6 1 6 2 1
    1 5 3 7 1
    1 6 5 5 3


    mi aspetto di ottenere
    A = 2 3 5 0 0
    3 2 4 0 0
    6 1 6 0 0
    0 5 3 7 0
    0 6 0 0 3
    ma invece ottengo
    2 3 0 2 1
    3 2 4 0 1
    6 1 6 2 1
    0 5 3 7 1
    0 6 5 5 3.
  • Re: Esercizio c++ con matrici

    Usando le variabili i per le righe e j per le colonne, dentro al secondo for fai un conteggio degli elementi uguali ad A[ i ][ j ] nella colonna A[#][ j ] con un terzo for (variabile k). Dopo questo for, se il risultato del conteggio è maggiore di uno allora M[ i ][ j ] = 0, altrimenti è = A[ i ][ j ]
Devi accedere o registrarti per scrivere nel forum
3 risposte