SlideShare uma empresa Scribd logo
1 de 121
Baixar para ler offline
Universidade de Bras´ılia
Instituto de Ciˆencias Exatas
Departamento de Ciˆencia da Computa¸c˜ao
Taxonomias de Exemplos para Aprendizagem de
Programa¸c˜ao
Adam Victor Nazareth Brandizzi
Yuri Moreira de Nu˜nez
Monografia apresentada como requisito parcial
para conclus˜ao do Curso de Computa¸c˜ao — Licenciatura
Orientador
Prof. Dr. Homero Luiz P´ıccolo
Bras´ılia
2009
Universidade de Bras´ılia — UnB
Instituto de Ciˆencias Exatas
Departamento de Ciˆencia da Computa¸c˜ao
Curso de Computa¸c˜ao — Licenciatura
Coordenador: Prof. Dr. Fl´avio Leonardo Cavalcanti de Moura
Banca examinadora composta por:
Prof. Dr. Homero Luiz P´ıccolo (Orientador) — CIC/UnB
Prof. Dr. Maria de F´atima R. Brand˜ao — CIC/UnB
Prof. Dr. Carla Cavalcante Koike — CIC/UnB
CIP — Cataloga¸c˜ao Internacional na Publica¸c˜ao
Brandizzi, Adam Victor Nazareth.
Taxonomias de Exemplos para Aprendizagem de Programa¸c˜ao / Adam
Victor Nazareth Brandizzi, Yuri Moreira de Nu˜nez. Bras´ılia : UnB, 2009.
121 p. : il. ; 29,5 cm.
Monografia (Gradua¸c˜ao) — Universidade de Bras´ılia, Bras´ılia, 2009.
1. Exemplos, 2. Problemas, 3. Programa¸c˜ao de Computador,
4. Ensino de Programa¸c˜ao, 5. Sistemas Tutoriais Inteligentes,
6. Sistemas Tutorias Baseados na Web, 7. Taxonomia de Exemplos,
8. Tutorias
CDU 004
Endere¸co: Universidade de Bras´ılia
Campus Universit´ario Darcy Ribeiro — Asa Norte
CEP 70910-900
Bras´ılia–DF — Brasil
Universidade de Bras´ılia
Instituto de Ciˆencias Exatas
Departamento de Ciˆencia da Computa¸c˜ao
Taxonomias de Exemplos para Aprendizagem de
Programa¸c˜ao
Adam Victor Nazareth Brandizzi
Yuri Moreira de Nu˜nez
Monografia apresentada como requisito parcial
para conclus˜ao do Curso de Computa¸c˜ao — Licenciatura
Prof. Dr. Homero Luiz P´ıccolo (Orientador)
CIC/UnB
Prof. Dr. Maria de F´atima R. Brand˜ao Prof. Dr. Carla Cavalcante Koike
CIC/UnB CIC/UnB
Prof. Dr. Fl´avio Leonardo Cavalcanti de Moura
Coordenador do Curso de Computa¸c˜ao — Licenciatura
Bras´ılia, 30 de junho de 2009
Agradecimentos
Agrade¸co, acima de tudo, a meus saudosos pais, que me deram a melhor educa¸c˜ao poss´ıvel;
a meus tios Nataniel e Ana, que me apoiaram nos momentos dif´ıceis; a minhas irm˜as, que
sempre me apoiaram, e a Juliana Vilela, que esteve ao meu lado durante grande parte do
curso. Agrade¸co `a Universidade de Bras´ılia, pelo ensino de alta qualidade; aos professores
do departamento, pelo conhecimento, t´ecnico ou n˜ao, transmitido e pela compreens˜ao e
apoio. Agrade¸co especialmente ao professor Homero, pela orienta¸c˜ao s´abia, dedicada e
paciente. Por fim, agrade¸co a todos os companheiros universit´arios que me apoiaram,
especialmente ao amigo Pedro, que muito me ajudou no come¸co do curso, e ao parceiro
de projeto Yuri, cujo trabalho foi indispens´avel. A todos citados, e aos que n˜ao pude
citar, muito obrigado.
Adam Victor Nazareth Brandizzi
Agrade¸co ao professor orientador, Homero, e parceiro de projeto, Adam, pela paciˆencia
e esmero. Agrade¸co especialmente `as mulheres da minha vida - minha m˜ae, minha esposa,
minha irm˜a e minha av´o - que contribuiram a cada tempo com amor e compreens˜ao.
Agrade¸co, enfim, a todos os amigos que aguardavam ansiosos por este feliz desfecho.
Yuri Moreira de Nu˜nez
iv
Resumo
Estudantes possuem diferentes ritmos de aprendizado. Para satisfazer suas diferentes
necessidades, s˜ao necess´arios materiais did´aticos em diferentes n´ıveis de complexidade.
Nesse trabalho, propomos um conjunto de exemplos de programa¸c˜ao com v´arios n´ıveis
de complexidade para alunos que estejam aprendendo a programar computadores. Esse
conjunto de exemplos ser´a integrado ao Tutorial ICC, um sistema de aprendizagem auxi-
liado por computador. Este ´e mais um passo para acrescentar adaptabilidade ao Tutorial
ICC, aproximando-o dos sistemas tutoriais inteligentes.
Palavras-chave: Exemplos, Problemas, Programa¸c˜ao de Computador, Ensino de Pro-
grama¸c˜ao, Sistemas Tutoriais Inteligentes, Sistemas Tutorias Baseados na Web, Taxono-
mia de Exemplos, Tutorias
v
Abstract
Students have different learning paces. In order to satisfy their different needs, educational
materials at different complexity levels are necessary. In this work, we propose a set of
programming examples with various complexity levels for students who are learning how
to program computers. This set will be integrated to Tutorial ICC, a computer-assisted
learning system. It is one more step to add adaptability to Tutorial ICC, approaching it
to intelligent tutoring systems.
Keywords: Computer Programming, Examples, Examples Taxonomy, Intelligent Tutor-
ing Systems, Problems, Programming Teaching, Tutorials, Web-based Tutoring Systems
vi
Sum´ario
1 Introdu¸c˜ao 1
1.1 Problemas e Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Resultados esperados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 O Ensino de Programa¸c˜ao 4
2.1 A dificuldade de ensinar a programar . . . . . . . . . . . . . . . . . . . . . 4
2.2 Fatores cognitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Fatores pedag´ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Sistemas Tutoriais Inteligentes 8
3.1 Arquitetura de um sistema tutorial inteligente . . . . . . . . . . . . . . . . 8
3.2 Categorias de sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 10
3.3 Vantagem dos sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 14
3.4 O papel do trabalho corrente . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Taxonomias de Exemplos 15
4.1 Taxonomia hier´arquica de exemplos . . . . . . . . . . . . . . . . . . . . . . 15
4.2 Enunciados e solu¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 “Tira-teima” e roteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4 Localiza¸c˜ao na taxonomia . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5 Exemplos de Taxonomias 23
5.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 23
5.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 28
5.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 28
vii
5.2.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 34
5.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 42
5.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 42
5.4.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 42
5.4.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 49
5.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 49
5.5.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 49
5.5.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 62
5.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 62
5.6.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6 Conclus˜oes e Trabalhos Futuros 74
Referˆencias 75
A Taxonomias do Cap´ıtulo 2 do Tutorial ICC 78
A.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 78
A.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 78
A.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
A.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 79
A.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 79
B Taxonomias do Cap´ıtulo 4 do Tutorial ICC 81
B.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
B.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 81
B.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 81
B.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
B.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
B.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 82
B.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 82
viii
B.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
B.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
B.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 83
B.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 83
B.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
B.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
B.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 84
B.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 84
B.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
B.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
B.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 85
B.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 85
B.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
B.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
B.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 86
B.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 87
B.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
B.7 ´Arvore 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
B.7.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 88
B.7.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 88
B.7.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
C Taxonomias do Cap´ıtulo 4 do Tutorial ICC 89
C.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
C.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 89
C.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 89
C.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
C.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 90
C.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 90
C.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
C.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
C.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 91
C.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 92
C.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
C.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
C.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 93
C.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 93
C.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
C.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
C.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 94
C.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 94
C.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
ix
D Taxonomias do Cap´ıtulo 6 do Tutorial ICC 96
D.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
D.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 96
D.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 96
D.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
D.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
D.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 97
D.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 97
D.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
D.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
D.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 98
D.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 99
D.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
D.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
D.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 100
D.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 100
D.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
D.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
D.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 101
D.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 101
D.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
D.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
D.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 102
D.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 102
D.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
E Taxonomias do Cap´ıtulo 7 do Tutorial ICC 104
E.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
E.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 104
E.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 104
E.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
E.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
E.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 105
E.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 105
E.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
E.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
E.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 106
E.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 107
E.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
x
Lista de Tabelas
3.1 Categorias de STIs, segundo Murray (1999) . . . . . . . . . . . . . . . . . 13
xi
Lista de Figuras
3.1 Componentes de um STI, segundo Beck et al. (1996) . . . . . . . . . . . . 10
4.1 Representa¸c˜ao de taxonomia com duas caracter´ısticas remov´ıveis . . . . . . 16
4.2 Representa¸c˜ao de taxonomia com trˆes caracter´ısticas remov´ıveis . . . . . . 16
4.3 Representa¸c˜ao de taxonomia sem n´o sem caracter´ısticas . . . . . . . . . . . 17
4.4 Representa¸c˜ao de uma taxonomia n˜ao-ortogonal . . . . . . . . . . . . . . . 18
4.5 Screenshot da applet Java executando um “tira-teima” . . . . . . . . . . . 19
4.6 Exemplo de roteiro de “tira-teima” . . . . . . . . . . . . . . . . . . . . . . 20
4.7 Representa¸c˜ao da localiza¸c˜ao do aluno na taxonomia . . . . . . . . . . . . 21
xii
Siglas e Acrˆonimos
ACM Association of Computing Machinery
AIS Association for Information Systems
CALS computer-assisted learning1
CALS computer-assisted learning system
EaD educa¸c˜ao a distˆancia2
HTML Hypertext Markup Language
HTTP Hypertext Transfer Protocol
IEEE Institute of Electrical and Electronics Engineers
IEEE-CS IEEE Computer Society
ICC Introdu¸c˜ao `a Ciˆencia da Computa¸c˜ao
ITS intelligent tutoring system
SAAC sistema de aprendizagem auxiliada por computador
STBW sistema tutorial baseado em Web
STI sistema tutorial inteligente
UnB Universidade de Bras´ılia
1
Tamb´em ´e comum a forma, para efeitos gerais equivalente nesta monografia, computer-aideld learning.
2
Tamb´em ´e comum a forma, para efeitos gerais equivalente nesta monografia, ensino a distˆancia.
xiii
Cap´ıtulo 1
Introdu¸c˜ao
A programa¸c˜ao ´e comumente reconhecida como uma habilidade dif´ıcil de se aprender e,
portanto, de se ensinar (Gomes e Mendes, 2007). Al´em desse problema, a procura por
forma¸c˜ao em Ciˆencia da Computa¸c˜ao, Engenharia de Software e outros cursos que exigem
conhecimento de programa¸c˜ao como base cresceu bastante a partir dos anos 90 (ACM,
2005, p. 10).
Uma poss´ıvel solu¸c˜ao para o grande aumento da demanda dos cursos de programa¸c˜ao
´e o uso dos chamados sistemas tutoriais baseados em Web (STBW), que tˆem mostrado
bons resultados quando complementado por canais pelos quais alunos e professores podem
se comunicar e esclarecer d´uvidas (Brusilovsky et al., 1998, p. 2). A vantagem dos cursos
baseados na Web para o problema de forma¸c˜ao em maior escala ´e que esses cursos podem
ser acessados de qualquer lugar por uma grande quantidade de alunos. Al´em disso, cursos
baseados em Web permitem que os estudantes aprendam os pontos b´asicos de seus cursos
sem exigir acompanhamento constante do professor, que pode se concentrar nas d´uvidas
mais complicadas e nos alunos com mais dificuldades, desde que o material on-line possa
se adaptar aos estudantes e seus backgrounds (Brusilovsky et al., 1998, p. 2).
V´arios experimentos j´a foram ou est˜ao sendo feitos para avaliar a viabilidade do uso de
cursos baseados na Web para o ensino de programa¸c˜ao, como, por exemplo, Chen (2005),
Ferrandin e Stephani (2005), Carlson (2004) e dos Santos e Costa (2005). Esse presente
trabalho pretende evoluir um sistema em funcionamento. Esse sistema ´e chamado Tutorial
ICC e ´e utilizado no ensino de programa¸c˜ao para as turmas de Introdu¸c˜ao `a Ciˆencia da
Computa¸c˜ao da Universidade de Bras´ılia.
Mais especificamente, nossa abordagem ser´a acrescentar alguma flexibilidade ao tu-
torial. Nosso planejamento inicial ´e tornar Tutorial ICC n˜ao exatamente um sistema
tutorial inteligente (STI) no sentido estrito, mas tentar aplicar os conceitos inerentes a
esse tipo de sistema de uma maneira b´asica. Em especial, nosso foco ser´a oferecer um
sistema de exemplos alternativos ao estudante. Essa ´e uma decis˜ao promissora porque j´a
foi obtido sucesso consider´avel com essa abordagem no ensino do uso de bibliotecas na
pr´opria Universidade de Bras´ılia (P´ıccolo, 2006).
1
1.1 Problemas e Justificativa
Embora programa¸c˜ao seja uma das atividades fundamentais na Ciˆencia da Computa¸c˜ao,
muitos estudantes tem grandes dificuldades para aprender a programar (Jenkins, 2003;
Gomes e Mendes, 2007). Por outro lado, a demanda por cursos que exigem conhecimento
de programa¸c˜ao tˆem crescido bastante (ACM, 2005). Desse modo, ´e de grande interesse
que se consigam ferramentas educacionais que auxiliem os estudantes no processo de
ensino-aprendizagem de programa¸c˜ao. Tamb´em tem crescido o interesse em ferramentas
que auxiliem o professor a ministrar cursos de programa¸c˜ao a um n´umero crescente de
alunos; em outras palavras, ´e necess´ario criar ferramentas que acrescentem escalabilidade
aos cursos de programa¸c˜ao.
Tem-se tentado satisfazer a necessidade de escalabilidade no ensino de programa¸c˜ao
atrav´es de do uso de ferramentas tutoriais remotas, especialmente sistema tutorial baseado
em Webs (STBWs). Entretanto, cursos remotos podem dificultar a aprendizagem do
aluno, que n˜ao contaria com o apoio constante de um professor. Uma poss´ıvel solu¸c˜ao
para o problema da dificuldade de aprendizagem atrav´es de STBWs ´e permitir que tais
tutoriais se adaptem ao ritmo e necessidade dos estudantes. Isso ´e poss´ıvel, atrav´es do
uso de STIs.
O Tutorial ICC ´e, desde j´a, um STBW que evolui aos poucos para um STI. Este
trabalho d´a mais um passo nessa dire¸c˜ao, a saber, fornecer exemplos que possam ser
utilizados em um STI.
1.2 Objetivos
O objetivo geral deste trabalho ´e desenvolver um conjunto de taxonomias hier´arquicas de
exemplos para o ensino de programa¸c˜ao para os alunos da disciplina Introdu¸c˜ao `a Ciˆencia
da Computa¸c˜ao (ICC).
Os objetivos espec´ıficos deste trabalho, por sua vez, s˜ao:
1. identificar conceitos e habilidades que estudantes de programa¸c˜ao podem ter difi-
culdade de apreender;
2. desenvolver exemplos, enunciados, programas e representa¸c˜oes gr´aficas da execu¸c˜ao
de programas que exercitem os conceitos e habilidades identificados.
3. desenvolver uma representa¸c˜ao gr´afica das taxonomias hier´arquicas, para auxiliar o
aluno a se localizar em uma determinada taxonomia.
1.3 Metodologia
Propusemos e implementamos uma s´erie de taxonomias de exemplos organizada hierarqui-
camente em n´ıveis de dificuldade. Essa taxonomia foi influenciada tamb´em por pesquisas
publicadas, mas em sua maior parte ´e a aplica¸c˜ao do conhecimento emp´ırico e longa
2
experiˆencia de professores de programa¸c˜ao da Universidade de Bras´ılia (UnB). H´a uma
taxonomia para cada cap´ıtulo atual do Tutorial ICC, exceto o primeiro e o ´ultimo (oitavo).
Para desenvolver uma taxonomia, identificamos os conceitos e habilidades que estu-
dantes de programa¸c˜ao podem ter dificuldade de apreender em um determinado cap´ıtulo.
Concebemos, ent˜ao, problemas que exercitem cada um dos conjuntos de conceitos pro-
postos.
Para cada um desses problemas, desenvolvemos vers˜oes simplificadas de modo a criar
´arvores de problemas em que cada problema exercita um subconjunto dos conjuntos de
conceitos. Escrevemos, ent˜ao, enunciados para cada um dos problemas, incluindo os
problemas que exercitem todos os conceitos de um conjunto.
Uma vez que tivemos um conjunto de enunciados que podiam apresentar os conceitos
escolhidos, programamos solu¸c˜oes para os enunciados, em Pascal. Criamos tamb´em scripts
que, aliados com uma applet em Java j´a desenvolvida, permitem representar graficamente
a execu¸c˜ao dos programas escritos.
Por fim, integramos os enunciados, os programas e os scripts gerados para cada
cap´ıtulo ao Tutorial ICC. Tamb´em desenvolvemos e implantamos uma representa¸c˜ao
gr´afica das taxonomias hier´arquicas, para auxiliar o aluno a se localizar em uma de-
terminada taxonomia.
1.4 Resultados esperados
Ao final deste trabalho, temos uma taxonomia de exemplos implementada para os cap´ıtulos
2, 3, 4, 5, 6 e 7 do Tutorial ICC. Essas taxonomias s˜ao um primeiro passo para trabalhos
futuros que envolvam a flexibiliza¸c˜ao e automatiza¸c˜ao da interface do Tutorial ICC em
prol de torn´a-lo cada vez mais dotado de inteligˆencia.
3
Cap´ıtulo 2
O Ensino de Programa¸c˜ao
Embora programa¸c˜ao seja uma das atividades fundamentais na Ciˆencia da Computa¸c˜ao,
muitos estudantes tˆem grande dificuldade para aprender a programar (Jenkins, 2003;
Gomes e Mendes, 2007). Desse modo, ´e de grande interesse conseguir ferramentas educa-
cionais que auxiliem no processo de ensino-aprendizagem de programa¸c˜ao. Neste cap´ıtulo,
apresentaremos algumas das quest˜oes e dificuldades sobre ensinar a programar.
2.1 A dificuldade de ensinar a programar
Aprender e ensinar a programar s˜ao tarefas dif´ıceis. Grande n´umero de estudantes de
Computa¸c˜ao consideram muito dif´ıcil aprender programa¸c˜ao, mesmo em etapas avan¸cadas
do curso. Essa ´e uma situa¸c˜ao preocupante para o ensino de Computa¸c˜ao: programa¸c˜ao
´e um componente b´asico, ou mesmo uma ferramenta indispens´avel para se compreender
v´arias ´areas da disciplina. O ensino de programa¸c˜ao ´e objeto de diversos estudos que
buscam reduzir essa dificuldade, mas h´a poucas evidˆencias de que se tenham conseguido
avan¸cos significativos na aprendizagem (Jenkins, 2003).
V´arias raz˜oes foram apontadas para essas dificuldades. Por vezes, afirma-se que o
problema n˜ao ´e que aprender a programar seja dif´ıcil em si, mas sim que certos alunos
tˆem dificuldades, por n˜ao terem algumas habilidades necess´arias para programar bem
desenvolvidas, como habilidades matem´aticas ou para solu¸c˜ao de problemas. Entretanto,
Jenkins (2003) considera os resultados de pesquisas nesse sentido inconclusivos: enquanto
alguns trabalhos de fato mostram alguma correla¸c˜ao entre o dom´ınio de certas habilida-
des e a maior ou menor facilidade em aprender a programar (por exemplo, Byrne e Lyons
(2001)), outros estudos indicam que n˜ao h´a tal correla¸c˜ao (Jenkins e Davy, 1999). De
qualquer forma, essas habilidades n˜ao s˜ao necessariamente inatas, podendo ser desen-
volvidas; Gomes e Mendes (2007), por exemplo, consideram como problema a falta de
treinamento pr´evio do estudante em matem´atica e l´ogica, n˜ao uma dificuldade inata; de
fato, a escolha do estudante por um curso de Ciˆencia da Computa¸c˜ao ou correlato ´e um
ind´ıcio de que ele j´a tem consider´avel interesse na ´area de ciˆencias matem´aticas1
.
1
Temos constatado empiricamente que alguns estudantes escolhem o curso com uma vis˜ao preliminar
errˆonea da Computa¸c˜ao, e esses mesmos estudantes tˆem s´erias dificuldades em aprender a programar.
4
2.2 Fatores cognitivos
V´arios fatores cognitivos s˜ao relevantes para a maior ou menor facilidade na aprendizagem
de programa¸c˜ao. O primeiro fator s˜ao os estilos de aprendizagem. Estudantes aprendem
de maneiras diferentes: estudando sozinho ou em grupo, estudando em detalhes ou su-
perficialmente a disciplina. V´arios componentes de uma disciplina podem exigir maneiras
diferentes de se estudar. Usualmente, estudantes tendem a escolher os estilos que melhor
lhes serviram previamente para aprender algo, mas esse estilo pode n˜ao ser adequado para
um determinado ponto do estudo de programa¸c˜ao (Jenkins, 2003).
Como exemplo, consideremos os estilos de aprendizagem classificados como aborda-
gem aprofundada e abordagem superficial. A abordagem aprofundada ´e aquela na qual o
estudante busca pela compreens˜ao do t´opico, enquanto a abordagem superficial ´e aquela
na qual o estudo resume-se a pouco mais que memorizar as informa¸c˜oes. Programa¸c˜ao
´e uma atividade que exige o uso de ambas as abordagens: enquanto ´e necess´ario um
conhecimento m´ınimo, mesmo que vago, das regras l´exicas e sint´aticas da linguagem de
programa¸c˜ao utilizada, uma compreens˜ao profunda da semˆantica e dos conceitos abstra-
tos sobre programa¸c˜ao ´e exigido. No caso, n˜ao s´o ´e necess´ario que se utilize ambas as
abordagens em v´arios pontos da disciplina; ´e exigido que ambas as abordagens sejam
utilizadas ao mesmo tempo (Jenkins, 2003).
Os estilos de aprendizagem podem tamb´em variar de acordo com os tipos psicol´ogicos.
Alunos tˆem estilos de aprendizagem diferentes, que influenciam em seus m´etodos e pre-
ferˆencias de estudo. Alguns preferem pensar em termos mais abstratos, enquanto outros
podem preferir conceitos mais concretos e aplicados; alguns alunos preferem m´etodos
sistem´aticos de estudos, enquanto outros “deixam-se levar” pelo tema (Keirsey, 1998).
Ocorre que programa¸c˜ao exige tanto racioc´ınio abstrato quanto concreto; por vezes, exige
m´etodo r´ıgido e, noutras, experimenta¸c˜ao avulsa. Inclusive, h´a problemas que s˜ao mais
facilmente resolv´ıveis de uma forma que de outra. O estudante, por´em, usualmente es-
colhe explorar o tema da programa¸c˜ao apenas atrav´es da maneira que mais lhe agrada,
e tenta utilizar sua abordagem preferida sem considerar o car´ater do problema. Uma
pesquisa preliminar focando no estilo de aprendizagem do aluno, com poss´ıvel aplica¸c˜ao
futura no Tutorial ICC, foi desenvolvido por Chaves J´unior e Bastos (2008). Outras pes-
quisas poder˜ao abordar as pr´aticas necess´arias na aprendizagem de programa¸c˜ao, dando
um primeiro passo no trabalho sobre as diversas maneiras de estudar de cada tipo de
estilo de aprendizagem.
Outro fator importante — e problem´atico — no estudo de programa¸c˜ao ´e a motiva¸c˜ao.
Enquanto v´arios alunos aprendem a programar por vontade pr´opria e interesse pessoal
— em outras palavras, por motiva¸c˜ao intr´ınseca —, outros estudantes o fazem em busca
de uma carreira financeiramente rent´avel ou apenas para obter diploma em um curso
superior qualquer — ou seja, por motiva¸c˜ao extr´ınseca. Previsivelmente, alunos com mo-
tiva¸c˜oes intr´ınsecas apresentam um desempenho melhor em aprendizagem que alunos com
motiva¸c˜oes extr´ınsecas. Entretanto, a motiva¸c˜ao extr´ınseca n˜ao ´e, de maneira alguma,
Entretanto, tais estudantes s˜ao uma minoria e, afinal, v´arios dos estudantes que demonstram grande
habilidade em diversas outras ´areas da Computa¸c˜ao tamb´em tˆem dificuldades espec´ıficas em solucionar
problemas com c´odigo.
5
um empecilho para a aprendizagem, de modo que estudantes com tais interesses n˜ao s˜ao
“casos perdidos” (Jenkins, 2003).
Al´em disso, existem diversos “ bugs” conceituais que afetam a maneira como pro-
gramadores iniciantes programam e lˆeem programas. Por exemplo, ´e usual que o aluno
imagine que o programa ´e, em certo sentido, executado de uma vez s´o — o que ´e usu-
almente chamado de “bug” de paralelismo; tamb´em ocorre de programadores iniciantes
lerem instru¸c˜oes de c´odigo subentendendo inten¸c˜oes e n˜ao apenas seu significado (“bug”
de intencionalidade) ou de escreverem c´odigo que em seu racioc´ınio produza o efeito de-
sejado, mas que possui menos semˆantica que a necess´aria (“bug” de egocentrismo) (Pea,
1986). A cataloga¸c˜ao e estudo desses “bugs” j´a vem de longo tempo e inclui artigos como
Pea (1986) e Spohrer e Soloway (1986).
2.3 Fatores pedag´ogicos
Os professores de programa¸c˜ao tˆem um grande desafio: ensinar uma disciplina extrema-
mente jovem. O corpo de conhecimento sobre o processo did´atico do ensino de Com-
puta¸c˜ao ´e ainda pequeno quando comparado a outras disciplinas mais bem estabelecidas,
como ´Algebra e C´alculo. Isso ´e especialmente verdadeiro quando se trata de programa¸c˜ao,
uma atividade cheia de idiossincrasias e peculiaridades que a colocam no meio do caminho
entre a ´Algebra e alguma engenharia.
Entretanto, isso n˜ao implica que n˜ao temos base alguma para come¸car a desenvolver e
propor um modelo de ensino de programa¸c˜ao. J´a h´a pesquisa na busca de uma metodo-
logia confi´avel de ensino de programa¸c˜ao, e muitas das raz˜oes das dificuldades do ensino
de programa¸c˜ao j´a s˜ao conhecidas, ao menos superficialmente.
Por exemplo, v´arios cursos de programa¸c˜ao tendem a dar ˆenfase no ensino da lingua-
gem de programa¸c˜ao, e n˜ao na programa¸c˜ao em si (Gomes e Mendes, 2007), ao ponto de
v´arias institui¸c˜oes terem uma s´erie de cursos de “Programa¸c˜ao”, cada um ensinando uma
linguagem diferente. A escolha da linguagem de programa¸c˜ao que suportar´a os exemplos
de um curso comumente ´e guiada pela linguagem mais popular na ind´ustria no momento,
ao inv´es de considerar fatores did´aticos (Jenkins, 2003). Isso pode ser problem´atico, dado
que a linguagem de programa¸c˜ao ´e uma nota¸c˜ao e, portanto, pode fazer uma dr´astica dife-
ren¸ca na transmiss˜ao de conceitos (Iverson, 1980). Por isso linguagens de programa¸c˜ao de
car´ater did´atico, como Pascal (Wirth, 1972) e Logo (Pea, 1983), e ambientes que reduzam
as dificuldades do aluno s˜ao didaticamente importantes (Jenkins, 2003)(Gomes e Mendes,
2007).
O contexto em que o estudante acaba de adentrar tamb´em dificulta a aprendizagem.
´E usual que o ensino de programa¸c˜ao seja um dos primeiros cursos que um aluno de
Computa¸c˜ao (ou alguma ´area relacionada ou dependente) tenha durante sua gradua¸c˜ao.
O aluno, inexperiente, ao lidar com t˜ao complexa disciplina, tem ainda mais dificuldades
de aprender. Muitos autores consideram que o posicionamento de ensino de programa¸c˜ao
na grade curricular ´e excessivamente adiantado (Jenkins, 2003)(Gomes e Mendes, 2007)2
.
2
Nossa experiˆencia pessoal nos d´a uma vis˜ao diversa: n´os, quando estudantes, ouvimos muitos cole-
gas de turma reclamarem do quanto se demorava para aprender a programar e para chegar aos cursos
6
Por fim, podemos citar tamb´em a grande heterogeneidade de estudantes nas turmas
de programa¸c˜ao. Como o curso de programa¸c˜ao ´e um dos primeiros a serem ministrados,
h´a em suas turmas estudantes dos mais diversos backgrounds e perfis. Como tais cursos
n˜ao raramente ainda seguem uma estrutura bastante tradicional de aula expositiva, seus
professores n˜ao disp˜oem de tempo e energias suficientes para atender pessoalmente cada
um dos alunos. De fato, a falta de personaliza¸c˜ao nos cursos e o desgaste do professor
s˜ao apontadas por v´arios pesquisadores como causas significativas para mau desempenho
de estudantes de programa¸c˜ao (Jenkins, 2003)(Gomes e Mendes, 2007)(Lahtinen et al.,
2005).
2.4 Proposta
A ferramenta que pretendemos expandir — o Tutorial ICC — pode solucionar ou, ao
menos, amenizar v´arios dos problemas que afligem os estudantes e professores de pro-
grama¸c˜ao. A proposta do tutorial, a longo prazo, ´e tornar-se um sistema tutorial dotado
de inteligˆencia, objetivo para o qual esse trabalho oferece mais um pequeno passo. Para
compreender como um sistema tutorial dotado de inteligˆencia pode auxiliar o ensino de
programa¸c˜ao, precisamos ver, antes o que s˜ao sistemas tutoriais inteligentes.
mais avan¸cados e “pr´aticos”. Entretanto, esta ´e apenas uma evidˆencia aned´otica: embora realmente te-
nhamos conhecidos alguns estudantes que reclamassem dessa demora (especialmente em vers˜oes antigas
do curr´ıculo dos nossos cursos), n˜ao sabemos quantos realmente reclamavam. Eis uma ´area digna de
pesquisa.
7
Cap´ıtulo 3
Sistemas Tutoriais Inteligentes
Sistemas tutoriais inteligentes (do inglˆes intelligent tutoring systems) s˜ao sistemas de
aprendizagem auxiliados por computador (SAAC) que se adaptam, sem necessidade de
cont´ınua interven¸c˜ao humana, `as necessidades e ao desempenho do aluno (Self, 1999).
Esses sistemas s˜ao um caso especial dos sistemas de instru¸c˜ao auxiliada por computador
(do inglˆes computer aided instruction) que almejam utilizar tecnologias inform´aticas no
processo de ensino (Freedman, 2000). Tais sistemas se popularizaram bastante nas escolas
e empresas durante os anos 80 e 90, sendo utilizados para transmitir as mais variadas
competˆencias e conhecimentos (Murray, 1999).
O Tutorial ICC evolui para adquirir, se n˜ao o car´ater de um sistema tutorial inteligente
em todos os aspectos, ao menos algumas caracter´ısticas e fun¸c˜oes de sistemas tutoriais
inteligentes, tornando-se um sistema tutorial dotado de inteligˆencia. O corrente trabalho
´e mais um passo nessa dire¸c˜ao.
3.1 Arquitetura de um sistema tutorial inteligente
Um dos aspectos mais importantes de qualquer sistema computacional — inclusive de sis-
temas tutoriais inteligentes — ´e a sua arquitetura. V´arias arquiteturas j´a foram propostas
para sistemas tutoriais inteligentes mas, tradicionalmente, divide-se um sistema tutorial
inteligente em trˆes m´odulos: o m´odulo especialista, o m´odulo do estudante e o m´odulo
do tutor (Self, 1999). Ademais, a maioria das demais arquiteturas s˜ao apenas varia¸c˜oes
isoladas desse modelo.
O m´odulo especialista ´e respons´avel por modelar o conhecimento a ser transmitido.
Trˆes abordagens s˜ao poss´ıveis nesse caso: a cria¸c˜ao de um m´odulo “caixa preta”, um
m´odulo de “caixa de vidro” ou um m´odulo de solu¸c˜ao de problemas. Um m´odulo “caixa
preta” n˜ao codifica a inteligˆencia humana, mas s´o o conhecimento. Desse modo, esse
m´odulo apenas pode fazer compara¸c˜oes entre o conhecimento do estudante e a repre-
senta¸c˜ao do conhecimento interna ao sistema. Esse modelo ´e insuficiente para o ensino,
de modo que sistemas tutoriais inteligentes que fazem uso de tais m´odulos geralmente
incrementam seu desempenho com os chamados m´odulos de solu¸c˜ao de problemas, que
decidem o comportamento do sistema para cada comportamento observado no m´odulo
8
do estudante, com especial ˆenfase em enganos comuns. Alternativas aos m´odulos “caixa
preta”, os m´odulos “caixa de vidro” s˜ao usualmente baseados em formalismos dos co-
nhecimentos a serem apresentados. Seu desenvolvimento no geral depente do aux´ılio de
engenheiros de conhecimento, que ap´os entrevistar especialistas, cria uma representa¸c˜ao
computacinal do conhecimento a ser transmitido (Burns e Capps, 1988).
O m´odulo do estudante tenta simular o comportamento de um estudante, de modo a
poder prever qual o melhor passo a ser dado. No projeto desse m´odulo, Burns e Capps
(1988) chama a aten¸c˜ao para trˆes dimens˜oes a serem levadas em conta. Primeiro, ´e
necess´ario saber que informa¸c˜oes temos sobre o comportamento do usu´ario do sistema. A
maioria dos sistemas tutoriais inteligentes s´o tem acesso `as respostas dadas pelo aluno `as
quest˜oes propostas.1
Segundo, conv´em distinguir qual a categoria do conhecimento que se
tenta transmitir; isto ´e, ´e preciso ter em mente se queremos transmitir um conhecimento
procedural (conhecimento sobre como executar uma tarefa), declarativo (conhecimento
sobre fatos em geral, sem necess´aria aplica¸c˜ao) ou mesmo qualitativo (habilidade em
fazer julgamentos e tirar conclus˜oes de modelos mentais). Por fim, Burns e Capps (1988)
chama a aten¸c˜ao para a necessidade de se distinguir diferen¸cas entre o estudante e o
m´odulo especialista. Tradicionalmente, usa-se a representa¸c˜ao do conhecimento do pr´oprio
m´odulo especialista na implementa¸c˜ao do m´odulo do estudante; sistemas mais avan¸cados,
por´em, tamb´em fornecem uma biblioteca de erros que permitem que o sistema reaja de
maneira mais adequada a erros previstos (Burns e Capps, 1988).
O m´odulo do tutor ´e o m´odulo respons´avel pela integra¸c˜ao entre o m´odulo espe-
cialista e o m´odulo do estudante. Ele ´e o real respons´avel por escolher o fluxo de
apresenta¸c˜ao do conte´udo, assim como por dar sugest˜oes e apresentar corre¸c˜oes de ma-
neira ass´ıncrona. Existem diversas teorias instrucionais utilizadas na constru¸c˜ao de tais
m´odulos (Burns e Capps, 1988).
A esses componentes, Burns e Capps (1988) acrescenta o ambiente de instru¸c˜ao e a
interface homem-m´aquina. O ambiente de instru¸c˜ao ´e o conjunto de ferramentas utilizadas
no processo de transmiss˜ao de conhecimento. Exemplos dessas ferramentas s˜ao jogos,
gr´aficos, anima¸c˜oes etc. Elas comp˜oem um micromundo no qual o aluno explora as
possibilidades do sistema tutorial inteligente. A interface homem-m´aquina ´e o conjunto
de tecnologias utilizado para a comunica¸c˜ao entre o computador e o aluno. O Tutorial
ICC, por exemplo, utiliza a interface Web atrav´es de uma interface de usu´ario gr´afica.
Beck et al. (1996) prop˜oem uma divis˜ao levemente diferente. O conhecimento do
dom´ınio estaria separado do m´odulo especialista: enquanto o conhecimento do dom´ınio se-
ria uma base de dados de conhecimento a ser utilizado, o m´odulo especialista representaria
o conhecimento de uma pessoa especialmente h´abil no tema estudado. O m´odulo espe-
cialista seria, ent˜ao, respons´avel por comparar a solu¸c˜ao dada pelo aluno com a solu¸c˜ao
do especialista. Al´em disso, Beck et al. (1996) apresentam tanto o ambiente de instru¸c˜ao
1
Entretanto, v´arios sistemas tentam captar e processar informa¸c˜oes sobre outros aspectos do compor-
tamento do aluno como, por exemplo, seu estado emocional. Esses sistemas s˜ao denominados sistemas
tutoriais inteligentes afetivos e podem tanto escolher a ordem de apresenta¸c˜ao do conte´udo quanto enviar
mensagens de motiva¸c˜ao ou apoio ao estudante (Nkambou, 2006). Infelizmente, como Murray (1999)
ressalta, sistemas baseados em hiperm´ıdia e Web, como o Tutorial ICC, n˜ao disp˜oem de tais facilidades,
ao menos n˜ao de maneira trivial.
9
quanto a interface homem-m´aquina como um componente s´o: o modelo de comunica¸c˜ao,
que intermedeia a intera¸c˜ao entre a m´aquina e o aluno. A figura 3.1 apresenta as intera¸c˜oes
entre os m´odulos da arquitetura proposta por Beck et al. (1996).
Modelo de estudante M´odulo Pedag´ogico Modelo de Comunica¸c˜ao
Conhecimento de Dom´ınio Modelo de Especialista
T T
&
&
&
&b



}
E
' E
Figura 3.1: Componentes de um STI, segundo Beck et al. (1996)
Uma alternativa com altera¸c˜oes mais significativas ´e a de Gugerty (1997). Gugerty
(1997) prop˜oe a cria¸c˜ao de sistemas tutoriais inteligentes sem m´odulos de estudante.
Tais sistemas seriam, ent˜ao, ferramentas computacionais de aux´ılio a professores. Esses
sistemas s˜ao chamados sistemas tutoriais inteligentes n˜ao-diagn´osticos, em oposi¸c˜ao aos
sistemas tutoriais inteligentes tradicionais que fazem um diagn´ostico do estado afetivo
e/ou cognitivo do estudante. De fato, a experiˆencia tem mostrado que sistemas tutoriais
inteligentes s˜ao caros e dif´ıceis de se desenvolver, embora bastante efetivos (Murray, 1999),
e o m´odulo de estudante ´e a parte mais dif´ıcil de se desenvolver (Burns e Capps, 1988).
Ademais, o estado atual da tecnologia inform´atica ainda n˜ao oferece uma largura de
banda de informa¸c˜oes sobre o usu´ario suficiente para uma avalia¸c˜ao significativa do estado
cognitivo e afetivo do aluno e, no final das contas, os ganhos pedag´ogicos do uso de sistemas
tutoriais inteligentes n˜ao-diagn´osticos s˜ao consider´aveis (Gugerty, 1997). Embora esse
tipo de sistema tutorial fuja do modelo tradicional, ele ´e bastante promissor e pode servir
como referˆencia em v´arios aspectos para o nosso sistema.
Como se percebe, h´a v´arias divergˆencias sobre como organizar a arquitetura de um
sistema tutorial inteligente. Entretanto, essas s˜ao, quase sempre, divergˆencias superficiais:
todos os modelos de sistemas tutoriais inteligentes, de certo modo, derivam da arquitetura
seminal apresentada por Self (1974).
3.2 Categorias de sistemas tutoriais inteligentes
Nosso primeiro passo ser´a tentar situar o Tutorial ICC no estado da arte dos sistemas
tutoriais inteligentes. O que ´e interessante que o Tutorial ICC tenha? O que outros
sistemas nos ensinam?
Uma primeira diferencia¸c˜ao a ser feita ´e entre os sistemas tutoriais inteligentes shell e
tool. Um shell ´e um framework para desenvolvimento de sistemas tutoriais inteligentes; ge-
ralmente, ´e mais voltado para programadores de computadores, que podem customiz´a-los,
e s˜ao mais gen´ericos. J´a tools s˜ao mais voltados para o p´ublico em geral, fornecendo inter-
faces que permitem n˜ao programadores registrarem o conhecimento no sistema (Murray,
1999). Nessa categoriza¸c˜ao, Tutorial ICC ´e claramente um tool.
10
Murray (1999) divide os sistemas tutoriais inteligentes em sete categorias n˜ao ortogo-
nais em fun¸c˜ao dos seus dom´ınios de atua¸c˜ao e ´areas em que seu uso ´e mais adequado.
As categorias, sumarizadas na tabela 3.1, s˜ao as seguintes:
1. Planejamento e sequenciamento de curr´ıculos
Os sistemas tutoriais inteligentes de planejamento e sequenciamento de curr´ıculos
definem unidades de instru¸c˜ao cujo fluxo de apresenta¸c˜ao ´e decidido pelo sistema
de acordo com as necessidades do aluno. Para o estudante, esses sistemas s˜ao muito
semelhantes a sistemas de gerenciamento de cursos (como o Moodle); entretanto, os
sistemas de planejamento e sequenciamento de curr´ıculos podem seguir quaisquer
ordens mais adequadas de apresenta¸c˜ao de conte´udos. A ordem de apresenta¸c˜ao
de conte´udos deve, por´em, ser escolhida pelo sistema de forma automatizada, sem
interferˆencia humana, assim como deve se adequar especificamente ao desempenho
de cada aluno.
2. Estrat´egias tutoriais
Diz-se que um sistema tutorial inteligente tem foco em estrat´egias tutoriais (ou
estrat´egias de ensino) quando tem a capacidade de decidir quais as melhores es-
trat´egias de apresenta¸c˜ao de conte´udo para o aluno. Esses sistemas s˜ao semelhantes
aos sistemas de planejamento e sequenciamento de curr´ıculos, mas agem em um
n´ıvel de abstra¸c˜ao mais baixo. Enquanto os sistemas de planejamento e sequencia-
mento de curr´ıculos tomam decis˜oes sobre quais componentes do fluxo da mat´eria
v˜ao apresentar; sistemas de estrat´egias tutoriais escolhem o melhor momento para
apresentar ferramentas de ensino, e n˜ao s´o conte´udo. Por exemplo, um sistema que
decida explicar mais detalhadamente um determinado t´opico do ensino e escolha
quando apresentar uma determinada explica¸c˜ao ou um exemplo s˜ao sistemas de
estrat´egias tutoriais.
3. Simula¸c˜ao de dispositivos e treinamento em equipamentos
V´arios sistemas tutoriais inteligentes buscam simular certos dispositivos para o estu-
dante. A intera¸c˜ao entre o estudante e o sistema mimetiza o uso de um determinado
dispositivo ou equipamento. Desse modo, esses sistemas, categorizados como siste-
mas de simula¸c˜ao de dispositivos ou sistemas de treinamento em equipamentos, per-
mitem que o estudante possa compreender o funcionamento do dispositivo simulado
sem ter de lidar com o dispositivo em si. Isso ´e especialmente ´util quando se quer
ensinar o uso de equipamentos caros, fr´ageis, perigosos ou inacess´ıveis. Tais sistemas
tamb´em s˜ao interessantes pois permitem que se dˆe uma resposta mais did´atica ao
estudante, ao inv´es do erro real gerado pelo dispositivo.
4. Sistemas especialistas e tutores cognitivos
´E bastante comum o uso de simula¸c˜oes cognitivas em sistemas tutoriais inteligentes.
Sistemas tutoriais inteligentes que usam esse m´etodo possuem um mecanismo de
simula¸c˜ao de cogni¸c˜ao que, baseado em regras, tentam criar um modelo de cogni¸c˜ao
do atual est´agio de conhecimento do aluno. Esse modelo ´e utilizado pelo m´odulo
11
especialista para definir o melhor fluxo de ensino. Esses sistemas s˜ao chamados
de sistemas tutores cognitivos, ou sistemas de modelagem de cogni¸c˜ao. Murray
(1999) p˜oe na mesma categoria tanto esses sistemas quanto os sistemas que fazem
uso de sistemas especialistas para a resolu¸c˜ao de problemas. A diferen¸ca ´e que
sistemas especialistas s˜ao utilizados no m´odulo especialista para encontrar a solu¸c˜ao
de problemas did´aticos e n˜ao para modelar o estado cognitivo do estudante.
5. M´ultiplos tipos de conhecimento
Quanto um sistema tutorial inteligente baseia-se em uma determinada teoria do
conhecimento para escolher a maneira mais adequada de apresentar uma parte do
conte´udo, diz-se que o sistema possui m´ultiplos tipos de conhecimentos. Por exem-
plo, um sistema com m´ultiplos tipos de conhecimento pode dividir o conhecimento
a ser transmitido em trˆes categorias: fatos, conceitos e procedimentos. Cada com-
ponente da habilidade maior a ser ensinada contaria com um m´etodo espec´ıfico de
ensino, dependendo de qual das trˆes categorias acima melhor modela o componente.
Esses sistemas tendem a ser mais f´aceis de configurar, mas s˜ao menos flex´ıveis.
6. Sistemas de prop´osito espec´ıfico
Embora sistemas tutoriais inteligentes gen´ericos tenham atra´ıdo bastante interesse,
tamb´em pode ser interessante projetar sistemas tutoriais inteligentes para ´areas es-
pec´ıficas. N˜ao raramente, sistemas gen´ericos surgem do desenvolvimento de um
sistema espec´ıfico que vai gradativamente se tornando parametriz´avel e reutiliz´avel.
Por um lado, esses sistemas de prop´osito espec´ıfico atingem um p´ublico-alvo bem
restrito; por outro lado, podem utilizar ferramentas did´aticas espec´ıficas mais po-
derosas.
7. Hiperm´ıdia adaptativa/inteligente
Com a crescente sofistica¸c˜ao de sistemas de hiperm´ıdia (notadamente, a Web), um
passo natural seria o desenvolvimento de sistemas tutoriais inteligentes baseados
em hiperm´ıdia adaptativa (ou hiperm´ıdia inteligente). De fato, sistemas tutoriais
inteligentes baseados na Web tˆem se tornado predominantes nessa ´area de pesquisa.
Esses sistemas permitem a apresenta¸c˜ao, ordena¸c˜ao, filtragem etc. de links em
fun¸c˜ao de v´arios aspectos da disciplina ou do desempenho do aluno, como fluxo
de apresenta¸c˜ao, dificuldade, adequa¸c˜ao de pr´e-requisitos etc. Comumente, tais
sistemas s˜ao sistemas de planejamento e sequenciamento de curr´ıculo, ou sistemas
de estrat´egias tutoriais com uma interface baseada em hiperm´ıdia.
Embora essa classifica¸c˜ao mais pare¸ca a “enciclop´edia chinesa” de Jorge Luis Bor-
ges (Foucault, 2002) que uma taxonomia tradicional, ela ´e muito ´util. O pr´oprio Murray
a descreve mais como um “saco de dicas” que uma “caixa de ferramentas”. De qual-
quer forma, Tutorial ICC pode se encaixar mais ou menos bem em v´arias dessas ca-
tegorias. Nosso objetivo inicial ´e, a princ´ıpio, torn´a-lo um sistema de planejamento e
sequenciamento de curr´ıculos, ou, mais provavelmente, um sistema de estrat´egias tuto-
riais; naturalmente, podemos torn´a-lo ambos. Do mesmo modo, j´a hoje o Tutorial ICC
12
Categoria Vantagens Desvantagens Varia¸c˜oes
Planejamento
e sequenci-
amento de
curr´ıculos
Executar regras para
sequenciamento de
m´odulos e programas
Pouca fidelidade ao
modelo de estudante;
representa¸c˜ao superfi-
cial de habilidades
As regras podem ser
fixas ou alter´aveis pelo
autor
Estrat´egias
tutoriais
Estrat´egias tutoriais
vari´aveis dentro do
m´odulo; conjunto so-
fisticado de primitivas
e m´ultiplas estrat´egias
tutoriais
Pouca fidelidade ao
modelo de estudante;
representa¸c˜ao superfi-
cial de habilidades
M´etodo de estrat´egia
de representa¸c˜ao,
fonte de expertise
instrucional
Simula¸c˜ao de
dispositivos
e treina-
mento em
equipamentos
Tutoramento de iden-
tifica¸c˜ao de compo-
nentes, opera¸c˜ao e re-
solu¸c˜ao de problemas;
habilidades procedu-
rais
Estrat´egias instrutivas
limitadas; modelagem
de estudante limitada
Fidelidade da si-
tua¸c˜ao, facilidade
de composi¸c˜ao de
tutorial
Sistemas
especialistas
e tutores
cognitivos
Modelo do dom´ınio
de especializa¸c˜ao mais
profundo e execut´avel;
facilidade de inclus˜ao
de erros e comporta-
mento de novato
Dificuldade de cons-
tru¸c˜ao; limita¸c˜ao a ha-
bilidades procedurais
ou de solu¸c˜ao de pro-
blemas; estrat´egias de
instru¸c˜ao limitadas
Modelos de habilidade
baseados em cogni¸c˜ao
ou desempenho
M´ultiplos
tipos de
conhecimento
Representa¸c˜ao clara
e m´etodo instrutivos
pr´e-definidos para
fatos, conceitos e
procedimentos
Limitado a fatos, con-
ceitos e procedimentos
simples; estrat´egias
tutoriais pr´e-definidas
Inclus˜ao de sequenci-
amento curricular in-
teligente; varia¸c˜ao dos
tipos de conhecimento
e tarefas suportados
Sistemas de
prop´osito
espec´ıfico
Modelos de sistemas
provˆeem uma grande
ajuda na composi¸c˜ao
do conte´udo; um
projeto ou princ´ıpio
pedag´ogico espec´ıfico
pode ser enfatizado
Ferramentas limitadas
ao tipo de tutor que
suportam; inflexibili-
dade na representa¸c˜ao
e pedagogia
Grau de inflexibili-
dade
Hiperm´ıdia
adaptati-
va/inteligente
Acess´ıvel pela Web;
uniformidade de in-
terface de usu´ario;
sele¸c˜ao adaptativa e
anota¸c˜ao de hiper-
liga¸c˜ao
Intera¸c˜ao limitada;
largura de banda de
resposta de modelo de
estudante limitada
Foco em micro ou ma-
crovis˜ao; grau de inte-
ratividade.
Tabela 3.1: Categorias de STIs, segundo Murray (1999)
13
fornece simula¸c˜oes de um computador, tornando-o um potencial sistema de simula¸c˜ao
de dispositivos. Como programa¸c˜ao exige o conhecimento de uma s´erie de fatos, concei-
tos e habilidades, ´e tamb´em bem prov´avel que o Tutorial ICC se torne um sistema de
m´ultiplos conhecimentos. Como, afinal, o Tutorial ICC ´e um sistema Web, ele ´e, desde
j´a, um sistema de hiperm´ıdia, e o transformaremos em um sistema de hiperm´ıdia adapta-
tiva. Estudando cada um dos cases apresentados em Murray (1999), podemos encontrar
diversas id´eias para nos auxiliar no nosso projeto.
3.3 Vantagem dos sistemas tutoriais inteligentes
Os sistemas de aprendizagem auxiliada por computador (SAAC) fornecem uma s´erie de
vantagens aos professores e estudantes de programa¸c˜ao. Por exemplo, dado o aumento
na demanda por cursos focados em Tecnologia da Informa¸c˜ao, o n´umero de aluno nas
turmas de disciplinas de programa¸c˜ao tende a crescer bastante, como comentamos no
cap´ıtulo 1; SAACs permitem que as partes mais f´aceis de assimilar do conte´udo dessas
disciplinas sejam ministradas em massa para os alunos, permitindo que o professor se
desgaste menos e foque mais em ajudar os alunos com mais dificuldades. De modo an´alogo,
estes sistemas viabilizam cursos de educa¸c˜ao a distˆancia (EaD). Tais sistemas tamb´em
permitem que o aluno possa estudar em seu pr´oprio ritmo, algo que pode ser bastante
positivo para a aprendizagem, conforme comentado na se¸c˜ao 2.3. O Tutorial ICC, sobre
o qual trabalhamos, ´e um exemplo sistema de aprendizagem auxiliada por computador
(SAAC).
Entretanto, SAACs tˆem desvantagens. Uma destas desvantagens ´e a despersonaliza¸c˜ao
do ensino. Mesmo cursos tradicionais de programa¸c˜ao n˜ao alcan¸cam o ideal de cursos
personalizados, com foco nas dificuldades dos alunos; SAACs tradicionais tendem a ser
ainda mais problem´aticos. De modo an´alogo, estes sistemas n˜ao se adaptam ao ritmo de
aprendizagem e estilo de estudo dos estudantes.
T´ecnicas de desenvolvimento de STIs podem ser utilizadas em SAACs para tentar su-
perar essas desvantagens. De fato, v´arios STIs se adaptam ao ritmo, estilo e personalidade
do aluno. A m´edio prazo, espera-se que o Tutorial ICC torne-se adapt´avel aos diversos
n´ıveis de dificuldade dos alunos.
3.4 O papel do trabalho corrente
Neste trabalho, nosso objetivo ´e prover ao Tutorial ICC uma s´erie de exemplos, orga-
nizados em taxonomias de exemplos hier´arquicas, que permitam que alunos em diversos
est´agios e ritmos de aprendizagem analisar cen´arios simples e complexos de acordo com
sua pr´opria capacidade. Esses cen´arios devem conter um enunciado, uma solu¸c˜ao em
c´odigo-fonte Pascal e um script de execu¸c˜ao de “tira-teima”, que representa graficamente
a execu¸c˜ao do programa, atrav´es de uma applet Java. Tamb´em faz parte do trabalho uma
representa¸c˜ao da posi¸c˜ao do aluno na taxonomia.
A maneira como essas tarefas foram desenvolvidas ´e apresentadas no cap´ıtulo 4.
14
Cap´ıtulo 4
Taxonomias de Exemplos
Afora os exemplos desenvolvidos e integrados ao Tutorial ICC, um dos principais resulta-
dos deste trabalho ´e o m´etodo de desenvolvimento de uma forma de estruturar problemas
que denominamos taxonomias hier´arquicas de exemplos. O m´etodo envolve uma s´erie de
passos, seus pr´oprios termos e algumas recomenda¸c˜oes. Abaixo, seguem estes resultados.
4.1 Taxonomia hier´arquica de exemplos
Uma taxonomia ´e, literalmente, a ciˆencia ou t´ecnica de classifica¸c˜ao (Houaiss et al., 2001,
pp. 2680—2681). No nosso trabalho, uma taxonomia de exemplos ´e uma classifica¸c˜ao
de um conjunto de exemplos; por extens˜ao, uma taxonomia de exemplos ´e tamb´em um
conjunto de exemplos organizados segundo uma determinada classifica¸c˜ao. Por sua vez,
uma taxonomia hier´arquica de exemplos ´e uma taxonomia na qual os exemplos s˜ao orga-
nizados de forma estruturada, como ´arvores. Tamb´em dizemos, neste trabalho, que uma
taxonomia hier´arquica ´e uma ´arvore de exemplos, de modo que ´e poss´ıvel que nos refi-
ramos a alguma propriedade de ´arvores, mas se referindo a uma taxonomia hier´arquica.
Como trataremos apenas de taxonomias hier´arquicas de exemplos, toda vez que usarmos
o termo “taxonomia” o significado ser´a “taxonomia de exemplos hier´arquica”.
Cada taxonomia exemplifica o uso de um conjunto de caracter´ısticas remov´ıveis. Uma
caracter´ıstica remov´ıvel ´e um conceito, t´ecnica ou padr˜ao que o estudante deve aprender.
A raiz da ´arvore da taxonomia deve utilizar todas as caracter´ısticas remov´ıveis; seus
n´os diretamente subordinados devem explorar subconjuntos diferentes das taxonomias
da raiz, e os filhos desses n´os apresentar˜ao subconjuntos dos subconjuntos que seus pais
apresentam.
Na pr´atica, n´os utilizamos taxonomias com duas ou trˆes caracter´ısticas remov´ıveis.
Se a taxonomia tiver duas caracter´ısticas remov´ıveis, os n´os filhos da raiz dever˜ao ter,
cada um, uma caracter´ıstica. Parece natural que cada um desses n´os tenha ele mesmo
um n´o filho sem nenhuma caracter´ıstica; entretanto, n˜ao seria muito did´atico fazer o
estudante descer mais um n´ıvel nos exemplos para observar um exemplo que sequer apre-
senta uma das caracter´ısticas da ´arvore. Deste modo, o n´o que n˜ao cont´em nenhuma
15
das caracter´ısticas remov´ıveis torna-se filho do n´o principal. A figura 4.1 apresenta uma
representa¸c˜ao gr´afica dessa ´arvore. O travess˜ao ´e o r´otulo do n´o sem caracter´ısticas.


