Ejercicio 2.

Ejercicio 2.

de Rafael Agustin Castelli Ottati -
Número de respuestas: 4

Buenas, queria saber si la siguiente solucion alternativa a al del video era correcta. Trate de evitar usar la funcion auxiliar y hacerlo todo en una funcion. Ademas queria saber como puedo procesar los caracteres que no son letras de forma recursiva, porque en la solucion iterativa simplemente podia ignorarlos


#include <ctype.h>

typedef unsigned int uint;

// Precondicion : no hay espacios ni caracteres que no son letras en el string
bool esPalindromo(char* A, uint longitud) {
    if (longitud == 0 || longitud == 1)
        return true;
    else
        return toupper(A[0]) == toupper(A[longitud - 1]) && esPalindromo(++A, longitud - 2);
}

En respuesta a Rafael Agustin Castelli Ottati

Re: Ejercicio 2.

de Facundo Benavides -

estimado,

tu solución es correcta y se puede plantear en una sola línea, ya que estamos ahorrando =D

sobre los caracteres que no son letras, no me queda claro de qué hablamos. espacios en blanco? no pasa nada, el toupper le va a dar el mismo tratamiento a los dos y si coinciden, sigue adelante.

aclaranos este pto si no era por ahí.

saludos

En respuesta a Facundo Benavides

Re: Ejercicio 2.

de Rafael Agustin Castelli Ottati -
Muchas gracias por la respuesta.
Con los caracteres que no son letras me refiero por ejemplo a los espacios en blanco.
O sea si me pasan el siguiente string, es un palindromo pero la funcion devolvera false

A BA
Porque compara la A con la A y el espacio en blanco con la B. Como puedo evitar esta situacion?

Ademas, leyendo el pdf me surgio otra consulta. La solucion alternativa que proponen de copiar el arreglo y usar eso como parametro para la llamada recursiva es lo mismo que hacer ++A? Segun tenia entendido lo que hace dicha instruccion es pasar el puntero que apunta a la segunda "casilla" del arreglo. Es correcto esto o lo que sucede en realidad es lo mismo que si copiara todo el arreglo en variables nuevas y paso ese arreglo nuevo al llamado recursivo?
En respuesta a Rafael Agustin Castelli Ottati

Re: Ejercicio 2.

de Facundo Benavides -

hola, en tu ejemplo, la frase "A BA" no es palíndrome. la función retornaría false, correctamente.

palíndrome serían "hola aloh" y otras variantes donde los espacios u otros caracteres no-letra también están distribuidos "de a pares"

sobre la alternativa discutida debajo de la solución, es cierto lo que decís. podría implementarse utilizando sólo el parámetro largo (que iría disminuyendo en uno) y aritmética de punteros para "correr" el inicio un lugar.

sin embargo, quisiera señalar que en el curso no promovemos el uso de estas técnicas (más avanzadas) para manejar arreglos, ya que requieren un dominio de la técnica (programación) mayor.

saludos