Existem situações em que algumas instruções (blocos) devem ser executadas mais de uma vez durante o processamento de um algoritmo. Nessas situações, podem ser utilizadas estruturas de repetição (instruções que forçam a execução de blocos de instruções enquanto uma condição for verdadeira – “repetir enquanto” e “repetir para” – ou até que esta condição seja verdadeira – “repetir até que”). As estruturas de repetição permitem a construção de algoritmos mais complexos, entretanto menores.
Conhecer os conceitos das estruturas de repetição é primordial para a construção de algoritmos estruturados e capazes de resolver problemas mais generalizados como, por exemplo: “algoritmo para calcular a média das notas dos alunos de uma turma, em uma disciplina, independente da quantidade de alunos nela matriculados”. A tabela 6.23 mostra o que fazer para que os alunos transpassem a fase “Vejo, Escuto e Compreendo” do conteúdo programático “Entender as Estruturas de repetição (Laços)”.
Tabela 6.23 – Objetivos e Habilidades da Fase “Vejo, Escuto e Compreendo” para o Objetivo Específico “Entender as Estruturas de Repetição (Laços)”
Como Encaminhar o Aluno ao
Conhecimento e Compreensão? Como Levar o Aluno ao Acolhimento? Habilidade(s) a Ser(em) Adquirida(s) - Descrever os conceitos de estrutura
de repetição com teste no início (“repetir enquanto”).
- Disponibilizar uma lista de enunciados de problemas e solicitar que os alunos (em dupla)
desenvolvam algoritmos usando
- Capacidade de construir algoritmos usando laços com teste no início.
- Descrever os conceitos de estrutura de repetição com teste programado (“repetir para”).
- Descrever os conceitos de estrutura de repetição com teste no final (“repetir até que”).
- Demonstrar a construção de laços infinitos.
estrutura de repetição com teste no início.
- Solicitar que os alunos
desenvolvam (em dupla) os mesmos algoritmos da lista anterior usando estrutura de repetição com teste programado.
- Solicitar que os alunos
desenvolvam (em dupla) os mesmos algoritmos da lista anterior usando estrutura de repetição com teste no final.
- Capacidade de construir algoritmos usando laços com teste programado.
- Capacidade de construir algoritmos usando laços com teste no final.
A partir de alguns arranjos nos parâmetros de controle, os tipos de laços existentes podem ser usados em qualquer situação em que estruturas de repetição são necessárias. Contudo, a sintaxe padrão de cada um dos tipos os direciona para uma situação específica. Por exemplo: laços com teste no início são comumente utilizados em situações em que não se conhece a quantidade de vezes que o bloco de instruções interno ao laço deverá ser executado; laços com teste programado são comumente usados em situações em que se conhece a quantidade exata de vezes que o bloco de instruções interno ao laço deverá ser executado; e laços com teste no final são comumente usados em situações em que se deseja executar o bloco de instruções interno ao laço pelo menos uma vez, mas não se conhece a quantidade de vezes que ele será executado.
Conhecer e saber identificar as situações em que cada um dos tipos de estruturas de repetição é mais indicado pode ajudar na construção de algoritmos mais legíveis. Este conhecimento é adquirido quando o aprendiz transpassa a fase “Discuto, Aplico e Reflito” do presente conteúdo programático (Tabela 6.24).
Tabela 6.24 – Objetivos e Habilidades da Fase “Discuto, Aplico e Reflito” para o Objetivo Específico “Entender as Estruturas de Repetição (Laços)”
Como Encaminhar o Aluno à
Aplicação e Análise? Como Levar o Aluno à Resposta e Valorização? Habilidade(s) a Ser(em) Adquirida(s) - Descrever as situações em que a
estrutura de repetição com teste no início é recomendada.
- Descrever as situações em que a estrutura de repetição com teste programado é recomendada. - Descrever as situações em que a estrutura de repetição com teste no
- Disponibilizar uma lista de enunciados de problemas e solicitar que os alunos (em dupla) discutam e identifiquem o tipo de estrutura de repetição recomendado para a construção da solução algorítmica de cada enunciado.
- Disponibilizar algoritmos
- Capacidade de identificar as situações em que a estrutura de repetição com teste no início é indicada á construção de um algoritmo específico.
- Capacidade de identificar as situações em que a estrutura de repetição com teste
final é recomendada. - Demonstrar algoritmos que possuem estrutura de repetição com teste no início.
- Demonstrar algoritmos que possuem estrutura de repetição com teste programado.
- Demonstrar algoritmos que possuem estrutura de repetição com teste no final.
semiprontos de enunciados pré- definidos (faltando apenas a construção do laço, mas com os blocos de instrução internos à ele já inclusos) e solicitar que os alunos (em dupla) discutam e identifiquem o local em que deverá ser inserida uma estrutura de repetição adequada e completem o algoritmo.
programado é indicada á construção de um algoritmo específico.
- Capacidade de identificar as situações em que a estrutura de repetição com teste no final é indicada á construção de um algoritmo específico. - Capacidade de analisar um algoritmo e identificar locais em que existe a necessidade da construção de laços e que tipos de laços são, naquele caso, mais indicados.
Na maioria das situações, laços são construídos de maneira aleatória. Entretanto existem casos em que uma análise minuciosa da lógica do problema pode levar os programadores a decidirem pela construção de laços de maneira otimizada. Imagine o enunciado de um problema para mostrar os números pares entre 0 e 100. Na construção do algoritmo para solucionar o problema, um laço pode ser construído aleatoriamente da seguinte maneira: “faça para (contador = 0; contador <= 100; contador = contador + 1)”. Interno ao laço também será necessário o uso de uma instrução que identifica os números pares para mostrá-los na tela. Programadores experientes são capazes de identificar que o laço não foi construído de maneira otimizada, pois está sendo executado 101 vezes. Para o problema em questão, é fácil notar que o laço ideal deve ser executado 51 vezes (pois o incremento do laço pode ser realizado de 2 em 2, uma vez que ao problema interessam apenas os números pares). Não obstante, a identificação dos números pares, interna ao laço, também se torna desnecessária (uma vez que todo número par somado ao número 2 sempre culmina em um novo número par). Assim, a sintaxe otimizada do laço é a seguinte: “faça para (contador = 0; contador <= 100; contador = contador + 2)”.
A tabela 6.25 mostra o que pode ser feito para que os aprendizes se tornem capazes de avaliar e otimizar laços de acordo com o contexto em que estão inseridos (transpassando a fase “Pratico, Faço e Crio” do presente conteúdo programático).
Tabela 6.25 – Objetivos e Habilidades da Fase “Pratico, Faço e Crio” para o Objetivo Específico “Entender as Estruturas de Repetição (Laços)”
Como Encaminhar o Aluno à
Síntese e Avaliação? Organização e Caracterização por Como Levar o Aluno à um Valor ou Complexo de
Valores?
Habilidade(s) a Ser(em) Adquirida(s)
- Descrever como construir estruturas de repetição otimizadas. - Demonstrar como usar chinesinho (tabela de testes) para verificar a corretude de um algoritmo com laços.
- Demonstrar blocos de código com estruturas de repetição para problemas específicos e otimizá-los no quadro branco. Comparar cada bloco de código original com o seu correspondente otimizado.
- Disponibilizar algoritmos com laços prontos e solicitar que os alunos (em dupla) avaliem a sua corretude de acordo com o seu enunciado (justificando os
considerados incorretos e propondo as correções necessárias).
- Disponibilizar algoritmos construídos com laços incorretos e solicitar que os alunos (em dupla) identifiquem e corrijam os erros. - Disponibilizar algoritmos equivalentes com laços diferentes e solicitar que os alunos (em dupla) identifiquem o algoritmo mais eficiente e descrevam o motivo. - Disponibilizar enunciados de problemas em que é necessária a construção de algoritmos que fazem uso de laços aninhados.
- Solicitar que os alunos (em dupla) otimizem laços já construídos.
- Capacidade de identificar erros de lógica em laços. - Capacidade de corrigir erros de lógica identificados em laços.
- Capacidade de avaliar a eficiência de um laço. - Capacidade de construir algoritmos complexos que necessitam de laços aninhados. - Capacidade de predizer o resultado de variáveis em algoritmos, com laços que executam n vezes, através da tabela de testes.
Exemplos de exercícios para este conteúdo programático podem ser encontrados no Apêndice A.8.