Problema con esercizio matrici

Stato
Discussione chiusa ad ulteriori risposte.

dialessluca

Nuovo Utente
6
0
C++:
#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;
    }
}
Salve, potete aiutarmi con questo esercizio?

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.



Ho allegato 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.
 
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili