• No results found

O conteúdo programático “Introduzir Algoritmos” corresponde ao primeiro contato que realmente proporciona aos aprendizes a sensação de que estão sendo acometidos a uma nova maneira de enxergar o funcionamento sistemático das coisas e fatos. Esta fase costuma ser determinante para que o aluno construa um sentimento de adoração ou de aversão à disciplina “Programação de Computadores”.

Embora a educação nos níveis primário e médio abordem a lógica em diversas disciplinas, não é exigido constantemente que os alunos sejam capazes de algoritmizá-la, mas apenas em raras situações como, por exemplo, durante o curso da disciplina “matemática”, quando é solicitado que os alunos resolvam problemas com sistemas de equações. Analisando o exemplo seguinte, torna-se fácil perceber como a solução de um sistema de equações segue um determinado tipo de algoritmização.

- A soma das idades de André e Carlos é 22 anos. Descubra as idades de cada um deles, sabendo-se que André é 4 anos mais novo do que Carlos.

- Solução: Primeiro traduz-se o problema para a linguagem matemática. A letra “c” será usada para representar a idade de Carlos, enquanto a letra “a” deve representar a idade de André, logo:

a = c – 4 e c + a = 22

- Assim, aplicando o sistema de equações “a = c – 4” e “c + a = 22”, tem-se: c + (c - 4) = 22

2c = 22 + 4 2c = 26 c = 13 - Como: a = c – 4 a = (13) – 4 a = 9

- Resposta: Carlos tem 13 anos e André tem 9 anos.

O problema anterior foi solucionado executando o seguinte algoritmo:

• Ler e interpretar o enunciado

• Construir as equações que a interpretação do enunciado permitir: c + a = 22 e a = c – 4

• Aplicar a segunda equação na primeira: c + (c – 4) = 22

• Obter o resultado da primeira equação: c = 13

• Aplicar o resultado da primeira equação na segunda: a = (13) – 4

• Obter o resultado da segunda equação: a = 9

Ao ler o algoritmo proposto anteriormente, tem-se a sensação de que constuir algoritmos é algo trivial. Contudo, é importante considerar alguns conhecimentos e habilidades que tornam essa tarefa difícil para alunos iniciantes. É preciso que os aprendizes, especificamente neste caso:

• Saibam interpretar corretamente o problema proposto;

• Tenham conhecimento sobre como montar equações;

• Saibam onde pesquisar problemas correlatos;

• Saibam reconhecer elementos encontrados em problemas correlatos que possam ajudá-los a solucionar o novo problema;

• Tenham habilidade em sistematizar problemas – ou separá-los em pequenos módulos para resolvê-los individualmente a fim de gerar uma solução final;

• Tenham enorme interesse em descobrir e construir soluções – ao contrário daqueles que procuram encontrar soluções já prontas;

É importante destacar que a lista de conhecimentos e habilidades necessárias à construção de algoritmos pode crescer exponencialmente de acordo com a complexidade do problema a solucionar – o que realmente ocorre na maioria dos casos. Em observações anteriores, durante anos de docência desta disciplina, ficou notória a predisposição dos aprendizes em desistir de problemas quando eles os identificam como complexos ao invés de insistir na construção de uma solução própria.

Finalizando, o trabalho com este conteúdo programático deve privilegiar que os aprendizes adquiram gosto (satisfação ou prazer) por solucionar problemas. A partir deste momento, o aluno deve ser capaz de enxergar o mundo de um ponto de vista sistematizado e deve se sentir bem diante desta habilidade de analisar minuciosamente o funcionamento das coisas e fatos.

A tabela 6.5 descreve como direcionar o aluno a transpassar a fase “Vejo, Escuto e Compreendo” do corrente conteúdo programático.

Tabela 6.5 – Objetivos e Habilidades da Fase “Vejo, Escuto e Compreendo” para o Objetivo Específico “Introduzir Algoritmos”

Como Encaminhar o Aluno ao

Conhecimento e Compreensão? Como Levar o Aluno ao Acolhimento? Habilidade(s) a Ser(em) Adquirida(s) - Descrever o conceito de algoritmo.

- Descrever o conceito de lógica matemática.

- Demonstrar como algoritmizar a lógica matemática.

- Desenvolver algoritmos propostos em sala de aula, descrevendo o raciocínio elaborado para se obter cada componente necessário como, por exemplo, os ingredientes, os talheres, as louças e panelas necessárias para produzir um bolo. - Descrever as diferenças entre algoritmos matemáticos (passíveis de implementação computacional) e algoritmos cotidianos (como o exemplo da produção de um bolo). - Descrever os conceitos de

