Exercícios Resolvidos de Loops infinitos, loops aninhados e os comandos break e continue

Ver Teoria

Enunciado

Faça um programa que desenhe na tela um triângulo utilizando somente o caractere “ % ” . O usuário deve escolher a quantidade de linhas que formam o triângulo.

Exemplo, para 6 linhas:

Passo 1

Vamos lá pessoal.

A questão pede pra gente desenhar um triângulo usando o símbolo % . A maior dificuldade está no fato de que esse triângulo possui a altura alinha à direita. Isso quer dizer que vamos precisar preencher vários caracteres de espaço em branco para empurrar cada um dos % para o lugar certo.

Mas primeiro vamos entender como esse triângulo é formado. Note que a primeira linha possui apenas um símbolo de % , a segunda linha tem três, a terceira tem cinco... ou seja, vão aumentando de dois em dois.

Vamos usar o exemplo de 6 linhas que foi dado pela questão. A gente pode imaginar esse triângulo como uma matriz, e dividir a quantidade de símbolos % entre as células da matriz

Por enquanto, não vamos nos preocupar em quantos % temos em cada célula, vamos só pesar: “O que faz uma célula ser preenchida ou ficar vazia”?

Lembrando da álgebra linear, a gente pode notar uma coisa: na diagonal secundária, a soma do i + j é sempre constante. Não entendeu? Então olha só essa imagem:

Note que o “ 5 ” que obtivemos é igual a “ 6 - 1 ”... e olha que show de bola, 6 é o valor da dimensão da matriz!

E mais uma coisa interessante sobre matrizes quadradas é que esse fenômeno acontece em todas as diagonais paralelas a diagonal secundária! Olha aí em baixo uma matriz em que cada elemento é preenchido com o valor de i + j

a i j = i + j

Passo 2

Então, vamos observar que:

  • O valor i + j das diagonais é constante.
  • O valor i + j da diagonal secundária é igual a d i m - 1

Então, pra desenhar esse triângulo, o que precisamos fazer é preencher todas as células em que i + j seja igual ou maior a d i m - 1 . Podemos determinar isso com uma instrução i f - e l s e

Mas um detalhe, a última coluna é preenchida com apenas um único % . Note que a posição j da última coluna é igual a d i m - 1 . Então, quando j = d i m - 1 devemos escrever somente um % .

a a a a S E   j = d i m - 1   E N T A O   e s c r e v a   “ % ” a a a a M A S   C A S O   S E   i + j ≥ d i m - 1   E N T A O   e s c r e v a   “ % % ” a a a a C A S O   C O N T R A R I O   e s c r e v a   d o i s   e s p a ç o s   e m   b r a n c o

Porém, como fazemos pra acessar todas as células de uma matriz? Pra isso usamos dois loops aninhados. O loop externo é responsável pelas linhas, e o loop interno é responsável pelas colunas.

Aplicando a lógica dos loops aninhados sobre a estrutura i f - e l s e anterior vamos ter o seguinte algoritmo:

E N Q U A N T O   i < d i m a a E N Q U A N T O   j < d i m a a a a S E   j = d i m - 1   E N T A O   e s c r e v a   “ % ” a a a a M A S   C A S O   S E   i + j ≥ d i m - 1   E N T A O   e s c r e v a   “ % % ” a a a a C A S O   C O N T R A R I O   e s c r e v a   d o i s   e s p a ç o s   e m   b r a n c o a a v a   p a r a   p r o x i m a   l i n h a

Que vai imprimir os % de acordo com a seguinte lógica:

Passo 3

Vamos olhar agora pro algoritmo que desenvolvemos e vamos implementá-lo em linguagem C++. Pra começar escrevemos o cabeçalho e declaramos três variáveis: i e j para representar as linhas e colunas da nossa matriz, e a variável d i m que determina a dimensão da matriz

Em seguida vamos receber o valor de d i m do usuário. Pra isso vamos usar os comandos c i n e c o u t :

Passo 4

Show, agora vamos implementar o algoritmo de fato:

E N Q U A N T O   i < d i m a a E N Q U A N T O   j < d i m a a a a S E   j = d i m - 1   E N T A O   e s c r e v a   “ % ” a a a a M A S   C A S O   S E   i + j ≥ d i m - 1   E N T A O   e s c r e v a   “ % % ” a a a a C A S O   C O N T R A R I O   e s c r e v a   d o i s   e s p a ç o s   e m   b r a n c o a a v a   p a r a   p r o x i m a   l i n h a

Primeiro criamos um aninhamento de loops, para podermos iterar em cima da nossa matriz:

E dentro desses loops, vamos implementar a estrutura i f - e l s e :

E com isso podemos fechar o loop interno e adicionar um salto de linha, depois fechamos o último loop e finalizamos o programa:

Passo 5

Passo 6

E claro, antes de terminar precisamos testar o programa:

E prontinho! Finalizamos essa questão super da hora!

Resposta