Classe matrice con un 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
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; }
Risposte
Manca soltanto il controllo che il puntatore non sia NULL.
cioè?
puoi farmi vedere come e dove va scritto nel codice?
puoi farmi vedere come e dove va scritto nel codice?
Puoi fare così
Oppure anche
In altre parole il codice è corretto ma nella seconda visualizzazione hai dimenticato di tenere conto del fatto che c'erano i puntatori a NULL...
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++) { const string str = *temp[r][c] == NULL? "-" : temp[r][c]; cout<<setw(10)<< str <<setw(10); } cout<<endl; } }
Oppure anche
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++) { if(temp[r][c] == NULL) cout<<setw(10)<< "-" <<setw(10); else cout<<setw(10)<< *temp[r][c] <<setw(10); } cout<<endl; } }
In altre parole il codice è corretto ma nella seconda visualizzazione hai dimenticato di tenere conto del fatto che c'erano i puntatori a NULL...
ti ringrazio moltissimo ho capito dove avevo sbagliato, o meglio cosa avevo dimenticato