aula 171

Como imprimir um triângulo de asteriscos com espaços à esquerda?

Vamos a mais um tira dúvidas? E hoje será a dívida da Aline: Como imprimir um triângulo de asteriscos com espaços à esquerda?

Exemplo:
*
**
***
****

Este exercício é muito interessante para trabalhar o raciocínio lógico com a estrutura de repetição do tipo for. Como teremos que imprimir espaços e asteriscos na mesma linha, precisaremos de três repetições, uma externa que irá rodar n vezes, e duas internas, uma para imprimir os espaços e outra para imprimir os asteriscos.

A repetição externa não tem mistério, rodando a quantidade de vezes determinada pelo usuário, assim:

    printf("Digite o valor de n: ");
    scanf("%d", &n);

    for(i = 1; i <= n; i++){
      
    }

Agora, vamos às repetições internas. Imagine que o usuário digitou o número 10. Isso significa que na primeira linha teremos 9 espaços e 1 asterisco, na segunda linha teremos 8 espaços e 2 asteriscos, e assim por diante. Então, precisamos de uma repetição para estes espaços que irá executar n – i vezes (n – i asterisco).

Essa repetição pode ser construída de diversas formas diferentes, tanto de forma crescente quanto decrescente. O importante é que ela execute n – i vezes, onde n é o valor digitado pelo usuário e i é a quantidade de asteriscos da linha. A seguir apresento uma opção decrescente para esta repetição.

    for(i = 1; i <= n; i++){
        for(j = n - i; j >= 1; j--) // imprime os espaços
            printf(" ");
       
    }

Agora que já imprimirmos corretamente a quantidade de espaços, precisamos imprimir os asteriscos e saltar uma linha. Como a variável i da repetição externa representa, além do índice da linha, a quantidade de asteriscos de cada linha, basta fazer uma repetição que irá executar i vezes, assim:

    for(i = 1; i <= n; i++){
        for(j = n - i; j >= 1; j--) // imprime os espaços
            printf(" ");
        for(j = 1; j <= i; j++) // imprime os *
            printf("*");
        printf("\n");
    }

Código completo em C para imprimir meio triângulo de asteriscos

#include <stdio.h>
#include <stdlib.h>

/*      Aula 171: Dúvida

        |   *
        |  **
        | ***
        |****

        Código escrito por Wagner Gaspar
        Abril de 2021
*/

int main() {
    int i, j, n;

    printf("Digite o valor de n: ");
    scanf("%d", &n);

    for(i = 1; i <= n; i++){
        for(j = n - i; j >= 1; j--) // imprime os espaços
            printf(" ");
        for(j = 1; j <= i; j++) // imprime os *
            printf("*");
        printf("\n");
    }

    return 0;
}

Deixe um comentário

dois × um =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.