Hola, he echo una ejercicio de estructuras que consiste en lo siguiente:
le introduces
el
nombre,
s si la competición es puntuable
n en caso que no lo sea y los
puntos correspondientes que ha generado dicha competición.
Quiero generar una lista que me muestre
el nombre, el total de pruebas realizadas, el total de pruebas puntuables (que será la suma de pruebas de tipo "s") y el total de puntos. Lógicamente podré introducir varias veces un mismo usuario y se irán acumulando los puntos y el número de competiciones.
He diseñado un programa para ello, pero me marca error al final de escribir los usuarios.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct usuario{
string nombre;
char tipo_competicion; // s en caso que la competición sea puntable n en caso contrario
int puntos;
};
struct ranking{
string nombre;
int total_pruebas;
int pruebas_puntuables;
int puntos;
};
int donde_esta(string nombre,vector<ranking>&v){
for (int i = 0 ; i < v.size() ; i++){
if (v[i].nombre == nombre){return i;} }
ranking r;
r.nombre=nombre;
r.total_pruebas=0;
r.pruebas_puntuables=0;
r.puntos=0;
}
vector<ranking>classificacion(vector<usuario>p){
vector<ranking>v;
for(int i=0;i<p.size();i++){
int lugar=donde_esta(p[i].nombre,v);
v[lugar].total_pruebas=v[lugar].total_pruebas+1;
v[lugar].puntos=v[lugar].puntos+p[i].puntos;
if(p[i].tipo_competicion=='s'){
v[lugar].pruebas_puntuables=v[lugar].pruebas_puntuables+1;}
else if(p[i].tipo_competicion=='n'){v[lugar].pruebas_puntuables=v[lugar].pruebas_puntuables+0;}
}
return v;
}
bool ordenar_pruebas(ranking c1, ranking c2){
if(c1.total_pruebas==c2.total_pruebas){
if(c1.puntos==c2.puntos){return c1.nombre<c2.nombre;}
else{return c1.puntos>c2.puntos;}}
else{return c1.total_pruebas>c2.total_pruebas;}
}
bool ordenar_puntos(ranking c1, ranking c2){
if(c1.puntos==c2.puntos){return c1.nombre<c2.nombre; }
else{return c1.puntos>c2.puntos;}
}
int main(){
int n;
cout<<"introduzca el numero de elementos de la estructura"<<endl;
cin>>n;
vector<usuario>p(n);
cout<<":::::::::::::::::::::::::::::::::::::::::::::::"<<endl;
cout<<endl;
for(int i=0;i<n;i++){
cout<<"nombre >> competicion (s)-> PUNTUABLE, (n)-> NO PUNTUABLE >> puntos "<<endl;
cin>>p[i].nombre;
cin>>p[i].tipo_competicion;
cin>>p[i].puntos;
}
vector<ranking>v=classificacion(p);
cout << "-----------------------"<< endl;
sort(v.begin(),v.end(),ordenar_pruebas);
cout<<"LISTA"<<endl;
for(int i=0;i<v.size();i++){
cout<<v[i].nombre<<" "<<v[i].total_pruebas<<" "<<v[i].pruebas_puntuables<<" "<<v[i].puntos<<endl;
}
system("pause");
return 0;
}
Gracias por la ayuda
