Advertisement
xopsuei

Control 1, PRO2

Feb 28th, 2013
484
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. #include "Cjt_estudiants.hpp"
  2.  
  3. typedef vector<Cjt_estudiants> quadri;
  4.  
  5. void leer_vect_cjt_estudiants(vector<Cjt_estudiants> &v){
  6.   for (int j=0; j<v.size(); ++j)
  7.     v[j].llegir_cjt_estudiants();
  8. }
  9.  
  10. void escribir_vect_double(const vector<double> &v){
  11.   // Pre: v.size()>0
  12.   for (int j=0; j<v.size()-1; ++j)
  13.     cout << v[j] << " ";
  14.   cout << v[v.size()-1] << endl;
  15. }
  16.  
  17. double normalitzar_nota(const Estudiant &e){
  18. /* Pre: cap */
  19. /* Post: retorna la nota normalizada de l'estudiant, la seva nota si en te
  20.    o -1 si no en te */
  21.  
  22.   if(e.te_nota()) return e.consultar_nota();
  23.   return -1;
  24. }
  25.  
  26. double maxima_nota(const Estudiant &e1, const Estudiant &e2){
  27. /* Pre: els dos estudiants tenen el mateix dni */
  28. /* Post: retorna la nota nota normalitzada més gran (o la segona en cas d'empat) dels dos estudiants */
  29.  
  30.   double nota_e1 = normalitzar_nota(e1);
  31.   double nota_e2 = normalitzar_nota(e2);
  32.  
  33.   return (nota_e1 > nota_e2) ? nota_e1 : nota_e2;
  34. }
  35.  
  36. vector<double> maximes_notes(const quadri &Q1, const quadri &Q2, const int &dni){
  37. /* Pre: Q1 i Q2 tenen la mateixa mida */
  38. /* Post: retorna un vector amb les millors notes per assignatura dels dos quadrimestres
  39.    per a un dni donat. */
  40.  
  41.   vector<double> notes(Q1.size());
  42.  
  43.   for(int i = 0; i < Q1.size(); ++i){
  44.     if(Q1[i].existeix_estudiant(dni) and Q2[i].existeix_estudiant(dni)){
  45.       notes[i] = maxima_nota(Q1[i].consultar_estudiant(dni), Q2[i].consultar_estudiant(dni));
  46.     }
  47.     else if(Q1[i].existeix_estudiant(dni)){
  48.       notes[i] = normalitzar_nota(Q1[i].consultar_estudiant(dni));
  49.     }
  50.     else if(Q2[i].existeix_estudiant(dni)){
  51.       notes[i] = normalitzar_nota(Q2[i].consultar_estudiant(dni));
  52.     }
  53.     else notes[i] = -1;
  54.   }
  55.  
  56.   return notes;
  57. }
  58.  
  59. int main() {
  60.   quadri Q1, Q2;
  61.  
  62.   int n = readint();
  63.   Q1 = Q2 = quadri(n);
  64.  
  65.   leer_vect_cjt_estudiants(Q1);
  66.   leer_vect_cjt_estudiants(Q2);
  67.  
  68.   int dni;
  69.   while(dni = readint()){
  70.     escribir_vect_double(maximes_notes(Q1,Q2,dni));
  71.   }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement