Classe matrice con array a puntatori di stringhe

di il
1 risposte

Classe matrice con array a puntatori di stringhe

Salve a tutti avrei bisogno di un aiuto con questo esercizio sulle classi
creare una classe matrice con un array a puntatori di stringhe da acquisire in input; come funzioni bisogna creare una per l'acquisizione dei valori e se l'utente inseriva il "-" alla cella dell'array si assegna NULL, una per la stampa dei valori della martice e se una qualsiasi delle celle della matrice aveva NULL come valore si andava a stampare il "-"; una per la trasposta della matrice

io ci ho provato più volte e in un primo momento mi crashava il programma quando mettevo un trattino poi ho risolto e ora non mi crasha più ma neanche mi stampa la trasposta corretta , bensì la stessa di prima, avevo anche pensato di mettere la stampa all'interno della funzione trasposta ma provandoci non mi ha funzionato

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
const int N=3;
class Matrix
{
    public:
    Matrix();
    void inserisci(string* data,int r,int c);
    void stampa()const;
    void trasposta();
    private:
    string* array[N][N];
};
Matrix::Matrix()
{
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            array[i][j]=NULL;
        }
    }
}
void Matrix::inserisci(string* data,int r,int c)
{
    if(*data=="-")
    array[r][c]=NULL;
    else
    array[r][c]=data;
}
void Matrix::stampa()const
{
    for(int r=0;r<N;r++)
    {
        for(int c=0;c<N;c++)
        {
            if(array[r][c]!=NULL)
            cout<<setw(10)<<*array[r][c]<<setw(10);
            else cout<<setw(10)<<"-"<<setw(10);
        }
        cout<<endl;
    }
}
void Matrix::trasposta()
{
    string* temp[N][N];

    for(int r=0;r<N;r++)
    {
        for(int c=0;c<N;c++)
        {
            temp[c][r]=array[r][c];
        }
    }
    for(int r=0;r<N;r++)
    {
        for(int c=0;c<N;c++)
        {
            cout<<setw(10)<<*temp[r][c]<<setw(10);
        }
        cout<<endl;
    }
}

int main()
{
    Matrix mat;
    string* value;
    for(int r=0;r<N;r++)
    {
        for(int c=0;c<N;c++)
        {
            value=new string;
            cout<<"Inserire il valore della cella"<<r<<","<<c<<":";
            cin>>*value;
            mat.inserisci(value,r,c);
        }
    }
    cout<<"Matrice:"<<endl;
    mat.stampa();
    cout<<"Matrice trasposta:"<<endl;
    mat.trasposta();
return 0;
}

1 Risposte

  • Re: Classe matrice con array a puntatori di stringhe


    Ciao, ho letto il tuo post e vorrei provare ad aiutarti.
    Facendo il debugging del tuo codice mi sono reso conto che il problema è nella stampa.
    Il mio dubbio è il seguente: avendo creato una funzione membro per la stampa, perchè nella funzione che determina la trasposta c'è un'altra porzione di codice che assolve (in teoria) allo stesso scopo?
    Dico in teoria, perchè se dai una rapida occhiata alle due porzioni di codice ti renderai subito conto che non sono proprio eguali .
    Quella corretta è la funzione stampa mentre la porzione di codice in trasposta non va bene.
    dovresti sostituirla con:
    
    for(int r=0;r<N;r++)
            {
                for(int c=0;c<N;c++)
                {
                    if(temp[r][c]!=NULL)
                    cout<<setw(10)<<*temp[r][c]<<setw(10);
                    else cout<<setw(10)<<"-"<<setw(10);
                }
                cout<<endl;
            }
    
    In ogni caso, seppure con tale modifica il programma funziona, devo avvisarti che un codice siffatto non è coerente; hai gia una fuzione di stampa devi solo riutilizzarla e per farlo dovresti solo modificarne il prototipo.
    Spero di esserti stato utile.
    Buona giornata
    [/color]
Devi accedere o registrarti per scrivere nel forum
1 risposte