Test Foro de elhacker.net SMF 2.1

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?.-

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.-

#include <stdio.h>
#include <stdlib.h>

void ingresoCorrecto(int*, int);

int main(void){
char *ptrNombres[] = {"Rosita", "Alberto", "Claudio", "Yanina", "Pedrito", "Jorge", "Daniel", "Leo"};
int indice=0, longitud=0;

longitud = sizeof ptrNombres / sizeof *ptrNombres;

printf("\n");
for(indice=0; indice<longitud; indice++){
printf("[%d] %s - ", indice, ptrNombres[indice]);
}

ingresoCorrecto(&indice,longitud);

printf("\n Su eleccion fue...: %s", ptrNombres[indice]);

return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
int ch=0, ok=0, temp=0;
do{
printf("\n\n ingrese un entero del [0] al [%d] para extraer un nombre..:", longitud-1);
ok = scanf("%d", &temp) == 1 && temp >= 0 && temp <= longitud-1;
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
*ingreso = temp;
}


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 (cpp) [Seleccionar]
int MAX_NOMBRES

printf("\n Ingrese un entero para establecer la cantidad de nombres a ordenar...:");
scanf("%d", MAX_NOMBRES)

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
Cita de: NOB2014 en 20 Enero 2014, 02:36 AM
.....................................
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 (cpp) [Seleccionar]
void ver_matriz( int **mat, int fil, int col )


Cita de: NOB2014 en 20 Enero 2014, 02:36 AM
..........................................
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 (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

void ingresoCorrecto(int*, int);

int main(void){
 char **ptrNombres;
 int indice=0, longitud=0,ch;
 puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
 scanf ("%d",&longitud);
 ptrNombres = malloc( longitud * sizeof *ptrNombres );
 for( indice = 0; indice < longitud; ++indice )
    ptrNombres[indice] = malloc( 15 * sizeof **ptrNombres );
 while ((ch = getchar()) != EOF && ch != '\n');
 for(indice=0; indice<longitud; indice++){
  printf("Nombre [%d]: ", indice+1);
  scanf ("%s",*(ptrNombres+indice));
  while ((ch = getchar()) != EOF && ch != '\n');
 }
 printf("\n");
 for(indice=0; indice<longitud; indice++){
   printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
 }
 ingresoCorrecto(&indice,longitud);
 printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
  for (indice = 0; indice < longitud; indice++)
    free(ptrNombres[indice]);
  free(ptrNombres);
 return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
 int ch=0, ok=0, temp=0;
 do{
   printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
   ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
   while ((ch = getchar()) != EOF && ch != '\n');
 }while(!ok);
 *ingreso = temp;
}


Código (cpp) [Seleccionar]


#include <stdio.h>
#include <stdlib.h>

void ingresoCorrecto(int*, int);

int main(void){
char *ptrNombres[15];
int indice=0, longitud=0,ch;
 puts("\n Indique cuantos nombres va a ingresar de 15 caracteres maximo:");
 scanf ("%d",&longitud);
 for ( indice = 0; indice < longitud; indice++)
   ptrNombres[indice] = malloc(sizeof *ptrNombres[indice]);
 while ((ch = getchar()) != EOF && ch != '\n');
for(indice=0; indice<longitud; indice++){
   printf("Nombre [%d]: ", indice+1);
   scanf ("%s",*(ptrNombres+indice));
   while ((ch = getchar()) != EOF && ch != '\n');
}
printf("\n");
for(indice=0; indice<longitud; indice++){
printf("[%d] %s  ", indice+1, *(ptrNombres+indice));
}
ingresoCorrecto(&indice,longitud);
printf("\n Su eleccion fue...: %s", *(ptrNombres+indice-1));
        free(ptrNombres);
return 0;
}

void ingresoCorrecto(int *ingreso, int longitud){
int ch=0, ok=0, temp=0;
do{
printf("\n\n ingrese un entero del [1] al [%d] para extraer un nombre..:", longitud);
ok = scanf("%d", &temp) == 1 && temp > 0 && temp <= longitud;
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
*ingreso = temp;
}


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.
char *ptrPalabras[15];
¿Esto me asegura un array de punteros de N punteros y un ancho máximo
de 15 caracteres para cada palabra?.-
La segunda.
printf("\n %s", *(palabras+i));


(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.