oliveira(AT)inf.pucrs.br
O cumprimento da disciplina busca dar ao aluno, ao final do semestre, condições de:
Conhecer as estruturas de dados primitivas e estruturas do tipo arranjos.
Indicar as estruturas de dados que melhor se adaptam para a solução de um determinado problema.
Construir algoritmos estruturados que sejam soluções de um dado problema, no paradigma de programação imperativa, utilizando os conceitos de subprogramação e recursividade.
Analisar e verificar a correção de um algoritmo, utilizando a técnica de execução simbólica.
Selecionar o algoritmo mais eficiente para a solução de um determinado problema.
Familiarizar-se com o emprego da notação assintótica para análise de algoritmos.
Discussão sobre algoritmos como ferramentas para a descrição da solução de problemas e os fundamentos necessários para sua implementação, usando a linguagem de programação C. Exame das noções de variáveis e tipos em C. Estudo de programas sequenciais, comandos de entrada e saída e o processo de compilação de programas escritos em C. Construção de programas C iterativos e uso do conceito de subprograma (procedimentos e funções). Estudo de estruturas de dados através do tratamento de agregados homogêneos (e.g. vetores, matrizes) e heterogêneos (e.g. structs) e sua representação em C. Conceitos básicos de programação orientada a objetos na linguagem C++.
O processo de solução de problemas via programação
Organização e coleta dos dados.
Formulação do problema e da solução.
Decomposição da solução em etapas.
Reconhecimento de padrões.
Abstração.
Projeto da solução.
Realização da solução.
Teste e correção da solução.
Introdução à programação sequencial
Características de uma linguagem imperativa: constantes, variáveis, comandos, decisões, laços e procedimentos implementados como subprogramas.
Estrutura de programas simples.
Sistemas operacionais e o processo de edição e execução de programas.
Variáveis numéricas, operadores básicos e comandos de atribuição.
Comandos de entrada e saída.
Expressões aritméticas: operadores aritméticos e sua prioridade.
Comandos condicionais: if e switch.
Expressões lógicas e a sua relação com expressões aritméticas.
Controle de fluxo
Comando while.
Comando for e comparação com while.
Comando repeat.
Rótulos, quebras de laços (comando break) e saltos (comando go to).
Tipos e Agregados Homogêneos
Classes de armazenamento e escopo de definições de tipos.
Agregados homogêneos: conceito, declaração e uso.
Vetores lineares: conceito, inicialização.
Ponteiros: definição, relação com vetores, alocação dinâmica.
Vetores: acesso a conteúdos e manipulação de valores.
Matrizes como vetores multidimensionais.
Modularização e hierarquização de código
Introdução à modularização e hierarquização de código.
Conceitos e vantagens de utilização da modularização.
Declaração e criação de funções implementadas como subprogramas.
Passagem de parâmetros por valor e por referência.
Detalhamento de includes, headers e macros.
Arquivos
Tipos fundamentais de arquivos: texto e binário.
Arquivos texto: abertura, fechamento e operações fscanf() e fprintf().
Arquivos binários: abertura, fechamento e operações fread() e fwrite().
Arquivos mistos.
Agregados Heterogêneos
Agregados Heterogêneos: conceito e uso.
Declaração de structs.
Uso e construção de tipos complexos.
Agregados de agregados heterogêneos (i.e. vetores/matrizes de structs).
Passagem de structs por valor e por referência.
C++: structs como o início de classes para dar suporte a orientação a objetos:
Construtores e destrutores;
Operadores de entrada e saída;
Operadores com sobrecarga.
G1 = ( 2 * P1 + 2 * P2 + 2 * P3 + MT) / 7
Uma lista de exercícios para programar está aqui.
Exercícios e exemplos também estão aqui.
Uma coleção de exercícios interessantes está aqui.
Aprenda os truques do repl.it aqui.
Alguns cursos gratuitos pra reforçar o seu C estão aqui.
O imperdível vídeo do Binky que explica apontadores (pointers) está aqui.
PRATA, S. C Primer Plus. 6 ed. Upper Saddle River, NJ: Addison-Wesley Professional, 2013.
KERNIGHAN, B. W.; RITCHIE, D. M. The C Programming Language. 2 ed. Boston, MA: Addison-Wesley, 1988.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de Programação: a construção de algoritmos e estruturas de dados. 3 ed. São Paulo: Prentice Hall, 2005.
DEITEL, P.; DEITEL, H. C: como programar. 6 ed. São Paulo: Pearson Prentice Hall, 2011.
STROUSTRUP, B. The C++ Programming Language. 4 ed. Upper Saddle River, NJ : Addison-Wesley, 2013.
CELES, W.; CERQUEIRA, R.; RANGEL, J. L. Introdução a Estruturas de Dados - com Técnicas de Programação em C. Rio de Janeiro: Elsevier, 2016.
AGUILAR, L. J. Fundamentos de Programação: algoritmos, estruturas de dados e objetos. 3 ed. São Paulo: McGraw-Hill, 2008.
AHO, A. V.; ULLMAN, J. D. Foundations of Computer Science. Computer Science Press, 1998.