PREGUNTA: Dada la función posicion en C/C++:
typedef char Vchar[40];
int posicion(Vchar cad, char c){
int pos = -1; int i = 0;
while ( cad [i ] != '\0' ){
if(cad[i ] ==c){ pos = i;}
i++;
}
return(pos);
}
Si la llamamos con posicion("EJEMPLO DE", 'E'):
a) La función posicion devuelve 0
b) La función posicion devuelve 9
c) La función posicion devuelve 2
d) La función posicion devuelve -1
RESPUESTA: La respuesta correcta es la b). Nada trivial, además los nombres de variables empleados pueden confundirnos fácilmente. Analizamos el código. En primer lugar declara un tipo Vchar que es un array de caracteres de 41 caracteres, una cadena de texto. Luego declara una función denominada posicion que devuelve un entero y recibe dos parámetros: una cadena de tipo Vchar, cad, y un carácter simple que viene en una variable denominada c. Declara dos variables locales, pos y le asigna valor -1 y i con valor cero.
Ahora se ejecuta el bucle: mientras el elemento de índice i, en primer lugar el de índice cero, en la cadena, sea distinto del carácter especial de final de cadena, si ese elemento del array contiene el carácter que viene en la variable c, el valor de posición en el array se almacena en la variable pos. i se incrementa unitariamente y se vuelve a repetir el bucle.
Nota sobre el significado de \0: El \0 es un carácter especial oculto que señala el final de una cadena en C/C++.
En resumen el bucle lo que hace es buscar el carácter que recibe en la llamada a la función dentro de la cadena que se le pase. Si encuentra el carácter, la función almacena la última posición en que se ha encontrado. Al terminar, devolverá la última posición en que se encuentra el carácter dentro de la cadena. Si no encuentra el carácter, la función devolverá menos 1. En este caso la cadena es “EJEMPLO DE” cuyas posiciones son “0123456789” y el carácter que se busca es la E mayúscula. La E se encuentra en posiciones 0, 2 y 9. Como la posición 9 es la última que se encuentra, es la que devuelve finalmente la función. El razonamiento no es demasiado complejo, pero deshacer este ovillo con la presión de un examen ya es otro cantar. Un matiz que nos puede liar es que no es lo mismo 'c' que c, en el primer caso sería el carácter c y en el segundo una variable de nombre c.