Algoritmos Computacionais I
Ementa
Introdução a algoritmos e lógica de programação. Tipos de dados básicos. Estruturas de controle: sequência, seleção e repetição. Funções e procedimentos. Estruturas de dados homogêneas e heterogêneas. Noções de complexidade de algoritmos.
Horário
Sala de Aula
Segunda-feira: LabBas
Quarta-feira: 4027B
Plano de Aulas:
Algoritmos Computacionais I (32 Aulas)
Livro Texto: RIBEIRO, João Araujo. Introdução à Programação e aos Algoritmos. Rio de Janeiro: LTC, 2019.
Bloco 1 – Computação Essencial (4 aulas)
Objetivo: contextualizar sem afogar em teoria.
| nº | Conteúdo Programático | Referência |
|---|---|---|
| 01 | Apresentação do Curso: expectativas, Avaliação Prefácio e Plano de Ensino. Importância do pensamento lógico. O que é algoritmo. | Prefácio e Plano de Ensino |
| 02 | Como o computador representa informação:Decimal e Binário (bit/byte), Prefixos kilo, mega, giga, tera, peta. Bases Avançadas: Hexadecimal, Octal e o padrão Kibi/Kilo. Representação de Dados: caracteres (ASCII/Unicode). Questionário: números sinalizados (Complemento a 2) e ponto flutuante (para casa) Exercícios: conversão de bases manual e aritmética binária (para casa). | Cap. 1 (1.1-1.2) Cap. 1 (1.3-1.4) Cap. 1 (1.5-1.7) |
| 03 | Arquitetura e execução: Modelo de Von Neumann, CPU, Memória e SO. O Ambiente de Trabalho: Uso do interpretador interativo vs. scripts .py. | Cap. 1 (1.8-1.12) Cap. 2 (2.1) |
| 04 | Pensamento Algorítmico: Definição de passos não ambíguos e refinamentos sucessivos. Algoritmos no Papel: Fluxogramas e Pseudo-código para problemas cotidianos. | Cap. 2 (2.2-2.3) Cap. 2 (2.4-2.5) |
Bloco 2 – Fundamentos de Programação (11 aulas)
| nº | Conteúdo Programático | Referência |
|---|---|---|
| 05 | Bases da Programação: Identificadores, Dados Numéricos, Tipos e Constantes Numéricos. | Cap. 2 (2.6-2.9) |
| 06 | Estrutura básica de programa: Sequência, Entrada e saída, Expressões simples | Cap. 3.1.1 |
| 07 | Estruturas de decisão (if): Estruturas de Seleção simples e compostas (if/else). | Cap. 3 (3.1-3.2) |
| 08 | Iteração: While e laços contados. Condições Complexas: Desafios de lógica (ex: cálculo de ano bissexto). | Cap.3.1.3, Cap 3.5-3.6 Cap. 3 |
| 09 | Laboratório de problemas reais (validação, médias, regras): Exercícios com médias e validação de dados. | Cap. 3 (3.4) |
| 10 | Subalgoritmos: Definição de funções, fluxo de execução e return. | Cap. 4 (4.1-4.3) |
| 11 | Parâmetros e escopo: Passagem de parâmetros; Variáveis globais e locais; Funções com múltiplos retornos. | Cap. 4.4.4-4.6 |
| 12 | Organização e módulos: Módulos em Python; Reuso; Estruturação de programas maiores. | Cap 4.2 e 4.6 |
| 13 | Módulos e Exceções: Uso de math, random e tratamento de erros com try/except. | Cap. 4 (4.2, 4.7) |
| 14 | Exercícios e revisão: Revisão geral dos cap 1 a 4. | Cap. 1 a 4 |
| 15 | Prova 1 | Cap. 1 a 4 |
Bloco 3 – Estruturas de Dados e Modularização (10 aulas)
| nº | Conteúdo Programático | Referência |
|---|---|---|
| 16 | Estruturas de Dados I: Sequências e listas. | Cap. 5 (5.1-5.2) |
| 17 | Processamento de listas: Fatiamento, compreensão e métodos. | Cap. 5 (5.3-5.6) |
| 18 | Operações avançadas: Operações em Listas, Clonando Listas; Listas como Parâmetros. | Cap. 5 (5.7-5.9) |
| 19 | Matrizes: Tabelas de dados experimentais; Pequenas simulações. | Cap. 5 (5.10-5.11) |
| 20 | Dicionários e Tuplas: Dados associativos. | Cap. 5 (5.12-5.13) |
| 21 | NumPy: Vetores, operações vetorizadas e aplicações numéricas. | Cap. 5 (5.14) |
| 22 | Strings: Manipulação de texto e formatação. | Cap. 6 (6.1-6.3) |
| 23 | Arquivos: Leitura e escrita de arquivos. | Cap. 6 (6.4-6.5) |
| 24 | Revisão e Exercícios: Modularização, boas práticas e estilo de código. | Cap. 4-6 e Cap 9 (base) |
| 25 | Prova 2 | Cap. 4 a 6 |
Bloco 4 – Projeto Final (7 aulas)
Projeto integrando os conceitos de funções, listas, arquivos e ordenação. O objetivo é criar um programa completo que resolva um problema real da área da engenharia do curso (Elétrica ou Produção), como um sistema de gerenciamento de tarefas ou uma análise simples de dados. O projeto será desenvolvido em etapas, com feedback contínuo para garantir a compreensão e aplicação dos conceitos aprendidos.
Durante o projeto, exigir aplicação de:
- Cap. 9 (Pense antes de programar)
- Estruturas de controle (Cap. 3)
- Funções (Cap. 4)
- Estruturas de dados (Cap. 5)
- Arquivos ou NumPy quando aplicável
Aula 26 – Lançamento do Projeto
- Apresentação dos temas disponíveis para o projeto.
- Formação de grupos (2 ou 3 alunos).
- Definição do escopo do projeto e entrega de um esboço inicial.
Sugestões de temas:
- Sistema de biblioteca simples
- Controle financeiro pessoal
- Jogo textual
- Simulador simples (fila, elevador, etc.)
- Análise de dados em arquivo CSV
- E. Civil/Produção: Gestão de insumos e custos com dicionários e arquivos.
- E. Elétrica/Mecânica: Simuladores de circuitos ou tabelas termodinâmicas usando NumPy e funções.
- E. Ambiental/Cartográfica: Processamento de séries históricas de dados ou conversores de coordenadas geográficas.
Aula 27 – Especificação
- Cada grupo entrega uma descrição detalhada do problema que pretende resolver, as funcionalidades principais e a estrutura prevista do programa.
- Feedback individualizado para cada grupo, orientando sobre a viabilidade do projeto e sugerindo ajustes para garantir que seja adequado ao nível de conhecimento dos alunos.
Aula 28 – Implementação 1
- Desenvolvimento da estrutura básica do programa, incluindo a definição de funções principais e a criação de listas ou dicionários para armazenar dados.
- Feedback contínuo durante a aula para garantir que os grupos estejam no caminho certo e para resolver dúvidas técnicas.
Aula 29 – Implementação 2
- Uso consistente de listas/dicionários.
- Arquivos.
- Tratamento de erros.
- Feedback contínuo para garantir a qualidade do código e a aplicação correta dos conceitos.
Aula 30 – Refatoração e Testes
- Refatoração do código para melhorar a legibilidade, organização e eficiência.
- Testes de casos extremos para garantir a robustez do programa.
- Feedback detalhado sobre as melhorias realizadas e sugestões para ajustes finais.
- Orientação sobre boas práticas de programação, como nomes de variáveis e funções, legibilidade do código, coesão, modularização e separação de responsabilidades.
Aulas 31 e 32 – Apresentação
- Cada grupo apresenta seu projeto para a turma, explicando o problema que resolveram, as funcionalidades implementadas e os desafios enfrentados.
Critérios de avaliação:
- Funcionalidade: O programa atende aos requisitos especificados?
- Organização do código: O código é bem estruturado e fácil de entender?
- Modularização: O código está organizado em funções e módulos de forma lógica?
- Clareza na explicação: Os alunos conseguem explicar claramente as decisões de design e a implementação do projeto?
Nota: Os capítulos 7 e 8 podem ser usados como referência para projetos mais avançados ou para aprofundamento em tópicos específicos, mas não são obrigatórios para o desenvolvimento da disciplina.
Avaliação
A avaliação será composta por duas provas e um trabalho final.
Por que Programar Ensina a Pensar?
Livro-texto
