====== CI-1001: Programação 1 ====== * **Disciplina**: CI-1001 - Programação 1 - Turmas BCC5 e IBM5 * **Carga Horária** (horas): teoria 30h, prática 30h, total 60h * **Pré-requisito**: CI-1055 - Algoritmos e Estruturas de Dados 1 * **Sala de aula**: Laboratório PK-4 (Eng. Elétrica) * **Monitoria**: Amanda Viescinski, 2ª 15:30 e 6ª 13:30 no lab. LARSIS (térreo DINF) ===== Objetivos ===== Capacitar o estudante a compreender o modelo de programação dos computadores atuais e a desenvolver programas usando técnicas elementares de algoritmos e estruturas de dados sobre este modelo. Capacitar o aluno a desenvolver soluções simples e eficazes para problemas diversos que podem ser resolvidos com as técnicas elementares, sempre considerando a noção de eficiência dos códigos desenvolvidos. ===== Conteúdo 2024/2 ===== * 03/09 - Aula 01: * Apresentação da disciplina * [[c:Introdução à Linguagem C]] * 05/09 - Aula 02: * [[c:Controle de fluxo]] * [[c:Tipos de dados]] * [[c:Operadores]] * [[c:Entrada e saída padrão]] * [[c:Edição e compilação C em UNIX]] * {{ :prog1:aquecimento.pdf |Lista de exercícios 1}} (para 10/9) * 10/09 - Aula 03: * Lista de exercícios 1 (cont.) * 12/09 - Aula 04: * [[c:Vetores]] * 17/09 - Aula 05: * [[c:Funções]] (passagem de parâmetros por valor) * 19/09 - Aula 06: * [[c:Estruturas]] * [[c:Definição de tipos]] * [[c:Organização de código]] * TP1 - [[c:Números racionais]] (para 1º/10) * 24/09 e 26/09 - Semana Acadêmica * 01/10 - Aula 07: * [[c:Ponteiros]] * [[c:Funções]] (passagem de parâmetros por referência) * TP2 - [[c:Números racionais - ponteiros]] (para 10/10) * 03/10 - Aula 08: * exercícios com ponteiros * [[http://www3.decom.ufop.br/toffolo/site_media/uploads/2018-2/bcc201/exercicios/Lista8_ponteiros.pdf|Mais exercícios]] (lista elaborada pela Profª Gilene B. Gomes) * 08/10 - Aula 09: * Completar TP2 * 10/10 - Aula 10: * [[c:Alocação de memória]] * TP3 - [[c:Números racionais - malloc]] (para 20/10) * 15/10 - Aula 11: * [[Tipos Abstratos de Dados]] * Implementação do TAD pilha com vetor * arquivos de teste: {{ :prog1:pilha.tgz |}} * 17/10 - Aula 12: * [[Listas encadeadas]] * Implementação do TAD pilha com lista encadeada * 22/10 - Aula 13: * [[c:Depuração]] de código * Implementações do TAD fila * com vetor - simples * com vetor - melhorado * com vetor - circular * arquivos de teste: {{ :prog1:fila.tgz |}} * 24/10 - Aula 14: * Implementações do TAD fila (continuação) * com lista encadeada - simples * com lista encadeada - dupla * TP4 - [[TAD Lista]] (para 03/11) * 29/10 - Aula 15: * Implementações do TAD fila (continuação) * Desenvolvimento do TP4 * 31/10 - Aula 16: * TP5 - [[TAD FPrio]] (para 12/11) * Desenvolvimento do TP4 * 05/11 - Aula 17: * Desenvolvimento do TP5 * 07/11 - Aula 18: * Projeto [[c:theboys-2024-2|The Boys]] (para 08/12) * Desenvolvimento do TP5 * 12/11 - Aula 19: * Acompanhamento do projeto * Durante esta e as próximas aulas serão apresentados tópicos sobre o shell UNIX * UNIX: [[unix:Histórico do Unix e Linux]] * 14/11 - Aula 20: * Acompanhamento do projeto * UNIX: [[unix:comandos básicos]] * 19/11 - Aula 21: * Acompanhamento do projeto * UNIX: [[unix:shell básico]] * 21/11 - Aula 22: * Acompanhamento do projeto * UNIX: [[unix:shell avançado]] * 26/11 - Aula 23: * Acompanhamento do projeto * UNIX: [[unix:permissões em arquivos]] * 28/11 - Aula 24: * Acompanhamento do projeto * UNIX: [[unix:shell scripts]] * 03/12 - Aula 25: * Acompanhamento do projeto * 05/12 - Aula 26: * Acompanhamento do projeto * 10/12 - Aula 27: * Defesa do projeto * 12/12 - Aula 28: * Defesa do projeto ===== Metodologia ===== * **Teoria**: aulas expositivas, com análise e discussão dos temas propostos. * **Prática**: atividades referentes aos temas abordados nas aulas teóricas. * [[teaching:Regras das atividades de laboratório]]. ===== Avaliação ===== A avaliação será feita através dos projetos realizados ao longo da disciplina. Esta é uma disciplina de projeto, portanto **não há exame final**. Os projetos serão avaliados de acordo com os seguintes critérios: * Compilar corretamente no ambiente Linux provido pelo DINF/UFPR. * Aderência ao padrão C99. * Respeito às especificações. * Estabilidade (deve funcionar sempre). * Compilar com os flags ''-Wall -Wextra'' sem erros ou avisos. * Análise pelo programa Valgrind sem erros. * Comentários adequados e suficientes no código. * Código legível e corretamente endentado. * Nomes significativos para variáveis, tipos, funções, macros e arquivos. * Código bem estruturado (uso de funções, vários arquivos, Makefile, uso de macros, etc). * Dados bem estruturados (poucas variáveis globais, uso adequado de parâmetros, arrays, structs, memória dinâmica, etc. * Domínio do aluno sobre o código que desenvolveu. ===== Bibliografia ===== Básica: * KERNIGHAN, B., Ritchie, D., C: A Linguagem de Programação - Padrão ANSI, Editora Campus, 1989. * MEDINA, M., FERTIG, C., Algoritmos e Programação: teoria e prática. Novatec, 2006. * ZIVIANI, N., Projeto de algoritmos: com implementações em PASCAL e C. 2a. edição. Ed. Pioneira Thomson, 2004. Complementar: * KNUTH, D. E., The Art of Computer Programming. Addison Wesley, 2005 . * SCHILDT, H., C Completo e Total. Makron Books, 1997. * PRINZ, P., KIRCH-PRINZ, U., C Pocket Reference. Ed. O'Reilly, 2003. Apoio: * [[c:start|Material de programação em C]] do docente. Material sobre Shell e UNIX/Linux: * Comandos básicos ([[unix:comandos básicos]], [[unix:permissões em arquivos]], [[unix:gestão de processos]]). * Uso do shell BASH ([[unix:shell básico]], [[unix:shell avançado]], [[unix:shell scripts]]). * [[unix:Desenvolvimento em Linux]]. * Excelente [[http://wiki.bash-hackers.org|guia de BASH]]. * [[unix:Histórico do Unix e Linux]]. * [[http://www.washington.edu/computing/unix/vi.html|How to use the VI editor]]. * [[http://www.debian.org/doc/manuals/reference/ch-edit.pt-br.html|Diversas informações sobre editores]]. Podem ocorrer mudanças nesta página, com a devida divulgação prévia aos alunos.