quarta-feira, 20 de dezembro de 2017

Problema de desenhar quadrado, triângulo e losango na tela a partir da altura


Compartilhe!

O objetivo deste programa em C abaixo é obter um valor para a altura de três possíveis formas geométricas e desenhar a forma escolhida na tela dentro de uma moldura.

As formas geométricas possíveis são: quadrado, triângulo e losango. Como diz o enunciado, a entrada consiste (1) num inteiro que será a altura da forma geométrica e (2) seu tipo, e a saída deve ser um desenho dessa forma, dando atenção a uma moldura que deverá ser criada entorno do objeto.

#include <stdio.h>

int main() {

    int i, a, h, b;//Variáveis a serem utilizadas.
    char id;

    scanf("%c %d", & id, & h); //Leitura da altura e da forma.
    h++;//Neste programa o h recebe +1 unidade.

    if (h < 3) //Se altura for menor que 2 (h+1), a entrada é inválida.
    printf("entrada invalida\n");
    else if (id == 't' || id == 'T') { //Agora seguem if para cada forma. Esta é a do Triângulo.

        for (a = 0; a < (2 * h +1); a++) //Faz a primeira linha linha.
        printf(".");

        printf("\n");

        for (i = 1; i < h; i++) { //Cria a borda e os espaços da esquerda. 
            for (b = 0; b < h - i; b++)
            if (b == 0) printf(".");
            else printf(" ");

            for (a = 0; a < i; a++)//Preenche a forma.
            printf(" *");

            for (b = 0; b < h - i;b++)
            if (b == h - i-1) printf(" .");//Cria a borda e os espaços da direita.
            else printf(" ");

            printf("\n");
        }

        for (a = 0; a < (2 * h + 1); a++) //Última linha.
        printf(".");

        printf("\n");

    } else if (id == 'q' || id == 'Q') {//Forma Quadrado.

        for (a = 0; a < (2 * h) + 1; a++)//Desenha a primeira linha.
        printf(".");

        printf("\n");

        for (i = 1; i < h; i++) {

            for (a = 0; a < h + 1; a++) {
                if (a == 0) printf("."); else if(a == h) printf(" .");//Cria a borda e os espaços da esquerda, preenche o quadrado e cria a borda da direita.
                else printf(" *");
            }

            printf("\n");
        }
        for (a = 0; a < (2 * h) + 1; a++)//Última linha.
        printf(".");

        printf("\n");

    } else if ((id == 'l' || id == 'L') && (h % 2 == 0)) {//Forma do losango.

        for (a = 0; a < h + 3; a++) {//Desenha a primeira linha.
            printf(".");
        }

        printf("\n");

        for (i = 1; i < (h+1)/2 + 1; i++) {//Preenche a borda e o espaço da esquerda superior.

            for (b = 0; b < (h+1)/2-i+1;b++)
            if (b == 0) printf(".");
            else printf(" ");


            for (a = 1;(a - 1) < i; a++)//Preenche a forma da parte superior.
            printf(" *");

            for (b = 0; b < (h+1)/2-i+1;b++)//Preenche a borda e os espaços da direita.
            if (b == (h+1)/2-i) printf(" .");
            else printf(" ");

            printf("\n");
        }
        for (int i = (h-1)/2; i > 0; i--) {


            for (a = 0; a < (h +1)/2-i+1;a++)//Desenha a borda e os espaços da esquerda inferior.
            if (a == 0) printf(".");
            else printf(" ");

            for (a = 1; (a - 1) < i; a++)//Preenche a forma da parte inferior.
            printf(" *");

            for (a = 0; a < (h+1)/2-i+1; a++)//Desenha a borda e os espaços da direita.
            if (a == (h+1)/2-i) printf(" .");
            else printf(" ");

            printf("\n");
        }


        for (a = 0; a < h + 3; a++) {
            printf(".");
        }

        printf("\n");
    } else printf("entrada invalida\n");

    return 0;

}