F010A. Llistats d'alumnes P44576


Statement
 

pdf   zip

thehtml

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++