En esta página
Ejercicio 02: ft_print_reverse_alphabet
Muestra el alfabeto en minúsculas en una sola línea, en orden decreciente, empezando por la letra «z».
| Dato | Valor |
|---|---|
| Carpeta | ex02/ |
| Archivo | ft_print_reverse_alphabet.c |
| Prototipo | void ft_print_reverse_alphabet(void); |
| Funciones autorizadas | solo write |
Hecho con amor para Laura, por Bogdan.
El archivo
#include <unistd.h>
/*
** Copia local de ft_putchar: el enunciado solo permite entregar este archivo.
** Escribe un unico caracter en la salida estandar.
*/
static void put_char(char c)
{
write(1, &c, 1);
}
/*
** Muestra el alfabeto en minusculas en una sola linea, de la 'z' a la 'a'.
** Es el mismo recorrido que ft_print_alphabet, pero hacia atras.
*/
void ft_print_reverse_alphabet(void)
{
char letter;
letter = 'z';
while (letter >= 'a')
{
put_char(letter);
letter--;
}
}
Línea por línea
#include <unistd.h>
Declara write, la única función de librería que permite el enunciado. La
explicación está en el ejercicio 00.
static void put_char(char c)
Copia privada de ft_putchar. static la encierra en este archivo: cada
ejercicio se entrega solo y no puede depender de otro.
void ft_print_reverse_alphabet(void)
La firma exacta que pide el subject: no devuelve nada y no recibe parámetros.
char letter;
La caja que guarda la letra actual. Todavía no tiene valor; la línea siguiente se lo da.
letter = 'z';
El recorrido empieza por la última letra. Comillas simples: 'z' es un
carácter, "z" sería un string.
while (letter >= 'a')
Repite mientras letter no baje de 'a'. La condición se evalúa antes de cada
vuelta, así que cuando letter vale el carácter anterior a 'a', el bucle sale
sin imprimirlo.
| Vuelta | letter | letter >= 'a' | Qué hace |
|---|---|---|---|
| 1 | 'z' | verdadero | imprime y resta |
| 2 | 'y' | verdadero | imprime y resta |
| … | … | … | … |
| 26 | 'a' | verdadero | imprime y resta |
| — | ` | falso | sale del bucle |
put_char(letter);
Imprime la letra actual. El parámetro es una copia: cambiar c dentro de
put_char no tocaría letter.
letter--;
Es letter = letter - 1;. Baja a la letra anterior. Si lo olvidas, el bucle no
termina nunca.
Las tres diferencias con el ejercicio 01
| Pieza | Ejercicio 01 | Ejercicio 02 |
|---|---|---|
| Valor inicial | 'a' | 'z' |
| Condición | letter <= 'z' | letter >= 'a' |
| Avance | letter++ | letter-- |
Todo lo demás es idéntico. Las letras siguen siendo consecutivas en ASCII, así que restar uno baja a la anterior sin ninguna tabla.
Salida esperada
zyxwvutsrqponmlkjihgfedcba
Casos límite
| Detalle | Decisión |
|---|---|
| Salto de línea final | no se imprime |
letter >= 'a' | incluye la 'a'; con > te dejarías la primera |
Carácter anterior a 'a' | nunca se escribe: la condición corta antes |
| 26 vueltas | exactas, igual que en el ejercicio 01 |
Errores típicos
| Mensaje o síntoma | Causa | Solución |
|---|---|---|
falta la a | usaste letter > 'a' | cambia a >= |
| el programa no termina | olvidaste letter-- | añádelo en el cuerpo |
imprime basura antes de z | inicializaste con letter = 0 | empieza en 'z' |
| no compila | mezclaste "z" con char | comillas simples |
Comprobarlo
cat > /tmp/main.c <<'EOF'
void ft_print_reverse_alphabet(void);
int main(void)
{
ft_print_reverse_alphabet();
return (0);
}
EOF
cc -Wall -Wextra -Werror ex02/ft_print_reverse_alphabet.c /tmp/main.c -o /tmp/ex02
/tmp/ex02