C1, C2


—












C1


C2










Figura 4.1: Representa¸c˜ao de taxonomia com duas caracter´ısticas remov´ıveis
Se a taxonomia tiver trˆes caracter´ısticas remov´ıveis, o exemplo raiz deve usar as trˆes. A
raiz teria, usualmente, trˆes n´os filhos, cada um apresentando duas das trˆes caracter´ısticas
remov´ıveis. Esse n´o filho ´e, por sua vez, raiz de uma sub´arvore que tem a estrutura de uma
taxonomia de duas caracter´ısticas remov´ıveis. A figura 4.2 apresenta uma representa¸c˜ao
gr´afica dessa ´arvore. O travess˜ao ´e o r´otulo do n´o sem caracter´ısticas.


C1, C2, C3


C1, C2
D
D
D
D
D
D
D
D
D


C1, C3


C2, C3
l
l
l
l
l
l
l
l
l


—








C1


C2
v
v
v
v
v
vv


—








C1


C3
v
v
v
v
v
vv


—








C2


C3
v
v
v
v
v
vv
Figura 4.2: Representa¸c˜ao de taxonomia com trˆes caracter´ısticas remov´ıveis
Se uma taxonomia tem uma das estruturas apresentadas acima, dizemos que ´e uma
taxonomia totalmente preenchida. Embora tenhamos focado em gerar taxonomias total-
mente preenchidas, nem sempre ´e poss´ıvel ou interessante “for¸car” o total preenchimento
16
de uma taxonomia. Por exemplo, muitas vezes o exemplo sem caracter´ısticas remov´ıveis
em uma taxonomia pode ser simples demais e n˜ao precisa ser apresentado. Isto ocorre co-
mumente com taxonomias de trˆes caracter´ısticas, e a ´arvore resultante possui a estrutura
representada na figura 4.3. A se¸c˜ao 5.2 apresenta uma taxonomia com esta estrutura.


