F010A. Llistats d'alumnes P44576


Statement
 

pdf   zip

El Cap de l’Àrea de Suport a la Presa de Decisions de la FIB disposa d’un llistat amb el DNI i el nom de certs estudiants de la UPC. D’altra banda, també disposa d’un llistat que enumera les notes que alguns estudiants de la UPC han tingut a certes assignatures de certs centres. Tots dos llistats es troben ordenats per DNI.

A partir d’aquests dos llistats, el Cap vol obtenir eficientment un llistat que desglossi les notes de cada estudiant, i la mitjana de les seves notes. El programa ja el té començat (vegeu lstlisting adjunt) i us ha demanat que l’acabeu.

Entrada

L’entrada consisteix en els dos llistats, cadascun ordenat per DNI i sense línies repetides. El lstlisting que defineix les estructures de dades i el code que llegeix l’entrada ja el teniu implementat. No el toqueu!

Sortida

La sortida és un llistat ordenat segons els DNIs que conté, per a cada estudiant, les seves notes i la mitjana d’aquestes. Les notes han d’aparèixer en el mateix ordre que en el segon llistat de l’entrada.

Fixeu-vos que, per a cada estudiant, cal indentar amb cinc espais la informació de les seves notes, i cal deixar una línia en blanc després. Observeu també que si un identificador apareix en un llistat d’entrada però no a l’altre, aquest no ha d’aparèixer al llistat de sortida.

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


struct Alumne {
    int dni;
    string nom;
};


struct Nota {
    int dni;
    string ass;     // assignatura
    string fac;     // facultat
    double nota;
};


void llegeix_alumnes(vector<Alumne>& alumnes) {
    int m;
    cin >> m;
    alumnes = vector<Alumne>(m);
    for (int i = 0; i < m; ++i) cin >> alumnes[i].dni >> alumnes[i].nom;
}


void llegeix_notes(vector<Nota>& notes) {
    int n;
    cin >> n;
    notes = vector<Nota>(n);
    for (int i = 0; i < n; ++i) {
        cin >> notes[i].dni >> notes[i].ass >> notes[i].fac >> notes[i].nota;
    }
}


int main() {
    cout.setf(ios::fixed);      // estableix el format dels reals
    cout.precision(2);          // per escriure les notes

    vector<Alumne> alumnes;
    vector<Nota> notes;
    llegeix_alumnes(alumnes);
    llegeix_notes(notes);

    ...                         // continueu el programa
}
Public test cases
  • Input

    5
    1312    Carlota
    5561    Natalia
    7790    Laura      
    8876    Gargallo
    9386    Garolera
    
    7
    1312    P1  FIB      7
    1312    AL  FIB      8
    2020    IC  FIB      4.8
    5561    P1  FIB      0
    5561    I1  FME      6.5
    7790    P1  FIB      10
    9386    I1  FME      10
    

    Output

    1312 Carlota
         P1 FIB 7.00
         AL FIB 8.00
         mitjana: 7.50
    
    5561 Natalia
         P1 FIB 0.00
         I1 FME 6.50
         mitjana: 3.25
    
    7790 Laura
         P1 FIB 10.00
         mitjana: 10.00
    
    9386 Garolera
         I1 FME 10.00
         mitjana: 10.00
    
    
  • Input

    1
    123456789    Maria
    
    1
    987654321    P1  FIB      5
    

    Output

    
            
                                
  • Information
    Author
    Professorat de P1
    Language
    Catalan
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++