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