Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
OUTPUT:
output.txt
Mario, Molinara, 1250, 6 18 23 28 30 30 30
Francesco, Fontanella, 1251, 10 23 24 23 25 24 28 19 22 18 28
Claudio, De Stefano, 1252, 5 24 22 29 24 18
Claudio, Marrocco, 1258, 5 23 25 24 28 29
Francesco, Bianchi, 1235, 6 25 30 18 21 24 22
*/
//
====================================================================
========
// Name : PO_4lug2014_B.cpp
// Author : Giulio
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//
====================================================================
========
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "Studente.h"
#include <algorithm>
#include <list>
using namespace std;
ostream& operator<<(ostream &os, const list<Studente> &l);
istream& operator>>(istream &is, list<Studente> &l);
void elimina(list<Studente> &l, int s);
float compMedia(const list<Studente> &l);
int main() {
ifstream is;
ofstream os;
list<Studente> l1, l2, l3;
float m1, m2;
/***** INPUT 1 *****/
is.open("input1.txt");
if (is) is>>l1;
else { cerr<<"ERRORE: impossibile aprire il file
input1.txt"<<endl;
exit (EXIT_FAILURE);
}
is.close();
/***** INPUT 2 *****/
is.open("input2.txt");
if (is) is>>l2;
else { cerr<<"ERRORE: impossibile aprire il file
input2.txt"<<endl;
exit (EXIT_FAILURE);
}
is.close();
/***** MEDIE *****/
m1 = compMedia(l1);
m2 = compMedia(l2);
/***** ELIMINAZIONE *****/
if ( m1 < m2 )
elimina(l2, m1);
else elimina(l1, m2);
/***** UNIONE LISTE *****/
l3.splice(l3.begin(), l2);
l3.splice(l3.begin(), l1);
/***** OUTPUT *****/
os.open("output.txt");
if (os) os<<l3;
else { cerr<<"ERRORE: impossibile aprire il file
output.txt"<<endl;
exit (EXIT_FAILURE);
}
os.close();
return 0;
}
ostream& operator<<(ostream &os, const list<Studente> &l){
list<Studente>::const_iterator iter;
for (iter=l.begin(); iter!=l.end(); iter++)
os<<*iter;
return os;
}
istream& operator>>(istream &is, list<Studente> &l){
Studente tmp;
while (is>>tmp){
l.push_back(tmp);
//cout<<tmp;
}
return is;
}
void elimina(list<Studente> &l, int s){
list<Studente>::iterator iter;
iter=l.begin();
while (iter!=l.end()){
if (iter->mediaVoti() >= s){
l.erase(iter);
}
else iter++;
}
}
float compMedia(const list<Studente> &l){
list<Studente>::const_iterator iter;
int c = 0;
float s = 0.0;
for (iter=l.begin(); iter!=l.end(); iter++){
s += iter->mediaVoti();
c++;
}
return ( s/c );
}
/*
* Studente.cpp
*
* Created on: 11 set 2018
* Author: giuliorusso
*/
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "Studente.h"
#include <algorithm>
#include <list>
using namespace std;
//COSTRUTTORE
Studente::Studente(){
}
//COSTRUTTORE DI COPIA
Studente::Studente(const Studente &o){
/*nome = o.getNome();
cognome = o.getCognome();
matricola = o.getMatricola();
esami = o.esami;*/
this->setNome(o.nome);
this->setCognome(o.cognome);
this->setMatricola(o.matricola);
esami=o.esami;
}
//OPERATORE DI ASSEGNAZIONE
Studente& Studente::operator=(const Studente &o){
if (&o!=this){
setNome(o.nome);
setCognome(o.cognome);
setMatricola(o.matricola);
esami = o.esami;
}
return *this;
}
//==
bool Studente::operator==(const Studente &o){
return ( matricola == o.matricola );
}
//<<
ostream& operator<<(ostream &os, const Studente &s){
os<<s.nome<<", ";
os<<s.cognome<<", ";
os<<s.matricola<<", ";
int num = s.esami.size();
for (int i=0; i<num; i++)
os<<s.esami[i];
return os;
}
//>>
istream& operator>>(istream &is, Studente &s){
int n, tmp;
is >> getline (is, s.nome, ',');
is >> getline (is, s.cognome, ',');
is >> getline (is, s.matricola, ',');
is >> n;
/* Pulisco il vettore da eventuali residui */
s.esami.clear();
for (int i=0; i<n; i++){
is >> tmp;
s.esami.push_back(tmp);
}
return is;
}
//ADD
void Studente::addEsame(int v){
esami.push_back(v);
}
//CLEAR
void Studente::clear(){
esami.clear();
}
//MEDIA
float Studente::mediaVoti() const{
int num = esami.size();
float s = 0.0;
for (int i=0; i<num; i++)
s = s + esami[i];
return (s/num);
}
/*
* Studente.h
*
* Created on: 11 set 2018
* Author: giuliorusso
*/
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
class Studente {
string nome;
string cognome;
string matricola;
vector<int> esami;
public:
Studente();
//~Studente();
Studente(const Studente &o);
Studente& operator=(const Studente &o);
bool operator==(const Studente &o);
friend ostream& operator<<(ostream &os, const Studente &s);
friend istream& operator>>(istream &is, Studente &s);
// Funzioni SET
void setNome(string n) { nome = n; }
void setCognome(string c) { cognome = c; }
void setMatricola(string m) { matricola = m; }
// Funzioni GET
string getNome() const{ return nome; }
string getCognome() const{ return cognome; }
string getMatricola() const{ return matricola; }
// Altre Funzioni
void addEsame(int v); // aggiunge un nuovo esame al vettore
esami void clear(); // azzera il vettore degli esami
float mediaVoti() const; // calcola e restituisce la media
dei voti
};
/*
************************** AVVISO
***********************************
il tempo a disposizione per la soluzione della traccia Ë 2 (due)
ore.
Durante la prova, Ë assolutamente VIETATO:
-- consultare libri e/o altro materiale online e/o offline
-- comunicare in qualsiasi modo con i propri colleghi e/o chiunque
altro (tranne il docente)
-- usare il cellulare e/o qualsiasi altro dispositivo
IMPORTANTE!: La violazione delle norme di cui sopr‡ comporter‡
l'ANNULLAMENTO della prova!
************************** TRACCIA
**********************************
Siano dati:
il file input.txt realizzato come segue:
nome, codice, #valori valore1 valore2 .... valore#valori
il prototipo della classe Titolo (da implementare):
class Titolo {
string nome;
string codice;
int num;
float* valori;
public:
Titolo();
friend ostream& operator<<(ostream &os, const Titolo &t);
friend istream& operator>>(istream &is, Titolo &t);
// Funzioni SET
void setNome(const string n);
void setCodice(const string c);
// Funzioni GET
string getNome();
string getCodice();
// Altre Funzioni
void addValore (float v); // aggiunge un nuovo valore al
vettore dei valori
float compMedia(); // restituisce la media dei valori
};
ed i prototipi delle seguenti 3 funzioni (da implementare):
ostream & operator<<(ostream &os, const list<Titolo> &l);
istream & operator>>(istream &is, list<Titolo> &l);
void sposta(list<Titolo> &l1, list<Titolo> &l2, float s);
// INPUT: una lista l1, una lista l2 ed un float s
// OUTPUT: modifica la lista l1 spostando nella lista l2 tutti gli
elementi con una media dei valori al di sotto della soglia s.
Scrivere un programma C++ che:
1) implementi la classe di cui sopra. A tal fine:
-- Si definiscano, se necessario, il costruttore di copia,
l'operatore di assegnazione e il distruttore.
-- si aggiungano i qualificatori private e const in maniera
opportuna.
2) Carichi in una lista l1 i dati contenuti nel file input.txt
3) Chieda all'utente il valore di un float a
4) Sposti in una lista l2 tutti gli elementi di l1 con una media dei
valori al di sotto del valore a chiesto all'utente
5) salvi nel file output1.txt la lista l1 e nel file output2.txt la
lista l2
6) Si tenga presente che dati due oggetti t1 e t2 della classe
Titolo, t1 Ë uguale a t2 se e solo se i codici coincidono.
// ************************ SUGGERIMENTI
*****************************
la funzione per il caricamento da stream di un oggetto string Ë la
seguente:
istream& getline (istream& is, string& str, char delim);
che estrae dallo stream is e memorizza nell'oggetto str tutti i
caratteri finchË non trova il carattere delimitatore delim
INPUT:
input.txt
Informatica Cassino, IC98-001, 10 2.04 2.30 2.80 3.00 3.30 3.20 3.90
2.90 3.00 3.10
Servizi Frosinone, SF09-007, 8 3.10 3.15 3.05 3.23 3.80 4.12 4.08
4.34
Catering Formia, CF87-065, 7 4.85 5.33 4.81 4.21 4.11 4.23 4.12
Roccasecca Franchising, RF12-009, 9 1.15 1.30 1.31 1.29 1.31 1.34
1.35 1.29 1.43
Factoring Pignataro, FP99-078, 11 5.28 5.22 5.18 5.17 5.19 5.21 5.23
5.26 5.18 5.22 5.23
Arce Trasporti, AT78-001, 12 9.23 9.24 9.33 9.25 9.29 9.28 9.29
9.34 9.38 9.18 9.23 9.28
Nautica Gaeta, NG01-178, 6 2.33 2.37 2.48 2.41 2.37 2.30
a = 3.0
OUTPUT:
output1.txt
Servizi Frosinone, SF09-007, 8 3.10 3.15 3.05 3.23 3.80 4.12 4.08
4.34
Catering Formia, CF87-065, 7 4.85 5.33 4.81 4.21 4.11 4.23 4.12
Factoring Pignataro, FP99-078, 11 5.28 5.22 5.18 5.17 5.19 5.21 5.23
5.26 5.18 5.22 5.23
Arce Trasporti, AT78-001, 12 9.23 9.24 9.33 9.25 9.29 9.28 9.29
9.34 9.38 9.18 9.23 9.28
output2.txt
Informatica Cassino, IC98-001, 10 2.04 2.30 2.80 3.00 3.30 3.20 3.90
2.90 3.00 3.10
Roccasecca Franchising, RF12-009, 9 1.15 1.30 1.31 1.29 1.31 1.34
1.35 1.29 1.43
Nautica Gaeta, NG01-178, 6 2.33 2.37 2.48 2.41 2.37 2.30
*/
//
====================================================================
========
// Name : PO_10set2015_B.cpp
// Author : Giulio
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//
====================================================================
========
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include "Titolo.h"
#incl