duda con otro función en c

Iniciado por fernaEDLP, 29 Noviembre 2018, 03:13 AM

0 Miembros y 1 Visitante están viendo este tema.

fernaEDLP

Gente linda como andan?, espero que anden bien, necesito otra ayudita, el problema dice esto:

La siguiente función imprime de manera iterativa una cadena de caracteres:
void imprimir_iter(char * pcad){
while(*pcad != '\0'){
printf("%c",*pcad);
pcad++;
}
}
a) Realice la versión recursiva de la función anterior.
b) Modifique la función recursiva para que imprima la cadena inv

hasta ahora hice esto y parece que mi pc va a estallar:

void imprimir_ite(char *pcad);


int main()
{
    char cad[80];
    printf("ingrese la cadena de caracteres\n");
    gets(cad);
    imprimir_ite(cad);
    return 0;
}


void imprimir_ite(char *pcad)
{
    if(*pcad!='\0')
    {
        printf("%c",*pcad);
        pcad++;
        imprimir_ite(*pcad);

    }
    return;
}
les cuento en aparecen 2 errores, uno en la linea 21 que dice que estoy definiendo un puntero entero sin conversión??¿ y otro en la 16 que dice que espera un char pero recibe un entero?¿,
es obvio que el problema esta en la arquitectura de mi funcion




















AlbertoBSD

#1
Hola antes que nada en el panel cuando redactas un mensaje hay un box que dice Código GeSHi, si lo despliegas aparece una lista de lenguajes buscas C y pegas tu código adentro.

El problema es siguiente:

TU CODIGO


void imprimir_ite(char *pcad)
{
   if(*pcad!='\0')
   {
       printf("%c",*pcad);
       pcad++;
       imprimir_ite(*pcad);

   }
   return;
}


En TEORIA Corregido:


void imprimir_ite(char *pcad)
{
   if(*pcad!='\0')
   {
       printf("%c",*pcad);
       pcad++;
       imprimir_ite(pcad);

   }
   return;
}


No se, ni verifique tu codigo "ITERATIVO", pero como pcad ya es un apuntador, no necesitas colocarle el * antes de cada uso, eso se puede prestar para otras operaciones pero en este caso no.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

fernaEDLP


AlbertoBSD

#3
Por si tienes dudas

te explico para que no exista confusión.


void imprimir_ite(char *pcad)

Se declara que la variable que recibe imprimir_ite es Apuntador char *pcad
   if(*pcad!='\0')
 

*pcad nos indica o devuelve el VALOR apuntado por pcad en ese momento para realizar la comparacion
       printf("%c",*pcad);
Lo mismo que lo anterior, nos devuelve el valor apuntado por pcad, esto podria ser equivalente a

printf("%c",pcad[0]);

   if(pcad[0]!='\0');


       pcad++;
Incrementamos el valor de apuntador en 1


       imprimir_ite(pcad);

Pasamos como argumento el apuntador pcad, sin * por que con * es el valor apuntado en ese momento. y sin * es el apuntador como tal,

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

fernaEDLP

graciass de nuevo, claro como el agua!