Local: LAB-3
Horário: terças e quintas das 8h às 10h
Início: 20 de outubro de 2015
Repositório do código criado em sala de aula:
https://github.com/vigusmao/IntroC_2015_2
Slides do Prof. Adriano Cruz aqui.
Blbliografia sugerida (também da página do Prof. Adriano) aqui.
Material de apoio:
Tutorial online sobre arrays e ponteiros em C.
Lista de exercícios.
Conteúdo das aulas
20/10
Conversa inicial sobre o curso. Python, C, C++. Compiladores e interpretadores.
Progamando um pouco em Python, para relembrar:
(1) um programa simples envolvendo condicionais;
(2) encontrando os divisores de um número, a interseção entre listas e o M.D.C. de dois números dados.
22/10
Conversa sobre complexidade, eficiência, algoritmos e estruturas de dados.
Motivações para se aprender C e C++.
Refazendo a função para encontrar a interseção entre dois números de forma eficiente (tempo linear versus tempo quadrático).
Medindo tempos de execução. Explicação sucinta sobre hash maps.
Tudo ainda em Python.
27/10
Primeiras linhas em C. Declarando variáveis e funções.
Condicionais com if...then...else. Laços com while.
Imprimindo na tela com printf. Lendo do teclado com scanf.
Sintaxe básica: demarcação de blocos, a função main(),
#include.
29/10
Uma IDE bastante simples: CodeBlocks. Compilando com GCC e executando programas
via linha de comando.
Encontrando todos os números primos até certo limite dado.
Quatro algoritmos distintos baseados em testes de divisibilidade.
03/11
Medindo tempo transcorrido em C.
Refinamento do código da aula anterior. Contando os primos até certo limite dado.
05/11
Laço infinito com while(1).
Laço com for.
Lendo e escrevendo de/para arquivos por redirecionamento usado >> e <<.
17/11
Arrays em alocação estática.
19/11
Ponteiros. Arrays em alocação dinâmica: malloc, free.
26/11
Criando estruturas de dados próprias: struct, typedef.
Passagem de parâmetros por valor e por referência.
Os operadores * e &.
01/12
Arrays dinâmicos de structs.
03/12
Revisão completa de ponteiros.
08/12
Strings (arrays de caracteres).
10/12
Mais sobre strings em C.
15/12
Primeira prova.
17/12
Resolução da primeira prova.
05/01
Gerando números aleatórios. Usando rand() e srand().
O relógio --- time(NULL), de time.h --- como seed.
Ex.: Adivinhando o número. (Tema incidental: busca binária.)
Ex.: Simulando lançamento de dados para obtenção da média
(esperança) do resultado obtido pelo lançamento de dois dados.
07/01
Simulando o paradoxo do aniverário. Comparando uma implementação ingênua
com uma implementação eficiente. (Ambas no GitHub.)
12/01
Recursão. Vantagens e desvantagens.
Ex.: Fatorial. Fibonacci. (Comparando recursivo com não-recursivo.)
14/01
Memoização. Idéia básica.
Ex.: Fibonacci com memoização.
Matrizes. (Arrays dinâmicos multi-dimensionais.)
19/01
Aula dada pelo professor Juan Baptista.
Introdução a C++.
Conversa sobre o paradigma orientado a objetos.
Comparação com a programação estruturada.
Nível de abstração.
Proximidade com o mundo real.
Definição de classes e objetos.
Atributos e Métodos.
Método Construtor.
Classe como tipo de variável.
Exemplos.
Definição de classe (exemplo hello_world.cpp).
Representando um objeto mais próximo do mundo real (exemplo pessoa.cpp no GitHub).
Classe como tipo de atributo de outra classe (exemplo PontoCirculo no GitHub).
21/01
Aula dada pelo professor Juan Baptista.
Namespace.
Entrada e saída com cin e cout e operações com o tipo string (exemplo entrada.cpp no GitHub).
Modificadores de acesso: public e private (exemplo ContaBancaria no GitHub).
Construtor public.
Se não especificar, o atributo/método é private.
26/01
Aula dada pelo professor Juan Baptista.
Sobrecarga de métodos (exemplo soma.cpp).
Introdução a herança (exemplo Veiculos no GitHub).
Classe base e classe derivada.
Usando métodos da classe base.
Ordem de chamada dos construtores (primeiro base, depois derivada).
28/01
Aula dada pelo professor Juan Baptista.
Herança (exemplo Escola no GitHub).
Herança em mais níveis (uma classe pode ser base e derivada ao mesmo tempo, exemplo Funcionário é derivada de Pessoa e base de Professor).
Chamada explícita e passagem de parâmetros para construtor da classe base.
Modificador de acesso protected (atributo/método é vísivel apenas para a própria classe e para as classes derivadas).
Sobrescrita de métodos da base (!= sobrecarga).
02/02
Revisão/dúvidas.