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