SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: luchojimenez en Jueves 1 de Julio de 2010, 18:03

Título: como asociar dos arreglos unidimensionales
Publicado por: luchojimenez en Jueves 1 de Julio de 2010, 18:03
tengo una  duda acerca de los arreglos  unidimensionales como enlazar dos  arreglos ejemplo arreglo nombre[] y sueldo[], yo conozco una forma  con estruct , pero me gustaria  emplearla, me gustaria que fueran solo  arreglos y que sean unidimensionales
Título: Re: como asociar dos arreglos unidimensionales
Publicado por: nagitarami en Sábado 3 de Julio de 2010, 07:12
puedes poner una marca de caracter a una posicion del arreglo para saber cuando viene un nombre y un sueldo por ejemplo

*carlos jose martines*400$*joe luis*45$*...... etc
Título: Re: como asociar dos arreglos unidimensionales
Publicado por: czealt en Domingo 4 de Julio de 2010, 04:34
Aja. Y luego utilizariamos la funcion strchr() para localizar y convertir el sueldo...  :good:
Código: C
  1.  
  2.   char *psueldo, s[]="Angel Perez*311.423";
  3.   float sueldo;
  4.  
  5.   psueldo=strchr(s,'*');
  6.   sscanf(psueldo+1,"%f",&sueldo);
  7.   printf("sueldo:%f n",sueldo);
  8.  
  9.  
  10.  
Título: Re: como asociar dos arreglos unidimensionales
Publicado por: luchojimenez en Lunes 5 de Julio de 2010, 20:33
hombre  eso cuando es uno solo y si es  una lista de nombres, frente  a un arreglo de sueldos ingresados por teclado, ambos
Título: Re: como asociar dos arreglos unidimensionales
Publicado por: czealt en Martes 6 de Julio de 2010, 01:02
Cita de: "luchojimenez"
hombre  eso cuando es uno solo y si es  una lista de nombres, frente  a un arreglo de sueldos ingresados por teclado, ambos

OK , aqui esta un programa de ejemplo. El programa pide datos tipo cadena de caracteres y floats , los cuales son dados a travez del teclado, y los almacena en un arreglo unidimensional ...

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define LMAX   10000
  6. #define NUMEMP 3
  7.  
  8. char datosempleado[LMAX];
  9. int lon_datos=0;
  10.  
  11. int main(void)
  12. {
  13.   char nombre[100],strsueldo[50],*pchar1,*pchar2;
  14.   float sueldo;
  15.   int i;
  16.  
  17.   /* 1. Leemos los datos en el arreglo */
  18.   for(i=0;i<NUMEMP;i++)
  19.   {
  20.     printf("nDatos del empleado %d:nNombre: ",i+1);
  21.     fgets(nombre,100,stdin);
  22.     nombre[strlen(nombre)-1]='';
  23.  
  24.     printf("Sueldo: ");
  25.     scanf("%f%*c",&sueldo);
  26.     sprintf(strsueldo,"%8.2f",sueldo); /* convierte el sueldo a una cadena de caracteres */
  27.  
  28.     /* almacenamos los datos introducidos en el arreglo datosempleado */
  29.     strcpy(&datosempleado[lon_datos],nombre);
  30.     lon_datos+=strlen(nombre);
  31.  
  32.     datosempleado[lon_datos++]='*'; /* pone la marca que divide a los nombres
  33.                                        de los sueldos */
  34.     strcpy(&datosempleado[lon_datos],strsueldo);
  35.     lon_datos+=strlen(strsueldo);
  36.  
  37.     datosempleado[lon_datos++]='*';
  38.   }
  39.   datosempleado[lon_datos-1]=0; /* marca el fin del arreglo de datos */
  40.  
  41.   /* 2. Se muestra en pantalla los datos almacenados */
  42.   i=1;
  43.   pchar1=datosempleado;
  44.   while(*pchar1)
  45.   {
  46.     int lon_nombre;
  47.     /* extraemos el nombre del arreglo de datos */
  48.     pchar2=strchr(pchar1,'*');
  49.     lon_nombre=pchar2-pchar1;
  50.     strncpy(nombre,pchar1,lon_nombre);
  51.     nombre[lon_nombre]='';
  52.  
  53.     /* extraemos el sueldo */
  54.     pchar2++;
  55.     sscanf(pchar2,"%f",&sueldo);
  56.  
  57.     /* mostrar los datos */
  58.     printf("nEmpleado %d:n"
  59.            "Nombre: %sn"
  60.            "Sueldo: %8.2fn",i++,nombre,sueldo);
  61.  
  62.     pchar1=strchr(pchar2,'*');
  63.     if(pchar1)
  64.       pchar1++;
  65.     else
  66.       break;
  67.   }
  68.  
  69.   return 0;
  70. }
  71.  
  72.  

Saludos.