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);
}