Другие языки программирования и технологии

Вывести в консоль полые геометрические фигуры используя язык C и библиотеку stdio.h .

Нужно вывести в консоль 5 полых (только контуры) фигур используя язык СИ и библиотеку stdio.h .
Фигуры: Квадрат. и 4 прямоугольных треугольников разной направленности.
#include <stdio.h>

#define W 16
#define H 16

void display(void);
void clean(void);
void draw_square(int a, int x, int y);
void draw_right_triangle(int a, int b, int x, int y);
void flip_w(void);
void flip_h(void);

int main() {

clean();

draw_square(8, 4, 4);
display();
clean();

draw_right_triangle(8, 8, 4, 4);
display();

flip_w();
display();

flip_h();
display();

flip_w();
display();

clean();

return 0;
}

int buffer[H][W];

void display(){
for(unsigned h = 0; h < H; h++){
for(unsigned w = 0; w < W; w++){
printf("%c", buffer[h][w] ? 'x' : ' ');
}
printf("\n");
}
}

void clean(){
for(unsigned h = 0; h < H; h++){
for(unsigned w = 0; w < W; w++){
buffer[h][w] = 0;
}
}
}

void draw_square(int a, int x, int y){
for(unsigned w = x; w < x + a; w++){
buffer[y][w] = 1;
buffer[y + a - 1][w] = 1;
}
for(unsigned h = y; h < y + a; h++){
buffer[h][x] = 1;
buffer[h][x + a - 1] = 1;
}
}

void draw_right_triangle(int a, int b, int x, int y){
float slope = -1.0 * b / a;

for(unsigned w = 0; w < a; w++){
buffer[y][x + w] = 1;

int s_y = b - 1 + slope * w;
buffer[y + s_y][x + w] = 1;
}
for(unsigned h = y; h < y + b; h++){
buffer[h][x] = 1;
}
}

void flip_w(){
for(unsigned h = 0; h < H; h++){
for(unsigned w = 0; w < W/2; w++){
int tmp = buffer[h][w];
buffer[h][w] = buffer[h][W - 1 - w];
buffer[h][W - 1 - w] = tmp;
}
}
}

void flip_h(){
for(unsigned h = 0; h < H/2; h++){
for(unsigned w = 0; w < W; w++){
int tmp = buffer[h][w];
buffer[h][w] = buffer[H - 1 - h][w];
buffer[H - 1 - h][w] = tmp;
}
}
}
Лёха Сапожков
Лёха Сапожков
11 157
Лучший ответ