Estruturas de Repetição aninhadas em C++
Veja nos tutoriais anteriores, onde usamos exercícios famosos para fixar nossos conhecimentos em estruturas de repetição, especificamente, nos códigos do laço DO WHILE:Colocamos um laço FOR dentro do laço DO WHILE.
Ou seja, existe um looping maior, um laço pai, o DO WHILE, que vai ficar repetindo uma estrutura base.
Dentro de cada iteração dessa, um laço FOR é executado.
Esse laço de dentro está aninhado ao laço de fora.
Consegue ver e entender sua função, por que ele funciona?
É bem simples, mas é uma técnica muito poderosa.
Usando laços aninhados em C++
Vamos usar a técnica das estruturas de repetição aninhadas para imprimir um tabuleiro N x N, ou seja, de N linhas e N colunas. Veja um exemplo de tabuleiro 3x3, pra jogar jogo da velha:- - -
- - -
- - -
O segredo aqui é usar um laço pras linhas e outro, interno ao primeiro, para cuidar das colunas em cada linha.
O primeiro FOR vai de 1 até N, é o responsável pelas linhas.
Note que ao final dele tem uma quebra de linha, para imprimir a próxima iteração na linha de baixo.
Dentro do FOR de linha, vamos imprimir N tracinhos.
Veja como fica nosso código:
#include <iostream> #include <iomanip> using namespace std; int main() { int lin, col, N; cout<<"Tamanho do tabuleiro N x N: "; cin >> N; for(lin=1 ; lin<=N ; lin++){ for(col=1 ; col<=N ; col++) cout<<" - "; cout <<endl; } return 0; }
Como usar laços aninhados em C++
Vamos criar um programa para imprimir a seguinte tabela da imagem:Veja que tabela bonita, que tabela formosa, que tabela bem feita.
Vamos aprender como fazer ela?
Primeiro, note duas duas, ela tem:
- 4 linhas
- 4 colunas
Vamos usar dois laços, um para cuidar das linhas e outro para cuidar das colunas.
Para controlar esses laços, vamos usar as variáveis lin e col, bem como uma variável que vai receber os números de 1 até 16, a num.
Vamos, de início, trabalhar nas linhas:
for(lin=1 ; lin<=4 ; lin++){
// alguma coisa
cout <<endl;
}
Note que ao término de cada iteração, temos que dar uma quebra de linha, para ir para a linha de baixo.
Dentro de cada iteração desta, precisamos imprimir as colunas, que são 4 por linhas.
Então vamos usar outro laço aninhado:
for(lin=1 ; lin<=4 ; lin++){
for(col=1 ; col<=4 ; col++){
// alguma coisa
}
cout <<endl;
}
Dentro desse for aninhado, tamos imprimir os números.
Como a variável col vai de 1 até 4, ele imprime quatro números em cada linha.
Vamos usar a variável num, inicialmente com valor 1, para imprimir esses valores.
Após a iteração interna, temos que incrementar essa variável.
Para a tabela sair bonitinha e formatada, vamos usar o comando setw, para definir como tamanho de 4 espaçamentos (você precisa incluir a biblioteca iomanip, pra usar esse comando).
Veja como ficou nosso código:
#include <iostream> #include <iomanip> using namespace std; int main() { int lin, col, num=1; for(lin=1 ; lin<=4 ; lin++){ for(col=1 ; col<=4 ; col++){ cout<<setw(4) << num; num++; } cout <<endl; } return 0; }Bacana, né?
Exemplo de uso de laços aninhados
Vamos agora imprimir um triângulo de asteriscos, do tamanho que o usuário quiser.Por exemplo, um triângulo de tamanho 5:
*
**
***
****
*****
Note que vai ter 5 linhas.
Na primeira linha, tem 1 coluna.
Na segunda linha, tem 2 colunas.
...
Na quinta coluna, tem 5 colunas.
O primeiro FOR, a variável de controle lin vai de 1 até N, onde N é o tamanho do triângulo que o usuário quiser.
Dentro de cada FOR, vamos usar outro FOR para imprimir os asteriscos. Eles devem imprimir de 1
até lin, consegue captar essa ideia?
Na primeira linha, imprime 1 asterisco.
Na segunda linha, imprime 2 asteriscos.
...
Na N-ésima linha, imprime N asteriscos.
Veja como fica nosso código:
#include <iostream> #include <iomanip> using namespace std; int main() { int lin, col, N; cout<<"Tamanho do triângulo: "; cin >> N; for(lin=1 ; lin<=N ; lin++){ for(col=1 ; col<=lin ; col++) cout<<"*"; cout <<endl; } return 0; }Note que o FOR de fora, usa chaves, pois tem mais de uma linha de comando abaixo dele.
Já o FOR de dentro, não precisa, pois ele só tem uma linha de comando.
Cuidado para não confundir as chaves! Faça sempre um espaçamento e uma indentação correta, para não errar.
Laço dentro de laço de laço dentro de laço...
Ok, já vimos como aninhar estruturas de repetição, colocamos um FOR dentro de outro.E que tal agora colocar mais um FOR, aninhado aos outros dois?
Vamos mostrar todos os horários possíveis de um relógio, durante o dia, no formato:
hour:min:sec
Ou seja, vai de : 00:00:00
Até o : 23:59:59
Vamos usar três variáveis: h, m e s
h vai de 0 até 23, tanto m como s vão de 0 até 59, pois representam os minutos e segundos.
Nosso código fica assim:
#include <iostream> #include <iomanip> using namespace std; int main() { cout.fill('0'); for(int h=0 ; h < 24 ; h++) for(int m=0 ; m < 60 ; m++) for(int s=0; s<60 ; s++){ cout<<setw(2)<<h<<":"; cout<<setw(2)<<m<<":"; cout<<setw(2)<<s<<endl; } return 0; }Usamos o setw(2) para definir 2 caracteres de espaçamento.
Quando não tiver nada pra aparecer nesse espaçamento, vai aparecer 0, pois usamos cout.fill('0')
Nenhum comentário:
Postar um comentário