online: 7; azi: 245; total: 50700 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

La un concurs participă mai mulţi candidați identificaţi după nume şi prenume. Fiecare candidat primeşte la înscriere un număr de identificare. Concursul constă în trei probe, notele putând lua valori de la 1 la 10. Rezultatul concursului se stabileşte pe baza mediei aritmetice a notelor primite. Trebuie prevăzute două variante de admitere a candidaților: sunt admişi toți candidaţii care au o medie mai mare decât m şi sunt admişi , în ordinea mediilor, primii k candidați (valorile pentru m şi k se citesc de la tastatură). Scrieţi o aplicaţie in c++ care să asigure următoarele operații prin intermediul unui meniu:
a. Înscrierea unui nou candidat la concurs.
b. Retragerea unui candidat din concurs. c. Completarea notelor şi calcularea mediei pentru fiecare candidat.
d. Modificarea informaţiilor despre un candidat.
e. Afişarea candidaţilor admişi în fiecare dintre cele două variante în ordinea descrescătoare a mediilor.
f. Afişarea candidaţilor admişi în fiecare dintre cele două variante în ordinea alfabetică a numelui şi prenumelui.
Pentru a rezolva această problemă, putem crea o structură Candidat , care va stoca informațiile despre fiecare candidat (nume, prenume, numărul de identificare, note și medie). Vom utiliza un vector pentru a stoca candidații. De asemenea, vom implementa funcțiile necesare pentru gestionarea candidaților și afișarea rezultatelor în funcție de criteriile specificate.
Începeți prin a crea structura Candidat și funcțiile de bază pentru gestionarea candidaților:
# include < iostream >
# include <vector>
# include < string >
# include < algorithm >
struct Candidat {
std :: string nume;
std :: string prenume;
int numar_identificare ;
int note[ 3 ];
double medie;
};
// Adăugarea unui candidat
void inscriere_candidat ( std ::vector<Candidat> & candidati , const Candidat &candidat) {
candidati. push_back (candidat);
}
// Retragerea unui candidat
void retragere_candidat ( std ::vector<Candidat> & candidati , int numar_identificare ) {
candidati. erase ( std :: remove_if ( candidati. begin (), candidati. end (),
[&]( const Candidat &c) { return c.numar_identificare == numar_identificare ; }),
candidati. end ());
}
// Completarea notelor și calcularea mediei
void completare_note_medie (Candidat &candidat, int nota1, int nota2, int nota3) {
candidat.note [ 0 ] = nota1;
candidat.note [ 1 ] = nota2;
candidat.note [ 2 ] = nota3;
candidat.medie = (nota1 + nota2 + nota3) / 3.0 ;
}
// Modificarea informațiilor despre un candidat
void modificare_candidat (Candidat &candidat, const std :: string &nume, const std :: string &prenume) {
candidat.nume = nume;
candidat.prenume = prenume;
}
Acum vom implementa funcțiile pentru afișarea candidaților admiși în funcție de criteriile specificate:
std ::vector<Candidat> candidati_admisi_medie ( std ::vector<Candidat> & candidati , double m) {
std ::vector<Candidat> admisi ;
for ( const Candidat &c : candidati ) {
if ( c.medie > m) {
admisi. push_back (c);
}
}
return admisi ;
}
std ::vector<Candidat> candidati_admisi_topk ( std ::vector<Candidat> & candidati , int k) {
std :: sort ( candidati. begin (), candidati. end (),
[]( const Candidat &a, const Candidat &b) { return a.medie > b.medie ; });
return std :: vector <Candidat>( candidati. begin (), candidati. begin () + std :: min (k, ( int ) candidati. size ()));
}
void afisare_candidati_alfabetic ( const std ::vector<Candidat> & candidati ) {
std ::vector<Candidat> copie ( candidati ) ;
std :: sort ( copie. begin (), copie. end (), []( const Candidat &a, const Candidat &b) {
if ( a.nume == b.nume ) {
return a.prenume < b.prenume ;
}
return a.nume < b.nume ;
});
for ( const Candidat &c : copie) {
std :: cout << c.nume << " " << c.prenume << " - Medie: " << c.medie << std :: endl ;
}
}
int main () {
std ::vector<Candidat> candidati ;
// cod pentru interacțiunea cu utilizatorul și apelarea funcțiilor corespunzătoare opțiunilor din meniu
return 0 ;
}

În funcția main , veți implementa interacțiunea cu utilizatorul și apelarea funcțiilor corespunzătoare opțiunilor din meniu. Am definit toate funcțiile necesare pentru a efectua operațiile solicitate. Acum, puteți utiliza aceste funcții într-un meniu interactiv în funcția main .