.
Отговор в тема
Резултати от 1 до 2 от общо 2
  1. #1
    eXXcal
    Guest

    C++ програма

    Здравейте , имам малък проблем с програмата .Успешно се Build-ва , не изкарва грешки .А като се Run - не ми изписва map set iterator not dereferencable също така и standard c++ libraries out of range && 0 . Може ли някой да помогне ? Благодаря предварително


    #include <iostream>
    #include <fstream>
    #include <map>
    #include <ctime>
    #include <string>
    #include <stdio.h>
    #include <stdlib.h>
    #include <vector>
    #include <list>
    #include <iterator>
    #include <algorithm>
    #include <utility>
    #include <time.h>
    using namespace std;

    class CPerson
    {
    private:
    string name;
    string EGN;

    public:
    CPerson()
    {
    name=" ";
    EGN=" ";
    }

    CPerson(const string n, const string e)
    {
    name=n;
    EGN=e;
    }

    string getname()const
    {
    return name;
    }

    string getEGN()const
    {
    return EGN;
    }

    void setname(const string n)
    {
    name=n;
    }

    void setEGN(const string e)
    {
    EGN=e;
    }

    virtual void print() = 0; //1.1

    int getAge() const //1.2
    {
    int age;


    time_t currentTime;
    struct tm * ltm;

    time( &currentTime );
    ltm= localtime( &currentTime );


    int year = atoi(getEGN().substr(0, 2).c_str());
    int month = atoi(getEGN().substr(2, 2).c_str());
    int day = atoi(getEGN().substr(4, 2).c_str());
    int cyear = 1900 + ltm->tm_year;
    int cmonth = 1 + ltm->tm_mon;
    int cday = 1 + ltm->tm_mday;

    age = cyear - (year + 1900);
    if (cmonth < month)
    age--;
    if (cmonth == month && cday < day)
    age--;
    return age;
    }
    };

    class CStudent: public CPerson
    {

    private:
    string FN;
    map<int, int> st_tests;



    public:
    CStudent()
    {
    FN=" ";
    }

    CStudent(const string n)
    {
    FN=n;
    }

    CStudent(const string o, const string p, const string n):CPerson(o,p)
    {
    FN=n;
    }

    void setFN(const string n)
    {
    FN=n;
    }

    void setst_tests(map<int, int> m)
    {
    st_tests=m;

    }

    string getFN() const
    {
    return FN;
    }

    bool operator () (CStudent a, CStudent b) const
    {
    return a.average() < b.average();
    }

    map<int, int> getst_tests()
    {
    return st_tests;
    }

    void print()
    {
    cout<<"Ime: "<<getname()<<endl;
    cout<<"EGN: "<<getEGN()<<endl;
    cout<<"FN: "<<getFN()<<endl;
    map<int, int>::iterator it=st_tests.begin();
    while(it!=st_tests.end())
    {
    cout<<it->first<<" "<<it->second<<endl;
    it++;
    }
    }

    void add_st_tests(int a, int b)
    {
    map<int, int>::iterator it=st_tests.begin();

    while(it!=st_tests.end())
    {
    st_tests.insert(pair<int,int>(a,b));
    }
    }

    double average() //2.1
    {
    double sum=0;
    map<int, int>::iterator it=st_tests.begin();
    for (it=st_tests.begin();it!=st_tests.end();it++)
    sum+=it->second;
    if(st_tests.size()!=0)
    return sum/st_tests.size();
    return -1;
    }

    int search(const int a) //2.2
    {
    return st_tests.find(a)->second;
    }

    };

    class CGroup
    {
    private:
    string spec;
    int kurs;
    int grupa;
    vector<CStudent> students;

    public:
    string getspec() const
    {
    return spec;
    }

    int getkurs() const
    {
    return kurs;
    }

    int getgrupa() const
    {
    return grupa;
    }

    vector<CStudent> getstudents()
    {
    return students;
    }

    void setstudents(vector<CStudent> a)
    {
    students=a;
    }

    void setspec(const string n)
    {
    spec=n;
    }

    void setkurs(const int n)
    {
    kurs=n;
    }

    void setgrupa(const int n)
    {
    grupa=n;
    }

    CGroup(const string s, const int k, const int g)
    {
    spec=s;
    kurs=k;
    grupa=g;

    }

    void addstudent(CStudent &a)
    {
    students.push_back(a);
    }

    /* int ReadFile() //3.1
    {
    ifstream st;
    st.open("students.txt",ios::in);
    if(!st)
    {
    cout<<"Cannot open students.txt or file does not exist."<<endl;
    return 0;
    }
    string a, b, c;
    int d, e, i=0;
    if (st.is_open())
    {
    do
    {
    st >> a >> b >> c;
    students[i].setname(a);
    students[i].setEGN(b);
    students[i].setFN(c);
    do
    {
    st >> d >> e;
    students[i].add_st_tests(d,e);
    }while(st.peek() != '\n' || st.peek() != '\r');
    i++;
    }while(!st.eof());
    }
    st.close();
    }*/

    double averagetest(int a) //3.2
    {
    double sum=0;
    int br=0;
    vector<CStudent>::iterator itt;
    for (itt=students.begin();itt!=students.end();itt++)
    {
    map<int, int>::iterator it=(*itt).getst_tests().find(a);
    while(itt!=students.end())
    sum+=it->second;
    br++;
    }
    cout<<sum/br;
    return sum/br;
    }

    list<CStudent> averageparam(const int a, const int b) //3.3
    {
    list<CStudent> l;
    int i=0;
    vector<CStudent>::iterator itt=students.begin();
    for (itt=students.begin();itt!=students.end();itt++)
    {
    if((*itt).average() >= a && (*itt).average() <= b)
    l.push_back(*itt);
    i++;
    }
    cout<<"List ot studenti sus sreden broi tochki mejdu "<<a<<" - "<<b<<endl;
    list<CStudent>::iterator it=l.begin();
    for (it=l.begin();it!=l.end();it++)
    (*it).print();
    return l;
    }

    int averageabove(const int a) //3.4
    {
    int br=0;
    vector<CStudent>::iterator itt=students.begin();
    for (itt=students.begin();itt!=students.end();itt++)
    if((*itt).average() > a)
    br++;
    cout<<"Broi studenti sus sreden broi tochki nad "<<a<<": "<<br<<endl;
    return br;
    }

    void averageage(const int a) //3.5
    {
    cout<<"Sreden uspeh na "<<a<<" godishni studenti."<<endl;
    vector<CStudent>::iterator itt=students.begin();
    for (itt=students.begin();itt!=students.end();itt++)
    {
    int b=(*itt).getAge();
    if(a == b)
    cout<<(*itt).getname()<<" "<<(*itt).average()<<endl;
    }
    }

    void beststudent() //3.6
    {
    cout<<"Student s nai-visoka uspevaemost."<<endl;
    CStudent temp;
    vector<CStudent>::iterator itt=students.begin();
    for (itt=students.begin();itt!=students.end();itt++)
    if ((*itt).average() > temp.average())
    temp = (*itt);
    temp.print();
    }

    void sortaverage() //3.7
    {
    sort(students.begin(),students.end(),CStudent());
    }

    };

    int main()
    {

    CStudent p1("Ivan","9711156070","61360140");
    CStudent p2("Petar","9703041020","61360127");
    CStudent p3("Mihail","9708032540","61360134");
    p1.add_st_tests(1,55);
    p1.add_st_tests(2,80);
    p1.add_st_tests(3,69);
    p2.add_st_tests(1,9;
    p2.add_st_tests(2,25);
    p2.add_st_tests(3,56);
    p3.add_st_tests(1,32);
    p3.add_st_tests(2,87);
    p3.add_st_tests(3,57);
    CGroup g1 ("SIT",1,1);
    g1.addstudent(p1);
    g1.addstudent(p2);
    g1.addstudent(p3);
    g1.averagetest(2);
    }


    Ето го и условието :

    1. Да се дефинира абстрактен клас CPerson, с член данни име и ЕГН, освен необходимите методи, да се напишат и следните:

    абстрактен метод за печат

    метод, който връща възрастта на човека на база на ЕГН-то

    2. Да се дефинира клас CStudent наследник на CPerson, съхраняващ информацията за факултетен номер на студента и контейнер съхраняващ резултатите на студента от различни тестове (код на теста и получения брой точки, напр. (map<unsigned, unsigned> st_tests). Освен необходимите конструктори, методи и оператори (сред които е функцията за печат) да се добавят:

    метод, който връща средния брой точки получени от студента

    метод, който връща брой точки по код на тест, подаден като параметър

    3. Да се дефинира клас група студенти CGroup, съхраняващ информацията за специалност, курс, група и контейнер от студентите в нея (напр. vector<CStudent>). Освен необходимите методи, да се реализират и следните член функции:

    да се дефинира конструктор с параметър име на файл, съдържащ необходимата информация за запълване на контейнера

    изчислява и връща средния брой точки за тест, подаден като параметър

    връща списък от студенти (list<CStudent*>) със среден брой точки принадлежащи на интервал [a;b] (a,b - параметри)

    изчислява и връща броя на студентите със среден брой точки, по-голям от числото подадено като параметър

    изчислява и връща средния брой точки на студентите на възраст, подадена като параметър

    намира студента с най-висока успеваемост на тестовете

    сортира студентите по среден брой точки

    сортира тестовете в низходящ ред по среден брой точки, получени от студентите в групата

    изчислява средната възраст на студентите от групата

    4. Да се създадат няколко обекта от класа CGroup и се демонстрира работоспособността на методите му като се направят различни справки и съпоставки между тях (напр. коя специалност има по-висока средна успеваемост на тестовете, коя по-висока средна възраст, коя повече студенти получили точки над зададена стойност). Да има обработка на изключения на необходимите места.

  2. #2
    Повече от фен
    Регистриран на
    Feb 2014
    Мнения
    317
    ами виж, аз нямам намерение да ти оправям кода, но опита ли да потърсиш " map set iterator not dereferencable" в интернет?
    https://stackoverflow.com/questions/...dereferencable

    част от процеса на научаване на дадено нещо е сблъскването с проблемите и решаването им. в повечето случаи някой преди теб се е натъкнал на подобен проблем.

    това явно е курсова и никой няма да го гледа, но все пак новите егн-та имат различен формат
    https://bg.wikipedia.org/wiki/%D0%95...BC%D0%B5%D1%80

Етикети за тази тема

Правила за публикуване

  • Вие не можете да публикувате теми
  • Вие не можете да отговаряте в теми
  • Вие не можете да прикачвате файлове
  • Вие не можете да редактирате мненията си