El tráfico de red se puede optimizar... pero mi consejo es ir por partes... primero haz que funcione y luego lo optimizas.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúint donde_esta(string nombre,vector<ranking>&v)
int donde_esta( const string& nombre, vector< ranking >& v )
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;
}
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;
}
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;
}
if(p[i].tipo_competicion=='s')
{
v[lugar].pruebas_puntuables = v[lugar].pruebas_puntuables+1;
}
if(p[i].tipo_competicion=='s')
{
v[lugar].pruebas_puntuables++;
}
if(p[i].tipo_competicion=='s')
{
++v[lugar].pruebas_puntuables;
}
// He puesto postincrementos en vez de preincrementos porque creo que son más fáciles de ver cuando estás aprendiendo.
vector< ranking >::const_iterator it;
for ( it = p.begin( ); it != p.end( ); ++it )
{
int lugar = donde_esta( it->nombre, v );
v[ lugar ].total_pruebas++;
v[ lugar ].puntos += it->puntos;
if ( it->tipo_competicion == 's' )
{
v[ lugar ].pruebas_puntuables++;
}
}
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;
}
}
bool ordenar_pruebas(ranking c1, ranking c2)
{
bool to_return = true;
if (c1.total_pruebas==c2.total_pruebas)
{
if(c1.puntos==c2.puntos)
to_return = c1.nombre<c2.nombre;
else
to_return = c1.puntos>c2.puntos;
}
else
to_return = c1.total_pruebas>c2.total_pruebas;
return to_return;
}
class ranking
{
public:
ranking( const string& nombre )
{
this->nombre = nombre;
total_pruebas = 0;
pruebas_puntuables = 0;
puntos = 0;
}
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;
}
// Esto que viene ...
ranking r;
r.nombre=nombre;
r.total_pruebas=0;
r.pruebas_puntuables=0;
r.puntos=0;
// ... se sustituye por ...
ranking r( nombre );
// ... una sola linea!!!
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class usuario
{
public:
string nombre;
bool tipo_competicion; // su funcion es booleana... o es competicion o no lo es, mejor bool
int puntos;
// Constructores SIEMPRE para inicializar la memoria.
// * nombre no hace falta inicializarlo porque es una clase y ya tiene su propia inicializacion,
// aunque podria ponerse si quieres.
usuario( )
: tipo_competicion( false ),
puntos( 0 )
{
}
};
class ranking
{
public:
string nombre;
int total_pruebas;
int pruebas_puntuables;
int puntos;
// Esta forma de inicializar las variables es mas optima que la que te he explicado antes.
// Tambien quizas un poco mas complicada de entender, pero como he dicho, es mejor.
ranking( const string& nombre_alumno )
: nombre( nombre_alumno ),
total_pruebas( 0 ),
pruebas_puntuables( 0 ),
puntos( 0 )
{
}
// Aprovechando las caracteristicas de las clases, metemos el sumador aqui
void suma( const usuario& usuario )
{
++total_pruebas;
puntos+= usuario.puntos;
if ( usuario.tipo_competicion )
++pruebas_puntuables;
}
};
vector< ranking >::iterator donde_esta( const string& nombre,
vector< ranking >& v )
{
vector< ranking >::iterator it;
for ( it = v.begin( ); it != v.end( ); ++it )
{
if ( it->nombre == nombre )
break;
}
return it;
}
vector< ranking >::iterator nueva_entrada( const string& nombre,
vector< ranking >& v )
{
ranking r( nombre );
v.push_back( r );
return donde_esta( nombre, v );
}
vector< ranking > classificacion( const vector< usuario >& p)
{
vector< ranking > v;
vector< usuario >::const_iterator it_usuario;
for( it_usuario = p.begin( ); it_usuario != p.end( ); ++it_usuario )
{
vector< ranking >::iterator it_ranking = donde_esta( it_usuario->nombre, v );
if ( it_ranking == v.end( ) )
it_ranking = nueva_entrada( it_usuario->nombre, v );
it_ranking->suma( *it_usuario );
}
return v;
}
bool ordenar_pruebas( const ranking& c1,
const ranking& c2)
{
bool to_return;
if( c1.total_pruebas == c2.total_pruebas )
{
if( c1.puntos == c2.puntos )
to_return = c1.nombre<c2.nombre;
else
to_return = c1.puntos>c2.puntos;
}
else
to_return = c1.total_pruebas>c2.total_pruebas;
return to_return;
}
bool ordenar_puntos( const ranking& c1,
const ranking& c2)
{
bool to_return;
if( c1.puntos == c2.puntos )
to_return = c1.nombre<c2.nombre;
else
to_return = c1.puntos>c2.puntos;
return to_return;
}
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++)
{
// Para separar un poco mas el texto.
cout << endl;
// Es mejor guiar al usuario por pasos
cout << "nombre: ";
cin >> p[i].nombre;
cout << "competicion (s/n): ";
char c;
cin >> c;
// si no se introduce una s, se interpreta que no es de competicion.
// si quieres forzar a que el usuario introduzca s o n te toca programarlo
p[i].tipo_competicion = ( c == 's' );
cout << "puntos: ";
cin >> p[i].puntos;
}
vector< ranking > v = classificacion(p);
cout << "-----------------------" << endl;
sort( v.begin(), v.end(), ordenar_pruebas );
cout << "LISTA" << endl;
vector< ranking >::const_iterator it;
for( it = v.begin( ); it != v.end( ); ++it )
{
cout << it->nombre << " "
<< it->total_pruebas << " "
<< it->pruebas_puntuables << " "
<< it->puntos << endl;
}
system("pause");
return 0;
}
#ifdef _WIN32
char* limpiar_pantalla_cmd = "CLS";
#else
char* limpiar_pantalla_cmd = "clear";
#endif
void func( )
{
// ...
system( limpiar_pantalla_cmd );
// ...
}
for (f = 0; f < 5;f++)
{
for (c= 1; c < 5;c++)
Cita de: amchacon en 1 Julio 2013, 22:31 PMC++ no necesita limpieza de buffer ni esas bobadas que tenía C
struct partidas
{
char nom_jug[40];
char ced_jug[8];
};
struct partidas partida1, partida2;
struct partidas1
{
char nom_jug[40];
char ced_jug[8];
} partidas1[500];
struct partidas2
{
char nom_jug[40];
char ced_jug[8];
} partidas2[500];
struct partidas
{
char nom_jug[40];
char ced_jug[8];
};
struct partidas partidas[10];
if(*computadora<*opcion)
printf("Mi numero es meno\n");
else if(*computadora>*opcion)
printf("Mi numero es mayor\n");
else
printf("Acertaste");
exit(1);
int main()
{
int num,com,i;
int acertado = 0;
int *numero,*computadora,*opcion;
numero = #
computadora = &com;
opcion = &i;
printf("Juego que adivina el numero de la computadora<----------\n");
srand(time(NULL));
*computadora = (rand()%50)+1;
printf("Tienes 7 oportunidades para adivinar el numero\n");
for(*opcion=1;(*opcion<=7) && (acertado == 0);(*opcion)++)
{
printf("%d oportunidad---->",*opcion);
scanf("%d",numero);
if(*computadora<*numero)
printf("Mi numero es meno\n");
else if(*computadora>*numero)
printf("Mi numero es mayor\n");
else
{
printf("Acertaste");
acertado = 1;
}
}
if ( acertado == 0 )
{
printf("Lastima se te acabaron las oportunidades\n");
printf("%d",*computadora);
}
return 0;
}
int** a, b;
Cita de: m@o_614 en 1 Julio 2013, 17:10 PMes que tambien me parece demasiado repetitivo el codigo, ingresarle para una matriz, luego ingresarle para otra.. seria bueno hacerlo con una funcion como dijo eferion???