compiladores e apresentar aos alunos códigos fonte de programas

(algoritmos em uma linguagem compreendida pelo computador)

- Iniciar a aula solicitando que os alunos realizem uma busca na Internet sobre o conceito de

Algoritmo (para isso, escolha iniciar este conteúdo durante uma aula de laboratório) – Lance o seguinte desafio: “a melhor resposta, segundo avaliação do professor, será

premiada em 1 ponto extra”. Todos os alunos deverão ler suas respostas em voz alta, sendo em seguida comentadas pelo professor. - Solicitar que os alunos produzam algoritmos do tipo: “Algoritmo para fritar um ovo”; “Algoritmo para limpar um carro”; “Algoritmo para estudar para uma prova”.

- Solicitar que os alunos respondam o seguinte questionamento: “Por que os algoritmos dos colegas não são iguais ao seu, mas podem também ser considerados corretos?”.

- Capacidade de perceber que todas as ações (humanas ou não) são realizadas através de pequenas atividades dispostas sequencialmente.

- Capacidade de compreender que as regras de

sequenciamento para produção de um bolo, por exemplo, se aplicam a qualquer algoritmo computacional.

- Capacidade de compreender a sistematização necessária para realização de uma tarefa qualquer.

- Capacidade de produzir algoritmos detalhados para a solução de qualquer problema do cotidiano, sem a

necessidade de que sejam tomadas decisões de correção de percurso.

sendo executados por compiladores. O compilador pode ser um simples interpretador de linguagem algorítmica (Portugol) ou uma linguagem de programação como Pascal, C++, etc.

Alguns (se não muitos) estudantes, ao se depararem com este “novo” paradigma de solução sistematizada de problemas, acabam por criar uma imagem negativa da disciplina de “Programação de Computadores” devido à criteriosidade (ou minuciosidade) exigida para se construir bons algoritmos. Contribuir para que os aprendizes desenvolvam o prazer em produzir soluções algorítmicas é um desafio a ser vencido pelos professores a partir deste exato instante. Pode ser interessante solicitar a participação dos alunos na solução dos algoritmos (em forma de requisição oral). É importante valorizar a maneira como o aluno raciocina sobre determinados aspectos a fim de encaminhá-lo na produção de uma solução aceita para aquele problema. Ou seja, é fundamental que o professor dê crédito às soluções propostas pelos alunos.

Na próxima fase (“Discuto, Aplico e Reflito”), é esperado que os alunos se tornem capazes de aplicar a técnica de solução sistematizada em problemas do seu cotidiano. A tabela 6.6 descreve como direcionar o aluno a transpassá-la de acordo com o corrente conteúdo programático.

Tabela 6.6 – Objetivos e Habilidades da Fase “Discuto, Aplico e Reflito” para o Objetivo Específico “Introduzir Algoritmos”

Como Encaminhar o Aluno à Aplicação e Análise?

Como Levar o Aluno à Resposta e Valorização?

Habilidade(s) a Ser(em) Adquirida(s) - Disponibilizar algoritmos prontos

(como solução de enunciados pré- definidos) aos aprendizes e realizar, no quadro branco, uma análise do motivo pelo qual cada instrução ou conjunto de instruções foi ou foram utilizada(s) naquela solução. - De posse de algoritmos prontos, alterar trechos de código e descrever uma análise sobre o efeito causado como consequência de cada alteração.

- Descrever alguns efeitos colaterais que podem ocorrer em algoritmos quando são submetidos a alterações

- Solicitar que os alunos façam uma análise nos algoritmos de outros colegas. Os alunos devem ser incentivados a completar ou alterar o que for (por eles) considerado necessário no algoritmo analisado. - Distribuir enunciados com

algoritmos semiprontos aos alunos e solicitar-lhes: (1) uma análise do motivo pelo qual foram utilizadas algumas estruturas (pré-definidas) dentro do algoritmo; (2) a conclusão do algoritmo.

- Distribuir algoritmos prontos e solicitar que os alunos: (1) façam

- Capacidade de analisar algoritmos e sugerir alterações ou incrementos sem a explicita intenção de torná-los mais eficientes.

- Capacidade de separar um algoritmo em diversos fragmentos que serão interpretados e considerados (futuramente) como módulos. - Capacidade de organizar fragmentos de algoritmos para alcançar um objetivo global. - Capacidade de identificar componentes críticos de um

