Cita:
Iniciado por elturco_94 veran este ejecicio debo hacerlo con matrices y/o vectores
Si únicamente vas a pedir los datos de un usuario no es necesario declarar tantas matrices... tu diseño tiene sentido si tienes que, por ejemplo, pedir los datos de 11 usuarios.
Suponemos por tanto que hay que pedir los datos de X usuarios. Para nuestro ejemplo, X será 20, pero claro, definir las matrices con valores fijos no suele ser demasiado recomendable... si luego te piden que en vez de 20 sean 30 tienes que editar varias matrices para evitar problemas.
Lo suyo entonces es empezar definiendo un valor constante para que todas las matrices luzcan iguales:
Si no te dicen lo contrario, lo suyo es que los campos numéricos se almacenen en variables numéricas. En este caso, "edad" puede ser numérico:
Código C++:
Ver originalint main( )
{
char nombre[MaxElementos][20];
int edad[MaxElementos];
int ci[MaxElementos]
int codigo[MaxElementos];
for ( int i=0; i<MaxElementos; i++ )
{
}
}
Si no quieres o no puedes declararlo como numérico, al menos asegúrate de reservar espacio suficiente para almacenar el valor. Si la edad va a tener 2 dígitos necesitas que "edad" tenga un tamaño mínimo de 3 (recuerda que hay que reservar un espacio para el carácter de fin de cadena:
Código C++:
Ver originalint main( )
{
char nombre[MaxElementos][20];
char edad[MaxElementos][3];
char ci[MaxElementos][10];
char codigo[MaxElementos][7];
for ( int i=0; i<MaxElementos; i++ )
{
}
}
Yo voy a asumir a partir de este punto que se trabaja con enteros.
Ahora hay que pedir la información al usuario, aquí nuevamente tenemos que estar pendientes del tamaño máximo de cada cadena. En este caso, el nombre no puede tener más de 19 caracteres de longitud (recordemos el hueco adicional que necesitamos en las cadenas):
Ahora lo suyo sería calcular el código. Las normas son claras:
- 4 primeros digitos pares de la cedula (rellenar con 0 si hace falta)
- 2 digitos de la edad
Bueno, sacar los pares de la cédula se puede hacer de varias maneras, por ejemplo con un bucle:
Código C++:
Ver originalint cedula = ci[i]; // Copiamos la variable para no perder el dato original
codigo[i]= 0; // Aquí almacenamos los pares que encontremos
while ( cedula != 0 ) // Bucle, se repite mientras haya dígitos en "cedula"
{
// Esta es una operación de módulo 2, calcula el resto de la división entre 2.
// Si el último dígito de "cedula" es par, "cedula" será igualmente par
if ( cedula % 2 == 0 )
{
codigo[i]*= 10; // Desplazamos los números pares calculados hasta el momento
codigo[i]+= cedula % 10; // Añadimos el siguiente número par a la lista
if ( codigo[i]>= 1000 ) // Si hemos encontrado ya 4, paramos
break;
}
cedula /= 10; // Eliminamos el dígito actual de "cedula" para continuar con el siguiente
}
// Ahora nos aseguramos de tener 4 dígitos
while ( codigo[i]< 1000 )
codigo[i] *= 10; // Rellenamos con ceros
Finalmente hay que añadirle los dos dígitos de la edad:
Código C++:
Ver originalcodigo[i] *= 100; // Desplazamos la parte del código que ya tenemos calculada para evitar pisar datos
codigo[i] += edad[i]; // Añadimos la edad
Y, finalmente, mostramos todos los resultados:
Código C++:
Ver originalfor ( int i=0; i<MaxElementos; i++ )
{
printf( "%s\t%d\t%d\t%d\n", nombre
[i
], edad
[i
], ci
[i
], codigo
[i
] ); }
Espero que este mensaje te sirva de guía
Un saludo.