Dubbio!

di il
7 risposte

Dubbio!

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);
		}
	}
}

7 Risposte

  • Re: Dubbio!

    A parte il titolo del thread non adatto, non hai detto nulla. Non é corretto presentare un problema in questo modo. Spiegati.
  • Re: Dubbio!

    oregon ha scritto:


    A parte il titolo del thread non adatto, non hai detto nulla. Non é corretto presentare un problema in questo modo. Spiegati.
    pensavo si capisse dalla mia domanda...questo programma non mi da errori ma non da nessun risultato e non riesco a capire quale sia il problema
  • Re: Dubbio!

    No non era affatto chiaro. Poteva essere un errore di compilazione, un errore a runtime o altro. E che non dia risultati é poco utile saperlo dato che non si sa cosa debba fare e quali risultati debba dare normalmente.

    Guarda che spiegare ad altri bene la questione che solo tu conosci è fondamentale per avere risposte.
  • Re: Dubbio!

    oregon ha scritto:


    No non era affatto chiaro. Poteva essere un errore di compilazione, un errore a runtime o altro. E che non dia risultati é poco utile saperlo dato che non si sa cosa debba fare e quali risultati debba dare normalmente.

    Guarda che spiegare ad altri bene la questione che solo tu conosci è fondamentale per avere risposte.
    ok allora, ho un file di input di questo tipo: " nome, citta, matricola, #classifiche classifica1 classifica2 ...."
    1) Carichi in una lista l i dati presenti nel file input.txt
    2) chieda all'utente il valore di un intero s
    3) sposti in una lista l1 tutti gli elementi di l con una media delle classifiche minore di s, ed in una lista l2 i rimanenti elementi di l
    4) si salvi in un file output1.txt la lista l1, ed in un file output2.txt la lista l2
  • Re: Dubbio!

    Fai un esempio concreto di file di input perché la questione classifiche non si capisce.
  • Re: Dubbio!

    oregon ha scritto:


    Fai un esempio concreto di file di input perché la questione classifiche non si capisce.
    ad esempio così:
    Nome Squadra, Citta, 1258 5 3 5 4 8 9
  • Re: Dubbio!

    Secondo te noi sappiamo cosa rappresentano quei numeri e che regole seguono?
Devi accedere o registrarti per scrivere nel forum
7 risposte