Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con matrices y vectores en borland c++

Estas en el tema de Problema con matrices y vectores en borland c++ en el foro de C/C++ en Foros del Web. la verdad soy nuevo y acudo a ustedes con la esperanza de que me ayuden... tengo que realizar un programa que solicite datos de un ...
  #1 (permalink)  
Antiguo 14/11/2014, 15:24
 
Fecha de Ingreso: noviembre-2014
Mensajes: 3
Antigüedad: 9 años, 5 meses
Puntos: 0
Problema con matrices y vectores en borland c++

la verdad soy nuevo y acudo a ustedes con la esperanza de que me ayuden...
tengo que realizar un programa que solicite datos de un usuario (lease nombre edad y numero de identidad), posteriormente debo imprimir un codigo que cumple las siguiente condiciones:

se toman los 4 primeros numeros pares del numero de identidad.
de haber menos de 4 numero completar con tantos 0 sea posible.
al final agregar los 2 digitos de la edad(tomando en cuenta que eres mayor de 18).
veran este ejecicio debo hacerlo con matrices y/o vectores pero me cuesta un monton acceder a los digitos una vez ingresados, he intentado con muchas cosas pero hay algo que no estoy haciendo bien y no se que es.....


main()
{
char n;
char nombre[11][20];
char edad[11],ci[11][10],codigo[11][8];
for (int i=0; i<1; i++)
{int c;

printf("ingrese el nombre: ");
fgets(nombre[i],20,stdin);
printf("\ningrese la edad: ");
scanf("%s",&edad[i]);
printf("\ningrese la cedula: ");
scanf("%s",&ci[i]);
clrscr();
while ((c = getchar()) != '\n' && c != EOF);
}
printf("nombre edad ci codigo \n");
for (int i=0; i<1; i++){
printf("\n%s\t",nombre[i]);
printf("\t%s\t",&edad[i]);
printf("\n%s\t",&ci[i]);
for(int j=0;j<strlen(ci[i]);j++){
if(ci[i][j]%2==0)
printf("%s",ci);
}
//printf("\n%s\t",codigo); (me lleva, ya no se que hacer)
}
  #2 (permalink)  
Antiguo 14/11/2014, 21:13
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 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.

Etiquetas: borland, char, int, matrices, numero, programa, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:25.