Mike Igor Camilo Domingues

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Desenhando um retângulo no terminal utilizando C

Como estamos trabalhando com o terminal temos que programar a construção do retângulo pensando em linha por linha!

Exemplo de desenho

 ##### 
 #   # 
 #   # 
 ##### 
    

Olhando para o exemplo acima e analisando linha por linha podemos desenhar ele em 5 etapas.

  • 1º Margem superior.
  • 2º Topo, que é composta por:
    • margem lateral + (caractere '#')* tamanho_da_base + margem lateral.
  • 3º Meio do desenho, composto por:
    • margem lateral + caractere '#' + (espaços em branco)*(tamanho_da_base - 2) + caractere '#' + margem lateral.
  • 4º Base, composta por:
    • margem lateral + (caractere '#')* tamanho_da_base + margem lateral.
  • 5º Margem Inferior.
Código simples
#include <stdio.h>

int desenhar_retang(int margem, int base, int altura) {
    
    // 1º Margem superior, um for para desenhar a margem
    for (int i = 0; i < margem; ++i) {
        printf("\n"); // Um simples "\n" para quebrar a linha
    }

    // 2.1º Topo - Margem lateral
    for (int i = 0; i < margem; ++i) {
        printf(" ");
    }
    // 2.2º Topo - Linha de caracteres '#'
    for (int i = 0; i < base; ++i) {
        printf("#");
    }
    // 2.3º Topo - Margem Lateral
    for (int i = 0; i < base; ++i) {
        printf(" ");
    }
    printf("\n");//

    //Aqui temos um for para a quantidade de linhas repetidas e dentro dele a construção de cada linha!
    for (int k = 0; k < altura - 2; ++k) {
        // 3.1° Meio do desenho - Margem lateral
        for (int i = 0; i < margem; ++i) {
            printf(" ");
        }
        // 3.2° Meio do desenho - Caractere '#'
        printf("#");
        // 3.3° Meio do desenho - Espaços em branco
        for (int i = 0; i < base - 2; ++i) {
            printf(" ");
        }
        // 3.4° Meio do desenho - Caractere "#"
        printf("#");
        // 3.5° Meio do desenho - Margem lateral
        for (int i = 0; i < margem; ++i) {
            printf(" ");
        }
        printf("\n");
    }

    // 4.1º Base - Margem lateral
    for (int i = 0; i < margem; ++i) {
        printf(" ");
    }
    // 4.2º Base - Linha de caracteres
    for (int i = 0; i < base; ++i) {
        printf("#");
    }
    // 4.3º Base - Margem Lateral
    for (int i = 0; i < margem; ++i) {
        printf(" ");
    }

    // 5º Margem superior
    for (int i = 0; i < margem; ++i) {
        printf("\n");
    }

}


int main()
{
    desenhar_retang(2,30,10);
    return 0;
}

Podemos melhorar esse código criando algumas funções:

Função para desenhar a margem lateral que se repete durante o código todo, ela recebe como parâmetro o tamanho da margem.

Função margem Lateral
int margemLateral(int margem){
    for (int i = 0; i < margem; ++i) {
        printf(" ");
    }
}

Ou podemos criar uma função que receba o caractere e a quantidade de vezes que ele deve aparecer:

Função desenha caractere
int desenhaCaractere(char caractere, int quantidade){
    for (int i = 0; i < quantidade; ++i) {
        printf(caractere);
    }
}
Código utilizando a função desenhaCaractere
#include <stdio.h>

int desenhaCaractere(char caractere, int quantidade){
    for (int i = 0; i < quantidade; ++i) {              //Loop para desenhar a quantidade de caracteres.
        printf("%c", caractere);                        //Printa o caractere.
    }
    return 0;
}

int desenhar_retang(int margem, int base, int altura) {


    desenhaCaractere('\n',margem);              // 1º Margem superior

    desenhaCaractere(' ',margem);               // 2.1º Topo - Margem lateral
    desenhaCaractere('#',base);                 // 2.2º Topo - Linha de caracteres '#'
    desenhaCaractere(' ',margem);               // 2.3º Topo - Margem Lateral
    printf("\n");


    //Aqui temos um for para a quantidade de linhas repetidas e dentro dele a construção de cada linha!
    for (int k = 0; k < altura - 2; ++k) {
        desenhaCaractere(' ',margem);           // 3.1º Meio do desenho - Margem lateral
        printf("#");                            // 3.2º Meio do desenho - Caractér '#'
        desenhaCaractere(' ',base-2);           // 3.3º Meio do desenho - Espaços em branco
        printf("#");                            // 3.4º Meio do desenho - Caractér "#"
        desenhaCaractere(' ',margem);           // 3.5º Meio do desenho - Margem lateral
        printf("\n");
    }

    desenhaCaractere(' ',margem);               // 4.1º Base - Margem lateral
    desenhaCaractere('#',base);                 // 4.2º Base - Linha de caracteres
    desenhaCaractere(' ',margem);               // 4.3º Base - Margem Lateral

    desenhaCaractere('\n',margem);              // 5º Margem superior
}


int main()
{
    desenhar_retang(2,30,10);
    return 0;
}