Creare una classe matrice

di il
6 risposte

Creare una classe matrice

Salve a tutti ho già fatto questa domanda in un post precedente ma evidentemente non sono riuscito a capire per bene quali sono gli errori che mi dà il compilatore
potreste aiutarmi ecco il testo ed una mia versione
Realizzare in c++ una classe Matrice che possiede come attributo un array NxN di stringhe , dove N è una costante intera.
La classe deve disporre di:
-un costruttore che inizializza tutti gli elementi della matrice con la stringa vuota;
-una funzione leggi() che legge riga per riga dallo standard input il valore di tutti gli elementi della matrice;
-una funzione stampa() che stampa riga per riga dallo standard output il valore di tutti gli elementi della matrice(andando a capo per ogni nuova riga);
-una funzione mirror() che modifica la matrice scambiando tra loro le colonne k e N-1-k(k=0,1,....,N-1).
Esempio data una matrice 3x3:
a b c
d e f
g h i

il suo mirror è
c b a
f e d
i h g

data una matrice 4x4:
a b c l
d e f m
g h i n
o p q r
il suo mirror è
l c b a
m f e d
n i h g
r q p o

allora io l'ho fatto per mezzo di una compilazione separata
ecco il mio codice con qualche errorino che non cqapisco come correggerlo
file header

#ifndef MATRICE_H_INCLUDED
#define MATRICE_H_INCLUDED
#include<string>
using namespace std;
const int N=4;
class matrice
{
public:
matrice();
void leggi();
void stampa();
void mirror();

private: string a[N][N];

}


#endif // MATRICE_H_INCLUDED

file sorgente matrice.cpp

#include<iostream>
#include<string>
#include "matrice.h"
using namespace std;

matrice::matrice()
{
     int i,j;
     for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            a[i][j]="";
        }
     }
}

void matrice::leggi()
{
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            getline(cin, a[i][j]);
        }
    }
}

void matrice::stampa()
{
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}

void matrice::mirror()
{
    int i,j;
    string temp;
    for(i=0;i<N;i++){
        for(j=0;j<N/2;j++){
            temp=a[i][j];
            a[i][j]=a[i][N-1-j];
            a[i][N-1-j]=temp;
        }
    }

}
file sorgente matricetest.cpp

#include<iostream>
#include<string>
#include "matrice.h"
main()
{
    matrice M;
    M.leggi();
    M.stampa();
    M.mirror();
    M.stampa();

}

6 Risposte

  • Re: Creare una classe matrice

    
    matrice::matrice()
    {
         int i,j;
         for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                a[i][j]="";
            }
         }
    }
    
    Una stringa è già inizializzata di suo non c'è bisogno di questo codice.

    NON ESISTE main() e basta. Mettilo in testa una volta per tutte. in C++ il main è definito come:
    
    int main();
    
    il mirror lo puoi fare usando la funzione string::reverse
  • Re: Creare una classe matrice

    Purtroppo il reverse non l'ho studiato
    devo scrivere la funzione per estesa è proprio quello l'esercizio
    comunque il main lo avevo corretto ma evidentemente ho messo il programma non corretto
    per il resto lo hai provato funziona?
    a me non pur eliminando il codice che mi hai detto mi dà gli stessi errori di prima
    potresti provare a compilarlo e mi dici a cosa è dovuto
  • Re: Creare una classe matrice

    Che errore ti da?
    Controlla il file matrice.h, manca un ; alla dopo la parentesi di chiusura della classe.
  • Re: Creare una classe matrice

    Ho corretto tutti gli errori
    ecco il programma che dovrebbe funzionare ma non funziona
    file header
    
    #ifndef MATRICE_H
    #define MATRICE_H
    #include<string>
    using namespace std;
    const int N=4;
    class matrice
    {
    public:
    matrice();
    void leggi();
    void stampa();
    void mirror();
    
    private: string a[N][N];
    
    };
    
    
    #endif
    
    
    file matrice.cpp
    
    #include<iostream>
    #include<string>
    #include "matrice.h"
    using namespace std;
    
    
    void matrice::leggi()
    {
        int i,j;
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                getline(cin,a[i][j]);
            }
        }
    }
    
    void matrice::stampa()
    {
        int i,j;
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    
    void matrice::mirror()
    {
        int i,j;
        string temp;
        for(i=0;i<N;i++){
            for(j=0;j<N/2;j++){
                temp=a[i][j];
                a[i][j]=a[i][N-1-j];
                a[i][N-1-j]=temp;
            }
        }
    
    }
    
    
    file matricetest.cpp
    
    #include<iostream>
    #include<string>
    #include "matrice.h"
    int main()
    {
        matrice M;
        M.leggi();
        M.stampa();
        M.mirror();
        M.stampa();
    
    }
    
    
    mi da questi errori nel file matricetest.cpp

    C:\Users\Vincenzo\Desktop\prova laboratorio\matricetest.o:matricetest.cpp|| undefined reference to `matrice::matrice()'|
    C:\Users\Vincenzo\Desktop\prova laboratorio\matricetest.o:matricetest.cpp|| undefined reference to `matrice::leggi()'|
    C:\Users\Vincenzo\Desktop\prova laboratorio\matricetest.o:matricetest.cpp|| undefined reference to `matrice::stampa()'|
    C:\Users\Vincenzo\Desktop\prova laboratorio\matricetest.o:matricetest.cpp|| undefined reference to `matrice::mirror()'|
    C:\Users\Vincenzo\Desktop\prova laboratorio\matricetest.o:matricetest.cpp|| undefined reference to `matrice::stampa()'|
    ||=== Build finished: 5 errors, 0 warnings ===|

    e nel file matrice.cpp

    c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libmingw32.a(main.o):main.c|| undefined reference to `WinMain@16|
    ||=== Build finished: 1 errors, 0 warnings ===|
  • Re: Creare una classe matrice

    Cmq ora ho risolto quasi
    mi dà un errore nel main
    error:expected ; before const
    che vuol dire?
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    const int N=4;
    
    class Matrice
    {
    public:
    Matrice();
    void leggi();
    void stampa()const;
    void mirror();
    private:
    string a[N][N];
    };
    
    Matrice::Matrice()
    {
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
    {
    a[i][j]="";
    }
    }
    }
    
    void Matrice::leggi()
    {
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
    {
    string str;
    cin>>str;
    getline(cin,str);
    a[i][j]=str;
    }
    }
    }
    
    void Matrice::stampa()const
    {
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
    {
    cout<<a[i][j]<<" ";
    }
    cout<<endl;
    }
    }
    
    void Matrice::mirror()
    {
    string ap;
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N/2;j++)
    {
    ap=a[i][j];
    a[i][j]=a[i][N-1-j];
    a[i][N-1-j]=ap;
    }
    }
    }
    int main()
    {
        Matrice M;
        M.leggi();
        M.stampa()const;
        M.mirror();
        M.stampa()const;
    return 0;
    }
    
    
  • Re: Creare una classe matrice

    
    int main()
    {
        Matrice M;
        M.leggi();
        M.stampa()const;
        M.mirror();
        M.stampa()const;
    return 0;
    }
    
    togli il const.
Devi accedere o registrarti per scrivere nel forum
6 risposte