PROGRAMA
UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA
DEPARTAMENTO DE CIÊNCIAS EXATAS
PROFESSORES:
ROBERTO ALMEIDA BITTENCOURT
FERNANDA CASTELO BRANCO SANTANA
CLÁUDIA PINTO PEREIRA
PERÍODO LETIVO: 2018.2
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 extrema fundamental 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 (C);
3) Utilizar software de edição de texto, compilação e depuração para o desenvolvimento de programas simples em linguagem C;
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 C.
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 C;
6) Aplicar técnicas de programação na linguagem C 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 C
Estrutura de um programa em C
Arquivos de cabeçalho
Tipos de dados (char, int., flat, double, etc.)
Modificadores (unsigned, long, short, etc.)
Constantes e variáveis
Entrada e saída de dados (funções printf e scanf)
Operadores aritméticos e de atribuição
3) Estruturas de controle
Operadores relacionais e lógicos
Expressões lógicas
Comando if...else
Comando switch...case
Comandos while e do...while
Comando for
Comandos break e continue
4) Vetores e Matrizes
Vetores e matrizes: declaração e indexação de elementos
Cadeias de caracteres
Exemplos de funções embutidas (string.h)
Aplicações
5) Arquivos Texto
Abertura, leitura, escrita e fechamento de arquivo
Aplicações
6) Ponteiros
Aritmética com ponteiros
7) Funções e procedimentos
Técnicas de modularização
Funções e procedimentos
Protótipos
Passagem de parâmetros (por referência e valor)
Uso de bibliotecas e exemplos de funções embutidas (math.h, stdlib.h, etc.)
Recursividade
8) Estruturas de dados definidas pelo usuário
Estruturas: declaração de tipos e de variáveis
Vetores e ponteiros de estruturas
9) Alocação Dinâmica
Alocação e desalocação de memória
Aplicações
10) Introdução a estruturas de dados: lista, lista encadeada
11) Arquivos Binários
Abertura, leitura, escrita e fechamento de arquivo
Operações sobre arquivos de registros: 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
2) Apresentação do curso, atividades de lógica e Introdução aos Algoritmos
3) 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.
4) Introdução à linguagem C: estrutura de um programa em C; o pré-processador C; arquivos de cabeçalho; tipos de dados fundamentais; modificadores; constantes e variáveis; comandos de entrada e saída de dados.
Correção de questões em Portugol e Fluxogramas
5) Estrutura condicional (if...else, switch..case)
6) Resolução de exercícios sequenciais e condicionais
7) Estruturas de Repetição: laço for, while, do...while
8) Exercícios de repetição - dúvidas e correção
9) Primeira Avaliação Teórica
10) Vetores e Matrizes
11) Exercícios de vetores, matrizes, repetição
12) Entrega da Primeira Avaliação; Correção de exercícios de vetores e matrizes
Manipulação de strings, funções da biblioteca string.h
13) Finalização de string
Correção de questões de string
14) Ordenação de vetores
15) Ponteiros, Operações com ponteiros
16) Funções e modularização: protótipos; tipos de retorno; técnicas de modularização; uso de bibliotecas e exemplos de funções embutidas
17) Passagem de parâmetros para funções, visibilidade de variáveis: variáveis locais e globais, exercícios funções e ponteiros
18) Funções recursivas
19) Segunda Avaliação Teórica
20) Depuração de código passo a passo através de debuggers
21) Tipos de dados definidos pelo usuário: estruturas, estruturas aninhadas, uniões e enumerações
22) Tipos de dados definidos pelo usuário: estruturas, estruturas aninhadas, uniões e enumerações
23) Entrega da Segunda avaliação; Alocação dinâmica de memória
24) Exemplos de uso de alocação dinâmica – vetores, lista, lista encadeada; operações sobre lista encadeada: inserção, remoção, ordenação, busca
25) Lista de Exercício - Operações em Listas encadeadas
26) Lista de Exercício - Operações em Listas encadeadas
27) Aula de Exercícios sobre funções recursivas e alocação dinâmica
28) Arquivos: texto e binário
29) Aula de Exercícios
30) Terceira Avaliação Teórica
31) Aplicação de questionário de habilidades de programação (SCS1)
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.
MANZANO, J. A. N. G. Estudo Dirigido de Linguagem C. São Paulo: Érica: 1997.
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.
MIZRAHI, V. V. Treinamento em Linguagem C : Módulo 1. São Paulo : Makron Books, 1990.
MIZRAHI, V. V. Treinamento em Linguagem C : Módulo 2. São Paulo : Makron Books, 1990.
SCHILDT, H. C Completo e Total. 3. Ed. São Paulo: Makron Books, 1996.
LEITURA COMPLEMENTAR
ZIVIANI, N. Projeto de Algoritmos com Implementação em Pascal e C. 4. ed. São Paulo: Pioneira, 1999.
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.
FARRER, H. et al. Pascal Estruturado. 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.
KERNIGHAN, B. W., RITCHIE, D. M. C: A Linguagem de Programação padrão ANSI. Ed. Campus, 1990.
TENENBAUM, A. M., LANGSAM, Y., AUGENSTEIN, M. J. Estruturas de Dados Usando C. São Paulo: Makron Books, 1995.
DAHL, O. –J, DIJKSTRA, E. W., HOARE, C. A. R. Structured Programming. Academic Press, 1972.
DIJKSTRA, E. W. A Discipline of Programming. New Jersey : Englewood Cliffs, 1976.
KERNIGHAN, B. W., PIKE, R. The Practice of Programming. Addison-Wesley, 1999.