Introdução a C/C++   —  2015/2

Página principal

Informações


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.  
 

Voltar ao topo