aula 279

Dúvida | Como imprimir um triângulo com caracteres de uma palavra?

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

Deixe um comentário

11 + 2 =

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.