UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA
DEPARTAMENTO DE CIÊNCIAS EXATAS
PROFESSORES:
ROBERTO ALMEIDA BITTENCOURT
CLAUDIA PINTO PEREIRA
PERÍODO LETIVO: 2019.1
PROGRAMA DO MÓDULO ISOLADO
CARGA HORÁRIA/CREDITAÇÃO
60 horas / (T:60; P:00; E:00)
Não há.
SIGNIFICADO DO COMPONENTE CURRICULAR
Este componente curricular é de fundamental importância para a formação de qualquer profissional das áreas de Engenharia e Computação, uma vez que dá ao estudante noções de raciocínio lógico matemático, sequência de ideias, interpretação de problemas e soluções de problemas. Além disso, faz parte do currículo básico de todas as engenharias e dos cursos de Tecnologia de Informação (TI). Este é o primeiro componente curricular de uma sequência de outros que tratam de programação e do embasamento teórico-prático necessário para o estudante que se interessa pela área de produção de software.
EMENTA
Classificação de linguagens de programação. Compiladores e interpretadores. Noção de algoritmo, dado, variável, instrução e programa. Tipos e estruturas elementares de dados. Operadores. Funções embutidas e expressões. Instruções condicionais, incondicionais e de repetição. Tipos definidos pelo programador e tipos abstratos de dados. Estruturas compostas de dados: vetores, matrizes e registros. Noções de estruturas dinâmicas de dados. Subprogramas: funções, procedimentos e recursão. Noções de arquivos em programação. Algoritmos e aplicações.
OBJETIVOS
Geral:
Ser capaz de resolver problemas através da interpretação de cenários do mundo real, modelando soluções através de algoritmos e estruturas de dados básicas e implementando as soluções através de programas de computador escritos em uma linguagem de programação estruturada.
Específicos:
1) Compreender as estruturas dos algoritmos usados nas linguagens de programação modernas e aplicar estas estruturas para projetar a solução de problemas;
2) Ser capaz de escrever, compilar, depurar e testar programas em uma linguagem de programação imperativa (Python);
3) Utilizar software de edição de texto, compilação e depuração para o desenvolvimento de programas simples em linguagem Python;
4) Aplicar estruturas de dados homogêneas e heterogêneas para modelar dados simples e complexos a partir de problemas reais, bem como lidar com questões de gerenciamento de memória que surgem a partir do uso destas estruturas de dados;
5) Analisar problemas, decompondo-os em partes através de técnicas de projeto e desenvolvimento bottom-up ou top-down e projetar soluções integrando as partes através de estruturas modulares como funções e procedimentos;
6) Ser capaz de armazenar, acessar, alterar ou eliminar informação persistente em arquivos de acesso sequencial ou aleatório, utilizando bibliotecas de funções e procedimentos em linguagem Python.
HABILIDADES E COMPETÊNCIAS
1) Identificar problemas de informação e solucioná-los para atingir os objetivos esperados;
2) Analisar e solucionar problemas através do uso sistemático de algoritmos;
3) Desenvolver o raciocínio lógico e o pensamento computacional;
4) Entender a lógica de programação em uma linguagem imperativa;
5) Dominar comandos básicos, estruturas de dados simples e compostas da linguagem Python;
6) Aplicar técnicas de programação na linguagem Python para a resolução de problemas;
7) Implementar sistemas de computação conforme as suas especificações.
CONTEÚDO PROGRAMÁTICO
1) Algoritmos e Linguagens de programação
Compiladores e Interpretadores
Noção de algoritmo, dado, variável, instrução e programa
2) Introdução à linguagem Python
Estrutura de um programa em Python
Tipos de dados primitivos
Constantes e variáveis
Entrada e saída de dados (funções print e input)
Operadores aritméticos e de atribuição
3) Estruturas de controle
Operadores relacionais e lógicos
Expressões lógicas
Comando for
Comando if...else
Comando if...elif...else
Comando while
4) Funções e procedimentos
Técnicas de modularização
Funções e procedimentos
Passagem de parâmetros
Uso de bibliotecas e exemplos de funções embutidas (math, random, etc.)
Recursividade
5) Técnicas de desenvolvimento de software
Depuração de código
Desenvolvimento dirigido por testes
6) Estruturas de dados primitivas
Listas
Indexação de listas como vetores
Tuplas
Dicionários
Aplicações
7) Estruturas de dados derivadas
Pilhas
Filas
Matrizes
Aplicações
8) Noções de arquivos
Abertura, leitura, escrita e fechamento de arquivos
Operações com strings sobre arquivos
Aplicações
9) Noções de algoritmos de busca e ordenação
Busca sequencial
Busca binária
Ordenação por inserção
Ordenação por seleção
Ordenação pelo algoritmo Bubblesort
Ordenação pelo algoritmo Quicksort
Aplicações
8) Estruturas de dados definidas pelo usuário
Classes e objetos
Objetos como contêineres de dados
Criação de classes: atributos, métodos
Coleções de objetos usando as estruturas de dados de Python
Busca e ordenação em coleções de objetos
Aplicações
11) Arquivos Binários
Abertura, leitura, escrita e fechamento de arquivos de objetos
Operações sobre arquivos de objetos: inserção, consulta, alteração e exclusão
Aplicações
METODOLOGIA
A metodologia será um híbrido de aulas expositivas dialogadas e aulas de exercícios com o objetivo de introduzir assuntos que também serão tratados nos problemas apresentados no Módulo Integrador e complementar o processo de aprendizagem baseada em problemas, aprofundando a discussão conceitual.
As aulas expositivas dialogadas têm como objetivo introduzir conteúdos e práticas de expressão de algoritmos e de programação de computadores.
As aulas de exercícios servem para reduzir a curva de aprendizagem e realçar os aspectos mais importantes destas técnicas de resolução de problemas algorítmicos e suas soluções em uma linguagem de programação.
MATERIAL UTILIZADO
Quadro branco, pincel, apagador, computador e projetor multimídia.
AVALIAÇÃO
O módulo será dividido em três unidades, para que o estudante possa refletir sobre sua situação em diferentes momentos do curso e, caso necessário, realizar correções de rumo no processo de aprendizagem.
Medidas da Unidade:
A medida de cada uma das três unidades será extraída de uma prova escrita realizada no final da unidade.
Média Parcial:
A média parcial será a média aritmética das medidas de cada unidade. Obtendo média igual ou superior a 7,0 (sete), o estudante pode ser aprovado, caso cumpra os requisitos de frequência.
Prova Final:
Não obtendo média parcial suficiente na avaliação do módulo, o estudante poderá fazer prova final, e a média final será calculada de acordo com o sistema de avaliação vigente na UEFS.
Aprovação no módulo:
Para ser aprovado no módulo, o estudante precisa cumprir os seguintes requisitos:
- Ter frequência igual ou superior a 75% da carga horária efetiva ministrada no módulo, caso contrário haverá reprovação por frequência;
- Ser aprovado na avaliação do módulo, caso contrário haverá reprovação por nota.
CRONOGRAMA
1) SIECOMP – Semana de Integração dos Estudantes de Engenharia de Computação.
2) SIECOMP – Semana de Integração dos Estudantes de Engenharia de Computação.
3) Apresentação do curso, tópicos introdutórios.
4) Algoritmos e linguagens de programação: principais linguagens de programação e suas características; algoritmos e suas representações; dados e variáveis, comandos.
5) Introdução à linguagem Python: estrutura de um programa em Python; o interpretador Python; tipos de dados primitivos; constantes e variáveis; comandos de entrada e saída de dados.
6) Estruturas de Repetição: laço for.
7) Estruturas condicionais if...else e if...elif...else.
8) Resolução de exercícios com estruturas de repetição for e condicionais.
9) Estruturas de Repetição: while.
10) Resolução de exercícios de estruturas de repetição.
11) Primeira Avaliação Teórica.
12) Funções e procedimentos.
13) Exercícios com funções e procedimentos.
14) Depuração de código passo a passo através de debuggers.
15) Entrega da Primeira Avaliação. Desenvolvimento dirigido por testes.
16) Estruturas de dados primitivas em Python: listas, tuplas e dicionários.
17) Exercícios com estruturas de dados primitivas.
18) Estruturas de dados derivadas: pilhas, filas e matrizes.
19) Exercícios com estruturas de dados derivadas.
20) Funções recursivas. Exercícios de revisão.
21) Segunda Avaliação Teórica
22) Noções de arquivos.
23) Exercícios com arquivos. Operações com strings.
24) Busca sequencial e binária.
25) Entrega da Segunda avaliação. Ordenação.
26) Tipos de dados definidos pelo usuário. Classes. Objetos como contêineres de dados.
27) Exercícios com classes e objetos.
28) Coleções de objetos. Busca e ordenação de coleções de objetos.
29) Arquivos binários. Leitura e escrita de arquivos de objetos.
30) Aplicação de questionário de habilidades de programação (SCS1)
31) Exercícios com coleções e arquivos de objetos. Exercícios de revisão e esclarecimento de dúvidas.
32) Terceira Avaliação Teórica
REFERÊNCIAS
LIVROS-TEXTO
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: Lógica para Desenvolvimento de Programação. São Paulo: Érica, 1996.
FORBELLONE, A. V. L., EBERSPACHER, H. F. Lógica de Programação: A Construção de Algoritmos e Estrutura de Dados. 2. ed. São Paulo: Makron Books, 2000.
WAZLAWICK, R. S. Introdução a Algoritmos e Programação com Python. Rio de Janeiro : Elsevier, 2018.
BORGES, L. E. Python para Desenvolvedores. Novatec, 2014.
SUMMERFIELD, M. Programação em Python 3. Elsevier / Altabooks, 2015.
LEITURA COMPLEMENTAR
DIERBACH, C. Introduction do Computer Science Using Python: A Computational Problem-Solving Focus. Wiley, 2012.
BEAZLEY, D.; JONES, B. K. Python Cookbook. O’Reilly, 2013.
NORTON, P. Introdução à Informática. São Paulo: Makron Books, 1997.
FARRER, H., et al. Algoritmos Estruturados. 3. ed. Rio de Janeiro: LTC, 1999.
CORMEN, T.H., LEISERSON, R.L., RIVEST, R.L. e STEIN, C. Introduction to Algorithms, 2. ed., MIT Press, 2001.
AHO, A., HOPCROFT, J. e ULLMAN, J. Data Structures and Algorithms, Addison-Wesley Pub Co, 1983.
KNUTH, D. The Art of Computer Programming, vol. I e III, Addison-Wesley Pub Co, 1998.
BARRY, P. Use a Cabeça! Python. Elsevier / Alta Books, 2013.