Laço Aninhado
Parte da seção Fundamentos do Journey de Swift da Coddy. Lição 49 de 86.
Um loop aninhado é simplesmente um loop dentro de outro loop. O loop interno completa todas as suas iterações para cada iteração individual do loop externo.
let rows = 3
let cols = 2
for row in 1...rows {
for col in 1...cols {
print("Row \(row), Col \(col)")
}
}
// Saída:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2Para cada valor de row, o loop interno recomeça e percorre todos os valores de col, de 1 até cols. Então, com rows = 3 e cols = 2, o código interno é executado 6 vezes no total (3 × 2). rows e cols nunca mudam: eles apenas indicam aos loops quando parar.
Loops aninhados são comumente usados para trabalhar com estruturas semelhantes a grades ou para gerar padrões.
Aqui está um exemplo que imprime um retângulo simples de asteriscos:
for row in 1...2 {
for col in 1...4 {
print("*", terminator: "")
}
print("") // Vá para a próxima linha
}
// Saída:
// ****
// ****O terminator: "" impede que print adicione uma quebra de linha, então os asteriscos aparecem na mesma linha. Depois que o loop interno termina, print("") passa para a próxima linha.
Desafio
FácilLeia dois números inteiros da entrada: rows e cols. Use loops aninhados para imprimir uma grade de números em que cada célula exibe o produto do número da sua linha pelo número da sua coluna.
Você receberá as seguintes entradas:
- Primeira linha: número de linhas (por exemplo,
"3") - Segunda linha: número de colunas (por exemplo,
"4")
Requisitos:
- Use um loop externo para as linhas (de 1 a
rows) - Use um loop interno para as colunas (de 1 a
cols) - Imprima o produto dos números da linha e da coluna atuais
- Separe os valores na mesma linha com um espaço
- Cada linha deve ficar em sua própria linha
Dica: Use terminator: " " para manter os valores na mesma linha e, em seguida, use print("") após o loop interno para passar para a próxima linha.
Por exemplo, se rows for 3 e cols for 4, a saída deverá ser:
1 2 3 4
2 4 6 8
3 6 9 12 Use um novo contador para cada loop (por exemplo, row para as linhas e col para os números em uma linha) e compare-o com rows ou cols. Não altere rows e cols: cada linha precisa de cols novamente.
Experimente você mesmo
let rows = Int(readLine()!)!
let cols = Int(readLine()!)!
// TODO: Escreva seu código abaixo
// Use laços aninhados para imprimir uma tabuada em formato de grade
// Laço externo: percorra as linhas (1 até rows)
// Laço interno: percorra as colunas (1 até cols)
// Imprima o produto de row * column
// Use print(..., terminator: " ") para manter os valores na mesma linha
// Use print("") após o laço interno para passar à próxima linhaEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores - Parte 1
Operadores aritméticosOperador móduloAtribuição compostaRecapitulação - Matemática simplesOperadores de comparação7Entrada e Saída Básicas
Função printInterpolação de stringsEntrada com readlineConversão de tiposRecapitulação - Até 120Recapitulação - Verdadeiro ou falso10Funções
Declare uma funçãoParâmetros e argumentosValores de retornoRótulos de argumentosRevisão - função SigmaRevisão - função de validaçãoValores padrão13Iterando sobre Sequências
Iterando sobre ElementosO Método EnumeradoIterando sobre Strings P1Iterando sobre Strings P22Variáveis
Let vs VarAnotações de tipoNúmerosStringBooleanoConvenções de nomenclaturaRecapitulação - Inicializar variáveis5Operadores — Parte 2
Operadores lógicos — Parte 1Operadores lógicos — Parte 2Revisão — Lógica simplesOperadores lógicos — Parte 3Operador ternário8Calculadora de Divisão da Conta
Mensagem de Boas-vindasObtendo Dados de Entrada11FizzBuzz com um Toque Especial
Visão Geral do JogoA Função FizzBuzz3Optionais
O que são OptionaisDesembrulhando com If LetGuard LetOperador de Coalescência de NilRecapitulação - Desembrulhamento Seguro6Tomada de Decisões
Instrução IfIf - ElseRecapitulação - Calculadora SimplesInstrução SwitchSwitch com Intervalos9Laços de Repetição
Laço For-InLaço WhileLaço Repeat-WhileBreakContinueRevisão - FatorialIntervalos em LaçosLaço AninhadoRevisão - Entrada Dinâmica12Fundamentos de Arrays
Declarando um ArrayAcessando ElementosModificando ArraysMétodos de ArrayRevisão - Lista de ProdutosRevisão - Array InvertidoTuplas15Rastreador de Despesas Diárias
Visão Geral do ProjetoSair do ProgramaPratique por conta própria: Playground de Swift