C1, C2, C3


C1, C2
D
D
D
D
D
D
D
D
D


C1, C3


C2, C3
l
l
l
l
l
l
l
l
l


C1
¢
¢
¢
¢
¢
¢¢


C2
f
f
f
f
f
ff


C1
¢
¢
¢
¢
¢
¢¢


C3
f
f
f
f
f
ff


C2
¢
¢
¢
¢
¢
¢¢


C3
f
f
f
f
f
ff
Figura 4.3: Representa¸c˜ao de taxonomia sem n´o sem caracter´ısticas
Outro caso de ´arvore n˜ao totalmente preenchida ocorrem quando ao menos uma ca-
racter´ıstica remov´ıvel s´o pode ser apresentada se uma outra qualquer estiver presente.
Por exemplo, considere uma ´arvore de trˆes caracter´ısticas remov´ıveis C1, C2 e C3 tal que,
para C3 estar presente em um exemplo, ´e necess´ario que ou C1 ou C2 tamb´em estejam
presentes. N˜ao h´a exemplos que exercitem apenas C3. A estrutura da taxonomia ´e a apre-
sentada na figura 4.4, e a se¸c˜ao 5.4 apresenta uma taxonomia na qual esta configura¸c˜ao
ocorre.
Dizemos que essas caracter´ısticas remov´ıveis s˜ao caracter´ısticas n˜ao-ortogonais entre
si pois elas se influenciam; em contraposi¸c˜ao, caracter´ısticas remov´ıveis que podem estar
presentes em um exemplo independente das outras s˜ao chamadas de caracter´ısticas ortogo-
nais entre si. Se uma taxonomia ´e constru´ıda apenas a partir de caracter´ısticas ortogonais
— isto ´e, todas as caracter´ısticas que geram a taxonomia s˜ao ortogonais entre si —, ela
´e dita uma taxonomia ortogonal; caso contr´ario, ´e chamada de taxonomia n˜ao-ortogonal.
Em geral, nossa experiˆencia indicou que taxonomias n˜ao-ortogonais s˜ao mais complexas
de criar e, ao que tudo indica, menos claras, didaticamente falando. Enquanto ´e perfeita-
mente razo´avel construir taxonomias n˜ao totalmente preenchidas, construir taxonomias
n˜ao-ortogonais n˜ao ´e o ideal.
17
C1, C2, C3


C1, C2
D
D
D
D
D
D
D
D
D


C1, C3


C2, C3
l
l
l
l
l
l
l
l
l


C1
¢
¢
¢
¢
¢
¢¢


C2
f
f
f
f
f
ff


C1


