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; }