+ Reply to Thread
Results 1 to 2 of 2

Thread: 3.1.2011 OOP - задача за изпит (условие)

  1. #1
    All knowing Bloo_uni's Avatar
    Join Date
    Oct 2010
    Posts
    182

    3.1.2011 OOP - задача за изпит (условие)

    Задачи за изпит по ООП
    от предния път

    Всяка функция носи г/д по 4-5точки
    I Reader - Да се състави клас читател, включващ две член променливи: име и фак. номер от тип стринг и конструктори - подразбиращ се, експлицитен, копиращ.

    //копиращия конструктор има същия параметър и обект от съшия клас
    Reader (const Reader &ob)

    Функции: четене и запис
    // да се прави сет и гет на всяка член функция
    // функция get e свързан с типа на член променливата на която правим гет

    Функция която сравнява за по-малко по дадения параметър обект с текущия по факултетния номер
    bool compareTo(const Reader &arg0);
    Функция която сравнява за еквивалентност подадения параметър обект с текущия по факултетен номер
    bool equals (const Reader &arg0);

    Оператори към този клас:
    operator<< - извежда в указан изходен поток
    operator>> - чете от указан входен поток

    II Да се състави клас LibraryBook, който е наследник на Reader, частни променливи - име на книгата (string), и статус заета/свободна (bool status.
    Конструктори: подразбиращ се, експлицитен, копиращ.
    //експлицитния ->
    LibraryBook(string bookName, bool &Available, string Name, string facN)

    Функции:
    - заемане на книгата променя статуса
    takeBook(){ status=1;}

    - връщане на книга
    returnBook(){ status=0;}

    - презаема книга за читателя от книгата параметър
    bool setReaderData( const LibraryBook &bookname)

    - четене, запис на всичките полета (bookName, status) (set, get)

    - функция заета ли е книгата
    bool isAvailable()

    - сравнява за еквивалентност по дадения параметър обект с текущия по всички данни
    bool equals(const LibraryBook &arg0)

    - сравнява за по-малко по дадения параметър обект с текушия по име на книгата
    bool compareTo( const LibraryBook &arg0);

    Оператор указва в изходен поток (<<), въвежда или чете от указан входен поток (>>)

    III Главна функция main()
    1- Създава вектор от книги, добави обекти LibraryBook по експлицитен конструктор
    2- заема 2 книги от вектора и ги извежда на конзолен - изход takeBook();
    3- освобождава 2 книги от вектора и ги извежда на конзолен изход - returnBook();
    4- установява име на книга от друга кинига. setReaderData

  2. #2
    Оказа се, че имам решението на условието от предната тема

    Условие:
    I. Да се състави class Student скрити членове факултетен номер (низ), група (число), публични функции - конструктори - подразбиращ се и експлицитен, set и get за всички членове. Оператори за сравнение по-малък факултетен номер и потоков вход и изход. (ostream)
    (до към 3)
    II. Да се състави клас Exam скрили членове: име на упражнение (низ) и вектор от студенти с който се провежда упражнението. Публични функции: конструктори - подразбиращ се и експлицитен само по име на упражнението. Set и get на име на упражнението, четене на вектора. Сортиране на студентите във вектора по факултетен номер. Оператори: сравнение за по-малък по име на упражнение, за равно на име на упражнение, потоков вход-изход.
    (до към 4+)
    III Да се състави клас Course (дисциплина). Скрити членове: име на дисциплината (низ), вектор от обекти exam, който включва дисциплината. Публични функции: конструктори - подразбиращ се и експлицитен само по име на файл с данни.
    Формат на текстови файл:
    <име на дисциплината>
    <име на упражнение> <име на студент> <група> <име на студент> <група> ...
    Публични функции: четене и промяна на име на дисциплина. Създаване на множество от студенти, подредени по факултетен номер, връща set<Student> .
    Създаване на списък от не повтарящите се групи от студентските данни, с който се провежда зададеното с параметър упражнение - връща list<int>.
    Създаване на карта с ключ име на упражнение и списък с номера на неповтарящи се групи с който се провежда всяко упражнение - връща mat<string, list<int>>
    Оператори потоков вход, изход.
    (до 5)
    IV
    Да се състави шаблонен клас функция SetPrinter за отпечатване на конзолен изход на множество от обекти от шаблонен тип.
    V Да се състави шаблонен клас функция ListPrinter за отпечатване на конзолен изход на име на списъка низ и списък от обекти от шаблонен тип.
    VI. Главна функция за създаване на III и тест на функциите му.
    (до 6)

    Код:
    Code:
    #include<algorithm>
    #include<iostream>
    #include<fstream>
    #include<string>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    
    using namespace std;
    
    template<class T>
    class temp{
        T T_elem1;
        T T_elem2;
        T T_elem3;
    public:
        temp(T _T_elem1, T _T_elem2, T _T_elem3){
            T_elem1=_T_elem1;
            T_elem2=_T_elem2;
            T_elem3=_T_elem3;
        }
        T print();
    };
    
    template<class T>
    class temp2{
        list<T> _list;
    public:
        temp2(T _T_elem1, T _T_elem2, T _T_elem3){
            _list.push_back(_T_elem1);
            _list.push_back(_T_elem2);
            _list.push_back(_T_elem3);
        }
        T print();
        T listPrinter();
    };
    
    template<class T>
    T temp<T>::print(){
        cout<<"Templates\n\n"<<"Elem 1: "<<T_elem1<<endl<<"Elem 2: "<<T_elem2<<endl<<"Elem 3: "<<T_elem3<<endl<<endl;
        return 0;
    }
    template<class T>
    T temp2<T>::listPrinter(){
        cout<<"======Template List======\n\n";
        for(list<T>::iterator it=_list.begin();it!=_list.end();it++)
            cout<<"Elem : "<<*it<<endl;
        cout<<endl;
        return 0;
    }
    
    class Student{
        string f_num; //fakulteten nomer
        int group; //grupa
    public:
        Student(string _f_num="", int _group=0){
            f_num=_f_num;
            group=_group;
        }
        void set_f_num(string _f_num){
            f_num=_f_num;
        }
        void set_group(int _group){
            group=_group;
        }
        string get_f_num(){
            return f_num;
        }
        int get_group(){
            return group;
        }
        friend ostream &operator<<(ostream &stream, Student _student);
        friend istream &operator>>(istream &stream, Student &_student);
        bool operator==(Student &_student){
            return group == _student.group;
        }
    };
    
    class Exam{
        string name_exercise; //ime na uprajnenie
        vector<Student> vStudents; //vektor s obekti ot tip Student
        vector<Student>::iterator it_student; //iterator za vektor ot tip Student
    public:
        Exam(string _name_exercise=""){
            name_exercise=_name_exercise;
        }
        void set_name_exercise(string _name_exercise){
            name_exercise=_name_exercise;
        }
        string get_name_exercise(){
            return name_exercise;
        }
        void read_vector_student(){
            for(it_student=vStudents.begin(); it_student!=vStudents.end(); it_student++)
                cout<<*it_student;
        }
        void read_vector_student(set<Student> &_student){
            for(it_student=vStudents.begin(); it_student!=vStudents.end(); it_student++)
                _student.insert(Student(it_student->get_f_num(),it_student->get_group()));
        }
        void push_student(string _f_num, int _group){ //populvane na vektora
            vStudents.push_back(Student(_f_num,_group));
        }
        void sort_students(){
            sort(vStudents.begin(),vStudents.end());
        }
        void fill_list(list<Student> &_student){
            for(it_student=vStudents.begin(); it_student!=vStudents.end(); it_student++)
                _student.push_back(Student(it_student->get_f_num(),it_student->get_group()));
        }
        friend ostream &operator<<(ostream &stream, Exam _exam);
        friend istream &operator>>(istream &stream, Exam &_exam);
    };
    
    class Course{
        string name_course; //ime na disciplina;
        vector<Exam> vExam; //vektor s obekti ot tip Exam
        vector<Exam>::iterator it_exam; //iterator za vektor ot tip Exam
        set<Student> setStudents;
        set<Student>::iterator setIt;
        list<Student> listStudents;
        list<Student>::iterator studentIt;
        list<int> listGroups;
        list<int>::iterator groupIt;
    public:
        Course(){
            name_course="";
        }
        Course(string file_name){
            int flag=0, _group;
            string _string, _f_num, _name_ex;
            ifstream fin(file_name);
    
            if(!fin)
                cout<<"Allocation Error!\n\a";
            else
                while(!fin.eof()){ //4ete celiq fail
                    if(!(fin>>_string).fail()){ //kato stigne interval
                        flag++;
                        switch(flag){
                        case 1: name_course=_string; break;
                        case 2: vExam.push_back(Exam(_string)); break; //imeto na uprajnenieto v Exam
                        case 3: _f_num=_string; break;
                        case 4: _group=atoi(_string.c_str());
                                flag=2;
                                it_exam=vExam.begin();
                                it_exam->push_student(_f_num, _group); //populva vektora sus obekt ot tip Student
                                break;
                        }
                    }
                }
            
        }
        void set_name_course(string _name_course){
            name_course=_name_course;
        }
        string get_name_course(){
            return name_course;
        }
        void set_students(){        
            for(it_exam=vExam.begin(); it_exam!=vExam.end(); it_exam++)
                it_exam->read_vector_student(setStudents);
    
            cout<<"========SET========\n";
            for(setIt=setStudents.begin();setIt!=setStudents.end();setIt++)
                cout<<*setIt;
        }
        void unique_list(string _name_exercise){
            for(it_exam=vExam.begin();it_exam!=vExam.end();it_exam++)
                if(it_exam->get_name_exercise()==_name_exercise)
                    it_exam->fill_list(listStudents); //pravi kopie na dannite na studentite ot zadadenoto uprajnenie
            
            for(studentIt=listStudents.begin(); studentIt!=listStudents.end(); studentIt++)
                listGroups.push_back(studentIt->get_group()); //pravi list s grupite na studentite ot uprajnenieto
    
            listGroups.sort(); //sortira grupite
            listGroups.unique(); //maha tezi koito se povtarqt
    
            cout<<"=======UNIQUE LIST=======\n";
            for(groupIt=listGroups.begin();groupIt!=listGroups.end();groupIt++)
                cout<<"Group: "<<*groupIt<<endl; //izvejda grupite
        }
        void map_students(){
            map<string, list<int>> map_students;
            map<string, list<int>>::iterator mapIt;
    
            for(it_exam=vExam.begin();it_exam!=vExam.end();it_exam++)
                    it_exam->fill_list(listStudents); //pravi kopie na dannite na studentite ot zadadenoto uprajnenie
            
            for(studentIt=listStudents.begin(); studentIt!=listStudents.end(); studentIt++)
                listGroups.push_back(studentIt->get_group()); //pravi list s grupite na studentite ot uprajnenieto
    
            listGroups.sort(); //sortira grupite
            listGroups.unique(); //maha tezi koito se povtarqt
            it_exam=vExam.begin();
            map_students.insert(pair<string, list<int>>(it_exam->get_name_exercise(), listGroups));
            mapIt=map_students.begin();
            
            cout<<"=======MAP=======\n";
            if(mapIt!=map_students.end()){
                cout<<"Exercise: "<<mapIt->first<<endl;
                for(groupIt=listGroups.begin();groupIt!=listGroups.end(); groupIt++)
                    cout<<*groupIt<<endl;
            }
        }
        friend ostream &operator<<(ostream &stream, Course _course);
        friend istream &operator>>(istream &stream, Course &_course);
    };
    
    bool operator<(Student _studentA, Student _studentB){ //operator < za Student
        return (_studentA.get_f_num() < _studentB.get_f_num());
    }
    bool operator==(Student _studentA, Student _studentB){ //operator == za Student
        return (_studentA.get_f_num() == _studentB.get_f_num()); 
    }
    
    bool operator<(Exam _examA, Exam _examB){ //operator < za Exam
        return (_examA.get_name_exercise() < _examB.get_name_exercise());
    }
    bool operator==(Exam _examA, Exam _examB){ //operator == za Exam
        return (_examA.get_name_exercise() == _examB.get_name_exercise());
    }
    
    ostream &operator<<(ostream &stream, Student _student){ //cout for Student
        stream<<"F. Num: "<<_student.f_num<<endl<<"Group: "<<_student.group<<endl<<endl;
        return stream;
    }
    istream &operator>>(istream &stream, Student &_student){//cin for Student
        stream>>_student.f_num>>_student.group;
        return stream;
    }
    
    ostream &operator<<(ostream &stream, Exam _exam){ //operator << za Exam
        stream<<"Exam: "<<_exam.name_exercise<<endl<<endl;
        return stream;
    }
    istream &operator>>(istream &stream, Exam &_exam){ //cin for Student
        stream>>_exam.name_exercise;
        return stream;
    }
    
    ostream &operator<<(ostream &stream, Course _course){ //operator << za Course
        stream<<"Course: "<<_course.name_course<<endl<<endl;
        for(_course.it_exam=_course.vExam.begin(); _course.it_exam!=_course.vExam.end(); _course.it_exam++){
            cout<<*(_course.it_exam);
            _course.it_exam->read_vector_student();
        }
        return stream;
    }
    istream &operator>>(istream &stream, Course &_course){ //cin for Course
        stream>>_course.name_course;
        return stream;
    }
    
    int main(){
        Course obj("students.txt");
        temp2<int> obj4(2,6,14);
        temp<int> obj1(3,2,4);
        temp<char> obj2('A','B','C');
        temp<double> obj3(1.3,4.1,2.1);
    
        cout<<obj; //izvejda studentite
        obj.set_students(); //set 
        obj.unique_list("OOP"); //unique list
        obj.map_students();
        obj1.print();
        obj2.print();
        obj3.print();
        obj4.listPrinter();
        system("pause");
        return 0;
    }
    Още едно решение:
    Code:
    // Student_Exam_Course.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <stdio.h>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    #include <cstring>
    #include <string>
    #include <fstream>
    #include <set>
    #include <list>
    #include <map>
    
    using namespace std;
    
    class Student
    {
            private:
            string faknomer;
            int grupa;
            public:
            Student()
            {
                faknomer = "";
                grupa = 0;
            }
            Student(string fn,int gr)
            {
                faknomer = fn;
                grupa = gr;
            }
            string getFN()
            {
                return faknomer;
            }
            int getGR()
            {
                return grupa;
            }
            void setFN(string fn)
            {
                faknomer = fn;
            }
            void setGR(int gr)
            {
                grupa = gr;
            }
            bool operator < (Student ob1) const
            {
                return faknomer<ob1.faknomer;//strcmp(ob1.faknomer.c_str(),faknomer.c_str());
            }
            friend ostream &operator <<(ostream &potok,Student ob)
            {
                potok << "FN: " << ob.faknomer << " GRUPA: " << ob.grupa << endl;
                return potok;
            }
            friend istream &operator>> (istream &potok,Student ob)
            {
                potok >> ob.faknomer >> ob.grupa;
            }
    };
    
    class Exam
    {
            private:
            string ime;
            vector<Student> students;
            public:
            Exam()
            {
                ime = "";
                students.clear();
            }
            Exam(string name)
            {
                ime = name;
            }
            void setName(string name)
            {
                ime = name;
            }
            string getName()
            {
                return ime;
            }
            Student getStudent(int index)
            {
                return students[index];
            }
            int studentCount()
            {
                return students.size();
            }
            void addStudent(string fn,int gr)
            {
                Student tmp(fn,gr);
                students.push_back(tmp);
            }
            void sortV()
            {
                sort(students.begin(),students.end());
            }
            bool operator <(Exam ob) const
            {
                return  ime<ob.ime;//strcmp(ime.c_str(),ob.ime.c_str());
            }
            bool operator ==(Exam ob) const
            {
                //if(!strcmp(ime.c_str(),ob.ime.c_str()))
               // {
                    return ime==ob.ime;//true;
                //}
            }
            friend ostream &operator <<(ostream &potok,Exam ob)
            {
                potok << "Ime na uprajnenieto: " << ob.ime << " \n Studenti: " << endl;
                vector<Student>::iterator it = ob.students.begin();
                while(it!=ob.students.end())
                {
                    potok << *it;
                }
                return potok;
            }
            friend istream &operator>> (istream &potok,Exam ob)
            {
                potok >> ob.ime;
    
            }
    };
    
    class Course
    {
      private:
                string dIme;
                vector<Exam> courses;
        public:
                Course()
                {
                    dIme = "";
                    courses.clear();
                }
                Course(string fname)
                {
                    ifstream f(fname.c_str());
                    if (!f)
                    {
                            return;
                    }
                    string buf;
                    f >> buf;
                    dIme =  buf;
                    while(f.good())
                        {
                            buf = "";
                            string uIme;
                            f >> buf;
                            if(buf != "")  uIme=buf;
                            else break;
                            Exam tmp(uIme);
                            char temp = f.get();
                            while((f.good()) && (temp!='\n'))
                            {
                                string fn,gr;
                                f>> fn;
                                f>> gr;
                                tmp.addStudent(fn,atoi(gr.c_str()));
                                temp = f.get();
                            }
                            courses.push_back(tmp);
                        }
                }
                string getName()
                {
                    return dIme;
                }
                void setName(string name)
                {
                    dIme = name;
                }
                set<Student> faknomer()
                {
                    set<Student> res;
                    vector<Exam>::iterator it = courses.begin();
                    while(it!=courses.end())
                    {
                        it->sortV();
                        for(int i=0;i<it->studentCount();i++)
                        {
                            res.insert(it->getStudent(i));
                        }
                        it++;
                    }
                    return res;
                }
                list<int> upr(string nam)
                {
                    list<int> res;
                    vector<Exam>::iterator it = courses.begin();
                    while(it!=courses.end())
                    {
                        string ime = it->getName();
                        if(!strcmp(ime.c_str(),nam.c_str()))
                        {
                            for(int i=0;i<it->studentCount();i++)
                                {
                                    Student tmp = it->getStudent(i);
                                    res.push_back(tmp.getGR());
                                }
                        }
                        it++;
                    }
                    res.unique();
                    return res;
                }
                map<string,list<int>> allUpr()
                {
                    map<string,list<int>> res;
                    vector<Exam>::iterator it = courses.begin();
                    while(it!=courses.end())
                    {
                        string ime = it->getName();
                        list<int> upraj = upr(ime);
                        res[ime] = upraj;
                        it++;
                    }
                    return res;
                }
                friend ostream &operator <<(ostream &potok,Course ob)
                {
                potok << "Ime na disciplinata: " << ob.dIme << " \n Uprajeniq: " << endl;
                    vector<Exam>::iterator it = ob.courses.begin();
                    while(it!=ob.courses.end())
                    {
                        potok << "\t" << it->getName() << ":" << endl << "Students : " << endl ;
                         for(int i=0;i<it->studentCount();i++)
                                {
                                    Student tmp = it->getStudent(i);
                                    potok << tmp.getFN() << "\t" << tmp.getGR() << endl;
                                }
                        it++;
                    }
                    return potok;
                }
                friend istream &operator>> (istream &potok,Course ob)
                {
                potok >> ob.dIme;
    
                }
    
    };
    
    template <typename T>
    void SetPrinter(T ob)
    {
        cout << ob;
    }
    
    template <typename T>
    void ListPrinter(list<T> l)
    {
        copy(l.begin(),l.end(),ostream_iterator<T>(cout," "));
    }
    
    int main()
    {
        Course o("input.txt");
        cout << o;
        cout << endl << "LIST GRUPI OOP1: ";
        list<int> l1 = o.upr("OOP1");
        copy(l1.begin(),l1.end(),ostream_iterator<int>(cout," "));
        cout << endl;
        map<string,list<int>> upr = o.allUpr();
        map<string,list<int>>::iterator it = upr.begin();
        cout << endl << "MAP:";
        while(it!=upr.end())
        {
            cout << endl << it->first << " = " ;
            list<int> tmp = it->second;
            list<int>::iterator it2 = tmp.begin();
            while(it2!=tmp.end())
            {
                cout << *it2 << " ";
                it2++;
            }
            it++;
        }
        cout << endl <<endl<< "SET STUDENT: " << endl;
        set<Student> studs = o.faknomer();
        set<Student>::iterator  it3 = studs.begin();
        while(it3!=studs.end())
        {
            cout << *it3 ;
            it3++;
        }
        cout << endl << "SET PRINTER: " << endl;
        SetPrinter<Course>(o);
        cout << endl << "LIST PRINTER: " << endl;
        ListPrinter<int>(l1);
        return 0;
    }
    Crazy forum admin
    PS: sorry for adverts, but bills ain't gonna pay themselves

+ Reply to Thread

Similar Threads

  1. Replies: 0
    Last Post: 25-10-2011, 05:39 PM
  2. Replies: 0
    Last Post: 24-10-2011, 07:29 PM
  3. Replies: 0
    Last Post: 08-10-2011, 01:23 AM
  4. АСЛС - решени задачи
    By Bloo in forum Други (УП, AСЛС, OKE)
    Replies: 0
    Last Post: 28-06-2011, 08:18 PM
  5. Replies: 4
    Last Post: 16-05-2011, 03:59 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts