Roteiro de estudo
Estudo da 14ª Semana (05/05 - 11/05)
Nesta semana aprenderemos sobre os Tipos Abstratos de Dados (TADs), aprenderemos sobre Estruturas de Dados (EDs), a diferença entre TADs e EDs, conheceremos os principais TADs da computação e aprenderemos a criar o TAD Pilha.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 8: Abstract Data Types”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 8: Tipos Abstratos de Dados
- Vídeos obrigatórios:
- (nada para esta semana)
- Leituras recomendadas:
- (nada para esta semana)
- Vídeos recomendados:
- (nada para esta semana)
- Códigos:
- Códigos do Capítulo 8
- Códigos avançados do Capítulo 8: pilhas genéricas em C (estude se tiver curiosidade de aprender a criar uma pilha genérica em C)
- Exercícios:
Estudo da 13ª Semana (28/04 - 04/05)
Nesta semana não haverá aula na segunda-feira e, na terça-feira, faremos nossa AVALIAÇÃO BIMESTRAL: AV-1. O conteúdo da AV1 corresponde a toda a matéria das semanas 1 a 12, ou seja, tudo o que foi visto no bimestre. Obs.:
- A prova é totalmente objetiva, com 60 questões. A nota sai na hora.
- Venha bem preparado! A prova é extensa e não é fácil!
- Siga todas as normas de integridade acadêmica da disciplina pois alunos flagrados com qualquer tipo de cola terão a AV1 zerada imediatamente e serão encaminhados para a coordenação para as medidas disciplinares conforme o regimento da UVV.
- O professor determinará o assento de cada aluno.
Estudo da 12ª Semana (21/04 - 27/04)
Nesta semana continuaremos nosso estudo sobre algoritmos de ordenação e análise da complexidade de algoritmos.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 7: Algorithmic Analysis”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 7: Ordenação e Análise Algoritmos
- Vídeos obrigatórios:
- Leituras recomendadas:
- Árvore de recursão para resolver recorrências: passo a passo (leitura avançada, leia se tiver curiosidade de como calcular a complexidade do merge sort)
- Vídeos recomendados:
- Códigos:
- Exercícios:
- (nada para esta semana)
Estudo da 11ª Semana (14/04 - 20/04)
Nesta semana aprenderemos sobre os principais algoritmos de ordenação, desde os métodos simples e “lentos” (selection sort, insertion sort, bubble sort) até os métodos mais sofisticados (merge sort, quick sort). Aproveitaremos o estudo dos métodos de ordenação para discutirmos sobre complexidade de algoritmos e veremos as principais notações assintóticas.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 7: Algorithmic Analysis”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 7: Ordenação e Análise Algoritmos
- Vídeos obrigatórios:
- Leituras recomendadas:
- Árvore de recursão para resolver recorrências: passo a passo (leitura avançada, leia se tiver curiosidade de como calcular a complexidade do merge sort)
- Vídeos recomendados:
- Códigos:
- Exercícios:
- (nada para esta semana)
Estudo da 10ª Semana (07/04 - 13/04)
Nesta semana aprenderemos sobre uma importante classe de algoritmos recursivos conhecidos como “algoritmos de backtracking”, que são algoritmos que nos permitem encontrar a solução para problemas que dependem de uma seqüência de pontos de decisão nos quais, a cada decisão, você pode se aproximar ou se afastar da solução. Se percebermos que tomamos uma decisão errada, temos que retroceder (backtrack) e escolher outros caminhos. Estudaremos esses algoritmos através da programação da saída de um labirinto! Depois veremos como os algoritmos de backtracking podem se aplicar à maioria dos jogos de estratégia entre dois jogadores estudando como implementar o Jogo de Nim. E, por último, faremos a generalização dos algoritmos de backtracking para jogos entre dois jogadores através de um algoritmo especial chamado de “minimax”.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 6: Backtracking Algorithms”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 6: Algoritmos de Backtracking
- Vídeos obrigatórios:
- Leituras recomendadas:
- (nada no momento)
- Vídeos recomendados:
- Backtracking (uma playlist com 21 vídeos que ensina o que são os algoritmos de backtracking e a resolução de diversos problemas utilizando essa estratégia: permutação de strings, labirinto, palíndromos, combinações diversas, o problema das N-Rainhas, e um solucionador de Sudoku)
- The N-Queens Problem
- Implement A Sudoku Solver
- Códigos:
- Exercícios:
- (nada para esta semana)
Estudo da 9ª Semana (31/03 - 06/04)
Nesta semana continuaremos nosso estudo sobre recursividade discutindo alguns procedimentos recursivos mais avançados. Analisaremos o exemplo clássico de aplicação de recursividade, o problema da Torre de Hanoi; também aprenderemos o que fazer quando o subproblema recursivo não tem a mesma forma do problema original; e, por último, estudaremos algumas aplicações gráficas da recursão reproduzindo quadros no estilo de Piet Mondrian e criando o fractal de Koch.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 5: Recursive Procedures”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 5: Procedimentos Recursivos
- Vídeos obrigatórios:
- Leituras recomendadas:
- (nada no momento)
- Vídeos recomendados:
- Códigos:
- Exercícios:
Estudo da 8ª Semana (24/03 - 30/03)
Nesta semana começaremos nosso estudo sobre recursividade, um dos conceitos mais importantes da computação: é uma estratégia de resolver grandes problemas quebrando-os em problemas menores da mesma forma.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 4: Introduction to Recursion”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 4: Introdução à Recursão
- Vídeos obrigatórios:
- Leituras recomendadas:
- (nada no momento)
- Vídeos recomendados:
- Códigos:
- Exercícios:
Estudo da 7ª Semana (17/03 - 23/03)
Nesta semana continuaremos nosso estudo sobre Bibliotecas e Interfaces, com implementação na linguagem C. Também estaremos focados a utilizar (ler e escrever) arquivos de texto.
- Leituras obrigatórias:
- As mesmas da semana 6. Continue lendo e estudando!
- Leituras (altamente!) recomendadas:
- As mesmas da semana 6. Continue lendo e estudando!
- Códigos:
- Os mesmos da semana 6. Continue estudando!
- Exercícios:
- Os mesmos da semana 6. Continue fazendo a lista de exercícios teóricos (manuscritos em papel almaço e fazendo a lista de exercícios de programação).
Estudo da 6ª Semana (10/03 - 16/03)
Nesta semana estudaremos alguns conceitos importantíssimos na computação: bibliotecas e interfaces. Aprenderemos a importância de interfaces e a como projetar boas interfaces. Também entenderemos em maiores detalhes como as strings são representadas no computador e aprenderemos sobre os modelos de abstração fornecidos por diferentes interfaces. Também aprenderemos a ler e escrever em arquivos de dados.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 3: Libraries and Interfaces”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 3. Este é o material utilizado em sala de aula.
- Leituras (altamente!) recomendadas:
- (em breve)
- Códigos:
- Exercícios:
- Lista de Exercícios n.º 3. As questões discursivas devem ser respondidas de forma manuscrita em papel almaço. As questões de programação serão entregues no Autolab (verifique a data de entrega no calendário de sua turma). Para fazer alguns dos exercícios, você pode usar os arquivos abaixo:
apologia_sem_acentos.txt
: um pequeno trecho do livro “Apologia de Sócrates”, de Platão, sem acentos ou caracteres especiais. Aproveite e leia o texto original escrito por Platão, em tradução de Maria Lacerda de Souza.br-sem-acentos.txt
: todas as palavras do português brasileiro, sem acentos ou caracteres especiais, em formato ASCII (lista produzida por Paulo Feofiloff)br-utf8.txt
: todas as palavras do português brasileiro, COM acentos e caracteres especiais, em formato UTF-8 (lista produzida por Paulo Feofiloff). Obs.: salve o arquivo em seu computador, o navegador não conseguirá compreender corretamente os acentos e caracteres especiais.
- Lista de Exercícios n.º 3 (Extra). Este é um exercício de programação OPCIONAL um pouco mais avançado. Você não é obrigado a fazer este exercício mas saiba que este exercício será muito bom para que você aprenda e sedimente os conceitos de estruturas de dados.
- Lista de Exercícios n.º 3. As questões discursivas devem ser respondidas de forma manuscrita em papel almaço. As questões de programação serão entregues no Autolab (verifique a data de entrega no calendário de sua turma). Para fazer alguns dos exercícios, você pode usar os arquivos abaixo:
Estudo da 5ª Semana (03/03 - 09/03)
Em virtude do Feriado de Carnaval não haverá aula presencial nesta semana. Você deve continuar a fazer a Lista de Exercícios n.º 2. Note que o prazo de entrega foi alterado:
- Exercícios de Programação: 09/03/2025 23:59h, no Autolab
- Respostas manuscritas: 10/03/2025 07:15h, durante a aula
Estudo da 4ª Semana (24/02 - 02/03)
Nesta semana continuaremos o estudo sobre tipos de dados em C, em especial os tipos enumeração, ponteiros, arrays e registros.
- Leituras obrigatórias:
- As mesmas da semana 3, continue lendo!
- Leituras recomendadas:
- As mesmas da semana 3, continue lendo!
- Exercícios:
- Os mesmos da semana 3, continue estudante!
Estudo da 3ª Semana (17/02 - 23/02)
Nesta semana iniciaremos nosso estudo aprofundado sobre tipos de dados em C, em especial os tipos enumeração, ponteiros, arrays e registros. Aprenderemos a relação especial entre ponteiros e arrays, e começaremos a trabalhar com alocação dinâmica de memória. Atenção:
- Para o estudo deste conteúdo você deve fazer um esforço ESTUDAR AS LEITURAS RECOMENTADAS. Não fique apenas com as leituras obrigatórias, que são o mínimo para o entendimento inicial do assunto. Se você quiser entender enumerações, arrays, ponteiros e registros, você PRECISA se esforçar nas leituras recomendadas adicionais.
- É absolutamente fundamental que você FAÇA TODOS OS EXERCÍCIOS DE PROGRAMAÇÃO desta semana. Você precisa dominar esse conteúdo para poder entender aspectos mais avançados das estruturas de dados e algoritmos da computação.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 1: An Overview of C”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 2. Este é o material utilizado em sala de aula.
- Leituras (altamente!) recomendadas:
- C Pointers
- Pointers in C
- C Pointers
- C Pointers and Arrays
- Pointer to an Array
- Function Pointer in C
- Pointer to Pointer
- Chain of Pointers in C
- NULL Pointer in C
- Void Pointer in C
- What are Wild Pointers?
- Difference between constant pointer, pointers to constant, and constant pointers to constants
- Pointer Arithmetics in C
- Relationship Between a Pointer and an Array
- Passing Pointers to Functions
- How to Return a Pointer
- Dynamic Memory Allocation in C
- What is Memory Leak
- Pointers vs Arrays in C++
- Difference Between Arrays and Pointers
- Pointer vs Array in C
- C++ Pointers
- C Structures
- Array of Structures
- Structure Pointer in C
- C Pointer to Pointer
- Códigos:
- Códigos do Capítulo 2. (em breve)
- Exercícios:
- Lista de Exercícios n.º 2. As questões discursivas devem ser respondidas de forma manuscrita em papel almaço. As questões de programação serão entregues no Autolab (verifique a data de entrega no calendário de sua turma). Atenção: você precisará utilizar o código abaixo em um dos exercícios:
- juizes.c.rar: este é o código do programa “
juizes.c
” que você utilizará em um dos exercícios de programação. O código está compactado no formato RAR, basta descompactar o arquivo e estudar o programa.
- juizes.c.rar: este é o código do programa “
- Lista de Exercícios n.º 2. As questões discursivas devem ser respondidas de forma manuscrita em papel almaço. As questões de programação serão entregues no Autolab (verifique a data de entrega no calendário de sua turma). Atenção: você precisará utilizar o código abaixo em um dos exercícios:
Estudo da 2ª Semana (10/02 - 16/02)
Esta semana nos dedicaremos a fazer uma rápida revisão sobre os aspectos mais importantes da linguagem C. Em especial, veremos: linguagens de alto e baixo nível, processo de compilação, a estrutura de um programa em C, variáveis, valores e tipos, expressões e regras de precedência e associatividade, sentenças de comando e sentenças de controle, e subprogramas (funções, procedimentos e predicados). Você fará a primeira listagem de exercícios, contendo questões teóricas e questões de programação.
- Leituras obrigatórias:
- Programming Abstractions in C - “Chapter 1: An Overview of C”. Ler o capítulo todo, analisando os exemplos e códigos.
- Notas de aula do Capítulo 1. Este é o material utilizado em sala de aula.
- Como documentar um programa: aprenda a documentar corretamente um programa em C, explicando o que um subprograma faz, não como ele faz. Também disponível em PDF.
- Leituras recomendadas:
- C Programming (PDF): este arquivo é o PDF do “Anexo C” do livro Digital Design and Computer Architecture (também disponível online). Estude este material de você precisa de uma revisão mais detalhada da linguagem C.
- Códigos:
- Códigos do Capítulo 1 (ZIP). Estude os códigos de exemplo deste capítulo. Em especial note como o código está formatado e documentado. Aprenda também como a
Makefile
está configurada para fazer o build do programa.
- Códigos do Capítulo 1 (ZIP). Estude os códigos de exemplo deste capítulo. Em especial note como o código está formatado e documentado. Aprenda também como a
- Exercícios:
- Lista de Exercícios n.º 1. As questões discursivas devem ser respondidas de forma manuscrita em papel almaço. As questões de programação serão entregues no Autolab (o professor explicará posteriormente como fazer essa entrega).
Estudo da 1ª Semana (03/02 - 09/02)
Nesta semana faremos apenas uma avaliação diagnóstica inicial e a aula inaugural da disciplina.
Para se preparar para a próxima semana, quando começaremos o conteúdo, você deve aprender a utilizar Makefiles para automatizar a compilação de programas em C. Assista aos vídeos obrigatórios listados. Você também deve ler o material obrigatório listado. O objetivo desse estudo inicial é você aprenda, por conta própria a utilizar Makefiles (e o comando make
) para automatizar a compilação de programas. Você não precisa aprender as funcionalidades mais avançadas e difíceis agora, mas você deve ser capaz de criar e utilizar Makefiles para compilar, recompilar e construir seus programas em C.
Também há algumas leituras não obrigatórias, mas recomendadas, a respeito de compiladores, montadores e outros tópicos importantes. Além disso, se você não tem facilidade com o uso de Linux, também há um tutorial recomendado para iniciantes em UNIX/Linux (e uma folha de consulta rápida de comandos).
- Vídeos obrigatórios:
- Leituras obrigatórias:
- Leituras recomendadas:
- Exercícios:
- (nada por enquanto)
- Outras atividades:
- Comece a preparar o ambiente para o conteúdo que começa na próxima semana. Você deve ter um computador Linux (ou uma máquina virtual Linux em um computador Windows). Se você utiliza Mac, pode instalar as ferramentas diretamente (é trabalhoso, mas possível). Em breve o professor disponibilizará uma máquina virtual Linux para os alunos.
Notas: