En esta página
El ejercicio
Rush 00: dibujar un rectángulo en la pantalla usando solo write.
| Dato | Valor |
|---|---|
| Carpeta de entrega | ex00/ |
| Archivos | main.c, ft_putchar.c, rush00.c |
| Función obligatoria | void rush(int x, int y) |
| Funciones de librería | solo write |
Requisitos
rush(x, y)dibuja un rectángulo dexcaracteres de ancho poryde alto.- Esquinas
o, lados horizontales-y lados verticales|. - Cualquier entero debe funcionar, incluidos el cero y los negativos, sin colgarse.
ft_putchar.ccontiene únicamente la funciónft_putchar.
Los tres archivos
main.c
/* Prototipo de la funcion que vive en rush00.c. */
void rush(int x, int y);
int main(void)
{
rush(5, 3);
return (0);
}
ft_putchar.c
#include <unistd.h>
/*
** Escribe un solo caracter en la salida estandar (file descriptor 1).
** Es la unica funcion permitida por el enunciado para mostrar texto.
*/
void ft_putchar(char c)
{
write(1, &c, 1);
}
rush00.c
/*
** rush00.c
** Dibuja un rectangulo de x caracteres de ancho por y caracteres de alto.
**
** Esquinas: 'o'
** Lados horizontales: '-'
** Lados verticales: '|'
** Interior: espacios
*/
/* Prototipo de la funcion auxiliar que vive en ft_putchar.c. */
void ft_putchar(char c);
/*
** Imprime una fila que es borde superior o inferior.
** Para x = 1 imprime solo "o" y para x = 2 imprime "oo".
*/
static void print_horizontal_edge(int width)
{
int column;
column = 0;
while (column < width)
{
if (column == 0 || column == width - 1)
ft_putchar('o');
else
ft_putchar('-');
column++;
}
ft_putchar('\n');
}
/*
** Imprime una fila del medio: bordes '|' y espacios en el interior.
** Para x = 1 imprime solo "|" y para x = 2 imprime "||".
*/
static void print_vertical_edge(int width)
{
int column;
column = 0;
while (column < width)
{
if (column == 0 || column == width - 1)
ft_putchar('|');
else
ft_putchar(' ');
column++;
}
ft_putchar('\n');
}
/*
** Funcion principal del ejercicio.
** Si x o y son cero o negativos no se dibuja nada, para no imprimir
** un rectangulo imposible ni entrar en un bucle infinito.
*/
void rush(int x, int y)
{
int row;
if (x <= 0 || y <= 0)
return ;
row = 0;
while (row < y)
{
if (row == 0 || row == y - 1)
print_horizontal_edge(x);
else
print_vertical_edge(x);
row++;
}
}
Compilar y ejecutar
cd ex00
gcc -Wall -Wextra -Werror main.c ft_putchar.c rush00.c -o rush00
./rush00
Compila con los mismos flags que usa la piscina. Si falta uno de los tres
archivos, el enlazador falla con undefined reference to ft_putchar.
Casos de prueba
Los cinco casos del enunciado, verificados carácter por carácter:
rush(5, 3)
o---o
| |
o---o
rush(5, 1)
o---o
rush(1, 1)
o
rush(1, 5)
o
|
|
|
o
rush(4, 4)
o--o
| |
| |
o--o
Descargar
Los archivos también están en la carpeta
ex00/del repositorio.