Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 20 Enero 2014, 02:36 am



Título: Pasar a función array de punteros.-
Publicado por: NOB2014 en 20 Enero 2014, 02:36 am
Hola.
rir3760 si en algún post no respondo a tus ayudas es porque me lleva tiempo asimilarlas.-
Voy al grano, sigo con mis prácticas de punteros y el programa que estoy haciendo es para que el operador ingrese por ejemplo 8 nombres y luego ordenarlos.-
Hay 2 cosas que no sé hacer, la primera, alguien me podría decir como pasar un array de punteros a función y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.-

Código
  1. printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");

Aclaro que el programita es para poner algo sino me van a tirar de las orejas.-
Otra cosita, la validación de ingreso de entero la copié de un post de rir3760, ya la adopte como definitiva, funciona a la perfección.-

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ingresoCorrecto(int*, int);
  5.  
  6. int main(void){
  7. char *ptrNombres[] = {"Rosita", "Alberto", "Claudio", "Yanina", "Pedrito", "Jorge", "Daniel", "Leo"};
  8. int indice=0, longitud=0;
  9.  
  10. longitud = sizeof ptrNombres / sizeof *ptrNombres;
  11.  
  12. printf("\n");
  13. for(indice=0; indice<longitud; indice++){
  14. printf("[%d] %s - ", indice, ptrNombres[indice]);
  15. }
  16.  
  17. ingresoCorrecto(&indice,longitud);
  18.  
  19. printf("\n Su eleccion fue...: %s", ptrNombres[indice]);
  20.  
  21. return 0;
  22. }
  23.  
  24. void ingresoCorrecto(int *ingreso, int longitud){
  25. int ch=0, ok=0, temp=0;
  26. do{
  27. printf("\n\n ingrese un entero del [0] al [%d] para extraer un nombre..:", longitud-1);
  28. ok = scanf("%d", &temp) == 1 && temp >= 0 && temp <= longitud-1;
  29. while ((ch = getchar()) != EOF && ch != '\n');
  30. }while(!ok);
  31. *ingreso = temp;
  32. }

Saludos.


Título: Re: Pasar a función array de punteros.-
Publicado por: jaxoR en 20 Enero 2014, 16:41 pm
Mira, no estoy muy avanzado en C, pero para hacer lo segundo podés hacer esto.

Código
  1. int MAX_NOMBRES
  2.  
  3. printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");
  4. scanf("%d", MAX_NOMBRES)
  5.  
  6. char Nombres[MAX_NOMBRES]

Lo que pasa es que no se me ocurre como hacer para que aparescan solo los nombres que vos ingresaste

Espero haberte ayudado  :silbar:


Título: Re: Pasar a función array de punteros.-
Publicado por: leosansan en 20 Enero 2014, 16:43 pm
.....................................
alguien me podría decir como pasar un array de punteros a función
........................................

Por ejemplo, si tienes el puntero **A y lo vas a pasa a la función ver_matriz:

Código
  1. void ver_matriz( int **mat, int fil, int col )


..........................................
y la segunda, ¿como puedo hacer para que la cantidad de punteros se pida que se ingrese por teclado y no ponerlo a mano?.
.........................................

Te pongo dos casos que se me ocurren:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void ingresoCorrecto(int*, int);
  5.  
  6. int main(void){
  7.  char **ptrNombres;
  8.  int indice=0, longitud=0,ch;
  9.  puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
  10.  scanf ("%d",&longitud);
  11.  ptrNombres = malloc( longitud * sizeof *ptrNombres );
  12.  for( indice = 0; indice < longitud; ++indice )
  13.     ptrNombres[indice] = malloc( 15 * sizeof **ptrNombres );
  14.  while ((ch = getchar()) != EOF && ch != '\n');
  15.  for(indice=0; indice<longitud; indice++){
  16.   printf("Nombre [%d]: ", indice+1);
  17.   scanf ("%s",*(ptrNombres+indice));
  18.   while ((ch = getchar()) != EOF && ch != '\n');
  19.  }
  20.  printf("\n");
  21.  for(indice=0; indice<longitud; indice++){
  22.    printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
  23.  }
  24.  ingresoCorrecto(&indice,longitud);
  25.  printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
  26.  for (indice = 0; indice < longitud; indice++)
  27.    free(ptrNombres[indice]);
  28.  free(ptrNombres);
  29.  return 0;
  30. }
  31.  
  32. void ingresoCorrecto(int *ingreso, int longitud){
  33.  int ch=0, ok=0, temp=0;
  34.  do{
  35.    printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
  36.    ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
  37.    while ((ch = getchar()) != EOF && ch != '\n');
  38.  }while(!ok);
  39.  *ingreso = temp;
  40. }
  41.  

Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. void ingresoCorrecto(int*, int);
  6.  
  7. int main(void){
  8. char *ptrNombres[15];
  9. int indice=0, longitud=0,ch;
  10.  puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
  11.  scanf ("%d",&longitud);
  12.  for ( indice = 0; indice < longitud; indice++)
  13.    ptrNombres[indice] = malloc(sizeof *ptrNombres[indice]);
  14.  while ((ch = getchar()) != EOF && ch != '\n');
  15. for(indice=0; indice<longitud; indice++){
  16.    printf("Nombre [%d]: ", indice+1);
  17.    scanf ("%s",*(ptrNombres+indice));
  18.    while ((ch = getchar()) != EOF && ch != '\n');
  19. }
  20. printf("\n");
  21. for(indice=0; indice<longitud; indice++){
  22. printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
  23. }
  24. ingresoCorrecto(&indice,longitud);
  25. printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
  26.        free(ptrNombres);
  27. return 0;
  28. }
  29.  
  30. void ingresoCorrecto(int *ingreso, int longitud){
  31. int ch=0, ok=0, temp=0;
  32. do{
  33. printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
  34. ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
  35. while ((ch = getchar()) != EOF && ch != '\n');
  36. }while(!ok);
  37. *ingreso = temp;
  38. }
  39.  

Espero no se me haya ido la olla entre tanto puntero. ;) ;) ;)

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: Pasar a función array de punteros.-
Publicado por: NOB2014 en 21 Enero 2014, 23:37 pm
Hola
Ya casi lo tengo gracias a que pude copiar de los ejemplos de Leo y wiD^.-
Lo que necesitaría son 2 cositas más:
La primera.
Código
  1. char *ptrPalabras[15];
  2.  
¿Esto me asegura un array de punteros de N punteros y un ancho máximo
de 15 caracteres para cada palabra?.-
La segunda.
Código
  1. printf("\n %s", *(palabras+i));
  2.  

(http://i43.tinypic.com/2i94hh1.png)

No me funciona, por favor si lo desean un poco de teoría del porque.-
Leo para vos que dedicas mucho tiempo mostrando códigos, discúlpame si no los tomo completos es que tomando trozos de cada ejemplo me resulta beneficioso pata mi aprendizaje.-

Saludos.


Título: Re: Pasar a función array de punteros.-
Publicado por: amchacon en 22 Enero 2014, 15:32 pm
Tienes que diferenciar entre un error y un warning. Un error aborta la compilación. Un warning es cuando el compilador te avisa de "algo" que puede resultar ambiguo, extraño o que puede causar problemas, pero que puede seguir compilando sin problemas.

¿De que tipo es la variable palabras?


Título: Re: Pasar a función array de punteros.-
Publicado por: NOB2014 en 22 Enero 2014, 15:44 pm
Hola
Mil disculpas, creí que había incluido el código en el post y lo borre para hacer otra practica, me quede sin nada.-
Saludos.