Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/11/2014, 21:13
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Problema con matrices y vectores en borland c++

Cita:
Iniciado por elturco_94 Ver Mensaje
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:

Código C++:
Ver original
  1. const int MaxElementos = 20;

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 original
  1. int main( )
  2. {
  3.   char nombre[MaxElementos][20];
  4.   int edad[MaxElementos];
  5.   int ci[MaxElementos]
  6.   int codigo[MaxElementos];
  7.  
  8.   for ( int i=0; i<MaxElementos; i++ )
  9.   {
  10.   }
  11. }

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 original
  1. int main( )
  2. {
  3.   char nombre[MaxElementos][20];
  4.   char edad[MaxElementos][3];
  5.   char ci[MaxElementos][10];
  6.   char codigo[MaxElementos][7];
  7.  
  8.   for ( int i=0; i<MaxElementos; i++ )
  9.   {
  10.   }
  11. }

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):

Código C++:
Ver original
  1. printf("ingrese el nombre: ");
  2. fgets(nombre[i],19,stdin);
  3. printf("\ningrese la edad: ");
  4. scanf( "%d", &edad[i]);
  5. printf("\ningrese la cedula: ");
  6. scanf( "%d", &ci[i] );

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 original
  1. int cedula = ci[i]; // Copiamos la variable para no perder el dato original
  2. codigo[i]= 0; // Aquí almacenamos los pares que encontremos
  3. while ( cedula != 0 ) // Bucle, se repite mientras haya dígitos en "cedula"
  4. {
  5.   // Esta es una operación de módulo 2, calcula el resto de la división entre 2.
  6.   // Si el último dígito de "cedula" es par, "cedula" será igualmente par
  7.   if ( cedula % 2 == 0 )
  8.   {
  9.     codigo[i]*= 10; // Desplazamos los números pares calculados hasta el momento
  10.     codigo[i]+= cedula % 10; // Añadimos el siguiente número par a la lista
  11.     if ( codigo[i]>= 1000 ) // Si hemos encontrado ya 4, paramos
  12.       break;
  13.   }
  14.   cedula /= 10; // Eliminamos el dígito actual de "cedula" para continuar con el siguiente
  15. }
  16.  
  17. // Ahora nos aseguramos de tener 4 dígitos
  18. while ( codigo[i]< 1000 )
  19.   codigo[i] *= 10; // Rellenamos con ceros

Finalmente hay que añadirle los dos dígitos de la edad:

Código C++:
Ver original
  1. codigo[i] *= 100; // Desplazamos la parte del código que ya tenemos calculada para evitar pisar datos
  2. codigo[i] += edad[i]; // Añadimos la edad

Y, finalmente, mostramos todos los resultados:

Código C++:
Ver original
  1. printf( "\n" );
  2. for ( int i=0; i<MaxElementos; i++ )
  3. {
  4.   printf( "%s\t%d\t%d\t%d\n", nombre[i], edad[i], ci[i], codigo[i] );
  5. }

Espero que este mensaje te sirva de guía

Un saludo.