Topic
  • No replies
HA0U_Renzo_Remotti
HA0U_Renzo_Remotti
1 Post

Pinned topic vector - Hel me

‏2013-11-12T13:08:13Z |

I need do a program with library <vector> in C++, But I have some problem. Can you help me, pls? My code is:

#include <iostream>
#include <stdexcept>
#include <fstream>
#include <vector>

using namespace std;

const string menu="\nScegli una operazione op tra\n\
- ? show menu\n\
- q quit menu\n\
- = i k Rk=Ri\n\
- A i <nome> legge dal file <nome> una matrice e la salva nel registro Ri\n\
      (errore se il file non esiste o non e' una matrice n*n di naturali)\n\
- B i <nome> scrive nel file <nome> la matrice nel registro Ri\n\
- C i j k Rk=Ri+Rj\n\
- D i j k Rk=Ri*Rj\n\
- E i m k Rk=somma(Ri^j | j=1...m), con m intero positivo e\n\
          M^j definita per induzione M^1=M e M^{j+1}=M^j*M\n";

typedef unsigned int Nat;
typedef vector<Nat> Mat;
bool LeggiDaFile (const Nat n, Mat& M, const string& nome) {
    int i = 0;
    cout<<"Nome del File da leggere: ";
    ifstream file(nome.c_str());
    for (unsigned int u=0;u<n;u++) {
            for (int v=0;v<n;v++) {
                    file>>M[i][u][v];
                    }
    };
                file.close();
                }

bool ScriviSuFile (const Nat n, const Mat& M, const string& nome) {
    cout<<"Nome del file su cui scrivere: > ";
    ofstream file(nome.c_str());
    for (unsigned int i = 0; i<n; i++) {
        for (unsigned int u =0;u<n;u++) {
            for (unsigned int v=0;v<n;v++) {
                    file<<M[i][u][v]<<"\t";
                    }
                    file<<endl;
    }
};

file.close();
            }
Mat Sum (const Nat n, const Mat& M1, const Mat& M2) {
    const Mat M;
    Nat k,j;
    
    for (unsigned int u=0;u<n;u++) {
                for (int unsigned v=0;v<n;v++)
                    M[k][u][v]=M1[i][u][v]+M2[j][u][v];
    
}
}
Mat Prod (const Nat n, const Mat& M1, const Mat& M2) {
    const Mat M;
    Nat k, j;
    vector<Mat> R(r,M);
    
            for (unsigned int u=0;u<n;u++)
                for (unsigned int v=0;v<n;v++)
                for (Nat w=0;w<n;w++)
                M[u][v]+=M1[i][u][w]*M2[j][w][v];
            R[k]=M;

}
Mat SumProd (const Nat n, const Nat m, const Mat& M) {
    
    //Codice
}

int main()
try {
    Nat r,n;
    cout<<"Inserisci la dimensione delle matrici n=";
    cin>>n;
    if (!cin) throw runtime_error("input error");
    cout<<"Inserisci il numero di registri r=";
    cin>>r;
    if (!cin) throw runtime_error("input error");
    if (r<1||n<1) throw runtime_error("parametri out-of-range");
    
    cout<<menu<<"dove i,j,k in [0,"<<r<<") e n="<<n;
    
    const Mat M0(n*n,0);//matrice nulla, usata per inizializzare R
    vector<Mat> R(r,M0);//registri
    char op;//operazione
    Nat i,j,k;//indici <r per R
    Nat m;
    string nome;
    
    //loop di esecuzione
    do {
        cin.clear(); cin.ignore();//reset di precedenti errori di input
        cout<<"\nscegli op> ";
        cin >> op;
        switch (op)
        {
        case '?':
            cout<<menu<<"dove i,j,k in [0,"<<r<<") e n="<<n;
            break;
        case 'q':
            cout<<"fine!\n";
            return(0);
        case '=':
            cin>>i>>k;
            if (!cin||k>=r||i>=r)
                throw runtime_error("out-of-range");
            if (k!=i) R[k]=R[i];
            break;
        case 'A':
            cin>>i;
            if (!cin||i>=r) throw runtime_error("out-of-range");
            cin>>nome;
            if (!cin) throw runtime_error("input error");
            if (!LeggiDaFile(n,R[i],nome)) throw runtime_error("read error");
            break;
        case 'B':
            cin>>i;
            if (!cin||i>=r) throw runtime_error("out-of-range");
            cin>>nome;
            if (!cin) throw runtime_error("input error");
            if (!ScriviSuFile(n,R[i],nome))  throw runtime_error("write error");
            break;
        case 'C':
            cin>>i>>j>>k;
            if (!cin||k>=r||i>=r||j>=r)
                throw runtime_error("out-of-range");
            R[k]=Sum(n,R[i],R[j]);
            break;
        case 'D':
            cin>>i>>j>>k;
            if (!cin||k>=r||i>=r||j>=r)
                throw runtime_error("out-of-range");
            R[k]=Prod(n,R[i],R[j]);
            break;
        case 'E':
            cin>>i>>m>>k;
            if (!cin||k>=r||i>=r||m<1)
                throw runtime_error("out-of-range");
            R[k]=SumProd(n,m,R[i]);
            break;
        default:
            cout<<op<<" operazione inesistente!";
        };
    } while (true);
} catch
(runtime_error &msg) {
    cerr<<msg.what();
} catch (...) {
    cerr<<"crash!\n";
}