estruturais. Faça uma descrição dos elementos que são acometidos pelos efeitos colaterais e uma análise do motivo pelo qual ocorrem. - Descrever como produzir bons comentários. Dar exemplos de bons e péssimos comentários. Descrever a importância dos comentários como valor agregado na qualidade do algoritmo.

- Em qualquer demonstração de algoritmo no quadro branco, descrever os elementos críticos àquela solução e analisar seu impacto local e global. Descrever também aqueles elementos não considerados críticos ou que podem ser facilmente substituídos sem impacto significativo no resultado final.

uma análise para compreender o propósito de cada algoritmo; (2) elaborem um enunciado para cada algoritmo.

- Solicitar que todo aluno elabore enunciados de algoritmos para uma ciência qualquer (por exemplo, a física, a química, a matemática, etc.). Estes enunciados devem ser

distribuídos pelo professor aos demais alunos como tarefa avaliativa. A nota atribuída a essa tarefa pode ser considerada pontuação extra.

- Distribuir enunciados e algoritmos prontos e solicitar que os alunos descrevam que elementos (neles) encontrados podem ser utilizados para produzir um novo algoritmo que representa a solução de um enunciado pré-definido (diferente dos demais, porém, correlacionado).

algoritmo.

- Capacidade de identificar componentes sem importância significativa em um algoritmo. - Capacidade de usar processos ou padrões de projeto que o estudante conhece para produzir novos algoritmos. - Capacidade de construir bons comentários relativos às instruções (ou conjunto de instruções utilizadas no algoritmo) ou ao contexto do enunciado.

- Capacidade de analisar algoritmos incompletos e produzir fragmentos de código que os leve à completude.

Até o presente momento, os alunos devem estar capacitados a construir algoritmos do cotidiano em um nível de complexidade baixo. Contudo, na medida em que os problemas se tornam mais complexos, pode ser exigido que os programadores adquiram habilidades necessárias à construção de algoritmos mais eficientes, otimizados e, alguns casos, inovadores. Essas habilidades são adquiridas quando os aprendizes transpassam a fase final “Pratico, Faço e Crio” do corrente conteúdo programático (Tabela 6.7).

Tabela 6.7 – Objetivos e Habilidades da Fase “Pratico, Faço e Crio” para o Objetivo Específico “Introduzir Algoritmos”

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)

- Disponibilizar algoritmos prontos incorretos e descrever os motivos pelos quais foram assim

considerados. Realizar (nos mesmos algoritmos) as correções necessárias. Comparar as duas soluções lado a lado no quadro branco.

- Disponibilizar algoritmos diferentes para a solução de um mesmo enunciado e compará-los em termos de eficiência (seja em relação ao tamanho – em linhas de código –,

- Disponibilizar algoritmos diferentes para a solução de um único enunciado e solicitar que os alunos descrevam que algoritmo é mais eficiente e justifiquem sua resposta.

- Disponibilizar algoritmos para a solução de diversos problemas e solicitar que os alunos produzam um algoritmo mais eficiente para cada um deles (em quantidade de linhas de código e em consumo de recursos

- Capacidade de criar soluções algorítmicas inovadoras para problemas do cotidiano. - Capacidade de avaliar soluções algorítmicas propostas por terceiros. - Capacidade de reconhecer os diversos critérios que podem ser utilizados para medir a eficiência de um algoritmo. - Capacidade de reconhecer os

seja em relação ao consumo de recursos de processamento). - Descrever como encontrar problemas cotidianos que se encaixam como ótimos candidatos a serem solucionados através do uso de algoritmos.

- Descrever as variáveis a serem analisadas (e como analisá-las) quando se deseja elaborar soluções inovadoras ou mais eficientes para problemas já resolvidos.

de processamento).

- Solicitar que os alunos construam soluções algorítmicas para

problemas ainda não abordados em sala de aula.

- Solicitar que os alunos avaliem (em termos de eficiência) soluções algorítmicas (para um determinado problema) dos colegas de sala. - Solicitar que os alunos avaliem os comentários agregados a um algoritmo disponibilizado pelo professor.

- Solicitar que os alunos avaliem os comentários agregados a um algoritmo desenvolvido por um colega de turma (pré-definido).

diversos critérios que podem ser utilizados para medir a qualidade semântica dos comentários agregados ao algoritmo. - Capacidade de reconhecer construções algorítmicas incorretas (sintática ou semanticamente) e sugerir as correções necessárias. - Capacidade de reconhecer construções algorítmicas ineficientes e propor melhorias.

Exemplos de exercícios para este conteúdo programático podem ser encontrados no Apêndice A.2.