Programa

DEPARTAMENTO DE CIÊNCIAS EXATAS

PROFESSORES:

ROBERTO ALMEIDA BITTENCOURT

CLAUDIA PINTO PEREIRA

PERÍODO LETIVO: 2020.1

PROGRAMA DO MÓDULO ISOLADO

EXA 801 – ALGORITMOS E PROGRAMAÇÃO I

CARGA HORÁRIA/CREDITAÇÃO

60 horas / (T:60; P:00; E:00)

PRÉ-REQUISITOS

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

10) 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 (assíncronas pré-gravadas ou síncronas dialogadas) e aulas de exercícios (síncronas) 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 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

Computador, ambientes virtuais de aprendizagem (Google Classroom, Google Meet, Moodle), ambiente integrado de desenvolvimento (IDEs compartilhados e IDEs online como repl.it ou PEEF).

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) Apresentação do curso. Avaliação diagnóstica.

2) 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.

3) Introdução à linguagem Python: estrutura de um programa em Python; tipos de dados fundamentais; constantes e variáveis; comandos de entrada e saída de dados.

4) Estruturas de seleção: if, if .. else, if .. elif .. else

5) Estruturas de Repetição: for.

6) Exercícios com estruturas de repetição for. Depuração de código com estruturas for.

7) Estruturas de repetição: while

8) Depuração de código com estruturas if e while. Exercícios de revisão.

9) Funções e procedimentos. Exercícios com funções e procedimentos.

10) Escopo de variáveis. Bibliotecas de funções. Depuração de código com funções e procedimentos.

11) Primeira Avaliação Teórica

12) Tratamento de exceções. Testes de software: asserções para dados válidos, classes de equivalência.

13) Entrega da Primeira Avaliação. Estruturas de dados primitivas: listas e vetores.

14) Estruturas de dados primitivas: tuplas e dicionários.

15) Estruturas de dados primitivas: dicionários (continuação). Exercícios.

16) Estruturas de dados derivadas: matrizes.

17) Estruturas de dados derivadas: pilhas, filas e matrizes esparsas.

18) Noções de arquivos em modo texto. Exercícios com arquivos. Operações com strings.

19) Exercícios de revisão.

20) Segunda Avaliação Teórica

21) Desenvolvimento dirigido por testes: asserções para dados inválidos, revisão de classes de equivalência, análise de valores limítrofes.

22) Funções recursivas. Depuração de funções recursivas.

23) Entrega da Segunda avaliação. Busca sequencial e binária.

24) Métodos de ordenação.

25) Tipos de dados definidos pelo usuário. Classes. Objetos como contêineres de dados.

26) Arquivos em modo binário. Leitura e escrita de arquivos de coleções e objetos em modo binário. Exercícios.

27) Coleções de objetos. Operações CRUD em coleções de objetos.

28) Busca e ordenação de coleções de objetos. Exercícios com classes, objetos e coleções de objetos.

29) Exercícios de revisão.

30) 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.