#include <iostream>
using namespace std;
class Student {
string im, naz;
double oc;
public :
Student( )
: im( "0" )
, naz( "0" )
, oc( 0 )
{
}
Student( string name, string surname, double year)
: im( name)
, naz( surname)
, oc( year)
{
}
string& imie( ) { return im; }
const string& imie( ) const { return im; }
string& nazwisko( ) { return naz; }
const string& nazwisko( ) const { return naz; }
double & ocena( ) { return oc; }
const double & ocena( ) const { return oc; }
friend ostream& operator<< ( ostream& out, const Student& ob) ;
} ;
ostream& operator<< ( ostream& out, const Student& ob)
{
out << ob.im << " " << ob.naz << " " << ob.oc << endl;
return out;
}
class Grupa {
unsigned rozmiar;
Student* studenci;
public :
Grupa( )
: rozmiar( 0 )
, studenci( new Student) { } ;
Grupa( const Student* pocz, const Student* kon)
: rozmiar( kon - pocz)
, studenci( rozmiar ? new Student[ rozmiar] : 0 )
{
for ( unsigned i = 0 ; i < rozmiar; i++ ) {
studenci[ i] = pocz[ i] ; //skad wie zeby tu wszystko przypisac ???
}
}
friend ostream& operator<< ( ostream& out, const Grupa& ob) ;
const double srednia( ) const ; // dwa consty :D
Grupa& operator= ( const Grupa& ob) ;
Student& operator[ ] ( unsigned i)
{
return studenci[ i] ;
}
} ;
Grupa& Grupa:: operator = ( const Grupa& ob)
{
if ( this ! = & ob) {
delete studenci;
rozmiar = ob.rozmiar ;
studenci = new Student[ rozmiar] ;
for ( unsigned i = 0 ; i < rozmiar; i++ ) {
studenci[ i] = ob.studenci [ i] ;
}
}
return * this ;
}
const double Grupa:: srednia ( ) const
{
double suma = 0 ;
for ( unsigned i = 0 ; i < rozmiar; i++ ) {
suma + = studenci[ i] .ocena ( ) ; //metoda dostepowa :D
}
return suma / rozmiar;
}
ostream& operator<< ( ostream& out, const Grupa& ob)
{
for ( unsigned i = 0 ; i < ob.rozmiar ; i++ ) {
out << ob.studenci [ i] ;
}
return out;
}
int main( )
{
Student bond( "James" , "Bond" , 5.0 ) ;
cout << "Student " << bond.imie ( ) << " " << bond.nazwisko ( ) ;
cout << " dostal " << bond.ocena ( ) << endl;
Student studenci[ 3 ] = { Student( "Jan" , "Kowalski" , 3.5 ) ,
Student( "Ala" , "Nowak" , 3.0 ) , Student( ) } ;
const Grupa gr1( studenci, studenci + 3 ) ;
cout << gr1;
cout << "Srednia ocen tej grupy to " << gr1.srednia ( ) << std:: endl ;
Grupa gr2;
gr2 = gr1;
gr2[ 2 ] = bond;
cout << gr2;
cout << "Srednia ocen tej grupy to " << gr2.srednia ( ) << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY2xhc3MgU3R1ZGVudCB7CiAgICBzdHJpbmcgaW0sIG5hejsKICAgIGRvdWJsZSBvYzsKIApwdWJsaWM6CiAgICBTdHVkZW50KCkKICAgICAgICA6IGltKCIwIikKICAgICAgICAsIG5heigiMCIpCiAgICAgICAgLCBvYygwKQogICAgewogICAgfQogICAgU3R1ZGVudChzdHJpbmcgbmFtZSwgc3RyaW5nIHN1cm5hbWUsIGRvdWJsZSB5ZWFyKQogICAgICAgIDogaW0obmFtZSkKICAgICAgICAsIG5heihzdXJuYW1lKQogICAgICAgICwgb2MoeWVhcikKICAgIHsKICAgIH0KICAgIHN0cmluZyYgaW1pZSgpIHsgcmV0dXJuIGltOyB9CiAgICBjb25zdCBzdHJpbmcmIGltaWUoKSBjb25zdCB7IHJldHVybiBpbTsgfQogICAgc3RyaW5nJiBuYXp3aXNrbygpIHsgcmV0dXJuIG5hejsgfQogICAgY29uc3Qgc3RyaW5nJiBuYXp3aXNrbygpIGNvbnN0IHsgcmV0dXJuIG5hejsgfQogICAgZG91YmxlJiBvY2VuYSgpIHsgcmV0dXJuIG9jOyB9CiAgICBjb25zdCBkb3VibGUmIG9jZW5hKCkgY29uc3QgeyByZXR1cm4gb2M7IH0KICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgY29uc3QgU3R1ZGVudCYgb2IpOwp9Owpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgY29uc3QgU3R1ZGVudCYgb2IpCnsKICAgIG91dCA8PCBvYi5pbSA8PCAiICIgPDwgb2IubmF6IDw8ICIgIiA8PCBvYi5vYyA8PCBlbmRsOwogICAgcmV0dXJuIG91dDsKfQpjbGFzcyBHcnVwYSB7CiAgICB1bnNpZ25lZCByb3ptaWFyOwogICAgU3R1ZGVudCogc3R1ZGVuY2k7CiAKcHVibGljOgogICAgR3J1cGEoKQogICAgICAgIDogcm96bWlhcigwKQogICAgICAgICwgc3R1ZGVuY2kobmV3IFN0dWRlbnQpe307CiAgICBHcnVwYShjb25zdCBTdHVkZW50KiBwb2N6LCBjb25zdCBTdHVkZW50KiBrb24pCiAgICAgICAgOiByb3ptaWFyKGtvbiAtIHBvY3opCiAgICAgICAgLCBzdHVkZW5jaShyb3ptaWFyID8gbmV3IFN0dWRlbnRbcm96bWlhcl0gOiAwKQogICAgewogICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb3ptaWFyOyBpKyspIHsKICAgICAgICAgICAgc3R1ZGVuY2lbaV0gPSBwb2N6W2ldOyAvL3NrYWQgd2llIHplYnkgdHUgd3N6eXN0a28gcHJ6eXBpc2FjID8/PwogICAgICAgIH0KICAgIH0KICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgY29uc3QgR3J1cGEmIG9iKTsKICAgIGNvbnN0IGRvdWJsZSBzcmVkbmlhKCkgY29uc3Q7IC8vIGR3YSBjb25zdHkgOkQKICAgIEdydXBhJiBvcGVyYXRvcj0oY29uc3QgR3J1cGEmIG9iKTsKICAgIFN0dWRlbnQmIG9wZXJhdG9yW10odW5zaWduZWQgaSkKICAgIHsKICAgICAgICByZXR1cm4gc3R1ZGVuY2lbaV07CiAgICB9Cn07CiAKR3J1cGEmIEdydXBhOjpvcGVyYXRvcj0oY29uc3QgR3J1cGEmIG9iKQp7CiAgICBpZiAodGhpcyAhPSAmb2IpIHsKICAgICAgICBkZWxldGUgc3R1ZGVuY2k7CiAgICAgICAgcm96bWlhciA9IG9iLnJvem1pYXI7CiAgICAgICAgc3R1ZGVuY2kgPSBuZXcgU3R1ZGVudFtyb3ptaWFyXTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm96bWlhcjsgaSsrKSB7CiAgICAgICAgICAgIHN0dWRlbmNpW2ldID0gb2Iuc3R1ZGVuY2lbaV07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwp9CiAKY29uc3QgZG91YmxlIEdydXBhOjpzcmVkbmlhKCkgY29uc3QKewogICAgZG91YmxlIHN1bWEgPSAwOwogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvem1pYXI7IGkrKykgewogICAgICAgIHN1bWEgKz0gc3R1ZGVuY2lbaV0ub2NlbmEoKTsgLy9tZXRvZGEgZG9zdGVwb3dhIDpECiAgICB9CiAgICByZXR1cm4gc3VtYSAvIHJvem1pYXI7Cn0Kb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQsIGNvbnN0IEdydXBhJiBvYikKewogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9iLnJvem1pYXI7IGkrKykgewogICAgICAgIG91dCA8PCBvYi5zdHVkZW5jaVtpXTsKICAgIH0KICAgIHJldHVybiBvdXQ7Cn0KaW50IG1haW4oKQp7CiAgICBTdHVkZW50IGJvbmQoIkphbWVzIiwgIkJvbmQiLCA1LjApOwogICAgY291dCA8PCAiU3R1ZGVudCAiIDw8IGJvbmQuaW1pZSgpIDw8ICIgIiA8PCBib25kLm5hendpc2tvKCk7CiAgICBjb3V0IDw8ICIgZG9zdGFsICIgPDwgYm9uZC5vY2VuYSgpIDw8IGVuZGw7CiAgICBTdHVkZW50IHN0dWRlbmNpWzNdID0geyBTdHVkZW50KCJKYW4iLCAiS293YWxza2kiLCAzLjUpLAogICAgICAgIFN0dWRlbnQoIkFsYSIsICJOb3dhayIsIDMuMCksIFN0dWRlbnQoKSB9OwogICAgY29uc3QgR3J1cGEgZ3IxKHN0dWRlbmNpLCBzdHVkZW5jaSArIDMpOwogICAgY291dCA8PCBncjE7CiAgICBjb3V0IDw8ICJTcmVkbmlhIG9jZW4gdGVqIGdydXB5IHRvICIgPDwgZ3IxLnNyZWRuaWEoKSA8PCBzdGQ6OmVuZGw7CiAgICBHcnVwYSBncjI7CiAgICBncjIgPSBncjE7CiAgICBncjJbMl0gPSBib25kOwogICAgY291dCA8PCBncjI7CiAgICBjb3V0IDw8ICJTcmVkbmlhIG9jZW4gdGVqIGdydXB5IHRvICIgPDwgZ3IyLnNyZWRuaWEoKSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQ==