Algoritmos de aprendizagem são considerados essenciais para alunos que cursam cursos em áreas computacionais como Ciência da Computação, Sistemas de Informação, Engenharia da Computação e Diploma em Ciência da Computação. No curso de Ciência da Computação da Univali (Universidade do Vale do Itajaí), já foram feitos esforços para definir uma linguagem de representação de algoritmos que reduza os problemas sintáticos tradicionalmente encontrados nas linguagens de programação.
PROBLEMATIZAÇÃO
FORMULAÇÃO DO PROBLEMA
Solução Proposta
OBJETIVOS
Objetivo Geral
Objetivos Específicos
METODOLOGIA
ESTRUTURA DO TRABALHO
A seção 2.2 enfoca a construção de compiladores e interpretadores, detalhando etapas como a construção de um analisador léxico, sintático e semântico, bem como o uso de árvores sintáticas abstratas para interpretação. Na seção 2.3 são apresentadas ferramentas semelhantes, que fazem um levantamento dos pontos positivos a serem agregados ao projeto e tentam evitar erros cometidos em projetos anteriores.
APRENDIZAGEM DE ALGORITMOS
Importância de Algoritmos
Principais Problemas Relacionados à Aprendizagem de Algoritmos
Segundo Pimentel et al (2003), a dificuldade de ensinar algoritmos decorre da falta de metodologias de ensino que permitam tratar cada aluno de forma diferenciada. Os principais problemas que os iniciantes encontram durante o aprendizado estão relacionados a erros de sintaxe e semântica, dificuldades de compreensão de enunciados e de projeto do algoritmo e à falta de capacidade de encontrar erros na lógica de programação (PIMENTEL, 2003 e GOMES e MENDES, 2000).
Métodos para Facilitar a Aprendizagem de Algoritmos
CONSTRUÇÃO DE COMPILADORES E INTERPRETADORES
- Análise Léxica
- Análise Sintática
- Análise Semântica
- Interpretadores
- Árvores Sintáticas Abstratas
A Tabela 1 mostra as regras de produção para a construção de uma árvore sintática abstrata para a string 5-4+8 associando operações semânticas a regras de produção gramaticais. De acordo com Aho et al. 1995), a Figura 5 mostra finalmente a construção de uma árvore sintática abstrata enquanto a árvore pontilhada representa uma representação de uma árvore gramatical que só pode existir em sentido figurado.
ESTUDO DE FERRAMENTAS SIMILARES
- Happy Portugol
- CIFluxProg I e CIFluxProg II
- Portugol/Plus
- AWTM
- G-Portugol
- Síntese das Características das Ferramentas Analisadas
A ferramenta apresenta alguma deficiência no sentido de apresentar mensagens de erro de simples compreensão, bem como a ausência de mecanismos que permitam executar algoritmos passo a passo monitorando os valores das variáveis de um algoritmo durante sua execução. Segundo Santiago e Dazzi (2004), CIFluxProg é um ambiente de programação que visa ajudar estudantes de informática a aprender lógica de programação de forma fácil e intuitiva. No módulo de programação em português podem ser utilizadas variáveis como inteiro, caractere e real, loops de repetição (while, for, do while) e ramificação condicional (if e else).
CIFluxProg é um ambiente de programação completo que, além de compilar algoritmos, permite a execução, acompanhando passo a passo os valores das variáveis declaradas, mas possui alguns pontos negativos, como não poder ser utilizado em plataformas diferentes, o que o torna limitado ao ambiente Windows e não possui nenhuma forma de destaque de sintaxe para gramática, o que o torna mais atrativo aos alunos e facilita a identificação de palavras reservadas no idioma. A ferramenta agrega análise semântica e análise pragmática ao compilador CIFLuxProg, além de um sistema especialista responsável por ler um arquivo gerado após a análise e verificar os tipos de erros cometidos e fornecer notas e comentários como saída (MIRANDA, 2004). O G-Portugol, desenvolvido na linguagem de programação Java, é um sistema multiplataforma, mas a tentativa de avaliação da ferramenta não foi possível devido ao facto da versão disponível não ser funcional.
Fluxograma Portugol G-Portugol Plataformas onde corre Windows Windows Windows Windows/Linux Possibilidade de execução. passo a passo Não Não Sim Sim.
TECNOLOGIAS A SEREM UTILIZADAS
NetBeans
Como pode ser observado na Tabela 2, há uma carência significativa de ferramentas para utilização em ambiente web, e a maioria das ferramentas analisadas não permitem portabilidade, pois são desenvolvidas para um único sistema operacional. Segundo NetBeans (2006), o NetBeans IDE é um ambiente rápido e completo para desenvolvimento de aplicações Java que roda em qualquer sistema operacional que possua uma máquina virtual Java.
Applets
O método init é executado quando o applet é carregado, o método start é chamado quando o applet é desenhado na tela, a função stop é usada quando o applet não está mais visível e a função destroy deve ser chamada quando os recursos são alocados pelo applet precisa ser liberado.
Gals
Eles permitem construir pacotes sofisticados de gráficos, desenhos e processamento de imagens, pois compartilham os mesmos recursos do navegador; Segundo Gesser (2003), a geração de analisadores lexicais é feita por especificações lexicais, baseadas em expressões regulares. Na ferramenta, os tokens podem ser especificados por expressões regulares e especificação de definições lexicais, que podem ser vistas como macros na definição de tokens.
A definição acima de letra e número serve apenas para facilitar a construção de especificações de token sem a necessidade de reescrever a expressão regular que gera a letra ou o número sempre que precisar ser usado. A Figura 11 mostra um analisador para operações de adição e subtração com inteiros e variáveis. A notação adotada pela ferramenta para descrever a gramática é BNF. Além de construir o código do analisador léxico e sintático, a ferramenta cria o esqueleto do analisador semântico e permite ao usuário inserir ações semânticas no lado direito da regra de produção gramatical.
Durante a análise, sempre que uma regra semântica é encontrada, o analisador passa o número da ação e o último token lido para o analisador semântico.
LEVANTAMENTO DE REQUISITOS
Requisitos Funcionais
Apesar disso, optou-se por tratar alguns artefatos UML neste projeto para definir partes do sistema que não estão especificamente relacionadas à construção do núcleo do compilador, mas sim a funcionalidades acessíveis ao usuário. Na sessão 3.1 é apresentada uma visão geral dos requisitos, onde são apresentados os requisitos funcionais e não funcionais e as regras de negócio que compõem o sistema. A Seção 3.2 especifica a especificação do modelo do conjunto de casos de teste necessários para realizar a verificação do algoritmo.
RF06: O sistema deve permitir a passagem de um arquivo XML contendo a sentença e os grupos de testes; RF07: O sistema deve permitir ao usuário verificar a exatidão de seu algoritmo utilizando dados de teste em um arquivo XML passado como parâmetro; Isso é. RF08: O sistema deve permitir ao usuário monitorar os valores das variáveis durante a execução (tabela de testes).
Requisitos não Funcionais
Regras de Negócio
GRUPOS DE TESTE
DIAGRAMAS DE CASOS DE USO
DIAGRAMA DE CLASSE
Classes de Recurso
Classe do Applet e Compilador
Classes do Interpretador
INTERFACE DO SISTEMA
- Construção de Algoritmos
- Parar Execução
- Executar Algoritmo
- Execução Passo a Passo
- Validar Algoritmo
A qualquer momento durante uma execução normal, passo a passo ou uma verificação do algoritmo, é possível parar o processo simplesmente pressionando o botão identificado na Figura 18 pelo número 1, ou pressionando qualquer tecla na área de descrição do código que está identificada pelo número. 2. Durante a execução, uma aplicação representada na Figura 19 encontra-se no campo número 1, denominado console, onde serão exibidos os comandos de saída da linguagem. O campo número 2 possui a funcionalidade de iniciar o processo de execução do algoritmo e o campo número 3 serve para realizar a interação de entrada quando o algoritmo solicita um valor ao usuário.
Para iniciar uma execução passo a passo basta clicar no botão indicado pelo número 1 na figura 20, para continuar a execução pressione a tecla F7 ou pressione o botão de instrução após a instrução e você poderá acompanhar o valor das variáveis declarado na tabela identificada pelo número 2. A vantagem de visualizar a tabela de variáveis, área de construção do algoritmo e console na mesma tela é poder monitorar os valores das variáveis ao mesmo tempo que o sistema exibe mensagens no console . e destaca a instrução que está sendo executada através de um destaque de linha onde o comando está localizado. A Figura 21 apresenta a interface durante o processo de validação do algoritmo, que deve ser iniciado através do botão identificado pelo número 1 e o feedback ao usuário ocorre através do campo de correção (2).
O processo de validação é responsável por testar o algoritmo implementado pelo usuário utilizando como entradas os valores especificados pelo professor no arquivo XML e verificar se as saídas produzidas pelo algoritmo são iguais às saídas definidas nos casos de teste contidos em o XML. .
IMPLEMENTAÇÃO
- Construção de uma ASA orientada a objetos
- Execução do Algoritmo
- Verificação dos Algoritmos
- Aspectos de Interface
A Figura 24 mostra o fluxo de execução de um algoritmo que requer duas entradas do usuário. Sem o uso de threads, durante a execução de um algoritmo o Applet ficaria inacessível pois todo o processamento estaria focado na execução. A Figura 26 mostra a mensagem de erro ao verificar um algoritmo que deve exibir o fatorial de um número solicitado através de um comando de leitura.
A área de entrada de dados do teclado permanece desabilitada durante toda a execução do sistema, sendo habilitada apenas para o usuário durante uma solicitação de leitura. Quando isso acontece, o sistema muda o foco para o campo de entrada, facilitando a inserção de valores pelo usuário, pois é necessário mover o mouse e clicar no campo. Como a área de entrada de dados não está localizada diretamente no console, considerou-se importante que todos os inputs fossem transferidos para o console, facilitando ao usuário a verificação de quais valores já foram inseridos. A interface do sistema é dividida em diversas áreas, na parte inferior do sistema está a área utilizada pelo sistema para informar a formulação da questão, o console de entrada de dados e saída de informações do código implementado pelo usuário e mensagens de erro (debug).
Um dos maiores problemas na construção de uma interface de compilador que busca facilitar o aprendizado de usuários menos experientes é a emissão de mensagens de erro de fácil compreensão.
PROCEDIMENTO E REALIZAÇÃO
COLETA DE DADOS
ANÁLISES REALIZADAS
Testes de Hipóteses
No caso do Teste de Student, a fórmula para encontrar o resultado pode ser encontrada na Figura 32. H0 = Os controles que obtiveram resultados sem sucesso não levaram a uma depuração passo a passo da solução. Com base no resultado do teste (2.04), que é superior ao valor de 1,68 encontrado na tabela de distribuição t de Student, é possível rejeitar a hipótese nula e, portanto, a existência de uma correlação entre controles mal sucedidos e passo a passo. a depuração confirma assim a hipótese.
Para testar a terceira hipótese, abordada na fase de análise, foi utilizado um teste Z, com o objetivo de comparar a média de correções entre os alunos que verificaram suas soluções e os alunos que não o fizeram. Para rejeitar a hipótese nula, o valor Z encontrado deve ser menor que -1,96, entrando na região de rejeição da hipótese, com o valor encontrado de 0,49, não pode ser rejeitada, levando à conclusão de que os alunos testados tiveram desempenho menor ou igual aos alunos que não fizeram o teste. Na verificação da quarta hipótese e também na terceira, foi utilizado o teste Z, com o objetivo de comparar o tempo de criação de uma solução entre os alunos que verificaram a solução e os alunos que não verificaram.
H0 = Os alunos que verificaram as soluções gastaram menos tempo nas questões do que aqueles que não verificaram. Hα = Os alunos que verificaram as soluções gastaram mais tempo nas questões do que aqueles que não verificaram. O sistema compila o código inserido e executa o aplicativo escrito pelo usuário, postando todas as mensagens de saída e entrada no console.