Vamos a mais uma dúvida? E na aula de hoje vamos aprender como escrever um algoritmo que forma um triangulo com uma palavra, como o apresentado a seguir:
/*
Palavra: fulano
o
non
anona
lanonal
ulanonalu
fulanonaluf
*/
Este exercício é muito interessante do ponto de vista do raciocínio lógico por ele exigido.
Perceba que o resultado final que desejamos atingir possui uma quantidade de espaços variável à esquerda e parte da palavra à esquerda e parte à direita sem repetir a última letra.
Para resolver este problema precisamos analisar cada parte individualmente. Para iniciar, vamos analisar como a palavra é impressa. Perceba que ela é impressa a partir do fim. Então é bem provável que tenhamos uma repetição decrescente. Considere tamanho como o último índice válido do vetor que pode ser obtido por meio de strlen(vet) – 1.
/*
Repetição decrescente para controlar a impressão da palavra
*/
for(i = tamanho; i >= 0; i--){
// imprime o triângulo
}
Agora, antes de imprimir o primeiro caracter, precisamos imprimir uma certa quantidade de espaços à esquerda. Perceba que na primeira linha é impresso apenas a última letra da palavra e antes dessa impressão temos exatamente TAM – 1 espaços, sendo TAM a quantidade de caracteres da palavra. Assim, se a palavra tem 6 caracteres, então teremos 5 espaços. Dizendo em outras palavras, se vamos imprimir o caracter da posição i, precisamos imprimir um espaço para cada posição do vetor de 0 até i – 1. Essa lógica é acrescentada no trecho de código abaixo.
Como a variável i vai percorrer o vetor do final para o início no for decrescente, a quantidade de espaços irá diminuir em cada linha.
/*
Impressão dos espaços à esquerda
*/
for(i = tamanho; i >= 0; i--){
// imprime espaços à esquerda
for(j = 0; j < i; j++)
printf(" ");
// continuação do código
}
Agora precisamos imprimir a parte esquerda do triângulo. Perceba que não conseguimos imprimir tudo de uma única vez. Assim, precisamos imprimir a letra o na primeira linha, depois as letras no, depois ano, e assim por diante. Como a variável i do for mais externo é decrescente, do final para o início do vetor, precisamos agora de uma repetição que imprima exatamente este intervalo, de i até o fim do vetor. Esta lógica foi acrescentada no trecho de código a seguir.
/*
Imprime a parte esquerda do triângulo (da palavra)
*/
for(i = tamanho; i >= 0; i--){
// imprime espaços à esquerda
for(j = 0; j < i; j++)
printf(" ");
// imprime a parte esquerda do triângulo
for(k = i; k <= tamanho; k++)
printf("%c", vet[k]);
// a seguir, imprime a parte direita do triângulo
}
Por fim, precisamos agora finalizar o triângulo. Perceba que a última letra da palavra não se repete, ou seja, é impressa apenas uma vez. Então, precisamos de uma repetição decrescente que imprima a palavra a partir do penúltimo caracter até i. Esta lógica foi acrescentada no trecho de código abaixo.
/*
Imprime a parte final do triângulo, à direita
*/
for(i = tamanho; i >= 0; i--){
// imprime espaços à esquerda
for(j = 0; j < i; j++)
printf(" ");
// imprime a parte esquerda do triângulo
for(k = i; k <= tamanho; k++)
printf("%c", vet[k]);
// imprime a parte direita do triângulo
for(m = tamanho - 1; m >= i; m--)
printf("%c", vet[m]);
printf("\n");
}
Código completo em C para imprimir uma palavra em forma triangular
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Código escrito por Wagner Gaspar
Setembro de 2021
Aula 280: Dúvida: Como formar um triângulo com uma palavra?
Palavra: fulano
o
non
anona
lanonal
ulanonalu
fulanonaluf
*/
int main(){
char vet[] = "fulano";
int i, j, k, m, tamanho = strlen(vet) - 1;
for(i = tamanho; i >= 0; i--){
// imprime espaços à esquerda
for(j = 0; j < i; j++)
printf(" ");
// imprime a parte esquerda do triângulo
for(k = i; k <= tamanho; k++)
printf("%c", vet[k]);
// imprime a parte direita do triângulo
for(m = tamanho - 1; m >= i; m--)
printf("%c", vet[m]);
printf("\n");
}
return 0;
}
