Sapreste dirmi cosa c'è che non va in questo programma?
file.h:
#include <vector>
const int MAX_DIM=100;
using namespace std;
class Squadra {
private:
string nome;
string citta;
string matricola;
vector<int> classifiche;
public:
Squadra();
Squadra(const Squadra &s);
Squadra& operator=(const Squadra &s);
bool operator==(Squadra &o);
friend ostream& operator<<(ostream &os,const Squadra &s);
friend istream& operator>>(istream &is, Squadra &s);
// Funzioni SET
void setNome(const string n){nome=n;}
void setCitta(const string c){citta=c;}
void setMatricola(const string m){matricola=m;}
// Funzioni GET
string getNome()const{return nome;}
string getCitta()const{return citta;}
string getMatricola()const{return matricola;}
// Altre Funzioni
void addClassifica(int c); // aggiunge una nuova classifica al vettore classifiche
void clear(); // azzera il vettore delle classifiche
float mediaClassifiche()const; // calcola e restituisce la media delle classifiche
};
file.cpp:
#include <iostream>
#include "squadra.h"
using namespace std;
Squadra::Squadra(){
nome="";
citta="";
matricola="";
vector <int> classifiche (MAX_DIM);
}
Squadra::Squadra(const Squadra &s){
nome=s.getNome();
citta=s.getCitta();
matricola=s.getMatricola();
classifiche=s.classifiche;
}
Squadra& Squadra::operator=(const Squadra &s){
if(&s!=this){
setNome(s.nome);
setCitta(s.citta);
setMatricola(s.matricola);
classifiche=s.classifiche;
}
return *this;
}
bool Squadra::operator==(Squadra &o){
if(getMatricola()==o.getMatricola()){
return true;
}
else{
return false;
}
}
ostream& operator<<(ostream &os,const Squadra &s){
os<<s.nome<<",";
os<<s.citta<<",";
os<<s.matricola<<",";
os<<s.classifiche.size()<<" ";
vector <int>::const_iterator it;
for(it=s.classifiche.begin(); it!=s.classifiche.end(); ++it){
os<<*it;
}
os<<endl;
return os;
}
istream& operator>>(istream &is, Squadra &s){
int n,tmp;
getline(is,s.nome,',');
getline(is,s.citta,',');
getline(is,s.matricola,',');
is>>n;
s.classifiche.clear();
for(int i=0; i<n; i++){
is>>tmp;
s.classifiche.push_back(tmp);
}
is.ignore();
return is;
}
void Squadra::addClassifica(int c){
classifiche.push_back(c);
}
void Squadra::clear(){
classifiche.clear();
}
float Squadra::mediaClassifiche()const{
float m=0.0;
int n=classifiche.size();
vector <int>::const_iterator it;
for(it=classifiche.begin(); it!=classifiche.end(); ++it){
m=m+(*it);
}
return (m/n);
}
main.cpp:
#include <iostream>
#include <list>
#include <fstream>
#include <string>
#include "squadra.h"
using namespace std;
ostream & operator<<(ostream &os, const list<Squadra> &l);
istream & operator>>(istream &is, list<Squadra> &l);
void split( list<Squadra> &l, int s, list<Squadra> &l1, list<Squadra> &l2);
// INPUT: una lista l1 e un intero s
// OUTPUT: modifica la lista l1 spostando in l2 tutti gli elementi con una media delle classifiche minore di s, ed in l3 i restanti elementi. Al ritorno della funzione, la lista l1 dovrà essere vuota
int main(){
list<Squadra> l,l1,l2;
ofstream o_stream;
ifstream i_stream;
int s;
i_stream.open("input.txt");
if(i_stream){
i_stream>>l;
}
else{
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE input.txt"<<endl;
exit(EXIT_FAILURE);
}
i_stream.close();
cout<<"inserisci un intero:"<<endl;
cin>>s;
split(l,s,l1,l2);
o_stream.open("output1.txt");
if(o_stream){
o_stream<<l1;
}
else{
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE output1.txt"<<endl;
exit(EXIT_FAILURE);
}
o_stream.close();
o_stream.open("output2.txt");
if(o_stream){
o_stream<<l2;
}
else{
cerr<<endl<<"ERRORE! IMPOSSIBILE APRIRE FILE output2.txt"<<endl;
exit(EXIT_FAILURE);
}
o_stream.close();
return 0;
}
ostream & operator<<(ostream &os, const list<Squadra> &l){
list<Squadra>::const_iterator it;
for(it=l.begin(); it!=l.end(); ++it){
os<<*it;
}
return os;
}
istream & operator>>(istream &is, list<Squadra> &l){
Squadra tmp;
int i=0;
while(is>>tmp){
l.push_back(tmp);
++i;
}
return is;
}
void split(list<Squadra> &l, int s, list<Squadra> &l1, list<Squadra> &l2){
list<Squadra>::const_iterator it;
for(it=l.begin(); it!=l.end(); ++it){
if(it->mediaClassifiche()<=s){
l1.push_back(*it);
l.erase(it);
}
else{
l2.push_back(*it);
}
}
}