Programação de Computadores II – UFF 2019/1

Bem-vindo à página da turma 2019/1 do curso de Programação de Computadores II da Universidade Federal Fluminense, ministrado pelo Prof. Raphael Machado. Aqui você encontrará informações práticas a respeito do curso.

Objetivo: Apresentar/consolidar conceitos de programação utilizando a linguagem de programação C. Os tópicos estudados serão os seguintes:

  • Registros e Tipos
  • Procedimentos e Funções
  • Passagem por Valor e por Referência
  • Escopo e Variáveis Globais
  • Recursão
  • Bibliotecas e String
  • Tipo Abstrato de Dados
  • Modularização
  • Memória e Endereço
  • Ponteiro
  • Alocação Dinâmica
  • Lista Ligada
  • Fila e Pilha
  • Arquivos

Horário das aulas: segundas-feiras e quartas-feiras de 20:00 a 22:00.

Local das aulas: Instituto de Computação da UFF
Aulas teóricas às quartas feiras na sala 217.
Aulas práticas às segundas-feiras no laboratório 304.

Período de aulas: 17 de março a 22 de julho de 2019.

Datas das provas:

  • Primeira Prova (P1): 22/5 -> Nova data
  • Segunda Prova (P2): 03/7 -> Nova data
  • Verificação de Reposição (VR): 8/7
  • Prova Suplementar (VS): 17/7 -> Nova data

Listas de Exercícios. Ao longo do curso, serão disponibilizadas listas de exercícios por meio do sistema URI Online Judge. O aluno deverá enviar um email para machado. work@gmail.com com o Assunto “Cadastro URI 2019/1” solicitando acesso ao sistema. O resultado obtido na execução dos exercícios das listas irá compor a nota L.

Regras:

  • A média será dada por M = 0,5*P1 + 0,5*P2 + 0,2*L
  • Todo aluno pode escolher por fazer a VR, que irá obrigatoriamente substituir a menor nota entre P1 e P2. A VR funciona como segunda chamada.
  • Todo aluno poderá escolher por fazer a VS. Neste caso, M=VS.
  • O aluno estará aprovado se M >= 6,0.

Material complementar de estudo.

Importante: o aluno deverá se cadastrar até 22-mar-2019 no grupo https://groups.google.com/d/forum/prog2-uff-2019-1 que será o meio de comunicação oficial do curso. O email cadastrado no grupo será usado para criar conta no URI Online Judge.

Aulas

Aula 1 (18-mar-2019). Apresentação do curso; programação básica; comandos básicos em C.

Aula 2 (20-mar-2019). Exemplos de programas usando comandos aprendidos na primeira aula. Apresentação de problemas “avançados” para implementação de algoritmos em C.

Aula 3 (25-mar-2019). Registros e tipos. Exercícios em laboratório.

Aula 4 (27-mar-2019). Funções e procedimentos. Passagem de parâmetros por valor e por referência.

Aula 5 (1-abr-2019). Tempo de execução, aleatoriedade e prática de laboratório.

Aula 6 (3-abr-2019). Escopo e variáveis globais. Recursão.

Aula 7 (8-abr-2019). Laboratório: implementação e análise de tempo do MergeSort.

  • Não há material complementar.

NÃO HAVERÁ AULA DIA 10-ABR-2019!
Motivo: chuvas e falta de luz no campus.

NÃO HAVERÁ AULA DIA 15-ABR-2019!
Motivo: viagem a serviço do professor.

Aula 8 (17-abr-2019). Bibliotecas e strings; tipo abstrato de dados.

RECESSO: 22-ABR-2019

Aula 9 (24-abr-2019). Modularização.

Aula 10 (29-abr-2019). Laboratório.

FERIADO: 01-MAI-2019

Aula 11 (06-mai-2019). Laboratório – gerenciamento de memória.

Aula 12 (08-mai-2019). Ponteiros e memória.

  • Slides

Aula 13 (13-mai-2019). Laboratório – atividades de revisão.

Aula 14 (15-mai-2019). Revisão de conteúdo.

Aula 15 (20-mai-2019). Laboratório – atividades de revisão.

  • Instruções do laboratório.
  • Códigos do laboratório

Prova 1: 22-mai-2019

Aula 16 (27-mai-2019). Aula (não haverá lab) – Gerenciamento de memória, alocação dinâmica.

NÃO HAVERÁ AULA NOS DIAS 29-MAI, 3-JUN E 5-JUN – MOTIVO: VIAGEM A SERVIÇO DO PROF. RAPHAEL.

Aula 17 (10-jun-2019). Laboratório – Gerenciamento de memória, alocação dinâmica.

  • Exercícios
    • Exemplos de Erros:
      • variável deve receber endereço antes da operação
      • variáveis devem ser alocadas antes
      • Valor de *variavel não existe
      • Operando sobre o endereço, e não ao conteúdo da variável
      • Recebe o endereço da variável, e a soma é feita com lixo
      • trocar *a+b por *(a+b)
  • Slides

Aula 18 (12-jun-2019). Aula – alocação dinâmica, ligada/encadeada.

Aula 19 (17-jun-2019). Laboratório – Lista ligada/encadeada.

  • Programa inicial
  • Exercício: em relação ao programa acima, faça as seguintes modificações
    • Criar uma função que conte o número de elementos da lista
    • Criar uma função que busque um elemento na lista
      • caso o elemento exista, deve retornar a posição do primeiro nó que o contém
      • caso não exista, retornar -1
    • Criar uma função que retorne o dado de um determinado elemento
      • a função deve receber como parâmetro a posição/ordem do nó cujo dado deve ser recuperado
    • Criar uma função que atualize o dado de um elemento da lista
      • a função deve receber como parâmetro a posição/ordem do nó a ser removido e o novo dado
    • Criar uma função que insira em determinada posição passada como parâmetro
      • a função deve avaliar se o valor passado é possível – ou seja, menor que o número de elementos da lista mais 1
        caso a função receba -1, deve inserir no final da lista
    • Criar uma função que remova um elemento da lista
      • a função deve receber como parâmetro a posição/ordem do nó a ser removido
    • Criar uma função que inverta a ordem da lista. Ou seja, o ponteiro *inicio passa a apontar para o último elemento da lista, que passa a apontar para o penúltimo, até o primeiro, que passa a apontar para NULL.
    • Criar um “menu” que pergunte ao usuário que função ele deseja executar – e execute a função escolhida (naturalmente, recebendo do usuário as entradas necessárias).

Aula 19 (19-jun-2019). Laboratório – Lista ligada/encadeada.

Aula 20 (26-jun-2019). Aula de revisão.

Prova 2: 03-jul-2019

VR: 08-jul-2019

VS: 17-jul-2019