C2
Figura 4.4: Representa¸c˜ao de uma taxonomia n˜ao-ortogonal
4.2 Enunciados e solu¸c˜oes
Dados os conceitos apresentados na se¸c˜ao 4.1, o processo para o desenvolvimento de ta-
xonomias de problemas pˆode ser facilmente definido. Primeiro, defin´ıamos conjuntos de
duas ou trˆes caracter´ısticas remov´ıveis — idealmente, conjunto de caracter´ısticas que
usualmente aparecem de fato pr´oximas em problemas reais e que fossem caracter´ısticas
ortogonais entre si. Para cada um desses conjuntos, elaboramos um enunciado que possi-
bilite apresentar todas as caracter´ısticas, assim como enunciados que permitam apresentar
apenas subconjuntos das caracter´ısticas, formando uma taxonomia hier´arquica. Para cada
um dos enunciados, elaboramos um pequeno programa que resolva o problema.
A elabora¸c˜ao de enunciados apresenta uma s´erie de quest˜oes. Por exemplo, qual ´e
o melhor estilo: enunciados que apresentem problemas da vida real, ou enunciados abs-
tratos? Conforme comentamos na se¸c˜ao 2.2, h´a estudantes que lidariam melhor com um
estilo, enquanto outros apreciariam mais o outro — e nem consideramos outros parˆametros
que variam em fun¸c˜ao do tipo de personalidade! Nossa abordagem foi experimentar enun-
ciados de ambos os estilos. Em breve, poderemos avaliar os resultados1
.
Outra quest˜ao foi: como exercitar bugs conceituais dos estudantes? Na se¸c˜ao 2.2
comentamos que h´a v´arios enganos que estudantes cometem recorrentemente. Esses en-
ganos podem servir de guia para os exemplos, mas ainda h´a o desafio de inseri-los em
enunciados. Do mesmo modo, h´a padr˜oes de programa¸c˜ao importantes e ´uteis que os
1
Um estilo que pode ser promissor s˜ao os enunciados baseados em abstra¸c˜oes com estado, especialmente
jogos, como o Jogo da Vida, Snake ou Tetris. De fato, em conversas e observa¸c˜oes aned´oticas com calouros,
notamos que esses problemas s˜ao especialmente apreciados.
18
estudantes devem conhecer, e deve haver enunciados que os apresentem. Em verdade,
bugs conceituais e padr˜oes importantes s˜ao boas caracter´ısticas remov´ıveis.
Tamb´em se questionou qual deve ser a rela¸c˜ao entre os enunciados de uma taxono-
mia. Os enunciados devem ser independentes ou relacionados? Nossa hip´otese ´e que os
enunciados devem ser relacionados, e os mais simples devem ser vers˜oes ou “passos” dos
enunciados mais completos. Isto, supomos, mant´em o estudante no contexto mental do
problema, facilitando sua compreens˜ao.
Uma vez definidos os enunciados, devemos desenvolver os programas que os soluci-
onam. A linguagem de programa¸c˜ao em que foram solucionados foi aquela j´a utilizada
no Tutorial ICC: Pascal. Pascal ´e uma boa escolha tamb´em porque ´e uma linguagem
did´atica, como explicado na se¸c˜ao 2.3.
Um desafio na cria¸c˜ao dos enunciados ´e: como criar um enunciado que “force” —
isto ´e, torne mais natural — o aluno a utilizar as caracter´ısticas que queremos? Depois
de criarmos algumas taxonomias, notamos que esta ´e uma quest˜ao secund´aria: embora
seja realmente interessante criar enunciados que levem intuitivamente `as caracter´ısticas
remov´ıveis escolhidas, s˜ao os desenvolvedores das taxonomias que escolhem como soluci-
onar˜ao os enunciados. Isto ´e interessante de se ter em mente porque, por vezes, alguns
enunciados tornam-se pouco intuitivos para for¸car a solu¸c˜ao de um problema em uma
determinada dire¸c˜ao. Este esfor¸co, por´em, n˜ao ´e necess´ario. A taxonomia apresentada na
se¸c˜ao 5.2 ´e um bom exemplo pr´atico disso.
Figura 4.5: Screenshot da applet Java executando um “tira-teima”
19
4.3 “Tira-teima” e roteiros
Um dos recursos mais not´aveis do Tutorial ICC s˜ao os “tira-teimas”: representa¸c˜oes
gr´aficas da execu¸c˜ao de um programa. Esses “tira-teimas” s˜ao apresentados atrav´es de
uma applet Java, apresentada na figura 4.5. Os “tira-teimas” s˜ao compostos de duas
partes: um programa cuja execu¸c˜ao ser´a simulada e um script espec´ıfico que simular´a a
execu¸c˜ao. Denominamos tais scripts de roteiros.
Cada linha de um roteiro inicia com um n´umero inteiro; este n´umero ´e o ´ındice da
linha do programa simulado que ser´a real¸cada no programa quando a linha do roteiro
for executada. Ap´os este ´ındice, podem vir zero ou mais comandos separados por ponto-
e-v´ırgula. Se n˜ao houver nenhum comando a ser executado na linha, apenas o ponto-e-
v´ırgula segue o n´umero; se houver mais de um, os comandos devem vir entre chaves. H´a,
basicamente, comandos de declara¸c˜ao de vari´aveis (que aparecem como caixas coloridas
na applet de tira-teima, comandos de escrita (que imprimem um valor no console da applet
e altera¸c˜ao de valores de vari´aveis. A figura 4.6 apresenta o exemplo do roteiro utilizado
para o exemplo apresentado na se¸c˜ao 5.4.3.1.
1;
3;
4 real a, b;
6;
7 writeln (Digite a parte real:);
8 {writeln (3.0); a = 3.0;}
9 writeln (Digite a parte imaginaria:);
10 {writeln (0.0); b = 0.0;}
11;
18;
19;
22;
23 writeln (3.0 + 0.0i e um real nao -negativo.);
24;
Figura 4.6: Exemplo de roteiro de “tira-teima”
Um roteiro pode percorrer apenas um caminho dentro de um programa. Por exemplo,
se h´a um comando if com uma cl´ausula else no programa, um roteiro pode passar
apenas pela cl´ausula then ou pela cl´ausula else. Isto levanta uma quest˜ao importante:
como escolher o caminho que um roteiro deve percorrer em um programa?
N´os utilizamos alguns crit´erios bem simples para escolher os caminhos. Um, bastante
natural, foi:
Se o programa apresenta apenas uma caracter´ıstica remov´ıvel, o caminho escolhido
deve executar a caracter´ıstica.
20
O programa apresentado na se¸c˜ao 5.1.3.4 por exemplo, possui como caracter´ıstica
remov´ıvel a presen¸ca da cl´ausula else no comando if. O roteiro deste programa iria,
ent˜ao, passar pelo comando da cl´ausula else, ao inv´es de passar pela cl´ausula then.
Outro crit´erio adotado foi:
Dentre dois caminhos poss´ıveis, o roteiro deve passar pelo caminho mais complexo
ou que gere mais sa´ıda para o console da applet.
Este crit´erio foi adotado porque acreditamos que, quanto mais linhas de c´odigo o
estudante observar serem executadas, mais oportunidades haver´a para fixar conceitos.
Al´em disso, execu¸c˜oes sem sa´ıda podem ser bastante confusas: para o iniciante, ´e bem
poss´ıvel que um programa que n˜ao imprima nada pare¸ca um programa que n˜ao fa¸ca nada.
4.4 Localiza¸c˜ao na taxonomia
Os v´arios exemplos s˜ao apresentados em p´aginas HTML separadas, mas sentimos a ne-
cessidade de prover ao estudante uma maneira de ele se localizar em uma determinada
taxonomia. A solu¸c˜ao foi criar imagens de ´arvores, nas quais o exemplo em que o estu-
dante se encontra ´e destacado atrav´es de cores. A figura 4.7 apresenta a representa¸c˜ao de
uma ´arvore.
Figura 4.7: Representa¸c˜ao da localiza¸c˜ao do aluno na taxonomia
21
4.5 Resumo
Dados os conceitos acima, o processo de cria¸c˜ao de taxonomias para um cap´ıtulo pode
ser resumido da seguinte maneira:
1. selecionar conceitos e estruturas relevantes — isto ´e, caracter´ısticas remov´ıveis — a
partir do tema do cap´ıtulo;
2. agrupar as caracter´ısticas remov´ıveis em conjuntos de duas ou trˆes caracter´ısticas.
Idealmente, as caracter´ısticas s˜ao conceitualmente pr´oximas e ortogonais entre si;
3. criar, para cada conjunto agrupado, enunciados que levem a programas que apresen-
tem subconjuntos das caracter´ısticas. Pode-se, eventualmente, n˜ao criar enunciados
para alguns subconjuntos que sejam triviais ou invi´aveis. Os enunciados de uma
taxonomia devem, idealmente, ser vers˜oes mais simples ou mais completas de um
problema;
4. para cada enunciado, desenvolver uma solu¸c˜ao, em linguagem Pascal;
5. para cada solu¸c˜ao, desenvolver um roteiro de “tira-teima”;
6. inserir os programas e roteiros em p´aginas HTML do Tutorial ICC;
7. para cada p´agina, criar uma representa¸c˜ao gr´afica da taxonomia da qual a p´agina
faz parte, e inserir essa representa¸c˜ao na p´agina.
Naturalmente, os passos n˜ao precisam seguir for¸cosamente esta ordem, mas ´e usual
que sejam seguidos assim.
O cap´ıtulo 5 apresenta a aplica¸c˜ao deste processo em um cap´ıtulo do Tutorial ICC.
22
Cap´ıtulo 5
Exemplos de Taxonomias
No tutorial ICC, implementamos sete conjuntos de taxonomias, um para cada um dos
cap´ıtulos do tutorial, a partir do segundo1
.
O primeiro conjunto implementado foram as taxonomias do cap´ıtulo 3. Este cap´ıtulo
trata de estruturas de decis˜ao if-then-else e case-of. Julgamos os conceitos por tr´as
destes comandos sofisticados o suficiente para antevermos alguns desafios da cria¸c˜ao de
taxonomias, mas simples o suficiente para que n˜ao nos perdˆessemos no seu desenvolvi-
mento; por isso, cap´ıtulo 3 do tutorial foi escolhido para o desenvolvimento da primeira
taxonomia.
Chegamos a v´arias conclus˜oes e questionamentos durante a cria¸c˜ao desta taxonomia e,
portanto, elegemos a taxonomia deste cap´ıtulo como um bom exemplo para ser analisado.
5.1 ´Arvore 1
Na primeira ´arvore do cap´ıtulo 3, propomos ao aluno um problema que possa ser resol-
vido com o comando if-then — assim sendo, todos os problemas da ´arvore devem ser
solucionados utilizando a estrutura condicional. As caracter´ısticas remov´ıveis, nesta pri-
meira ´arvore, s˜ao o uso do comando else e a presen¸ca de um comando composto, formado
por v´arios outros comandos agrupados pelos delimitadores de blocos begin-end. Como
h´a duas caracter´ısticas remov´ıveis, essa ´arvore possui dois n´ıveis de hierarquia e quatro
exemplos.
5.1.1 Caracter´ısticas remov´ıveis
C1. uso de blocos begin-end
C2. uso de else
1
O primeiro cap´ıtulo ´e, basicamente, para apresenta¸c˜ao de conceitos sobre computadores. Nesse
sentido, n˜ao h´a como criar uma taxonomia de exemplos de programa¸c˜ao para o cap´ıtulo.
23
5.1.2 Numera¸c˜ao dos exemplos
C1 C2 Exemplo
• • 1 (subse¸c˜ao 5.1.3.1)
– – 1.1 (subse¸c˜ao 5.1.3.2)
• – 1.2 (subse¸c˜ao 5.1.3.3)
– • 1.3 (subse¸c˜ao 5.1.3.4)
5.1.3 Enunciados e programas
5.1.3.1 Exemplo 1
Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro
anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para
pessoas com mais de 25 anos.
Fa¸ca um programa que leia o pre¸co do carro a ser segurado e a idade do motorista. Se
o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor
do seguro. Se o carro valer, por exemplo, R° 20 mil, a mensagem ser´a:
’Valor do seguro: R° 1000.00. ’
Se o motorista n˜ao tiver idade para contratar o seguro, imprima duas linhas. A
primeira linha ser´a:
’Voce nao pode contratar o seguro.’
Supondo que o motorista tenha 22 anos, a segunda linha ser´a:
’podera contaratar em 3 anos.’
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo1;
var
idade : integer;
preco : real;
begin
writeln(’Qual e a sua idade?’);
readln(idade);
writeln(’Qual e o preco de seu carro?’);
readln(preco);
24
if idade = 25
then
writeln(’Valor do seguro: R° ’, preco /20:2:2 , ’.’)
else
begin
writeln(’Voce nao pode contratar o seguro.’);
writeln(’Podera contratar em ’, 25 - idade , ’ anos.’);
end;
end.
5.1.3.2 Exemplo 1.1
Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro
anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para
pessoas com mais de 25 anos.
Fa¸ca um programa que diga se um potencial cliente dessa seguradora pode contratar
um seguro. O programa deve ler a idade do cliente e, caso ele tenha idade para contratar
o seguro, deve imprimir a mensagem:
’Voce pode contratar o seguro.’
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo1_1;
var
idade : integer;
begin
writeln(’Qual e a sua idade?’);
readln(idade);
if idade = 25
then
writeln(’Voce pode contratar o seguro.’);
end.
5.1.3.3 Exemplo 1.2
Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro
anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para
pessoas com mais de 25 anos.
Fa¸ca um programa que diga se um potencial cliente dessa seguradora pode contratar
um seguro. O programa deve ler a idade do cliente e, caso ele n˜ao tenha idade para
contratar o seguro, deve imprimir a mensagem:
25
’Voce nao pode contratar o seguro.’
Al´em disso, deve tamb´em informar quando o cliente ter´a idade para contratar o seguro.
Supondo que o cliente tenha 22 anos, a mensagem ser´a:
’Podera contratar em 3 anos.’
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo1_2;
var
idade : integer;
begin
writeln(’Qual e a sua idade?’);
readln(idade);
if idade  25
then
begin
writeln(’Voce nao pode contratar o seguro.’);
writeln(’Podera contratar em ’, 25-idade ,’ anos.’);
end;
end.
5.1.3.4 Exemplo 1.3
Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro
anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para
pessoas com mais de 25 anos.
Fa¸ca um programa que leia o pre¸co do carro a ser segurado e a idade do motorista. Se
o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor
do seguro. Se o carro valer, por exemplo, R° 20 mil, a mensagem ser´a:
’Valor do seguro: R° 1000.00. ’
Se o motorista n˜ao tiver idade para contratar o seguro, imprima a mensagem:
’Voce nao pode contratar o seguro.’
26
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo1_3;
var
idade : integer;
preco : real;
begin
writeln(’Qual e a sua idade?’);
readln(idade);
writeln(’Qual e o preco de seu carro?’);
readln(preco);
if idade = 25
then
writeln(’Valor do seguro: R° ’, preco /20:2:2 , ’.’)
else
writeln(’Voce nao pode contratar o seguro.’);
end.
5.1.4 Coment´arios
No exemplo 1, t´ınhamos de apresentar ambas as caracter´ısticas remov´ıveis. Na ´arvore ori-
ginal, acrescentamos a caracter´ıstica C2 colocando blocos de comando tanto na cl´ausula
then quanto na cl´ausula else. Entretanto, decidimos posteriormente que seria mais inte-
ressante colocar o comando composto em apenas uma das cl´ausulas: deste modo, espera-se
que o aluno compreenda que ´e poss´ıvel ter um comando composto em uma das cl´ausulas
tendo um comando simples na outra cl´ausula. Julgamos relevante inserir, sempre que
poss´ıvel, esse tipo de assimetria nos problemas. Al´em disso, decidimos colocar o comando
composto na cl´ausula else porque, no exemplo 1.2, o comando composto j´a fora colocado
em uma cl´ausula then.
5.2 ´Arvore 2
Nosso objetivo na segunda ´arvore do cap´ıtulo 3 ´e apresentar exemplos de aplica¸c˜ao, ao
aluno, do uso dos operadores booleanos and, or e not. A ´arvore tem trˆes caracter´ısticas
remov´ıveis, que s˜ao o uso do operador and, o uso do operador or e o uso do operador not. O
exemplo maior utiliza as trˆes caracter´ısticas remov´ıveis e possui trˆes exemplos diretamente
subordinados; cada um desses exemplos possui duas das caracter´ısticas remov´ıveis, e
possuem dois exemplos subordinados, cada um exercendo uma caracter´ıstica remov´ıvel
do exemplo superior.
27
5.2.1 Caracter´ısticas remov´ıveis
C1. uso do operador and
C2. uso do operador or
C3. uso do operador not
5.2.2 Numera¸c˜ao dos exemplos
c1 c2 c3 Exemplo
• • • 2 (subse¸c˜ao 5.2.3.1)
• • – 2.1 (subse¸c˜ao 5.2.3.2)
• – • 2.2 (subse¸c˜ao 5.2.3.3)
– • • 2.3 (subse¸c˜ao 5.2.3.4)
• – – 2.1.1, 2.2.1 (subse¸c˜ao 5.2.3.5)
– • – 2.1.2, 2.3.1 (subse¸c˜ao 5.2.3.6)
– – • 2.2.2, 2.3.2 (subse¸c˜ao 5.2.3.7)
– – – — (ver coment´arios na subse¸c˜ao 5.2.4)
5.2.3 Enunciados e programas
5.2.3.1 Exemplo 2
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador, pergunte
se ele tem US° 10 mil reais em uma conta no pa´ıs de origem e pergunte se ele tem um
im´ovel. Se o usu´ario n˜ao tiver a carta ou alguma das duas outras condi¸c˜oes n˜ao for
satisfeita, imprima a mensagem:
’Voce nao pode trabalhar no pais.’
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2;
var
carta , dinheiro , imovel : char;
begin
28
writeln(’Voce tem carta de solicitacao?’);
readln(carta);
writeln(’Voce tem US° 10 mil?’);
readln(dinheiro);
writeln(’Voce tem um imovel?’);
readln(imovel);
if not (( carta=’s’) and (( dinheiro=’s’) or (imovel=’s’)))
then
writeln(’Voce nao pode trabalhar no pais.’);
end.
5.2.3.2 Exemplo 2.1
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador, pergunte
se ele tem US° 10 mil reais em uma conta no pa´ıs de origem e pergunte se ele tem um
im´ovel. Se o usu´ario tiver a carta e alguma das duas outras condi¸c˜oes for satisfeita,
imprima a mensagem:
’Voce pode trabalhar no pais.’
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_1;
var
carta , dinheiro , imovel : char;
begin
writeln(’Voce tem uma carta de solicitacao?’);
readln(carta);
writeln(’Voce tem no minimo US° 10 mil?’);
readln(dinheiro);
writeln(’Voce tem um imovel?’);
readln(imovel);
if (carta=’s’) and (( dinheiro=’s’) or (imovel=’s’))
then
writeln(’Voce pode trabalhar no pais.’);
end.
29
5.2.3.3 Exemplo 2.2
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e
pergunte se ele tem um im´ovel. Se o usu´ario tiver o dinheiro mas n˜ao tiver o im´ovel,
imprima a mensagem:
’Mesmo sem imovel , voce pode trabalhar no pais se tiver uma carta
.’
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_2;
var
dinheiro , imovel : char;
begin
writeln(’Voce tem US° 10 mil?’);
readln(dinheiro);
writeln(’Voce tem um imovel?’);
readln(imovel);
if (dinheiro=’s’) and not (imovel=’s’)
then
writeln(’Mesmo sem imovel , voce pode trabalhar no pais se
tiver a carta.’);
end.
5.2.3.4 Exemplo 2.3
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e
pergunte se ele tem um im´ovel. Se o usu´ario n˜ao tiver o dinheiro nem o im´ovel, imprima
a mensagem:
’Voce nao pode trabalhar no pais.’
30
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_3;
var
dinheiro , imovel : char;
begin
writeln(’Voce tem US° 10 mil?’);
readln(dinheiro);
writeln(’Voce tem um imovel?’);
readln(imovel);
if not (( dinheiro=’s’) or (imovel=’s’))
then
writeln(’Voce nao pode trabalhar no pais.’);
end.
5.2.3.5 Exemplos 2.1.1 e 2.2.1
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador e per-
gunte se ele tem um im´ovel. Se o usu´ario tiver a carta e o im´ovel, imprima a mensagem:
’Voce pode trabalhar no pais.’
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_1_1 ;
var
carta , imovel : char;
begin
writeln(’Voce tem uma carta de solicitacao?’);
readln(carta);
writeln(’Voce tem um imovel?’);
readln(imovel);
31
if (carta=’s’) and (imovel=’s’)
then
writeln(’Voce pode trabalhar no pais.’);
end.
5.2.3.6 Exemplos 2.1.2 e 2.3.1
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e
pergunte se ele tem um im´ovel. Se o usu´ario tiver o dinheiro ou o im´ovel, imprima a
mensagem:
’Voce so precisa da carta.’
Caso contr´ario, imprima a mensagem:
’Voce nao pode trabalhar no pais.’
As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_1_2 ;
var
dinheiro , imovel : char;
begin
writeln(’Voce tem US° 10 mil?’);
readln(dinheiro);
writeln(’Voce tem um imovel?’);
readln(imovel);
if (dinheiro=’s’) or (imovel=’s’)
then
writeln(’Voce so precisa da carta.’)
else
writeln(’Voce nao pode trabalhar no pais.’);
end.
32
5.2.3.7 Exemplos 2.2.2 e 2.3.2
Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu
territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro
envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma
conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem.
Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador. Se ele
n˜ao tiver a carta, imprima a mensagem:
’Voce nao pode trabalhar no pais.’
Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para
“sim”) ou ’n’ (para “n˜ao”).
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo2_2_2 ;
var
carta : char;
begin
writeln(’Voce tem uma carta de solicitacao?’);
readln(carta);
if not (carta=’s’)
then
writeln(’Voce nao pode trabalhar no pais.’);
end.
5.2.4 Coment´arios
Para mostrar uma aplica¸c˜ao pr´atica destes operadores, utilizamos ainda o comando if. ´E
interessante notar que procuramos evitar utilizar a cl´ausula else, justamente para “for¸car”
ao aluno que pense em termos dos operadores. Isso provavelmente n˜ao ´e necess´ario:
como programas implementando os enunciados j´a s˜ao apresentados, n˜ao ´e preciso for¸car
o estudante a pensar de certa maneira — basta apresentar um enunciado que leve a uma
solu¸c˜ao intuitiva utilizando as caracter´ısticas remov´ıveis do problema. Ademais, evitar
utilizar a cl´ausula else acabou tornado os enunciados menos intuitivos. Por exemplo,
enquanto a solu¸c˜ao do exemplo 2 possui um comando if arbitrariamente sem cl´ausula else
, poder´ıamos acrescent´a-la que conseguir´ıamos ainda assim utilizar todos os operadores,
como fizemos no exemplo da se¸c˜ao 5.2.3.6.
A implementa¸c˜ao de ´arvores de trˆes n´ıveis apresenta v´arios desafios. Primeiro, s˜ao
´arvores maiores. Al´em disso, como podemos notar na ´arvore 2, elas n˜ao necessariamente
levam a ´arvores totalmente preenchidas, que era nosso objetivo inicial: n˜ao h´a na ´arvore
2 um exemplo a que falte todas as caracter´ısticas remov´ıveis. N˜ao acrescentamos este
33
exemplo porque ele possuiria apenas um comando if, o que j´a foi exercitado na ´arvore
12
. A ´arvore 4 ´e tamb´em n˜ao totalmente preenchida, embora por raz˜oes diferentes3
.
Outro aspecto caracter´ıstico das ´arvores de trˆes caracter´ısticas ´e a repeti¸c˜ao de de
exemplos. Como h´a trˆes exemplos subordinados ao exemplo maior, cada um destes exem-
plos possui tamb´em seus subordinados com uma caracter´ıstica s´o. Por exemplo, obser-
vando a tabela da subse¸c˜ao 5.2.2, percebe-se que os exemplos 2.1.1 e 2.2.1 exercitam a
mesma caracter´ıstica, que ´e o uso do operador and. Assim sendo, decidimos repetir o
enunciado e a solu¸c˜ao do exemplo 2.1.1 no exemplo 2.2.1.
5.3 ´Arvore 3
A terceira ´arvore deste cap´ıtulo considera o uso de comandos do tipo if-then, n˜ao aninha-
dos, em seq¨uˆencia. As caracter´ısticas remov´ıveis, nesta primeira ´arvore, s˜ao a presen¸ca
de um comando else para a primeira ocorrˆencia de if-then e a presen¸ca de um comando
else para a segunda ocorrˆencia. Como h´a duas caracter´ısticas remov´ıveis, temos uma
´arvore de profundidade 2 e quatro exemplos.
5.3.1 Caracter´ısticas remov´ıveis
C1. primeiro comando if-then possui cl´ausula else
C2. segundo comando if-then possui cl´ausula else
5.3.2 Numera¸c˜ao dos exemplos
C1 C2 Exemplo
• • 3 (subse¸c˜ao 5.3.3.1)
– – 3.1 (subse¸c˜ao 5.3.3.2)
• – 3.2 (subse¸c˜ao 5.3.3.3)
– • 3.3 (subse¸c˜ao 5.3.3.4)
5.3.3 Enunciados e programas
5.3.3.1 Exemplo 3
Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se
apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado.
O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a
acumular os adicionais de titula¸c˜oes diferentes.
Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os
seguintes dados:
2
A subse¸c˜ao 5.1.3.2 apresenta este exemplo.
3
A se¸c˜ao 5.4 apresenta essa ´arvore.
34
Vencimento: R° 1.000,00
Adicional de especializa¸c˜ao: 3% do Vencimento
Adicional de mestrado: 7% do Vencimento
Remunera¸c˜ao final ´e a soma do vencimento e adicionais.
O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos
t´ıtulos:
’Possui diploma de especializacao ?’
’Possui diploma de mestrado?’
Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem:
’Voce tem direito ao adicional de especializacao .’
Caso contr´ario:
’Voce nao tem direito ao adicional de especializacao .’
Se o servidor tem mestrado, o programa dever´a imprimir a seguinte mensagem:
’Voce tem direito ao adicional de mestrado.’
Caso contr´ario:
’Voce nao tem direito ao adicional de mestrado.’
Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo
programa for iguai a R° 1100, imprima:
’Sua remuneracao e de 1100. ’
35
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo3;
var
especializacao , mestrado: char;
vencimento , remuneracao: real;
begin
vencimento := 1000;
remuneracao := vencimento;
writeln(’Possui diploma de especializacao ?’);
readln(especializacao );
writeln(’Possui diploma de mestrado?’);
readln(mestrado);
if (especializacao = ’s’)
then
begin
remuneracao := remuneracao + (0.03 * vencimento);
writeln(’Voce tem direito ao adicional de especializacao .
’);
end
else
writeln(’Voce nao tem direito ao adicional de
especializacao .’);
if (mestrado = ’s’)
then
begin
remuneracao := remuneracao + (vencimento * 0.07);
writeln(’Voce tem direito ao adicional de mestrado.’);
end
else
writeln(’Voce nao tem direito ao adicional de mestrado.’);
writeln(’Sua remuneracao e de ’, remuneracao :4:2);
end.
5.3.3.2 Exemplo 3.1
Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se
apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado.
O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a
acumular os adicionais de titula¸c˜oes diferentes.
Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os
seguintes dados:
Vencimento: R° 1.000,00
36
Adicional de especializa¸c˜ao: 3% do Vencimento
Adicional de mestrado: 7% do Vencimento
Remunera¸c˜ao final ´e a soma do vencimento e adicionais.
O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos
t´ıtulos:
’Possui diploma de especializacao ?’
’Possui diploma de mestrado?’
Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo
programa for iguai a R° 1100:
’Sua remuneracao e de 1100. ’
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo3_1;
var
especializacao , mestrado: char;
vencimento , remuneracao: real;
begin
vencimento := 1000;
remuneracao := vencimento;
writeln(’Possui diploma de especializacao ?’);
readln(especializacao );
writeln(’Possui diploma de mestrado?’);
readln(mestrado);
if (especializacao = ’s’)
then
remuneracao := remuneracao + (0.03 * vencimento);
if (mestrado = ’s’)
then
remuneracao := remuneracao + (vencimento * 0.07);
writeln(’Sua remuneracao e de ’, remuneracao :4:2);
end.
37
5.3.3.3 Exemplo 3.2
Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se
apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado.
O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a
acumular os adicionais de titula¸c˜oes diferentes.
Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os
seguintes dados:
Vencimento: R° 1.000,00
Adicional de especializa¸c˜ao: 3% do Vencimento
Adicional de mestrado: 7% do Vencimento
Remunera¸c˜ao final ´e a soma do vencimento e adicionais.
O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos
t´ıtulos:
’Possui diploma de especializacao ?’
’Possui diploma de mestrado?’
Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem:
’Voce tem direito ao adicional de especializacao .’
Caso contr´ario, imprima:
’Subsidiamos cursos de especializacao .’
Logo depois, se o servidor tem mestrado, o programa dever´a imprimir a seguinte
mensagem:
’Voce tem direito ao adicional de mestrado.’
Caso contr´ario, n˜ao imprima nada.
Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remuneracao calculada pelo
programa seja R° 1100:
’Sua remuneracao e de 1100 ’
38
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo3_2;
var
especializacao , mestrado: char;
vencimento , remuneracao: real;
begin
vencimento := 1000;
remuneracao := vencimento;
writeln(’Possui diploma de especializacao ?’);
readln(especializacao );
writeln(’Possui diploma de mestrado?’);
readln(mestrado);
if (especializacao = ’s’)
then
begin
remuneracao := remuneracao + (0.03 * vencimento);
writeln(’Voce tem direito a adicional de especializacao ’)
;
end
else
writeln(’Subsidiamos cursos de especializacao .’);
if (mestrado = ’s’)
then
begin
remuneracao := remuneracao + (vencimento * 0.07);
writeln(’Voce tem direito a adicional de mestrado.’);
end;
writeln(’Sua remuneracao e de ’, remuneracao :4:2);
end.
5.3.3.4 Exemplo 3.3
Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se
apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado.
O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a
acumular os adicionais de titula¸c˜oes diferentes.
Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os
seguintes dados:
Vencimento: R° 1.000,00
Adicional de especializa¸c˜ao: 3% do Vencimento
Adicional de mestrado: 7% do Vencimento
39
Remunera¸c˜ao final ´e a soma do vencimento e adicionais.
O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos
t´ıtulos:
’Possui diploma de especializacao ?’
’Possui diploma de mestrado?’
Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem:
’Voce tem direito ao adicional de especializacao .’
Caso contr´ario, n˜ao deve imprimir nada.
Logo depois, se o servidor tem mestrado, o programa dever´a imprimir a seguinte
mensagem:
’Voce tem direito ao adicional de mestrado.’
Caso contr´ario, deve imprimir:
’Subsidiamos cursos de mestrado.’
Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo
programa seja R° 1100:
’Sua remuneracao e de 1100 ’
Solu¸c˜ao A solu¸c˜ao usada foi a seguinte
program exemplo3_3;
var
especializacao , mestrado: char;
vencimento , remuneracao: real;
begin
vencimento := 1000;
remuneracao := vencimento;
writeln(’Possui diploma de especializacao ?’);
readln(especializacao );
writeln(’Possui diploma de mestrado?’);
40
readln(mestrado);
if (especializacao = ’s’)
then
begin
remuneracao := remuneracao + (0.03 * vencimento);
writeln(’Voce tem direito ao adicional de especializacao .
’);
end;
if (mestrado = ’s’)
then
begin
remuneracao := remuneracao + (vencimento * 0.07);
writeln(’Voce tem direito ao adicional de mestrado.’);
end
else
writeln(’Subsidiamos cursos de mestrado.’);
writeln(’Sua remuneracao e de ’, remuneracao :4:2);
end.
5.3.4 Coment´arios
Essa ´arvore busca apresentar ao aluno o uso de comandos if em s´erie. A primeira quest˜ao
que se levantou foi: qual deve ser o n´umero de comandos if a serem apresentados em s´erie?
Inicialmente, cogitamos apresentar exemplos com trˆes comandos if em s´erie, uma vez que
t´ınhamos em mente utilizar ´arvores com trˆes caracter´ısticas remov´ıveis4
. Entretanto, os
programas ficaram muito grandes, o que provavelmente os tornaria cansativos para os
alunos. Decidimos, ent˜ao, utilizar dois comandos if em s´erie, com duas caracter´ısticas
remov´ıveis.
De fato, notamos que ´arvores com trˆes caracter´ısticas remov´ıveis tendem a gerar pro-
gramas maiores, al´em de, naturalmente, ´arvores com mais n´os, o que pode ser cansativo
ao aluno. Naturalmente, h´a exce¸c˜oes nas quais as ´arvores de trˆes caracter´ısticas s˜ao me-
nos cansativas e at´e mais naturais. A ´arvore 2 (apresentada na se¸c˜ao 5.2) e a ´arvore 6
(apresentada na se¸c˜ao 5.6) s˜ao bons exemplos de exce¸c˜oes.
5.4 ´Arvore 4
A quarta ´arvore do cap´ıtulo 3 apresenta o uso de comandos if-then aninhados. As
caracter´ısticas remov´ıveis s˜ao a presen¸ca da cl´ausula else no if-then interno, a presen¸ca
do if-then interno na cl´ausula then externa5
e a presen¸ca do if-then interno na cl´ausula
4
Como ter´ıamos trˆes comandos if, poder´ıamos definir como caracter´ısticas remov´ıveis a presen¸ca da
cl´ausula else no primeiro comando, a presen¸ca da cl´ausula else no segundo comando e a presen¸ca da
cl´ausula else no terceiro comando, analogamente ao que fizemos com dois comandos if.
5
Isto ´e, o if-then interno s´o ser´a executado se a condi¸c˜ao do if-then externo for satisfeita.
41
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias
Taxonomias

Mais conteúdo relacionado

Mais procurados

Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Finalimpalador69
 
Apostila de java na pratica
Apostila de java na praticaApostila de java na pratica
Apostila de java na praticaAlbino87
 
Introdução à programação em R
Introdução à programação em RIntrodução à programação em R
Introdução à programação em RMonica Barros
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Robson Silva Espig
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216Valter Inacio Jr.
 
Fenix Nox 199
Fenix Nox 199Fenix Nox 199
Fenix Nox 199Alan Lima
 
Implantação de um Sistema de Gestão ERPFLEX WEB
Implantação de um Sistema de Gestão ERPFLEX WEBImplantação de um Sistema de Gestão ERPFLEX WEB
Implantação de um Sistema de Gestão ERPFLEX WEBerpflex
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cppTiago
 

Mais procurados (18)

Manual de Redação
Manual de RedaçãoManual de Redação
Manual de Redação
 
Material LINUX
Material LINUXMaterial LINUX
Material LINUX
 
Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Final
 
Apostila de java na pratica
Apostila de java na praticaApostila de java na pratica
Apostila de java na pratica
 
Introdução à programação em R
Introdução à programação em RIntrodução à programação em R
Introdução à programação em R
 
Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)Programacao Orientada A Objetos (Java)
Programacao Orientada A Objetos (Java)
 
DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216DissertacaoMScValterFinal20070216
DissertacaoMScValterFinal20070216
 
Luca
LucaLuca
Luca
 
Perl
PerlPerl
Perl
 
Fenix Nox 199
Fenix Nox 199Fenix Nox 199
Fenix Nox 199
 
Photoshop cs3
Photoshop cs3Photoshop cs3
Photoshop cs3
 
Indesign cs5 help
Indesign cs5 helpIndesign cs5 help
Indesign cs5 help
 
Guiao aluno pic
Guiao aluno picGuiao aluno pic
Guiao aluno pic
 
Livro custos e contabilidade
Livro custos e contabilidadeLivro custos e contabilidade
Livro custos e contabilidade
 
Comsol 2008
Comsol 2008Comsol 2008
Comsol 2008
 
Implantação de um Sistema de Gestão ERPFLEX WEB
Implantação de um Sistema de Gestão ERPFLEX WEBImplantação de um Sistema de Gestão ERPFLEX WEB
Implantação de um Sistema de Gestão ERPFLEX WEB
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
Apostila latex
Apostila latexApostila latex
Apostila latex
 

Destaque

Clínica ocupacional "Global Salud"
Clínica ocupacional "Global Salud"Clínica ocupacional "Global Salud"
Clínica ocupacional "Global Salud"rosarioqr
 
Step for NRIs Service of Changing Name Legally for Passport
Step for NRIs Service of Changing Name Legally for PassportStep for NRIs Service of Changing Name Legally for Passport
Step for NRIs Service of Changing Name Legally for PassportServices 2 NRI
 
SFERA - profil agencji
SFERA - profil agencjiSFERA - profil agencji
SFERA - profil agencjiSFERA Agency
 
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ ΡΟΥΛΑ ΚΟΚΟΡΕΑ
 
Dobos20151027nyomda
Dobos20151027nyomdaDobos20151027nyomda
Dobos20151027nyomdaIstvan Dobos
 
Conventions of Horror
Conventions of Horror Conventions of Horror
Conventions of Horror bethjones0398
 
Image slidesbbplaceholder
Image slidesbbplaceholderImage slidesbbplaceholder
Image slidesbbplaceholderMax McNeff
 
婚礼日记-毕业作品
婚礼日记-毕业作品婚礼日记-毕业作品
婚礼日记-毕业作品a64356
 
The history of thriller films
The history of thriller filmsThe history of thriller films
The history of thriller filmsDan Neary
 

Destaque (12)

Final power point slides for sup com presentation [repaired] 1
Final power point slides for sup com presentation [repaired] 1Final power point slides for sup com presentation [repaired] 1
Final power point slides for sup com presentation [repaired] 1
 
Clínica ocupacional "Global Salud"
Clínica ocupacional "Global Salud"Clínica ocupacional "Global Salud"
Clínica ocupacional "Global Salud"
 
Ensayo ilicitos tributarios
Ensayo ilicitos tributariosEnsayo ilicitos tributarios
Ensayo ilicitos tributarios
 
Step for NRIs Service of Changing Name Legally for Passport
Step for NRIs Service of Changing Name Legally for PassportStep for NRIs Service of Changing Name Legally for Passport
Step for NRIs Service of Changing Name Legally for Passport
 
SFERA - profil agencji
SFERA - profil agencjiSFERA - profil agencji
SFERA - profil agencji
 
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ
ΠΡΟΕΛΕΥΣΗ ΚΑΙ ΕΞΕΛΙΞΗ ΤΟΥ ΟΝΟΜΑΤΟΣ ΤΗΣ ΠΟΛΗΣ ΤΟΥ ΑΓΡΙΝΙΟΥ
 
Dobos20151027nyomda
Dobos20151027nyomdaDobos20151027nyomda
Dobos20151027nyomda
 
Slideshare2
Slideshare2Slideshare2
Slideshare2
 
Conventions of Horror
Conventions of Horror Conventions of Horror
Conventions of Horror
 
Image slidesbbplaceholder
Image slidesbbplaceholderImage slidesbbplaceholder
Image slidesbbplaceholder
 
婚礼日记-毕业作品
婚礼日记-毕业作品婚礼日记-毕业作品
婚礼日记-毕业作品
 
The history of thriller films
The history of thriller filmsThe history of thriller films
The history of thriller films
 

Semelhante a Taxonomias

Aprenda a Programar com C#
Aprenda a Programar com C#Aprenda a Programar com C#
Aprenda a Programar com C#Antonio Trigo
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaJooMarcos614503
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação MestradoJoel Carvalho
 
Linguagem c
Linguagem cLinguagem c
Linguagem cTiago
 
Python
PythonPython
PythonTiago
 
Introducao ao calculo diferencial
Introducao ao calculo diferencialIntroducao ao calculo diferencial
Introducao ao calculo diferencialgraciliano272014
 
Java basico
Java basicoJava basico
Java basicoTiago
 
Python gtk
Python gtkPython gtk
Python gtkTiago
 
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...bentow
 
Algoritmos jabour
Algoritmos jabourAlgoritmos jabour
Algoritmos jabourfjabour
 
Caelum csharp-dotnet-fn13
Caelum csharp-dotnet-fn13Caelum csharp-dotnet-fn13
Caelum csharp-dotnet-fn13Moisés Moura
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasTiago
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursosalalves31
 
Controle linear de sistemas dinamicos
Controle linear de sistemas dinamicosControle linear de sistemas dinamicos
Controle linear de sistemas dinamicosSergio Grunbaum
 
Livro de algebra linear cópia
Livro de algebra linear   cópiaLivro de algebra linear   cópia
Livro de algebra linear cópiaLuiz Henrique
 

Semelhante a Taxonomias (20)

Aprenda a Programar com C#
Aprenda a Programar com C#Aprenda a Programar com C#
Aprenda a Programar com C#
 
Poojava
PoojavaPoojava
Poojava
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Dissertação Mestrado
Dissertação MestradoDissertação Mestrado
Dissertação Mestrado
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Python
PythonPython
Python
 
Arquitetura computadores
Arquitetura computadoresArquitetura computadores
Arquitetura computadores
 
Introducao ao calculo diferencial
Introducao ao calculo diferencialIntroducao ao calculo diferencial
Introducao ao calculo diferencial
 
Php
PhpPhp
Php
 
Java basico
Java basicoJava basico
Java basico
 
Python gtk
Python gtkPython gtk
Python gtk
 
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
 
Algoritmos jabour
Algoritmos jabourAlgoritmos jabour
Algoritmos jabour
 
Caelum csharp-dotnet-fn13
Caelum csharp-dotnet-fn13Caelum csharp-dotnet-fn13
Caelum csharp-dotnet-fn13
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemas
 
Handbook de ti para concursos
Handbook de ti para concursosHandbook de ti para concursos
Handbook de ti para concursos
 
Controle linear de sistemas dinamicos
Controle linear de sistemas dinamicosControle linear de sistemas dinamicos
Controle linear de sistemas dinamicos
 
Monopoli10002160
Monopoli10002160Monopoli10002160
Monopoli10002160
 
Livro de algebra linear cópia
Livro de algebra linear   cópiaLivro de algebra linear   cópia
Livro de algebra linear cópia
 
Aprenda computaocompython
Aprenda computaocompythonAprenda computaocompython
Aprenda computaocompython
 

Último

"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelGilber Rubim Rangel
 
interfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfinterfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfIvoneSantos45
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila RibeiroMarcele Ravasio
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
historia Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppthistoria Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.pptErnandesLinhares1
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 

Último (20)

"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Dicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim RangelDicionário de Genealogia, autor Gilber Rubim Rangel
Dicionário de Genealogia, autor Gilber Rubim Rangel
 
interfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfinterfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA  - Autora Djamila RibeiroLivro O QUE É LUGAR DE FALA  - Autora Djamila Ribeiro
Livro O QUE É LUGAR DE FALA - Autora Djamila Ribeiro
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
historia Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppthistoria Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppt
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 

Taxonomias

  • 1. Universidade de Bras´ılia Instituto de Ciˆencias Exatas Departamento de Ciˆencia da Computa¸c˜ao Taxonomias de Exemplos para Aprendizagem de Programa¸c˜ao Adam Victor Nazareth Brandizzi Yuri Moreira de Nu˜nez Monografia apresentada como requisito parcial para conclus˜ao do Curso de Computa¸c˜ao — Licenciatura Orientador Prof. Dr. Homero Luiz P´ıccolo Bras´ılia 2009
  • 2. Universidade de Bras´ılia — UnB Instituto de Ciˆencias Exatas Departamento de Ciˆencia da Computa¸c˜ao Curso de Computa¸c˜ao — Licenciatura Coordenador: Prof. Dr. Fl´avio Leonardo Cavalcanti de Moura Banca examinadora composta por: Prof. Dr. Homero Luiz P´ıccolo (Orientador) — CIC/UnB Prof. Dr. Maria de F´atima R. Brand˜ao — CIC/UnB Prof. Dr. Carla Cavalcante Koike — CIC/UnB CIP — Cataloga¸c˜ao Internacional na Publica¸c˜ao Brandizzi, Adam Victor Nazareth. Taxonomias de Exemplos para Aprendizagem de Programa¸c˜ao / Adam Victor Nazareth Brandizzi, Yuri Moreira de Nu˜nez. Bras´ılia : UnB, 2009. 121 p. : il. ; 29,5 cm. Monografia (Gradua¸c˜ao) — Universidade de Bras´ılia, Bras´ılia, 2009. 1. Exemplos, 2. Problemas, 3. Programa¸c˜ao de Computador, 4. Ensino de Programa¸c˜ao, 5. Sistemas Tutoriais Inteligentes, 6. Sistemas Tutorias Baseados na Web, 7. Taxonomia de Exemplos, 8. Tutorias CDU 004 Endere¸co: Universidade de Bras´ılia Campus Universit´ario Darcy Ribeiro — Asa Norte CEP 70910-900 Bras´ılia–DF — Brasil
  • 3. Universidade de Bras´ılia Instituto de Ciˆencias Exatas Departamento de Ciˆencia da Computa¸c˜ao Taxonomias de Exemplos para Aprendizagem de Programa¸c˜ao Adam Victor Nazareth Brandizzi Yuri Moreira de Nu˜nez Monografia apresentada como requisito parcial para conclus˜ao do Curso de Computa¸c˜ao — Licenciatura Prof. Dr. Homero Luiz P´ıccolo (Orientador) CIC/UnB Prof. Dr. Maria de F´atima R. Brand˜ao Prof. Dr. Carla Cavalcante Koike CIC/UnB CIC/UnB Prof. Dr. Fl´avio Leonardo Cavalcanti de Moura Coordenador do Curso de Computa¸c˜ao — Licenciatura Bras´ılia, 30 de junho de 2009
  • 4. Agradecimentos Agrade¸co, acima de tudo, a meus saudosos pais, que me deram a melhor educa¸c˜ao poss´ıvel; a meus tios Nataniel e Ana, que me apoiaram nos momentos dif´ıceis; a minhas irm˜as, que sempre me apoiaram, e a Juliana Vilela, que esteve ao meu lado durante grande parte do curso. Agrade¸co `a Universidade de Bras´ılia, pelo ensino de alta qualidade; aos professores do departamento, pelo conhecimento, t´ecnico ou n˜ao, transmitido e pela compreens˜ao e apoio. Agrade¸co especialmente ao professor Homero, pela orienta¸c˜ao s´abia, dedicada e paciente. Por fim, agrade¸co a todos os companheiros universit´arios que me apoiaram, especialmente ao amigo Pedro, que muito me ajudou no come¸co do curso, e ao parceiro de projeto Yuri, cujo trabalho foi indispens´avel. A todos citados, e aos que n˜ao pude citar, muito obrigado. Adam Victor Nazareth Brandizzi Agrade¸co ao professor orientador, Homero, e parceiro de projeto, Adam, pela paciˆencia e esmero. Agrade¸co especialmente `as mulheres da minha vida - minha m˜ae, minha esposa, minha irm˜a e minha av´o - que contribuiram a cada tempo com amor e compreens˜ao. Agrade¸co, enfim, a todos os amigos que aguardavam ansiosos por este feliz desfecho. Yuri Moreira de Nu˜nez iv
  • 5. Resumo Estudantes possuem diferentes ritmos de aprendizado. Para satisfazer suas diferentes necessidades, s˜ao necess´arios materiais did´aticos em diferentes n´ıveis de complexidade. Nesse trabalho, propomos um conjunto de exemplos de programa¸c˜ao com v´arios n´ıveis de complexidade para alunos que estejam aprendendo a programar computadores. Esse conjunto de exemplos ser´a integrado ao Tutorial ICC, um sistema de aprendizagem auxi- liado por computador. Este ´e mais um passo para acrescentar adaptabilidade ao Tutorial ICC, aproximando-o dos sistemas tutoriais inteligentes. Palavras-chave: Exemplos, Problemas, Programa¸c˜ao de Computador, Ensino de Pro- grama¸c˜ao, Sistemas Tutoriais Inteligentes, Sistemas Tutorias Baseados na Web, Taxono- mia de Exemplos, Tutorias v
  • 6. Abstract Students have different learning paces. In order to satisfy their different needs, educational materials at different complexity levels are necessary. In this work, we propose a set of programming examples with various complexity levels for students who are learning how to program computers. This set will be integrated to Tutorial ICC, a computer-assisted learning system. It is one more step to add adaptability to Tutorial ICC, approaching it to intelligent tutoring systems. Keywords: Computer Programming, Examples, Examples Taxonomy, Intelligent Tutor- ing Systems, Problems, Programming Teaching, Tutorials, Web-based Tutoring Systems vi
  • 7. Sum´ario 1 Introdu¸c˜ao 1 1.1 Problemas e Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Resultados esperados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 O Ensino de Programa¸c˜ao 4 2.1 A dificuldade de ensinar a programar . . . . . . . . . . . . . . . . . . . . . 4 2.2 Fatores cognitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Fatores pedag´ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Proposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Sistemas Tutoriais Inteligentes 8 3.1 Arquitetura de um sistema tutorial inteligente . . . . . . . . . . . . . . . . 8 3.2 Categorias de sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 10 3.3 Vantagem dos sistemas tutoriais inteligentes . . . . . . . . . . . . . . . . . 14 3.4 O papel do trabalho corrente . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4 Taxonomias de Exemplos 15 4.1 Taxonomia hier´arquica de exemplos . . . . . . . . . . . . . . . . . . . . . . 15 4.2 Enunciados e solu¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.3 “Tira-teima” e roteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.4 Localiza¸c˜ao na taxonomia . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5 Exemplos de Taxonomias 23 5.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 28 vii
  • 8. 5.2.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 49 5.5.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.3 Enunciados e programas . . . . . . . . . . . . . . . . . . . . . . . . 62 5.6.4 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6 Conclus˜oes e Trabalhos Futuros 74 Referˆencias 75 A Taxonomias do Cap´ıtulo 2 do Tutorial ICC 78 A.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 78 A.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 A.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 A.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 79 A.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 79 B Taxonomias do Cap´ıtulo 4 do Tutorial ICC 81 B.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 81 B.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 B.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 B.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 82 B.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 82 viii
  • 9. B.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 B.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 83 B.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 B.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 84 B.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 85 B.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 B.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 B.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 86 B.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 87 B.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 B.7 ´Arvore 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 88 B.7.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 C Taxonomias do Cap´ıtulo 4 do Tutorial ICC 89 C.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 89 C.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 C.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 90 C.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 C.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 C.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 91 C.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 92 C.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 C.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 C.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 93 C.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 93 C.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 C.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 94 C.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 ix
  • 10. D Taxonomias do Cap´ıtulo 6 do Tutorial ICC 96 D.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 96 D.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 D.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 97 D.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 D.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 D.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 98 D.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 99 D.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 D.4 ´Arvore 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 D.4.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 100 D.4.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 100 D.4.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 D.5 ´Arvore 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 101 D.5.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 D.6 ´Arvore 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 102 D.6.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 E Taxonomias do Cap´ıtulo 7 do Tutorial ICC 104 E.1 ´Arvore 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 104 E.1.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 E.2 ´Arvore 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 105 E.2.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 E.3 ´Arvore 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 E.3.1 Caracter´ısticas remov´ıveis . . . . . . . . . . . . . . . . . . . . . . . 106 E.3.2 Numera¸c˜ao dos exemplos . . . . . . . . . . . . . . . . . . . . . . . . 107 E.3.3 Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 x
  • 11. Lista de Tabelas 3.1 Categorias de STIs, segundo Murray (1999) . . . . . . . . . . . . . . . . . 13 xi
  • 12. Lista de Figuras 3.1 Componentes de um STI, segundo Beck et al. (1996) . . . . . . . . . . . . 10 4.1 Representa¸c˜ao de taxonomia com duas caracter´ısticas remov´ıveis . . . . . . 16 4.2 Representa¸c˜ao de taxonomia com trˆes caracter´ısticas remov´ıveis . . . . . . 16 4.3 Representa¸c˜ao de taxonomia sem n´o sem caracter´ısticas . . . . . . . . . . . 17 4.4 Representa¸c˜ao de uma taxonomia n˜ao-ortogonal . . . . . . . . . . . . . . . 18 4.5 Screenshot da applet Java executando um “tira-teima” . . . . . . . . . . . 19 4.6 Exemplo de roteiro de “tira-teima” . . . . . . . . . . . . . . . . . . . . . . 20 4.7 Representa¸c˜ao da localiza¸c˜ao do aluno na taxonomia . . . . . . . . . . . . 21 xii
  • 13. Siglas e Acrˆonimos ACM Association of Computing Machinery AIS Association for Information Systems CALS computer-assisted learning1 CALS computer-assisted learning system EaD educa¸c˜ao a distˆancia2 HTML Hypertext Markup Language HTTP Hypertext Transfer Protocol IEEE Institute of Electrical and Electronics Engineers IEEE-CS IEEE Computer Society ICC Introdu¸c˜ao `a Ciˆencia da Computa¸c˜ao ITS intelligent tutoring system SAAC sistema de aprendizagem auxiliada por computador STBW sistema tutorial baseado em Web STI sistema tutorial inteligente UnB Universidade de Bras´ılia 1 Tamb´em ´e comum a forma, para efeitos gerais equivalente nesta monografia, computer-aideld learning. 2 Tamb´em ´e comum a forma, para efeitos gerais equivalente nesta monografia, ensino a distˆancia. xiii
  • 14. Cap´ıtulo 1 Introdu¸c˜ao A programa¸c˜ao ´e comumente reconhecida como uma habilidade dif´ıcil de se aprender e, portanto, de se ensinar (Gomes e Mendes, 2007). Al´em desse problema, a procura por forma¸c˜ao em Ciˆencia da Computa¸c˜ao, Engenharia de Software e outros cursos que exigem conhecimento de programa¸c˜ao como base cresceu bastante a partir dos anos 90 (ACM, 2005, p. 10). Uma poss´ıvel solu¸c˜ao para o grande aumento da demanda dos cursos de programa¸c˜ao ´e o uso dos chamados sistemas tutoriais baseados em Web (STBW), que tˆem mostrado bons resultados quando complementado por canais pelos quais alunos e professores podem se comunicar e esclarecer d´uvidas (Brusilovsky et al., 1998, p. 2). A vantagem dos cursos baseados na Web para o problema de forma¸c˜ao em maior escala ´e que esses cursos podem ser acessados de qualquer lugar por uma grande quantidade de alunos. Al´em disso, cursos baseados em Web permitem que os estudantes aprendam os pontos b´asicos de seus cursos sem exigir acompanhamento constante do professor, que pode se concentrar nas d´uvidas mais complicadas e nos alunos com mais dificuldades, desde que o material on-line possa se adaptar aos estudantes e seus backgrounds (Brusilovsky et al., 1998, p. 2). V´arios experimentos j´a foram ou est˜ao sendo feitos para avaliar a viabilidade do uso de cursos baseados na Web para o ensino de programa¸c˜ao, como, por exemplo, Chen (2005), Ferrandin e Stephani (2005), Carlson (2004) e dos Santos e Costa (2005). Esse presente trabalho pretende evoluir um sistema em funcionamento. Esse sistema ´e chamado Tutorial ICC e ´e utilizado no ensino de programa¸c˜ao para as turmas de Introdu¸c˜ao `a Ciˆencia da Computa¸c˜ao da Universidade de Bras´ılia. Mais especificamente, nossa abordagem ser´a acrescentar alguma flexibilidade ao tu- torial. Nosso planejamento inicial ´e tornar Tutorial ICC n˜ao exatamente um sistema tutorial inteligente (STI) no sentido estrito, mas tentar aplicar os conceitos inerentes a esse tipo de sistema de uma maneira b´asica. Em especial, nosso foco ser´a oferecer um sistema de exemplos alternativos ao estudante. Essa ´e uma decis˜ao promissora porque j´a foi obtido sucesso consider´avel com essa abordagem no ensino do uso de bibliotecas na pr´opria Universidade de Bras´ılia (P´ıccolo, 2006). 1
  • 15. 1.1 Problemas e Justificativa Embora programa¸c˜ao seja uma das atividades fundamentais na Ciˆencia da Computa¸c˜ao, muitos estudantes tem grandes dificuldades para aprender a programar (Jenkins, 2003; Gomes e Mendes, 2007). Por outro lado, a demanda por cursos que exigem conhecimento de programa¸c˜ao tˆem crescido bastante (ACM, 2005). Desse modo, ´e de grande interesse que se consigam ferramentas educacionais que auxiliem os estudantes no processo de ensino-aprendizagem de programa¸c˜ao. Tamb´em tem crescido o interesse em ferramentas que auxiliem o professor a ministrar cursos de programa¸c˜ao a um n´umero crescente de alunos; em outras palavras, ´e necess´ario criar ferramentas que acrescentem escalabilidade aos cursos de programa¸c˜ao. Tem-se tentado satisfazer a necessidade de escalabilidade no ensino de programa¸c˜ao atrav´es de do uso de ferramentas tutoriais remotas, especialmente sistema tutorial baseado em Webs (STBWs). Entretanto, cursos remotos podem dificultar a aprendizagem do aluno, que n˜ao contaria com o apoio constante de um professor. Uma poss´ıvel solu¸c˜ao para o problema da dificuldade de aprendizagem atrav´es de STBWs ´e permitir que tais tutoriais se adaptem ao ritmo e necessidade dos estudantes. Isso ´e poss´ıvel, atrav´es do uso de STIs. O Tutorial ICC ´e, desde j´a, um STBW que evolui aos poucos para um STI. Este trabalho d´a mais um passo nessa dire¸c˜ao, a saber, fornecer exemplos que possam ser utilizados em um STI. 1.2 Objetivos O objetivo geral deste trabalho ´e desenvolver um conjunto de taxonomias hier´arquicas de exemplos para o ensino de programa¸c˜ao para os alunos da disciplina Introdu¸c˜ao `a Ciˆencia da Computa¸c˜ao (ICC). Os objetivos espec´ıficos deste trabalho, por sua vez, s˜ao: 1. identificar conceitos e habilidades que estudantes de programa¸c˜ao podem ter difi- culdade de apreender; 2. desenvolver exemplos, enunciados, programas e representa¸c˜oes gr´aficas da execu¸c˜ao de programas que exercitem os conceitos e habilidades identificados. 3. desenvolver uma representa¸c˜ao gr´afica das taxonomias hier´arquicas, para auxiliar o aluno a se localizar em uma determinada taxonomia. 1.3 Metodologia Propusemos e implementamos uma s´erie de taxonomias de exemplos organizada hierarqui- camente em n´ıveis de dificuldade. Essa taxonomia foi influenciada tamb´em por pesquisas publicadas, mas em sua maior parte ´e a aplica¸c˜ao do conhecimento emp´ırico e longa 2
  • 16. experiˆencia de professores de programa¸c˜ao da Universidade de Bras´ılia (UnB). H´a uma taxonomia para cada cap´ıtulo atual do Tutorial ICC, exceto o primeiro e o ´ultimo (oitavo). Para desenvolver uma taxonomia, identificamos os conceitos e habilidades que estu- dantes de programa¸c˜ao podem ter dificuldade de apreender em um determinado cap´ıtulo. Concebemos, ent˜ao, problemas que exercitem cada um dos conjuntos de conceitos pro- postos. Para cada um desses problemas, desenvolvemos vers˜oes simplificadas de modo a criar ´arvores de problemas em que cada problema exercita um subconjunto dos conjuntos de conceitos. Escrevemos, ent˜ao, enunciados para cada um dos problemas, incluindo os problemas que exercitem todos os conceitos de um conjunto. Uma vez que tivemos um conjunto de enunciados que podiam apresentar os conceitos escolhidos, programamos solu¸c˜oes para os enunciados, em Pascal. Criamos tamb´em scripts que, aliados com uma applet em Java j´a desenvolvida, permitem representar graficamente a execu¸c˜ao dos programas escritos. Por fim, integramos os enunciados, os programas e os scripts gerados para cada cap´ıtulo ao Tutorial ICC. Tamb´em desenvolvemos e implantamos uma representa¸c˜ao gr´afica das taxonomias hier´arquicas, para auxiliar o aluno a se localizar em uma de- terminada taxonomia. 1.4 Resultados esperados Ao final deste trabalho, temos uma taxonomia de exemplos implementada para os cap´ıtulos 2, 3, 4, 5, 6 e 7 do Tutorial ICC. Essas taxonomias s˜ao um primeiro passo para trabalhos futuros que envolvam a flexibiliza¸c˜ao e automatiza¸c˜ao da interface do Tutorial ICC em prol de torn´a-lo cada vez mais dotado de inteligˆencia. 3
  • 17. Cap´ıtulo 2 O Ensino de Programa¸c˜ao Embora programa¸c˜ao seja uma das atividades fundamentais na Ciˆencia da Computa¸c˜ao, muitos estudantes tˆem grande dificuldade para aprender a programar (Jenkins, 2003; Gomes e Mendes, 2007). Desse modo, ´e de grande interesse conseguir ferramentas educa- cionais que auxiliem no processo de ensino-aprendizagem de programa¸c˜ao. Neste cap´ıtulo, apresentaremos algumas das quest˜oes e dificuldades sobre ensinar a programar. 2.1 A dificuldade de ensinar a programar Aprender e ensinar a programar s˜ao tarefas dif´ıceis. Grande n´umero de estudantes de Computa¸c˜ao consideram muito dif´ıcil aprender programa¸c˜ao, mesmo em etapas avan¸cadas do curso. Essa ´e uma situa¸c˜ao preocupante para o ensino de Computa¸c˜ao: programa¸c˜ao ´e um componente b´asico, ou mesmo uma ferramenta indispens´avel para se compreender v´arias ´areas da disciplina. O ensino de programa¸c˜ao ´e objeto de diversos estudos que buscam reduzir essa dificuldade, mas h´a poucas evidˆencias de que se tenham conseguido avan¸cos significativos na aprendizagem (Jenkins, 2003). V´arias raz˜oes foram apontadas para essas dificuldades. Por vezes, afirma-se que o problema n˜ao ´e que aprender a programar seja dif´ıcil em si, mas sim que certos alunos tˆem dificuldades, por n˜ao terem algumas habilidades necess´arias para programar bem desenvolvidas, como habilidades matem´aticas ou para solu¸c˜ao de problemas. Entretanto, Jenkins (2003) considera os resultados de pesquisas nesse sentido inconclusivos: enquanto alguns trabalhos de fato mostram alguma correla¸c˜ao entre o dom´ınio de certas habilida- des e a maior ou menor facilidade em aprender a programar (por exemplo, Byrne e Lyons (2001)), outros estudos indicam que n˜ao h´a tal correla¸c˜ao (Jenkins e Davy, 1999). De qualquer forma, essas habilidades n˜ao s˜ao necessariamente inatas, podendo ser desen- volvidas; Gomes e Mendes (2007), por exemplo, consideram como problema a falta de treinamento pr´evio do estudante em matem´atica e l´ogica, n˜ao uma dificuldade inata; de fato, a escolha do estudante por um curso de Ciˆencia da Computa¸c˜ao ou correlato ´e um ind´ıcio de que ele j´a tem consider´avel interesse na ´area de ciˆencias matem´aticas1 . 1 Temos constatado empiricamente que alguns estudantes escolhem o curso com uma vis˜ao preliminar errˆonea da Computa¸c˜ao, e esses mesmos estudantes tˆem s´erias dificuldades em aprender a programar. 4
  • 18. 2.2 Fatores cognitivos V´arios fatores cognitivos s˜ao relevantes para a maior ou menor facilidade na aprendizagem de programa¸c˜ao. O primeiro fator s˜ao os estilos de aprendizagem. Estudantes aprendem de maneiras diferentes: estudando sozinho ou em grupo, estudando em detalhes ou su- perficialmente a disciplina. V´arios componentes de uma disciplina podem exigir maneiras diferentes de se estudar. Usualmente, estudantes tendem a escolher os estilos que melhor lhes serviram previamente para aprender algo, mas esse estilo pode n˜ao ser adequado para um determinado ponto do estudo de programa¸c˜ao (Jenkins, 2003). Como exemplo, consideremos os estilos de aprendizagem classificados como aborda- gem aprofundada e abordagem superficial. A abordagem aprofundada ´e aquela na qual o estudante busca pela compreens˜ao do t´opico, enquanto a abordagem superficial ´e aquela na qual o estudo resume-se a pouco mais que memorizar as informa¸c˜oes. Programa¸c˜ao ´e uma atividade que exige o uso de ambas as abordagens: enquanto ´e necess´ario um conhecimento m´ınimo, mesmo que vago, das regras l´exicas e sint´aticas da linguagem de programa¸c˜ao utilizada, uma compreens˜ao profunda da semˆantica e dos conceitos abstra- tos sobre programa¸c˜ao ´e exigido. No caso, n˜ao s´o ´e necess´ario que se utilize ambas as abordagens em v´arios pontos da disciplina; ´e exigido que ambas as abordagens sejam utilizadas ao mesmo tempo (Jenkins, 2003). Os estilos de aprendizagem podem tamb´em variar de acordo com os tipos psicol´ogicos. Alunos tˆem estilos de aprendizagem diferentes, que influenciam em seus m´etodos e pre- ferˆencias de estudo. Alguns preferem pensar em termos mais abstratos, enquanto outros podem preferir conceitos mais concretos e aplicados; alguns alunos preferem m´etodos sistem´aticos de estudos, enquanto outros “deixam-se levar” pelo tema (Keirsey, 1998). Ocorre que programa¸c˜ao exige tanto racioc´ınio abstrato quanto concreto; por vezes, exige m´etodo r´ıgido e, noutras, experimenta¸c˜ao avulsa. Inclusive, h´a problemas que s˜ao mais facilmente resolv´ıveis de uma forma que de outra. O estudante, por´em, usualmente es- colhe explorar o tema da programa¸c˜ao apenas atrav´es da maneira que mais lhe agrada, e tenta utilizar sua abordagem preferida sem considerar o car´ater do problema. Uma pesquisa preliminar focando no estilo de aprendizagem do aluno, com poss´ıvel aplica¸c˜ao futura no Tutorial ICC, foi desenvolvido por Chaves J´unior e Bastos (2008). Outras pes- quisas poder˜ao abordar as pr´aticas necess´arias na aprendizagem de programa¸c˜ao, dando um primeiro passo no trabalho sobre as diversas maneiras de estudar de cada tipo de estilo de aprendizagem. Outro fator importante — e problem´atico — no estudo de programa¸c˜ao ´e a motiva¸c˜ao. Enquanto v´arios alunos aprendem a programar por vontade pr´opria e interesse pessoal — em outras palavras, por motiva¸c˜ao intr´ınseca —, outros estudantes o fazem em busca de uma carreira financeiramente rent´avel ou apenas para obter diploma em um curso superior qualquer — ou seja, por motiva¸c˜ao extr´ınseca. Previsivelmente, alunos com mo- tiva¸c˜oes intr´ınsecas apresentam um desempenho melhor em aprendizagem que alunos com motiva¸c˜oes extr´ınsecas. Entretanto, a motiva¸c˜ao extr´ınseca n˜ao ´e, de maneira alguma, Entretanto, tais estudantes s˜ao uma minoria e, afinal, v´arios dos estudantes que demonstram grande habilidade em diversas outras ´areas da Computa¸c˜ao tamb´em tˆem dificuldades espec´ıficas em solucionar problemas com c´odigo. 5
  • 19. um empecilho para a aprendizagem, de modo que estudantes com tais interesses n˜ao s˜ao “casos perdidos” (Jenkins, 2003). Al´em disso, existem diversos “ bugs” conceituais que afetam a maneira como pro- gramadores iniciantes programam e lˆeem programas. Por exemplo, ´e usual que o aluno imagine que o programa ´e, em certo sentido, executado de uma vez s´o — o que ´e usu- almente chamado de “bug” de paralelismo; tamb´em ocorre de programadores iniciantes lerem instru¸c˜oes de c´odigo subentendendo inten¸c˜oes e n˜ao apenas seu significado (“bug” de intencionalidade) ou de escreverem c´odigo que em seu racioc´ınio produza o efeito de- sejado, mas que possui menos semˆantica que a necess´aria (“bug” de egocentrismo) (Pea, 1986). A cataloga¸c˜ao e estudo desses “bugs” j´a vem de longo tempo e inclui artigos como Pea (1986) e Spohrer e Soloway (1986). 2.3 Fatores pedag´ogicos Os professores de programa¸c˜ao tˆem um grande desafio: ensinar uma disciplina extrema- mente jovem. O corpo de conhecimento sobre o processo did´atico do ensino de Com- puta¸c˜ao ´e ainda pequeno quando comparado a outras disciplinas mais bem estabelecidas, como ´Algebra e C´alculo. Isso ´e especialmente verdadeiro quando se trata de programa¸c˜ao, uma atividade cheia de idiossincrasias e peculiaridades que a colocam no meio do caminho entre a ´Algebra e alguma engenharia. Entretanto, isso n˜ao implica que n˜ao temos base alguma para come¸car a desenvolver e propor um modelo de ensino de programa¸c˜ao. J´a h´a pesquisa na busca de uma metodo- logia confi´avel de ensino de programa¸c˜ao, e muitas das raz˜oes das dificuldades do ensino de programa¸c˜ao j´a s˜ao conhecidas, ao menos superficialmente. Por exemplo, v´arios cursos de programa¸c˜ao tendem a dar ˆenfase no ensino da lingua- gem de programa¸c˜ao, e n˜ao na programa¸c˜ao em si (Gomes e Mendes, 2007), ao ponto de v´arias institui¸c˜oes terem uma s´erie de cursos de “Programa¸c˜ao”, cada um ensinando uma linguagem diferente. A escolha da linguagem de programa¸c˜ao que suportar´a os exemplos de um curso comumente ´e guiada pela linguagem mais popular na ind´ustria no momento, ao inv´es de considerar fatores did´aticos (Jenkins, 2003). Isso pode ser problem´atico, dado que a linguagem de programa¸c˜ao ´e uma nota¸c˜ao e, portanto, pode fazer uma dr´astica dife- ren¸ca na transmiss˜ao de conceitos (Iverson, 1980). Por isso linguagens de programa¸c˜ao de car´ater did´atico, como Pascal (Wirth, 1972) e Logo (Pea, 1983), e ambientes que reduzam as dificuldades do aluno s˜ao didaticamente importantes (Jenkins, 2003)(Gomes e Mendes, 2007). O contexto em que o estudante acaba de adentrar tamb´em dificulta a aprendizagem. ´E usual que o ensino de programa¸c˜ao seja um dos primeiros cursos que um aluno de Computa¸c˜ao (ou alguma ´area relacionada ou dependente) tenha durante sua gradua¸c˜ao. O aluno, inexperiente, ao lidar com t˜ao complexa disciplina, tem ainda mais dificuldades de aprender. Muitos autores consideram que o posicionamento de ensino de programa¸c˜ao na grade curricular ´e excessivamente adiantado (Jenkins, 2003)(Gomes e Mendes, 2007)2 . 2 Nossa experiˆencia pessoal nos d´a uma vis˜ao diversa: n´os, quando estudantes, ouvimos muitos cole- gas de turma reclamarem do quanto se demorava para aprender a programar e para chegar aos cursos 6
  • 20. Por fim, podemos citar tamb´em a grande heterogeneidade de estudantes nas turmas de programa¸c˜ao. Como o curso de programa¸c˜ao ´e um dos primeiros a serem ministrados, h´a em suas turmas estudantes dos mais diversos backgrounds e perfis. Como tais cursos n˜ao raramente ainda seguem uma estrutura bastante tradicional de aula expositiva, seus professores n˜ao disp˜oem de tempo e energias suficientes para atender pessoalmente cada um dos alunos. De fato, a falta de personaliza¸c˜ao nos cursos e o desgaste do professor s˜ao apontadas por v´arios pesquisadores como causas significativas para mau desempenho de estudantes de programa¸c˜ao (Jenkins, 2003)(Gomes e Mendes, 2007)(Lahtinen et al., 2005). 2.4 Proposta A ferramenta que pretendemos expandir — o Tutorial ICC — pode solucionar ou, ao menos, amenizar v´arios dos problemas que afligem os estudantes e professores de pro- grama¸c˜ao. A proposta do tutorial, a longo prazo, ´e tornar-se um sistema tutorial dotado de inteligˆencia, objetivo para o qual esse trabalho oferece mais um pequeno passo. Para compreender como um sistema tutorial dotado de inteligˆencia pode auxiliar o ensino de programa¸c˜ao, precisamos ver, antes o que s˜ao sistemas tutoriais inteligentes. mais avan¸cados e “pr´aticos”. Entretanto, esta ´e apenas uma evidˆencia aned´otica: embora realmente te- nhamos conhecidos alguns estudantes que reclamassem dessa demora (especialmente em vers˜oes antigas do curr´ıculo dos nossos cursos), n˜ao sabemos quantos realmente reclamavam. Eis uma ´area digna de pesquisa. 7
  • 21. Cap´ıtulo 3 Sistemas Tutoriais Inteligentes Sistemas tutoriais inteligentes (do inglˆes intelligent tutoring systems) s˜ao sistemas de aprendizagem auxiliados por computador (SAAC) que se adaptam, sem necessidade de cont´ınua interven¸c˜ao humana, `as necessidades e ao desempenho do aluno (Self, 1999). Esses sistemas s˜ao um caso especial dos sistemas de instru¸c˜ao auxiliada por computador (do inglˆes computer aided instruction) que almejam utilizar tecnologias inform´aticas no processo de ensino (Freedman, 2000). Tais sistemas se popularizaram bastante nas escolas e empresas durante os anos 80 e 90, sendo utilizados para transmitir as mais variadas competˆencias e conhecimentos (Murray, 1999). O Tutorial ICC evolui para adquirir, se n˜ao o car´ater de um sistema tutorial inteligente em todos os aspectos, ao menos algumas caracter´ısticas e fun¸c˜oes de sistemas tutoriais inteligentes, tornando-se um sistema tutorial dotado de inteligˆencia. O corrente trabalho ´e mais um passo nessa dire¸c˜ao. 3.1 Arquitetura de um sistema tutorial inteligente Um dos aspectos mais importantes de qualquer sistema computacional — inclusive de sis- temas tutoriais inteligentes — ´e a sua arquitetura. V´arias arquiteturas j´a foram propostas para sistemas tutoriais inteligentes mas, tradicionalmente, divide-se um sistema tutorial inteligente em trˆes m´odulos: o m´odulo especialista, o m´odulo do estudante e o m´odulo do tutor (Self, 1999). Ademais, a maioria das demais arquiteturas s˜ao apenas varia¸c˜oes isoladas desse modelo. O m´odulo especialista ´e respons´avel por modelar o conhecimento a ser transmitido. Trˆes abordagens s˜ao poss´ıveis nesse caso: a cria¸c˜ao de um m´odulo “caixa preta”, um m´odulo de “caixa de vidro” ou um m´odulo de solu¸c˜ao de problemas. Um m´odulo “caixa preta” n˜ao codifica a inteligˆencia humana, mas s´o o conhecimento. Desse modo, esse m´odulo apenas pode fazer compara¸c˜oes entre o conhecimento do estudante e a repre- senta¸c˜ao do conhecimento interna ao sistema. Esse modelo ´e insuficiente para o ensino, de modo que sistemas tutoriais inteligentes que fazem uso de tais m´odulos geralmente incrementam seu desempenho com os chamados m´odulos de solu¸c˜ao de problemas, que decidem o comportamento do sistema para cada comportamento observado no m´odulo 8
  • 22. do estudante, com especial ˆenfase em enganos comuns. Alternativas aos m´odulos “caixa preta”, os m´odulos “caixa de vidro” s˜ao usualmente baseados em formalismos dos co- nhecimentos a serem apresentados. Seu desenvolvimento no geral depente do aux´ılio de engenheiros de conhecimento, que ap´os entrevistar especialistas, cria uma representa¸c˜ao computacinal do conhecimento a ser transmitido (Burns e Capps, 1988). O m´odulo do estudante tenta simular o comportamento de um estudante, de modo a poder prever qual o melhor passo a ser dado. No projeto desse m´odulo, Burns e Capps (1988) chama a aten¸c˜ao para trˆes dimens˜oes a serem levadas em conta. Primeiro, ´e necess´ario saber que informa¸c˜oes temos sobre o comportamento do usu´ario do sistema. A maioria dos sistemas tutoriais inteligentes s´o tem acesso `as respostas dadas pelo aluno `as quest˜oes propostas.1 Segundo, conv´em distinguir qual a categoria do conhecimento que se tenta transmitir; isto ´e, ´e preciso ter em mente se queremos transmitir um conhecimento procedural (conhecimento sobre como executar uma tarefa), declarativo (conhecimento sobre fatos em geral, sem necess´aria aplica¸c˜ao) ou mesmo qualitativo (habilidade em fazer julgamentos e tirar conclus˜oes de modelos mentais). Por fim, Burns e Capps (1988) chama a aten¸c˜ao para a necessidade de se distinguir diferen¸cas entre o estudante e o m´odulo especialista. Tradicionalmente, usa-se a representa¸c˜ao do conhecimento do pr´oprio m´odulo especialista na implementa¸c˜ao do m´odulo do estudante; sistemas mais avan¸cados, por´em, tamb´em fornecem uma biblioteca de erros que permitem que o sistema reaja de maneira mais adequada a erros previstos (Burns e Capps, 1988). O m´odulo do tutor ´e o m´odulo respons´avel pela integra¸c˜ao entre o m´odulo espe- cialista e o m´odulo do estudante. Ele ´e o real respons´avel por escolher o fluxo de apresenta¸c˜ao do conte´udo, assim como por dar sugest˜oes e apresentar corre¸c˜oes de ma- neira ass´ıncrona. Existem diversas teorias instrucionais utilizadas na constru¸c˜ao de tais m´odulos (Burns e Capps, 1988). A esses componentes, Burns e Capps (1988) acrescenta o ambiente de instru¸c˜ao e a interface homem-m´aquina. O ambiente de instru¸c˜ao ´e o conjunto de ferramentas utilizadas no processo de transmiss˜ao de conhecimento. Exemplos dessas ferramentas s˜ao jogos, gr´aficos, anima¸c˜oes etc. Elas comp˜oem um micromundo no qual o aluno explora as possibilidades do sistema tutorial inteligente. A interface homem-m´aquina ´e o conjunto de tecnologias utilizado para a comunica¸c˜ao entre o computador e o aluno. O Tutorial ICC, por exemplo, utiliza a interface Web atrav´es de uma interface de usu´ario gr´afica. Beck et al. (1996) prop˜oem uma divis˜ao levemente diferente. O conhecimento do dom´ınio estaria separado do m´odulo especialista: enquanto o conhecimento do dom´ınio se- ria uma base de dados de conhecimento a ser utilizado, o m´odulo especialista representaria o conhecimento de uma pessoa especialmente h´abil no tema estudado. O m´odulo espe- cialista seria, ent˜ao, respons´avel por comparar a solu¸c˜ao dada pelo aluno com a solu¸c˜ao do especialista. Al´em disso, Beck et al. (1996) apresentam tanto o ambiente de instru¸c˜ao 1 Entretanto, v´arios sistemas tentam captar e processar informa¸c˜oes sobre outros aspectos do compor- tamento do aluno como, por exemplo, seu estado emocional. Esses sistemas s˜ao denominados sistemas tutoriais inteligentes afetivos e podem tanto escolher a ordem de apresenta¸c˜ao do conte´udo quanto enviar mensagens de motiva¸c˜ao ou apoio ao estudante (Nkambou, 2006). Infelizmente, como Murray (1999) ressalta, sistemas baseados em hiperm´ıdia e Web, como o Tutorial ICC, n˜ao disp˜oem de tais facilidades, ao menos n˜ao de maneira trivial. 9
  • 23. quanto a interface homem-m´aquina como um componente s´o: o modelo de comunica¸c˜ao, que intermedeia a intera¸c˜ao entre a m´aquina e o aluno. A figura 3.1 apresenta as intera¸c˜oes entre os m´odulos da arquitetura proposta por Beck et al. (1996). Modelo de estudante M´odulo Pedag´ogico Modelo de Comunica¸c˜ao Conhecimento de Dom´ınio Modelo de Especialista T T & & & &b    } E ' E Figura 3.1: Componentes de um STI, segundo Beck et al. (1996) Uma alternativa com altera¸c˜oes mais significativas ´e a de Gugerty (1997). Gugerty (1997) prop˜oe a cria¸c˜ao de sistemas tutoriais inteligentes sem m´odulos de estudante. Tais sistemas seriam, ent˜ao, ferramentas computacionais de aux´ılio a professores. Esses sistemas s˜ao chamados sistemas tutoriais inteligentes n˜ao-diagn´osticos, em oposi¸c˜ao aos sistemas tutoriais inteligentes tradicionais que fazem um diagn´ostico do estado afetivo e/ou cognitivo do estudante. De fato, a experiˆencia tem mostrado que sistemas tutoriais inteligentes s˜ao caros e dif´ıceis de se desenvolver, embora bastante efetivos (Murray, 1999), e o m´odulo de estudante ´e a parte mais dif´ıcil de se desenvolver (Burns e Capps, 1988). Ademais, o estado atual da tecnologia inform´atica ainda n˜ao oferece uma largura de banda de informa¸c˜oes sobre o usu´ario suficiente para uma avalia¸c˜ao significativa do estado cognitivo e afetivo do aluno e, no final das contas, os ganhos pedag´ogicos do uso de sistemas tutoriais inteligentes n˜ao-diagn´osticos s˜ao consider´aveis (Gugerty, 1997). Embora esse tipo de sistema tutorial fuja do modelo tradicional, ele ´e bastante promissor e pode servir como referˆencia em v´arios aspectos para o nosso sistema. Como se percebe, h´a v´arias divergˆencias sobre como organizar a arquitetura de um sistema tutorial inteligente. Entretanto, essas s˜ao, quase sempre, divergˆencias superficiais: todos os modelos de sistemas tutoriais inteligentes, de certo modo, derivam da arquitetura seminal apresentada por Self (1974). 3.2 Categorias de sistemas tutoriais inteligentes Nosso primeiro passo ser´a tentar situar o Tutorial ICC no estado da arte dos sistemas tutoriais inteligentes. O que ´e interessante que o Tutorial ICC tenha? O que outros sistemas nos ensinam? Uma primeira diferencia¸c˜ao a ser feita ´e entre os sistemas tutoriais inteligentes shell e tool. Um shell ´e um framework para desenvolvimento de sistemas tutoriais inteligentes; ge- ralmente, ´e mais voltado para programadores de computadores, que podem customiz´a-los, e s˜ao mais gen´ericos. J´a tools s˜ao mais voltados para o p´ublico em geral, fornecendo inter- faces que permitem n˜ao programadores registrarem o conhecimento no sistema (Murray, 1999). Nessa categoriza¸c˜ao, Tutorial ICC ´e claramente um tool. 10
  • 24. Murray (1999) divide os sistemas tutoriais inteligentes em sete categorias n˜ao ortogo- nais em fun¸c˜ao dos seus dom´ınios de atua¸c˜ao e ´areas em que seu uso ´e mais adequado. As categorias, sumarizadas na tabela 3.1, s˜ao as seguintes: 1. Planejamento e sequenciamento de curr´ıculos Os sistemas tutoriais inteligentes de planejamento e sequenciamento de curr´ıculos definem unidades de instru¸c˜ao cujo fluxo de apresenta¸c˜ao ´e decidido pelo sistema de acordo com as necessidades do aluno. Para o estudante, esses sistemas s˜ao muito semelhantes a sistemas de gerenciamento de cursos (como o Moodle); entretanto, os sistemas de planejamento e sequenciamento de curr´ıculos podem seguir quaisquer ordens mais adequadas de apresenta¸c˜ao de conte´udos. A ordem de apresenta¸c˜ao de conte´udos deve, por´em, ser escolhida pelo sistema de forma automatizada, sem interferˆencia humana, assim como deve se adequar especificamente ao desempenho de cada aluno. 2. Estrat´egias tutoriais Diz-se que um sistema tutorial inteligente tem foco em estrat´egias tutoriais (ou estrat´egias de ensino) quando tem a capacidade de decidir quais as melhores es- trat´egias de apresenta¸c˜ao de conte´udo para o aluno. Esses sistemas s˜ao semelhantes aos sistemas de planejamento e sequenciamento de curr´ıculos, mas agem em um n´ıvel de abstra¸c˜ao mais baixo. Enquanto os sistemas de planejamento e sequencia- mento de curr´ıculos tomam decis˜oes sobre quais componentes do fluxo da mat´eria v˜ao apresentar; sistemas de estrat´egias tutoriais escolhem o melhor momento para apresentar ferramentas de ensino, e n˜ao s´o conte´udo. Por exemplo, um sistema que decida explicar mais detalhadamente um determinado t´opico do ensino e escolha quando apresentar uma determinada explica¸c˜ao ou um exemplo s˜ao sistemas de estrat´egias tutoriais. 3. Simula¸c˜ao de dispositivos e treinamento em equipamentos V´arios sistemas tutoriais inteligentes buscam simular certos dispositivos para o estu- dante. A intera¸c˜ao entre o estudante e o sistema mimetiza o uso de um determinado dispositivo ou equipamento. Desse modo, esses sistemas, categorizados como siste- mas de simula¸c˜ao de dispositivos ou sistemas de treinamento em equipamentos, per- mitem que o estudante possa compreender o funcionamento do dispositivo simulado sem ter de lidar com o dispositivo em si. Isso ´e especialmente ´util quando se quer ensinar o uso de equipamentos caros, fr´ageis, perigosos ou inacess´ıveis. Tais sistemas tamb´em s˜ao interessantes pois permitem que se dˆe uma resposta mais did´atica ao estudante, ao inv´es do erro real gerado pelo dispositivo. 4. Sistemas especialistas e tutores cognitivos ´E bastante comum o uso de simula¸c˜oes cognitivas em sistemas tutoriais inteligentes. Sistemas tutoriais inteligentes que usam esse m´etodo possuem um mecanismo de simula¸c˜ao de cogni¸c˜ao que, baseado em regras, tentam criar um modelo de cogni¸c˜ao do atual est´agio de conhecimento do aluno. Esse modelo ´e utilizado pelo m´odulo 11
  • 25. especialista para definir o melhor fluxo de ensino. Esses sistemas s˜ao chamados de sistemas tutores cognitivos, ou sistemas de modelagem de cogni¸c˜ao. Murray (1999) p˜oe na mesma categoria tanto esses sistemas quanto os sistemas que fazem uso de sistemas especialistas para a resolu¸c˜ao de problemas. A diferen¸ca ´e que sistemas especialistas s˜ao utilizados no m´odulo especialista para encontrar a solu¸c˜ao de problemas did´aticos e n˜ao para modelar o estado cognitivo do estudante. 5. M´ultiplos tipos de conhecimento Quanto um sistema tutorial inteligente baseia-se em uma determinada teoria do conhecimento para escolher a maneira mais adequada de apresentar uma parte do conte´udo, diz-se que o sistema possui m´ultiplos tipos de conhecimentos. Por exem- plo, um sistema com m´ultiplos tipos de conhecimento pode dividir o conhecimento a ser transmitido em trˆes categorias: fatos, conceitos e procedimentos. Cada com- ponente da habilidade maior a ser ensinada contaria com um m´etodo espec´ıfico de ensino, dependendo de qual das trˆes categorias acima melhor modela o componente. Esses sistemas tendem a ser mais f´aceis de configurar, mas s˜ao menos flex´ıveis. 6. Sistemas de prop´osito espec´ıfico Embora sistemas tutoriais inteligentes gen´ericos tenham atra´ıdo bastante interesse, tamb´em pode ser interessante projetar sistemas tutoriais inteligentes para ´areas es- pec´ıficas. N˜ao raramente, sistemas gen´ericos surgem do desenvolvimento de um sistema espec´ıfico que vai gradativamente se tornando parametriz´avel e reutiliz´avel. Por um lado, esses sistemas de prop´osito espec´ıfico atingem um p´ublico-alvo bem restrito; por outro lado, podem utilizar ferramentas did´aticas espec´ıficas mais po- derosas. 7. Hiperm´ıdia adaptativa/inteligente Com a crescente sofistica¸c˜ao de sistemas de hiperm´ıdia (notadamente, a Web), um passo natural seria o desenvolvimento de sistemas tutoriais inteligentes baseados em hiperm´ıdia adaptativa (ou hiperm´ıdia inteligente). De fato, sistemas tutoriais inteligentes baseados na Web tˆem se tornado predominantes nessa ´area de pesquisa. Esses sistemas permitem a apresenta¸c˜ao, ordena¸c˜ao, filtragem etc. de links em fun¸c˜ao de v´arios aspectos da disciplina ou do desempenho do aluno, como fluxo de apresenta¸c˜ao, dificuldade, adequa¸c˜ao de pr´e-requisitos etc. Comumente, tais sistemas s˜ao sistemas de planejamento e sequenciamento de curr´ıculo, ou sistemas de estrat´egias tutoriais com uma interface baseada em hiperm´ıdia. Embora essa classifica¸c˜ao mais pare¸ca a “enciclop´edia chinesa” de Jorge Luis Bor- ges (Foucault, 2002) que uma taxonomia tradicional, ela ´e muito ´util. O pr´oprio Murray a descreve mais como um “saco de dicas” que uma “caixa de ferramentas”. De qual- quer forma, Tutorial ICC pode se encaixar mais ou menos bem em v´arias dessas ca- tegorias. Nosso objetivo inicial ´e, a princ´ıpio, torn´a-lo um sistema de planejamento e sequenciamento de curr´ıculos, ou, mais provavelmente, um sistema de estrat´egias tuto- riais; naturalmente, podemos torn´a-lo ambos. Do mesmo modo, j´a hoje o Tutorial ICC 12
  • 26. Categoria Vantagens Desvantagens Varia¸c˜oes Planejamento e sequenci- amento de curr´ıculos Executar regras para sequenciamento de m´odulos e programas Pouca fidelidade ao modelo de estudante; representa¸c˜ao superfi- cial de habilidades As regras podem ser fixas ou alter´aveis pelo autor Estrat´egias tutoriais Estrat´egias tutoriais vari´aveis dentro do m´odulo; conjunto so- fisticado de primitivas e m´ultiplas estrat´egias tutoriais Pouca fidelidade ao modelo de estudante; representa¸c˜ao superfi- cial de habilidades M´etodo de estrat´egia de representa¸c˜ao, fonte de expertise instrucional Simula¸c˜ao de dispositivos e treina- mento em equipamentos Tutoramento de iden- tifica¸c˜ao de compo- nentes, opera¸c˜ao e re- solu¸c˜ao de problemas; habilidades procedu- rais Estrat´egias instrutivas limitadas; modelagem de estudante limitada Fidelidade da si- tua¸c˜ao, facilidade de composi¸c˜ao de tutorial Sistemas especialistas e tutores cognitivos Modelo do dom´ınio de especializa¸c˜ao mais profundo e execut´avel; facilidade de inclus˜ao de erros e comporta- mento de novato Dificuldade de cons- tru¸c˜ao; limita¸c˜ao a ha- bilidades procedurais ou de solu¸c˜ao de pro- blemas; estrat´egias de instru¸c˜ao limitadas Modelos de habilidade baseados em cogni¸c˜ao ou desempenho M´ultiplos tipos de conhecimento Representa¸c˜ao clara e m´etodo instrutivos pr´e-definidos para fatos, conceitos e procedimentos Limitado a fatos, con- ceitos e procedimentos simples; estrat´egias tutoriais pr´e-definidas Inclus˜ao de sequenci- amento curricular in- teligente; varia¸c˜ao dos tipos de conhecimento e tarefas suportados Sistemas de prop´osito espec´ıfico Modelos de sistemas provˆeem uma grande ajuda na composi¸c˜ao do conte´udo; um projeto ou princ´ıpio pedag´ogico espec´ıfico pode ser enfatizado Ferramentas limitadas ao tipo de tutor que suportam; inflexibili- dade na representa¸c˜ao e pedagogia Grau de inflexibili- dade Hiperm´ıdia adaptati- va/inteligente Acess´ıvel pela Web; uniformidade de in- terface de usu´ario; sele¸c˜ao adaptativa e anota¸c˜ao de hiper- liga¸c˜ao Intera¸c˜ao limitada; largura de banda de resposta de modelo de estudante limitada Foco em micro ou ma- crovis˜ao; grau de inte- ratividade. Tabela 3.1: Categorias de STIs, segundo Murray (1999) 13
  • 27. fornece simula¸c˜oes de um computador, tornando-o um potencial sistema de simula¸c˜ao de dispositivos. Como programa¸c˜ao exige o conhecimento de uma s´erie de fatos, concei- tos e habilidades, ´e tamb´em bem prov´avel que o Tutorial ICC se torne um sistema de m´ultiplos conhecimentos. Como, afinal, o Tutorial ICC ´e um sistema Web, ele ´e, desde j´a, um sistema de hiperm´ıdia, e o transformaremos em um sistema de hiperm´ıdia adapta- tiva. Estudando cada um dos cases apresentados em Murray (1999), podemos encontrar diversas id´eias para nos auxiliar no nosso projeto. 3.3 Vantagem dos sistemas tutoriais inteligentes Os sistemas de aprendizagem auxiliada por computador (SAAC) fornecem uma s´erie de vantagens aos professores e estudantes de programa¸c˜ao. Por exemplo, dado o aumento na demanda por cursos focados em Tecnologia da Informa¸c˜ao, o n´umero de aluno nas turmas de disciplinas de programa¸c˜ao tende a crescer bastante, como comentamos no cap´ıtulo 1; SAACs permitem que as partes mais f´aceis de assimilar do conte´udo dessas disciplinas sejam ministradas em massa para os alunos, permitindo que o professor se desgaste menos e foque mais em ajudar os alunos com mais dificuldades. De modo an´alogo, estes sistemas viabilizam cursos de educa¸c˜ao a distˆancia (EaD). Tais sistemas tamb´em permitem que o aluno possa estudar em seu pr´oprio ritmo, algo que pode ser bastante positivo para a aprendizagem, conforme comentado na se¸c˜ao 2.3. O Tutorial ICC, sobre o qual trabalhamos, ´e um exemplo sistema de aprendizagem auxiliada por computador (SAAC). Entretanto, SAACs tˆem desvantagens. Uma destas desvantagens ´e a despersonaliza¸c˜ao do ensino. Mesmo cursos tradicionais de programa¸c˜ao n˜ao alcan¸cam o ideal de cursos personalizados, com foco nas dificuldades dos alunos; SAACs tradicionais tendem a ser ainda mais problem´aticos. De modo an´alogo, estes sistemas n˜ao se adaptam ao ritmo de aprendizagem e estilo de estudo dos estudantes. T´ecnicas de desenvolvimento de STIs podem ser utilizadas em SAACs para tentar su- perar essas desvantagens. De fato, v´arios STIs se adaptam ao ritmo, estilo e personalidade do aluno. A m´edio prazo, espera-se que o Tutorial ICC torne-se adapt´avel aos diversos n´ıveis de dificuldade dos alunos. 3.4 O papel do trabalho corrente Neste trabalho, nosso objetivo ´e prover ao Tutorial ICC uma s´erie de exemplos, orga- nizados em taxonomias de exemplos hier´arquicas, que permitam que alunos em diversos est´agios e ritmos de aprendizagem analisar cen´arios simples e complexos de acordo com sua pr´opria capacidade. Esses cen´arios devem conter um enunciado, uma solu¸c˜ao em c´odigo-fonte Pascal e um script de execu¸c˜ao de “tira-teima”, que representa graficamente a execu¸c˜ao do programa, atrav´es de uma applet Java. Tamb´em faz parte do trabalho uma representa¸c˜ao da posi¸c˜ao do aluno na taxonomia. A maneira como essas tarefas foram desenvolvidas ´e apresentadas no cap´ıtulo 4. 14
  • 28. Cap´ıtulo 4 Taxonomias de Exemplos Afora os exemplos desenvolvidos e integrados ao Tutorial ICC, um dos principais resulta- dos deste trabalho ´e o m´etodo de desenvolvimento de uma forma de estruturar problemas que denominamos taxonomias hier´arquicas de exemplos. O m´etodo envolve uma s´erie de passos, seus pr´oprios termos e algumas recomenda¸c˜oes. Abaixo, seguem estes resultados. 4.1 Taxonomia hier´arquica de exemplos Uma taxonomia ´e, literalmente, a ciˆencia ou t´ecnica de classifica¸c˜ao (Houaiss et al., 2001, pp. 2680—2681). No nosso trabalho, uma taxonomia de exemplos ´e uma classifica¸c˜ao de um conjunto de exemplos; por extens˜ao, uma taxonomia de exemplos ´e tamb´em um conjunto de exemplos organizados segundo uma determinada classifica¸c˜ao. Por sua vez, uma taxonomia hier´arquica de exemplos ´e uma taxonomia na qual os exemplos s˜ao orga- nizados de forma estruturada, como ´arvores. Tamb´em dizemos, neste trabalho, que uma taxonomia hier´arquica ´e uma ´arvore de exemplos, de modo que ´e poss´ıvel que nos refi- ramos a alguma propriedade de ´arvores, mas se referindo a uma taxonomia hier´arquica. Como trataremos apenas de taxonomias hier´arquicas de exemplos, toda vez que usarmos o termo “taxonomia” o significado ser´a “taxonomia de exemplos hier´arquica”. Cada taxonomia exemplifica o uso de um conjunto de caracter´ısticas remov´ıveis. Uma caracter´ıstica remov´ıvel ´e um conceito, t´ecnica ou padr˜ao que o estudante deve aprender. A raiz da ´arvore da taxonomia deve utilizar todas as caracter´ısticas remov´ıveis; seus n´os diretamente subordinados devem explorar subconjuntos diferentes das taxonomias da raiz, e os filhos desses n´os apresentar˜ao subconjuntos dos subconjuntos que seus pais apresentam. Na pr´atica, n´os utilizamos taxonomias com duas ou trˆes caracter´ısticas remov´ıveis. Se a taxonomia tiver duas caracter´ısticas remov´ıveis, os n´os filhos da raiz dever˜ao ter, cada um, uma caracter´ıstica. Parece natural que cada um desses n´os tenha ele mesmo um n´o filho sem nenhuma caracter´ıstica; entretanto, n˜ao seria muito did´atico fazer o estudante descer mais um n´ıvel nos exemplos para observar um exemplo que sequer apre- senta uma das caracter´ısticas da ´arvore. Deste modo, o n´o que n˜ao cont´em nenhuma 15
  • 29. das caracter´ısticas remov´ıveis torna-se filho do n´o principal. A figura 4.1 apresenta uma representa¸c˜ao gr´afica dessa ´arvore. O travess˜ao ´e o r´otulo do n´o sem caracter´ısticas. C1, C2 — C1 C2           Figura 4.1: Representa¸c˜ao de taxonomia com duas caracter´ısticas remov´ıveis Se a taxonomia tiver trˆes caracter´ısticas remov´ıveis, o exemplo raiz deve usar as trˆes. A raiz teria, usualmente, trˆes n´os filhos, cada um apresentando duas das trˆes caracter´ısticas remov´ıveis. Esse n´o filho ´e, por sua vez, raiz de uma sub´arvore que tem a estrutura de uma taxonomia de duas caracter´ısticas remov´ıveis. A figura 4.2 apresenta uma representa¸c˜ao gr´afica dessa ´arvore. O travess˜ao ´e o r´otulo do n´o sem caracter´ısticas. C1, C2, C3 C1, C2 D D D D D D D D D C1, C3 C2, C3 l l l l l l l l l — C1 C2 v v v v v vv — C1 C3 v v v v v vv — C2 C3 v v v v v vv Figura 4.2: Representa¸c˜ao de taxonomia com trˆes caracter´ısticas remov´ıveis Se uma taxonomia tem uma das estruturas apresentadas acima, dizemos que ´e uma taxonomia totalmente preenchida. Embora tenhamos focado em gerar taxonomias total- mente preenchidas, nem sempre ´e poss´ıvel ou interessante “for¸car” o total preenchimento 16
  • 30. de uma taxonomia. Por exemplo, muitas vezes o exemplo sem caracter´ısticas remov´ıveis em uma taxonomia pode ser simples demais e n˜ao precisa ser apresentado. Isto ocorre co- mumente com taxonomias de trˆes caracter´ısticas, e a ´arvore resultante possui a estrutura representada na figura 4.3. A se¸c˜ao 5.2 apresenta uma taxonomia com esta estrutura. C1, C2, C3 C1, C2 D D D D D D D D D C1, C3 C2, C3 l l l l l l l l l C1 ¢ ¢ ¢ ¢ ¢ ¢¢ C2 f f f f f ff C1 ¢ ¢ ¢ ¢ ¢ ¢¢ C3 f f f f f ff C2 ¢ ¢ ¢ ¢ ¢ ¢¢ C3 f f f f f ff Figura 4.3: Representa¸c˜ao de taxonomia sem n´o sem caracter´ısticas Outro caso de ´arvore n˜ao totalmente preenchida ocorrem quando ao menos uma ca- racter´ıstica remov´ıvel s´o pode ser apresentada se uma outra qualquer estiver presente. Por exemplo, considere uma ´arvore de trˆes caracter´ısticas remov´ıveis C1, C2 e C3 tal que, para C3 estar presente em um exemplo, ´e necess´ario que ou C1 ou C2 tamb´em estejam presentes. N˜ao h´a exemplos que exercitem apenas C3. A estrutura da taxonomia ´e a apre- sentada na figura 4.4, e a se¸c˜ao 5.4 apresenta uma taxonomia na qual esta configura¸c˜ao ocorre. Dizemos que essas caracter´ısticas remov´ıveis s˜ao caracter´ısticas n˜ao-ortogonais entre si pois elas se influenciam; em contraposi¸c˜ao, caracter´ısticas remov´ıveis que podem estar presentes em um exemplo independente das outras s˜ao chamadas de caracter´ısticas ortogo- nais entre si. Se uma taxonomia ´e constru´ıda apenas a partir de caracter´ısticas ortogonais — isto ´e, todas as caracter´ısticas que geram a taxonomia s˜ao ortogonais entre si —, ela ´e dita uma taxonomia ortogonal; caso contr´ario, ´e chamada de taxonomia n˜ao-ortogonal. Em geral, nossa experiˆencia indicou que taxonomias n˜ao-ortogonais s˜ao mais complexas de criar e, ao que tudo indica, menos claras, didaticamente falando. Enquanto ´e perfeita- mente razo´avel construir taxonomias n˜ao totalmente preenchidas, construir taxonomias n˜ao-ortogonais n˜ao ´e o ideal. 17
  • 31. C1, C2, C3 C1, C2 D D D D D D D D D C1, C3 C2, C3 l l l l l l l l l C1 ¢ ¢ ¢ ¢ ¢ ¢¢ C2 f f f f f ff C1 C2 Figura 4.4: Representa¸c˜ao de uma taxonomia n˜ao-ortogonal 4.2 Enunciados e solu¸c˜oes Dados os conceitos apresentados na se¸c˜ao 4.1, o processo para o desenvolvimento de ta- xonomias de problemas pˆode ser facilmente definido. Primeiro, defin´ıamos conjuntos de duas ou trˆes caracter´ısticas remov´ıveis — idealmente, conjunto de caracter´ısticas que usualmente aparecem de fato pr´oximas em problemas reais e que fossem caracter´ısticas ortogonais entre si. Para cada um desses conjuntos, elaboramos um enunciado que possi- bilite apresentar todas as caracter´ısticas, assim como enunciados que permitam apresentar apenas subconjuntos das caracter´ısticas, formando uma taxonomia hier´arquica. Para cada um dos enunciados, elaboramos um pequeno programa que resolva o problema. A elabora¸c˜ao de enunciados apresenta uma s´erie de quest˜oes. Por exemplo, qual ´e o melhor estilo: enunciados que apresentem problemas da vida real, ou enunciados abs- tratos? Conforme comentamos na se¸c˜ao 2.2, h´a estudantes que lidariam melhor com um estilo, enquanto outros apreciariam mais o outro — e nem consideramos outros parˆametros que variam em fun¸c˜ao do tipo de personalidade! Nossa abordagem foi experimentar enun- ciados de ambos os estilos. Em breve, poderemos avaliar os resultados1 . Outra quest˜ao foi: como exercitar bugs conceituais dos estudantes? Na se¸c˜ao 2.2 comentamos que h´a v´arios enganos que estudantes cometem recorrentemente. Esses en- ganos podem servir de guia para os exemplos, mas ainda h´a o desafio de inseri-los em enunciados. Do mesmo modo, h´a padr˜oes de programa¸c˜ao importantes e ´uteis que os 1 Um estilo que pode ser promissor s˜ao os enunciados baseados em abstra¸c˜oes com estado, especialmente jogos, como o Jogo da Vida, Snake ou Tetris. De fato, em conversas e observa¸c˜oes aned´oticas com calouros, notamos que esses problemas s˜ao especialmente apreciados. 18
  • 32. estudantes devem conhecer, e deve haver enunciados que os apresentem. Em verdade, bugs conceituais e padr˜oes importantes s˜ao boas caracter´ısticas remov´ıveis. Tamb´em se questionou qual deve ser a rela¸c˜ao entre os enunciados de uma taxono- mia. Os enunciados devem ser independentes ou relacionados? Nossa hip´otese ´e que os enunciados devem ser relacionados, e os mais simples devem ser vers˜oes ou “passos” dos enunciados mais completos. Isto, supomos, mant´em o estudante no contexto mental do problema, facilitando sua compreens˜ao. Uma vez definidos os enunciados, devemos desenvolver os programas que os soluci- onam. A linguagem de programa¸c˜ao em que foram solucionados foi aquela j´a utilizada no Tutorial ICC: Pascal. Pascal ´e uma boa escolha tamb´em porque ´e uma linguagem did´atica, como explicado na se¸c˜ao 2.3. Um desafio na cria¸c˜ao dos enunciados ´e: como criar um enunciado que “force” — isto ´e, torne mais natural — o aluno a utilizar as caracter´ısticas que queremos? Depois de criarmos algumas taxonomias, notamos que esta ´e uma quest˜ao secund´aria: embora seja realmente interessante criar enunciados que levem intuitivamente `as caracter´ısticas remov´ıveis escolhidas, s˜ao os desenvolvedores das taxonomias que escolhem como soluci- onar˜ao os enunciados. Isto ´e interessante de se ter em mente porque, por vezes, alguns enunciados tornam-se pouco intuitivos para for¸car a solu¸c˜ao de um problema em uma determinada dire¸c˜ao. Este esfor¸co, por´em, n˜ao ´e necess´ario. A taxonomia apresentada na se¸c˜ao 5.2 ´e um bom exemplo pr´atico disso. Figura 4.5: Screenshot da applet Java executando um “tira-teima” 19
  • 33. 4.3 “Tira-teima” e roteiros Um dos recursos mais not´aveis do Tutorial ICC s˜ao os “tira-teimas”: representa¸c˜oes gr´aficas da execu¸c˜ao de um programa. Esses “tira-teimas” s˜ao apresentados atrav´es de uma applet Java, apresentada na figura 4.5. Os “tira-teimas” s˜ao compostos de duas partes: um programa cuja execu¸c˜ao ser´a simulada e um script espec´ıfico que simular´a a execu¸c˜ao. Denominamos tais scripts de roteiros. Cada linha de um roteiro inicia com um n´umero inteiro; este n´umero ´e o ´ındice da linha do programa simulado que ser´a real¸cada no programa quando a linha do roteiro for executada. Ap´os este ´ındice, podem vir zero ou mais comandos separados por ponto- e-v´ırgula. Se n˜ao houver nenhum comando a ser executado na linha, apenas o ponto-e- v´ırgula segue o n´umero; se houver mais de um, os comandos devem vir entre chaves. H´a, basicamente, comandos de declara¸c˜ao de vari´aveis (que aparecem como caixas coloridas na applet de tira-teima, comandos de escrita (que imprimem um valor no console da applet e altera¸c˜ao de valores de vari´aveis. A figura 4.6 apresenta o exemplo do roteiro utilizado para o exemplo apresentado na se¸c˜ao 5.4.3.1. 1; 3; 4 real a, b; 6; 7 writeln (Digite a parte real:); 8 {writeln (3.0); a = 3.0;} 9 writeln (Digite a parte imaginaria:); 10 {writeln (0.0); b = 0.0;} 11; 18; 19; 22; 23 writeln (3.0 + 0.0i e um real nao -negativo.); 24; Figura 4.6: Exemplo de roteiro de “tira-teima” Um roteiro pode percorrer apenas um caminho dentro de um programa. Por exemplo, se h´a um comando if com uma cl´ausula else no programa, um roteiro pode passar apenas pela cl´ausula then ou pela cl´ausula else. Isto levanta uma quest˜ao importante: como escolher o caminho que um roteiro deve percorrer em um programa? N´os utilizamos alguns crit´erios bem simples para escolher os caminhos. Um, bastante natural, foi: Se o programa apresenta apenas uma caracter´ıstica remov´ıvel, o caminho escolhido deve executar a caracter´ıstica. 20
  • 34. O programa apresentado na se¸c˜ao 5.1.3.4 por exemplo, possui como caracter´ıstica remov´ıvel a presen¸ca da cl´ausula else no comando if. O roteiro deste programa iria, ent˜ao, passar pelo comando da cl´ausula else, ao inv´es de passar pela cl´ausula then. Outro crit´erio adotado foi: Dentre dois caminhos poss´ıveis, o roteiro deve passar pelo caminho mais complexo ou que gere mais sa´ıda para o console da applet. Este crit´erio foi adotado porque acreditamos que, quanto mais linhas de c´odigo o estudante observar serem executadas, mais oportunidades haver´a para fixar conceitos. Al´em disso, execu¸c˜oes sem sa´ıda podem ser bastante confusas: para o iniciante, ´e bem poss´ıvel que um programa que n˜ao imprima nada pare¸ca um programa que n˜ao fa¸ca nada. 4.4 Localiza¸c˜ao na taxonomia Os v´arios exemplos s˜ao apresentados em p´aginas HTML separadas, mas sentimos a ne- cessidade de prover ao estudante uma maneira de ele se localizar em uma determinada taxonomia. A solu¸c˜ao foi criar imagens de ´arvores, nas quais o exemplo em que o estu- dante se encontra ´e destacado atrav´es de cores. A figura 4.7 apresenta a representa¸c˜ao de uma ´arvore. Figura 4.7: Representa¸c˜ao da localiza¸c˜ao do aluno na taxonomia 21
  • 35. 4.5 Resumo Dados os conceitos acima, o processo de cria¸c˜ao de taxonomias para um cap´ıtulo pode ser resumido da seguinte maneira: 1. selecionar conceitos e estruturas relevantes — isto ´e, caracter´ısticas remov´ıveis — a partir do tema do cap´ıtulo; 2. agrupar as caracter´ısticas remov´ıveis em conjuntos de duas ou trˆes caracter´ısticas. Idealmente, as caracter´ısticas s˜ao conceitualmente pr´oximas e ortogonais entre si; 3. criar, para cada conjunto agrupado, enunciados que levem a programas que apresen- tem subconjuntos das caracter´ısticas. Pode-se, eventualmente, n˜ao criar enunciados para alguns subconjuntos que sejam triviais ou invi´aveis. Os enunciados de uma taxonomia devem, idealmente, ser vers˜oes mais simples ou mais completas de um problema; 4. para cada enunciado, desenvolver uma solu¸c˜ao, em linguagem Pascal; 5. para cada solu¸c˜ao, desenvolver um roteiro de “tira-teima”; 6. inserir os programas e roteiros em p´aginas HTML do Tutorial ICC; 7. para cada p´agina, criar uma representa¸c˜ao gr´afica da taxonomia da qual a p´agina faz parte, e inserir essa representa¸c˜ao na p´agina. Naturalmente, os passos n˜ao precisam seguir for¸cosamente esta ordem, mas ´e usual que sejam seguidos assim. O cap´ıtulo 5 apresenta a aplica¸c˜ao deste processo em um cap´ıtulo do Tutorial ICC. 22
  • 36. Cap´ıtulo 5 Exemplos de Taxonomias No tutorial ICC, implementamos sete conjuntos de taxonomias, um para cada um dos cap´ıtulos do tutorial, a partir do segundo1 . O primeiro conjunto implementado foram as taxonomias do cap´ıtulo 3. Este cap´ıtulo trata de estruturas de decis˜ao if-then-else e case-of. Julgamos os conceitos por tr´as destes comandos sofisticados o suficiente para antevermos alguns desafios da cria¸c˜ao de taxonomias, mas simples o suficiente para que n˜ao nos perdˆessemos no seu desenvolvi- mento; por isso, cap´ıtulo 3 do tutorial foi escolhido para o desenvolvimento da primeira taxonomia. Chegamos a v´arias conclus˜oes e questionamentos durante a cria¸c˜ao desta taxonomia e, portanto, elegemos a taxonomia deste cap´ıtulo como um bom exemplo para ser analisado. 5.1 ´Arvore 1 Na primeira ´arvore do cap´ıtulo 3, propomos ao aluno um problema que possa ser resol- vido com o comando if-then — assim sendo, todos os problemas da ´arvore devem ser solucionados utilizando a estrutura condicional. As caracter´ısticas remov´ıveis, nesta pri- meira ´arvore, s˜ao o uso do comando else e a presen¸ca de um comando composto, formado por v´arios outros comandos agrupados pelos delimitadores de blocos begin-end. Como h´a duas caracter´ısticas remov´ıveis, essa ´arvore possui dois n´ıveis de hierarquia e quatro exemplos. 5.1.1 Caracter´ısticas remov´ıveis C1. uso de blocos begin-end C2. uso de else 1 O primeiro cap´ıtulo ´e, basicamente, para apresenta¸c˜ao de conceitos sobre computadores. Nesse sentido, n˜ao h´a como criar uma taxonomia de exemplos de programa¸c˜ao para o cap´ıtulo. 23
  • 37. 5.1.2 Numera¸c˜ao dos exemplos C1 C2 Exemplo • • 1 (subse¸c˜ao 5.1.3.1) – – 1.1 (subse¸c˜ao 5.1.3.2) • – 1.2 (subse¸c˜ao 5.1.3.3) – • 1.3 (subse¸c˜ao 5.1.3.4) 5.1.3 Enunciados e programas 5.1.3.1 Exemplo 1 Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para pessoas com mais de 25 anos. Fa¸ca um programa que leia o pre¸co do carro a ser segurado e a idade do motorista. Se o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor do seguro. Se o carro valer, por exemplo, R° 20 mil, a mensagem ser´a: ’Valor do seguro: R° 1000.00. ’ Se o motorista n˜ao tiver idade para contratar o seguro, imprima duas linhas. A primeira linha ser´a: ’Voce nao pode contratar o seguro.’ Supondo que o motorista tenha 22 anos, a segunda linha ser´a: ’podera contaratar em 3 anos.’ Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo1; var idade : integer; preco : real; begin writeln(’Qual e a sua idade?’); readln(idade); writeln(’Qual e o preco de seu carro?’); readln(preco); 24
  • 38. if idade = 25 then writeln(’Valor do seguro: R° ’, preco /20:2:2 , ’.’) else begin writeln(’Voce nao pode contratar o seguro.’); writeln(’Podera contratar em ’, 25 - idade , ’ anos.’); end; end. 5.1.3.2 Exemplo 1.1 Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para pessoas com mais de 25 anos. Fa¸ca um programa que diga se um potencial cliente dessa seguradora pode contratar um seguro. O programa deve ler a idade do cliente e, caso ele tenha idade para contratar o seguro, deve imprimir a mensagem: ’Voce pode contratar o seguro.’ Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo1_1; var idade : integer; begin writeln(’Qual e a sua idade?’); readln(idade); if idade = 25 then writeln(’Voce pode contratar o seguro.’); end. 5.1.3.3 Exemplo 1.2 Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para pessoas com mais de 25 anos. Fa¸ca um programa que diga se um potencial cliente dessa seguradora pode contratar um seguro. O programa deve ler a idade do cliente e, caso ele n˜ao tenha idade para contratar o seguro, deve imprimir a mensagem: 25
  • 39. ’Voce nao pode contratar o seguro.’ Al´em disso, deve tamb´em informar quando o cliente ter´a idade para contratar o seguro. Supondo que o cliente tenha 22 anos, a mensagem ser´a: ’Podera contratar em 3 anos.’ Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo1_2; var idade : integer; begin writeln(’Qual e a sua idade?’); readln(idade); if idade 25 then begin writeln(’Voce nao pode contratar o seguro.’); writeln(’Podera contratar em ’, 25-idade ,’ anos.’); end; end. 5.1.3.4 Exemplo 1.3 Enunciado Uma companhia de seguros vende seguros de carros. O pre¸co de um seguro anual ´e 5%, ou 1/20 do pre¸co do carro. Entretanto, a companhia s´o vende seguros para pessoas com mais de 25 anos. Fa¸ca um programa que leia o pre¸co do carro a ser segurado e a idade do motorista. Se o motorista tiver idade para contratar seguro, imprima uma mensagem dizendo o valor do seguro. Se o carro valer, por exemplo, R° 20 mil, a mensagem ser´a: ’Valor do seguro: R° 1000.00. ’ Se o motorista n˜ao tiver idade para contratar o seguro, imprima a mensagem: ’Voce nao pode contratar o seguro.’ 26
  • 40. Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo1_3; var idade : integer; preco : real; begin writeln(’Qual e a sua idade?’); readln(idade); writeln(’Qual e o preco de seu carro?’); readln(preco); if idade = 25 then writeln(’Valor do seguro: R° ’, preco /20:2:2 , ’.’) else writeln(’Voce nao pode contratar o seguro.’); end. 5.1.4 Coment´arios No exemplo 1, t´ınhamos de apresentar ambas as caracter´ısticas remov´ıveis. Na ´arvore ori- ginal, acrescentamos a caracter´ıstica C2 colocando blocos de comando tanto na cl´ausula then quanto na cl´ausula else. Entretanto, decidimos posteriormente que seria mais inte- ressante colocar o comando composto em apenas uma das cl´ausulas: deste modo, espera-se que o aluno compreenda que ´e poss´ıvel ter um comando composto em uma das cl´ausulas tendo um comando simples na outra cl´ausula. Julgamos relevante inserir, sempre que poss´ıvel, esse tipo de assimetria nos problemas. Al´em disso, decidimos colocar o comando composto na cl´ausula else porque, no exemplo 1.2, o comando composto j´a fora colocado em uma cl´ausula then. 5.2 ´Arvore 2 Nosso objetivo na segunda ´arvore do cap´ıtulo 3 ´e apresentar exemplos de aplica¸c˜ao, ao aluno, do uso dos operadores booleanos and, or e not. A ´arvore tem trˆes caracter´ısticas remov´ıveis, que s˜ao o uso do operador and, o uso do operador or e o uso do operador not. O exemplo maior utiliza as trˆes caracter´ısticas remov´ıveis e possui trˆes exemplos diretamente subordinados; cada um desses exemplos possui duas das caracter´ısticas remov´ıveis, e possuem dois exemplos subordinados, cada um exercendo uma caracter´ıstica remov´ıvel do exemplo superior. 27
  • 41. 5.2.1 Caracter´ısticas remov´ıveis C1. uso do operador and C2. uso do operador or C3. uso do operador not 5.2.2 Numera¸c˜ao dos exemplos c1 c2 c3 Exemplo • • • 2 (subse¸c˜ao 5.2.3.1) • • – 2.1 (subse¸c˜ao 5.2.3.2) • – • 2.2 (subse¸c˜ao 5.2.3.3) – • • 2.3 (subse¸c˜ao 5.2.3.4) • – – 2.1.1, 2.2.1 (subse¸c˜ao 5.2.3.5) – • – 2.1.2, 2.3.1 (subse¸c˜ao 5.2.3.6) – – • 2.2.2, 2.3.2 (subse¸c˜ao 5.2.3.7) – – – — (ver coment´arios na subse¸c˜ao 5.2.4) 5.2.3 Enunciados e programas 5.2.3.1 Exemplo 2 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador, pergunte se ele tem US° 10 mil reais em uma conta no pa´ıs de origem e pergunte se ele tem um im´ovel. Se o usu´ario n˜ao tiver a carta ou alguma das duas outras condi¸c˜oes n˜ao for satisfeita, imprima a mensagem: ’Voce nao pode trabalhar no pais.’ Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2; var carta , dinheiro , imovel : char; begin 28
  • 42. writeln(’Voce tem carta de solicitacao?’); readln(carta); writeln(’Voce tem US° 10 mil?’); readln(dinheiro); writeln(’Voce tem um imovel?’); readln(imovel); if not (( carta=’s’) and (( dinheiro=’s’) or (imovel=’s’))) then writeln(’Voce nao pode trabalhar no pais.’); end. 5.2.3.2 Exemplo 2.1 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador, pergunte se ele tem US° 10 mil reais em uma conta no pa´ıs de origem e pergunte se ele tem um im´ovel. Se o usu´ario tiver a carta e alguma das duas outras condi¸c˜oes for satisfeita, imprima a mensagem: ’Voce pode trabalhar no pais.’ Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_1; var carta , dinheiro , imovel : char; begin writeln(’Voce tem uma carta de solicitacao?’); readln(carta); writeln(’Voce tem no minimo US° 10 mil?’); readln(dinheiro); writeln(’Voce tem um imovel?’); readln(imovel); if (carta=’s’) and (( dinheiro=’s’) or (imovel=’s’)) then writeln(’Voce pode trabalhar no pais.’); end. 29
  • 43. 5.2.3.3 Exemplo 2.2 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e pergunte se ele tem um im´ovel. Se o usu´ario tiver o dinheiro mas n˜ao tiver o im´ovel, imprima a mensagem: ’Mesmo sem imovel , voce pode trabalhar no pais se tiver uma carta .’ Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_2; var dinheiro , imovel : char; begin writeln(’Voce tem US° 10 mil?’); readln(dinheiro); writeln(’Voce tem um imovel?’); readln(imovel); if (dinheiro=’s’) and not (imovel=’s’) then writeln(’Mesmo sem imovel , voce pode trabalhar no pais se tiver a carta.’); end. 5.2.3.4 Exemplo 2.3 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e pergunte se ele tem um im´ovel. Se o usu´ario n˜ao tiver o dinheiro nem o im´ovel, imprima a mensagem: ’Voce nao pode trabalhar no pais.’ 30
  • 44. Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_3; var dinheiro , imovel : char; begin writeln(’Voce tem US° 10 mil?’); readln(dinheiro); writeln(’Voce tem um imovel?’); readln(imovel); if not (( dinheiro=’s’) or (imovel=’s’)) then writeln(’Voce nao pode trabalhar no pais.’); end. 5.2.3.5 Exemplos 2.1.1 e 2.2.1 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador e per- gunte se ele tem um im´ovel. Se o usu´ario tiver a carta e o im´ovel, imprima a mensagem: ’Voce pode trabalhar no pais.’ Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_1_1 ; var carta , imovel : char; begin writeln(’Voce tem uma carta de solicitacao?’); readln(carta); writeln(’Voce tem um imovel?’); readln(imovel); 31
  • 45. if (carta=’s’) and (imovel=’s’) then writeln(’Voce pode trabalhar no pais.’); end. 5.2.3.6 Exemplos 2.1.2 e 2.3.1 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem US° 10 mil em uma conta e pergunte se ele tem um im´ovel. Se o usu´ario tiver o dinheiro ou o im´ovel, imprima a mensagem: ’Voce so precisa da carta.’ Caso contr´ario, imprima a mensagem: ’Voce nao pode trabalhar no pais.’ As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_1_2 ; var dinheiro , imovel : char; begin writeln(’Voce tem US° 10 mil?’); readln(dinheiro); writeln(’Voce tem um imovel?’); readln(imovel); if (dinheiro=’s’) or (imovel=’s’) then writeln(’Voce so precisa da carta.’) else writeln(’Voce nao pode trabalhar no pais.’); end. 32
  • 46. 5.2.3.7 Exemplos 2.2.2 e 2.3.2 Enunciado Um certo pa´ıs exige que qualquer estrangeiro que v´a trabalhar em seu territ´orio satisfa¸ca duas condi¸c˜oes. A primeira condi¸c˜ao ´e que o contratador do estrangeiro envie uma carta `a embaixada. Al´em disso, o estrangeiro deve ter US° 10 mil em uma conta do pa´ıs de origem ou ter um im´ovel no pa´ıs de origem. Fa¸ca um programa que pergunte ao usu´ario se ele tem a carta do empregador. Se ele n˜ao tiver a carta, imprima a mensagem: ’Voce nao pode trabalhar no pais.’ Caso contr´ario, n˜ao imprima nada. As respostas que o programa espera s˜ao ’s’ (para “sim”) ou ’n’ (para “n˜ao”). Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo2_2_2 ; var carta : char; begin writeln(’Voce tem uma carta de solicitacao?’); readln(carta); if not (carta=’s’) then writeln(’Voce nao pode trabalhar no pais.’); end. 5.2.4 Coment´arios Para mostrar uma aplica¸c˜ao pr´atica destes operadores, utilizamos ainda o comando if. ´E interessante notar que procuramos evitar utilizar a cl´ausula else, justamente para “for¸car” ao aluno que pense em termos dos operadores. Isso provavelmente n˜ao ´e necess´ario: como programas implementando os enunciados j´a s˜ao apresentados, n˜ao ´e preciso for¸car o estudante a pensar de certa maneira — basta apresentar um enunciado que leve a uma solu¸c˜ao intuitiva utilizando as caracter´ısticas remov´ıveis do problema. Ademais, evitar utilizar a cl´ausula else acabou tornado os enunciados menos intuitivos. Por exemplo, enquanto a solu¸c˜ao do exemplo 2 possui um comando if arbitrariamente sem cl´ausula else , poder´ıamos acrescent´a-la que conseguir´ıamos ainda assim utilizar todos os operadores, como fizemos no exemplo da se¸c˜ao 5.2.3.6. A implementa¸c˜ao de ´arvores de trˆes n´ıveis apresenta v´arios desafios. Primeiro, s˜ao ´arvores maiores. Al´em disso, como podemos notar na ´arvore 2, elas n˜ao necessariamente levam a ´arvores totalmente preenchidas, que era nosso objetivo inicial: n˜ao h´a na ´arvore 2 um exemplo a que falte todas as caracter´ısticas remov´ıveis. N˜ao acrescentamos este 33
  • 47. exemplo porque ele possuiria apenas um comando if, o que j´a foi exercitado na ´arvore 12 . A ´arvore 4 ´e tamb´em n˜ao totalmente preenchida, embora por raz˜oes diferentes3 . Outro aspecto caracter´ıstico das ´arvores de trˆes caracter´ısticas ´e a repeti¸c˜ao de de exemplos. Como h´a trˆes exemplos subordinados ao exemplo maior, cada um destes exem- plos possui tamb´em seus subordinados com uma caracter´ıstica s´o. Por exemplo, obser- vando a tabela da subse¸c˜ao 5.2.2, percebe-se que os exemplos 2.1.1 e 2.2.1 exercitam a mesma caracter´ıstica, que ´e o uso do operador and. Assim sendo, decidimos repetir o enunciado e a solu¸c˜ao do exemplo 2.1.1 no exemplo 2.2.1. 5.3 ´Arvore 3 A terceira ´arvore deste cap´ıtulo considera o uso de comandos do tipo if-then, n˜ao aninha- dos, em seq¨uˆencia. As caracter´ısticas remov´ıveis, nesta primeira ´arvore, s˜ao a presen¸ca de um comando else para a primeira ocorrˆencia de if-then e a presen¸ca de um comando else para a segunda ocorrˆencia. Como h´a duas caracter´ısticas remov´ıveis, temos uma ´arvore de profundidade 2 e quatro exemplos. 5.3.1 Caracter´ısticas remov´ıveis C1. primeiro comando if-then possui cl´ausula else C2. segundo comando if-then possui cl´ausula else 5.3.2 Numera¸c˜ao dos exemplos C1 C2 Exemplo • • 3 (subse¸c˜ao 5.3.3.1) – – 3.1 (subse¸c˜ao 5.3.3.2) • – 3.2 (subse¸c˜ao 5.3.3.3) – • 3.3 (subse¸c˜ao 5.3.3.4) 5.3.3 Enunciados e programas 5.3.3.1 Exemplo 3 Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado. O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a acumular os adicionais de titula¸c˜oes diferentes. Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os seguintes dados: 2 A subse¸c˜ao 5.1.3.2 apresenta este exemplo. 3 A se¸c˜ao 5.4 apresenta essa ´arvore. 34
  • 48. Vencimento: R° 1.000,00 Adicional de especializa¸c˜ao: 3% do Vencimento Adicional de mestrado: 7% do Vencimento Remunera¸c˜ao final ´e a soma do vencimento e adicionais. O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos t´ıtulos: ’Possui diploma de especializacao ?’ ’Possui diploma de mestrado?’ Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de especializacao .’ Caso contr´ario: ’Voce nao tem direito ao adicional de especializacao .’ Se o servidor tem mestrado, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de mestrado.’ Caso contr´ario: ’Voce nao tem direito ao adicional de mestrado.’ Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo programa for iguai a R° 1100, imprima: ’Sua remuneracao e de 1100. ’ 35
  • 49. Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo3; var especializacao , mestrado: char; vencimento , remuneracao: real; begin vencimento := 1000; remuneracao := vencimento; writeln(’Possui diploma de especializacao ?’); readln(especializacao ); writeln(’Possui diploma de mestrado?’); readln(mestrado); if (especializacao = ’s’) then begin remuneracao := remuneracao + (0.03 * vencimento); writeln(’Voce tem direito ao adicional de especializacao . ’); end else writeln(’Voce nao tem direito ao adicional de especializacao .’); if (mestrado = ’s’) then begin remuneracao := remuneracao + (vencimento * 0.07); writeln(’Voce tem direito ao adicional de mestrado.’); end else writeln(’Voce nao tem direito ao adicional de mestrado.’); writeln(’Sua remuneracao e de ’, remuneracao :4:2); end. 5.3.3.2 Exemplo 3.1 Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado. O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a acumular os adicionais de titula¸c˜oes diferentes. Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os seguintes dados: Vencimento: R° 1.000,00 36
  • 50. Adicional de especializa¸c˜ao: 3% do Vencimento Adicional de mestrado: 7% do Vencimento Remunera¸c˜ao final ´e a soma do vencimento e adicionais. O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos t´ıtulos: ’Possui diploma de especializacao ?’ ’Possui diploma de mestrado?’ Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo programa for iguai a R° 1100: ’Sua remuneracao e de 1100. ’ Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo3_1; var especializacao , mestrado: char; vencimento , remuneracao: real; begin vencimento := 1000; remuneracao := vencimento; writeln(’Possui diploma de especializacao ?’); readln(especializacao ); writeln(’Possui diploma de mestrado?’); readln(mestrado); if (especializacao = ’s’) then remuneracao := remuneracao + (0.03 * vencimento); if (mestrado = ’s’) then remuneracao := remuneracao + (vencimento * 0.07); writeln(’Sua remuneracao e de ’, remuneracao :4:2); end. 37
  • 51. 5.3.3.3 Exemplo 3.2 Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado. O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a acumular os adicionais de titula¸c˜oes diferentes. Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os seguintes dados: Vencimento: R° 1.000,00 Adicional de especializa¸c˜ao: 3% do Vencimento Adicional de mestrado: 7% do Vencimento Remunera¸c˜ao final ´e a soma do vencimento e adicionais. O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos t´ıtulos: ’Possui diploma de especializacao ?’ ’Possui diploma de mestrado?’ Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de especializacao .’ Caso contr´ario, imprima: ’Subsidiamos cursos de especializacao .’ Logo depois, se o servidor tem mestrado, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de mestrado.’ Caso contr´ario, n˜ao imprima nada. Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remuneracao calculada pelo programa seja R° 1100: ’Sua remuneracao e de 1100 ’ 38
  • 52. Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo3_2; var especializacao , mestrado: char; vencimento , remuneracao: real; begin vencimento := 1000; remuneracao := vencimento; writeln(’Possui diploma de especializacao ?’); readln(especializacao ); writeln(’Possui diploma de mestrado?’); readln(mestrado); if (especializacao = ’s’) then begin remuneracao := remuneracao + (0.03 * vencimento); writeln(’Voce tem direito a adicional de especializacao ’) ; end else writeln(’Subsidiamos cursos de especializacao .’); if (mestrado = ’s’) then begin remuneracao := remuneracao + (vencimento * 0.07); writeln(’Voce tem direito a adicional de mestrado.’); end; writeln(’Sua remuneracao e de ’, remuneracao :4:2); end. 5.3.3.4 Exemplo 3.3 Enunciado Um servidor p´ublico tem a possibilidade de aumentar sua remunera¸c˜ao se apresentar os t´ıtulos de especializa¸c˜ao e/ou de mestrado. O servidor poder´a apresentar apenas um diploma para cada titula¸c˜ao e s´o poder´a acumular os adicionais de titula¸c˜oes diferentes. Fa¸ca um programa que calcule a remunera¸c˜ao final de um servidor considerando os seguintes dados: Vencimento: R° 1.000,00 Adicional de especializa¸c˜ao: 3% do Vencimento Adicional de mestrado: 7% do Vencimento 39
  • 53. Remunera¸c˜ao final ´e a soma do vencimento e adicionais. O programa dever´a ler a resposta do usu´ario para as seguintes perguntas acerca dos t´ıtulos: ’Possui diploma de especializacao ?’ ’Possui diploma de mestrado?’ Se o servidor tem especializa¸c˜ao, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de especializacao .’ Caso contr´ario, n˜ao deve imprimir nada. Logo depois, se o servidor tem mestrado, o programa dever´a imprimir a seguinte mensagem: ’Voce tem direito ao adicional de mestrado.’ Caso contr´ario, deve imprimir: ’Subsidiamos cursos de mestrado.’ Por ´ultimo, dever´a imprimir a remunera¸c˜ao final. Caso a remunera¸c˜ao calculada pelo programa seja R° 1100: ’Sua remuneracao e de 1100 ’ Solu¸c˜ao A solu¸c˜ao usada foi a seguinte program exemplo3_3; var especializacao , mestrado: char; vencimento , remuneracao: real; begin vencimento := 1000; remuneracao := vencimento; writeln(’Possui diploma de especializacao ?’); readln(especializacao ); writeln(’Possui diploma de mestrado?’); 40
  • 54. readln(mestrado); if (especializacao = ’s’) then begin remuneracao := remuneracao + (0.03 * vencimento); writeln(’Voce tem direito ao adicional de especializacao . ’); end; if (mestrado = ’s’) then begin remuneracao := remuneracao + (vencimento * 0.07); writeln(’Voce tem direito ao adicional de mestrado.’); end else writeln(’Subsidiamos cursos de mestrado.’); writeln(’Sua remuneracao e de ’, remuneracao :4:2); end. 5.3.4 Coment´arios Essa ´arvore busca apresentar ao aluno o uso de comandos if em s´erie. A primeira quest˜ao que se levantou foi: qual deve ser o n´umero de comandos if a serem apresentados em s´erie? Inicialmente, cogitamos apresentar exemplos com trˆes comandos if em s´erie, uma vez que t´ınhamos em mente utilizar ´arvores com trˆes caracter´ısticas remov´ıveis4 . Entretanto, os programas ficaram muito grandes, o que provavelmente os tornaria cansativos para os alunos. Decidimos, ent˜ao, utilizar dois comandos if em s´erie, com duas caracter´ısticas remov´ıveis. De fato, notamos que ´arvores com trˆes caracter´ısticas remov´ıveis tendem a gerar pro- gramas maiores, al´em de, naturalmente, ´arvores com mais n´os, o que pode ser cansativo ao aluno. Naturalmente, h´a exce¸c˜oes nas quais as ´arvores de trˆes caracter´ısticas s˜ao me- nos cansativas e at´e mais naturais. A ´arvore 2 (apresentada na se¸c˜ao 5.2) e a ´arvore 6 (apresentada na se¸c˜ao 5.6) s˜ao bons exemplos de exce¸c˜oes. 5.4 ´Arvore 4 A quarta ´arvore do cap´ıtulo 3 apresenta o uso de comandos if-then aninhados. As caracter´ısticas remov´ıveis s˜ao a presen¸ca da cl´ausula else no if-then interno, a presen¸ca do if-then interno na cl´ausula then externa5 e a presen¸ca do if-then interno na cl´ausula 4 Como ter´ıamos trˆes comandos if, poder´ıamos definir como caracter´ısticas remov´ıveis a presen¸ca da cl´ausula else no primeiro comando, a presen¸ca da cl´ausula else no segundo comando e a presen¸ca da cl´ausula else no terceiro comando, analogamente ao que fizemos com dois comandos if. 5 Isto ´e, o if-then interno s´o ser´a executado se a condi¸c˜ao do if-then externo for satisfeita. 41