Cod sursa(job #2663307)

Utilizator TraianVVisan Traian-Dimitrie TraianV Data 25 octombrie 2020 23:29:39
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 6.17 kb
w#include <iostream>///131 Visan Traian-Dimitrie Compilator:cygwin64
#include<cstring>
#include<vector>
class Masca
{
    char tipprotectie[5];
};
class MascaChirugicala:public Masca
{
    char tipprotectie[5];
    char* culoare;
    int nrpliuri;
public:
    MascaChirugicala()
    {
        strcpy(this->tipprotectie,"ffp1");
        this->culoare=new char[3];
        strcpy(this->culoare,"alb");
        this->nrpliuri=0;
    }
    MascaChirugicala(const char *t,const char *c,int n)
    {
        strcpy(this->tipprotectie,t);
        strcpy(this->culoare,c);
        this->nrpliuri=n;
    }
    MascaChirugicala(MascaChirugicala &ob)
    {
        strcpy(this->culoare,ob.culoare);
        strcpy(this->tipprotectie,ob.tipprotectie);
        this->nrpliuri=ob.nrpliuri;
    }
    ~MascaChirugicala()=default;
    MascaChirugicala const operator=(MascaChirugicala &ob)
    {
        strcpy(this->culoare,ob.culoare);
        strcpy(this->tipprotectie,ob.tipprotectie);
        this->nrpliuri=ob.nrpliuri;
        return *this;
    }
    MascaChirugicala set(const char *t,const char *c, int n)
    {
        strcpy(this->culoare,c);
        strcpy(this->tipprotectie,t);
        this->nrpliuri=n;
        return *this;
    }
   char *get_tip()
    {
        return this->tipprotectie;
    }
    char *get_cul()
    {
        return this->culoare;
    }
    int get_pliu()
    {
        return this->nrpliuri;
    }
    friend std::istream &operator>>(std::istream in,MascaChirugicala ob);
    friend std::ostream &operator<<(std::ostream out,const MascaChirugicala &ob);
};
std::istream operator>>(std::istream in,MascaChirugicala &ob)
{
    char t[5],c[20];
    int n;
    in.get(t,5);
    in.get();
    in.get(c,20);
    in.get();
    in>>n;
    ob.set(t,c,n);
    return in;
}
std::ostream operator<<(std::ostream out, MascaChirugicala ob)
{
    out<<ob.get_tip()<<' '<<ob.get_cul()<<' '<<ob.get_pliu();
    return out;
}
class MascaPolicarbonat: public Masca
{
    char tipprotectie[5], *tprindere;
public:
    MascaPolicarbonat()
    {
        strcpy(this->tipprotectie,"ffp0");
        strcpy(this->tprindere,"elastic");
    }
    MascaPolicarbonat(char *p)
    {
        strcpy(this->tipprotectie,"ffp0");
        strcpy(this->tprindere,p);
    }
    MascaPolicarbonat set(char *s,char *t)
    {
        strcpy(this->tipprotectie,s);
        strcpy(this->tprindere,t);
    }
    ~MascaPolicarbonat()=default;
    char *getprot()
    {
        return this->tipprotectie;
    }
    char *getprind()
    {
        return this->tprindere;
    }
    friend std::istream &operator>>(std::istream in,MascaPolicarbonat ob);
    friend std::ostream &operator<<(std::ostream out,MascaPolicarbonat ob);
};
std::istream &operator>>(std::istream in,MascaPolicarbonat ob)
{
char *s,*t;
in.get(s,20);
in.get();
in.get(t,20);
in.get();
ob.set(s,t);
return in;
}
std::ostream &operator<<(std::ostream out,MascaPolicarbonat ob)
{
    out<<ob.getprot()<<' '<<ob.getprind();
}
class Dezinfectant
{
    int nr;
    std::vector <std::string>ing;
    std::vector <std::string>mat;
public:
    Dezinfectant()
    {
        nr=0;
    }
    long long getnr()
    {
        return this->nr;
    }
    Dezinfectant(long long n, std::vector<std::string>a, std::vector<std::string>b)
    {
        this->nr=n;
        this->ing=a;
        this->mat=b;
    }
    ~Dezinfectant()=default;
    virtual long long eficienta()=0;
};
class DezinfectantBacterii:public Dezinfectant
{
public:
    long long eficienta()
    {
        return this->getnr()/1000000000;
    }
};
class DezinfectantVirusuri:public Dezinfectant
{
public:
    long long eficienta()
    {
        return this->getnr()/1500000;
    }
};
class DezinfectantFungi:public Dezinfectant
{
public:
    long long eficienta()
    {
        return this->getnr()/1000000000;
    }
};
class Achizitie
{
    int data,luna,an,mdez,mmas;
    Dezinfectant **dez;
    Masca **mas;
    char* nume;
public:
    Achizitie(int d,int l,int a, char* n)
    {
        this->data=d;
        this->luna=l;
        this->an=a;
        strcpy(this->nume,n);
    }
    Achizitie()=default;
    ~Achizitie()=default;
    Achizitie operator +=(Dezinfectant ob)
    {

    }
};
int main() {
    MascaChirugicala mc1, mc2("ffp2", "verde brot�cel", 55), mc3(mc1), mc4, mc5;
    mc4 = mc2;
    std::cin >> mc5;
    std::cout << mc1 << mc2;
    MascaPolicarbonat* mp1=new MascaPolicarbonat(), * mp2=new MascaPolicarbonat();
    MascaPolicarbonat* mp3 = new MascaPolicarbonat("elastic");
    std::cin >> mp1 >> mp2;
    std::cout <<mp3;
    Dezinfectant* d1 = new DezinfectantBacterii(100000000, std::vector<std::string>({"sulfatinon-ionici", "sulfati cationici", "parfumuri", "Linalool", "Metilpropanol butilpentil"}),std::vector({"lemn, sticla, metal, ceramica, marmura"}));
    Dezinfectant* d2 = new DezinfectantVirusuri(50000000, std::vector<std::string>({"AlkilDimetilm Benzil Crlorura de amoniu", "parfumuri", "Butilpentil metilpropinal"}),std::vector({"lemn, sticla, ceramica, marmura"}));
    Dezinfectant* d3 = new DezinfectantFungi(1400000, std::vector<std::string>({"Alkil EtilBenzil Crlorura de amoniu", "parfumuri", "Butilpentil metilpropinal"}),std::vector({"sticla, plastic"}));
    std::cout << d1->eficienta() << " " << d2->eficienta() << " " << d3->eficienta() << "\n";
    Achizitie* a1 = new Achizitie(26, 5, 2020, "PlushBio SRL");
    *a1 += mp1; //se adauga masca de policarbonat mp1 in lista de masti achizitionate
    *a1 += (&mc1); //se adauga masca chirugicala mc1 in lista
    *a1 += d3; // se adauga dezinfectantu de fungi d3 in lista de dezinfectanti achizitionati
    Achizitie* a2 = new Achizitie(25, 5, 2020, "Gucci");
    *a2 += d1;
    *a2 += d2;
    *a2 += d2;
    Achizitie a3, a4(*a1);
    a3 = *a2;
    if(*a1 < *a2) {
        std::cout << a1->nume() << " are valoarea facturii mai mica.\n";
    }else if (*a1 == *a2) {
        std::cout << a1->nume() << " si " << a2->nume() << " au aceasi valoare afacturii.\n";}
        else {
            std::cout << a2->nume() << " are valoarea facturii mai mica.\n";
        }
        return 0;
    }