Zadanie z listą studentów

0

Witam, mam zadanie do wykonania, muszę przygotowac listę studentów, którzy osiągneli próg punktowy. Muszę odrzucić studentów, którzy nie osiągneli progu punktowego, a reszte wycoutować.
Do porównania czy dany student osiągnął próg muszę wykorzystać funkcji Friend. Nie wiem jak to kontynuować - doradzi ktoś?

Przykład

Wejście:
5
Jan
Kowalski
65
Anna
Nowak
73
Roman
Malinowski
32
Adam
Nowacki
73
Katarzyna
Jaworska
82
35

Wyjście:
Katarzyna Jaworska 82
Adam Nowacki 73
Anna Nowak 73
Jan Kowalski 65
#include <iostream>
#include <vector>
using namespace std;

class Student
{
public:
        string Name;
        string Surname;
        int Points;
        int MinScore;

        Student(string name, string surname, int points)
        {
                this->Name = name;
                this->Surname = surname;
                this->Points = points;
        }

};

int main()
{
        int studentAmount;
        int amount;
        cout << "Enter amount of students:" << endl;
        cin >> amount;

        if (amount >= 0 && amount <= 1000)
        {
                studentAmount = amount;

                string name, surname;
                int points;
                cout << "Enter students name, surname and points:" << endl;


                vector<Student> StudentList;
                for (int i = 0; i < 3*studentAmount; i++)
                {
        
                        cin >> name;
                        cin >> surname;
                        cin >> points;

                        Student Student(name, surname, points);
                        StudentList.emplace_back(Student);
                }


                int minScore;
                cout << "Enter min score threshold: " << endl;
                cin >> minScore;


        }
        else
        {
                return -1;
        }

        return 0;
}
0

Zrób sobie funkcję, która pobiera studenta i próg, zwracająca true/false i w zależności od tego drukuj.

1

Pewnie masz na mysli "mechanizm przyjazni" miedzy twoja klasa i funkcja, ktora bedzie mogla porownac, czy osoba spelnila jakies konketne warunki http://www.cplusplus.com/doc/tutorial/inheritance/
Nie jestem pewien, z ktora czescia zadania masz dokladnie problem, bo tego nie napisales, ale jesli algorytm porownania w mainie dziala, to wystarczy zrobic z tego osobna funkcje i ja "zaprzyjaznic" z klasa

//edit
a, dobra, nic tam nie porownales jescze, ale z tym to kolega wyzej juz doradzil, wiec powinienes dac rade

0

@tmk3: Nie wiem jak przekazać te objekty z vectora do tej zaprzyjaźnionej funkcji, która miała by porównać te wyniki.

3

Pisane na kolanie:

#include <iostream>
#include <vector>
using namespace std;

class Student
{
        private:
        string name,surname;
        int points;
        public:
        Student() {}
        //Student(string name, string surname,int points):name(name),points(points) {}
        friend istream &operator>>(istream &sin,Student &s) { return sin>>s.name>>s.surname>>s.points; }
        friend ostream &operator<<(ostream &sout,const Student &s) { return sout<<s.name<<' '<<s.surname<<' '<<s.points; }
        friend bool operator>=(const Student &s,int minpoints) { return s.points>=minpoints; }
};

int main()
{
        int amount;
        cin>>amount;
        vector<Student> StudentList(amount);
        for(Student &s:StudentList) cin>>s;
        int minpoints;
        cin>>minpoints;
        for(const Student &s:StudentList) if(s>=minpoints) cout<<s<<endl;
        return 0;
}

@Descendant, wystarczy dodać w odpowiednie miejsca:

        bool operator<(const Student &s) const
        {
        	int val=(points<s.points)-(points>s.points);
        	if(!val) val=(surname>s.surname)-(surname<s.surname);
        	if(!val) val=(name>s.name)-(name<s.name);
        	return val<0;
        }
        sort(begin(StudentList),end(StudentList));
0
Descendant napisał(a):

@tmk3: Nie wiem jak przekazać te objekty z vectora do tej zaprzyjaźnionej funkcji, która miała by porównać te wyniki.

Jako argument funkcji, _13th_Dragon porównuje je w linii 26, którą możesz przenieść do osobnej funkcji. Jeśli nie miałeś na zajęciach nic z przeciążaniem operatorów, to możesz wrzucić wszystko do std::map i też będzie działało, ale to już sobie sam zdecyduj.

0
tmk3 napisał(a):
Descendant napisał(a):

Jako argument funkcji, _13th_Dragon porównuje je w linii 26, którą możesz przenieść do osobnej funkcji. Jeśli nie miałeś na zajęciach nic z przeciążaniem operatorów, to możesz wrzucić wszystko do std::map i też będzie działało, ale to już sobie sam zdecyduj.

mapy mieli zaś przeciążenia nie?

0

A co z kolejnością wyniku?
Z przykładu wynika, że kolejność ma być odwrócona. Treść nic nie mówi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1