Fundamentos de Programacion C++
Ejercicio 1
Ejercicio 1 (35pts). Considere el struct {int dni; vector
#include <iostream>
#include <vector>
#include <tuple>
using namespace std;
struct Materias{
    
    int cod_mat, nota;
};
struct Persona{
    int dni;
    vector <Materias> nota;
};
vector <Persona> cargarDatos(vector <Persona> );
tuple <int,int> dos_max(vector <Persona> );
tuple <int,int> desempenio_materia(vector <Persona> , int , int );
int main(){
    
    vector <Persona> carrera;
    
    carrera = cargarDatos(carrera);
//--------------------------------------------------------    
    int dni1,dni2;
    
    tie(dni1,dni2) = dos_max(carrera);
    
    cout <<"\nAlumno N° 1: "<<dni1<<endl;    
    
    cout <<"Alumno N° 2: "<<dni2<<endl;
//--------------------------------------------------------
    int r_veces, nota, dni, cod_mat;
    
    cout <<"\nDNI Alumnos a buscar: "; cin>>dni;
    
    cout <<"Cod_Mat ";cin>>cod_mat;
    
    tie(r_veces ,nota) = desempenio_materia(carrera , dni, cod_mat);
    
    cout <<"\nRindio: "<<r_veces<<" y su ultima nota fue: "<<nota<<endl;
    
    return 0;
}
vector <Persona> cargarDatos(vector <Persona> carrera){
    
    Materias nuevo;
    int n;
    
    cout <<"Cuantos Alumnos hay en la carrera: ";cin>>n;
    
    carrera.resize(n);
    
    for (size_t i = 0; i < carrera.size(); i++){
        
        cout<<"******Alumno N° "<<i+1<<endl;
        
        cout <<"DNI: ";cin>> n;
        
        cout<<"Cod_Mat: ";cin>>nuevo.cod_mat;
        while(nuevo.cod_mat >= 0){
            cout<<"Nota (0 al 10): ";cin>>nuevo.nota;
            
            carrera[i].dni = n;
            
            carrera[i].nota.push_back(nuevo);
    
            cout<<"Cod_Mat: ";cin>>nuevo.cod_mat;
    
        }
    }
    return carrera;
}
tuple <int,int> dos_max(vector <Persona> carrera){
    
    int dni1, dni2 ,puntos1 = 0, puntos2 = 0;
    
    dni1 = carrera[0].dni;
    
    for(int i = 0; i < carrera[0].nota.size();i++){
        
        for(int e = 0; e < carrera[0].nota.size();e++){
            
            if(i + 1 == carrera[0].nota[e].cod_mat and carrera[0].nota[e].nota >= 6){
                
                puntos1++;
            
                break;
 
        
            }
    
        }
    
    }
    for(size_t i = 1; i < carrera.size(); i++){
        
        int suma = 0;
        
        for(size_t e = 0; e < carrera[i].nota.size();e++){
            
            for(size_t j = 0; j < carrera[i].nota.size();j++){
                
                if(carrera[i].nota[j].cod_mat == e+1 and carrera[i].nota[j].nota >=6){
                    
                    suma++;
            
                    break;
                    }
                }
            }
        if(suma > puntos1){
            
            puntos2 = puntos1;
            
            puntos1 = suma;
            
            dni2 = dni1;
        
            dni1 = carrera[i].dni;
        }
        
        else{
            
            if(suma < puntos1 and suma > puntos2){
                
                puntos2 = suma;
            
                dni2= carrera[i].dni;
        
            }
    
        }
    
    }
    
    return make_tuple(dni1, dni2);
}
tuple <int,int> desempenio_materia(vector <Persona> carrera, int dni, int cod_mat){
    
    int r_veces = 0, nota;
    auto i = begin(carrera);
    
    do{
    
        i++;    
    
    }while((*i).dni != dni);
    
    for(size_t e = 0; e < (*i).nota.size(); e++){
    
        if((*i).nota[e].cod_mat == cod_mat){
        
            r_veces++;
            
            nota = (*i).nota[e].nota;    
        
        }
    
    }
    
    return make_tuple(r_veces, nota);
}
