F010A. Llistats d’alumnes

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
    }

Informació del problema

Autoria: Professorat de P1

Generació: 2026-01-25T11:14:52.924Z

© Jutge.org, 2006–2026.
https://jutge.org
