Ferramentas do usuário

Ferramentas do site


prog2:start

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
prog2:start [2019/05/29 09:42]
maziero
prog2:start [2019/10/15 16:35] (atual)
maziero
Linha 1: Linha 1:
 +====== CI-1002 (CI-067): Programação 2 ======
 +
 +  * **Disciplina**:​ CI-1002 - Programação 2 (antiga CI-067)
 +  * **Carga Horária** (horas): teoria 30h, prática 30h, total 60h
 +  * **Pré-requisito**:​ CI-1001 - Programação 1
 +  * **Professor**:​ Carlos A. Maziero
 +
 +  * [[Cronograma 2019-2]]
 +  * {{ :​prog2:​notas.pdf |Notas 2019-2}}
 +
 +===== 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 =====
 +
 +  * [[Introdução à Linguagem C]]
 +  * [[Controle de fluxo]]
 +  * [[Tipos de dados]]
 +  * [[Operadores]]
 +  * [[Variáveis]] FIXME
 +  * [[Edição e compilação C em UNIX]]
 +  * [[Entrada e saída padrão]]
 +  * [[Vetores]]
 +  * [[Strings]]
 +  * [[Funções]]
 +  * [[Estruturas]]
 +  * [[Tipos enumerados]]
 +  * [[Organização de código]]
 +  * [[Ponteiros]]
 +  * [[Alocação de memória]]
 +  * [[Alocação dinâmica de matrizes]]
 +  * [[Depuração]]
 +  * [[Acesso a arquivos]]
 +  * [[O sistema Make]]
 +  * [[O preprocessador C]]
 +  * [[A função main]]
 +  * [[Conversão de tipos]]
 +  * [[Ponteiros para funções]]
 +  * [[Uniões]]
 +  * [[Operações com bits]]
 +  * [[Arquivos mapeados em memória]] FIXME
 +  * [[Bibliotecas]]
 +  * [[Construção de bibliotecas]]
 +  * [[C e Assembly]] FIXME
 +
 +===== Projetos =====
 +
 +Projetos desenvolvidos nos últimos anos:
 +
 +  * [[Geração de números aleatórios]]
 +  * [[Verificador ortográfico]]
 +  * [[Processamento de imagens]]
 +  * [[Processamento de áudio]]
 +  * [[Visualização de modelos 3D]]
 +  * [[Jogo ASCII]]
 +  * [[Planilha ASCII]]
 +  * [[Editor de texto ASCII]]
 +  * [[Colossal Cave]]
 +  * [[Arquivador VINA]]
 +  * ... (sugestões são bem-vindas)
 +
 +===== 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. Serão realizados três ou mais projetos individuais,​ que podem ter pesos distintos.
 +
 +Os projetos serão avaliados de acordo com os seguintes critérios:
 +
 +  * Devem funcionar corretamente m(
 +  * Devem ser estáveis (funcionar sempre)
 +  * Não devem gerar //​warnings//​ de compilação com os flags ''​-Wall''​
 +  * Devem estar bem documentados (comentários no código)
 +  * Devem estar bem legíveis e endentados
 +  * Devem usar nomes significativos para variáveis, tipos, funções, macros e arquivos.
 +  * O código deve estar bem estruturado (uso de funções, vários arquivos, Makefile, uso de macros, etc)
 +  * Os dados devem estar bem estruturados (poucas variáveis globais, uso adequado de parâmetros,​ arrays, structs, memória dinâmica, etc.
 +
 +===== 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.
 +
 +Online (textos abertos):
 +
 +  * BANAHAN M., BRADY D., and DORAN M., [[http://​publications.gbdirect.co.uk/​c_book/​|The C Book]], 1991.
 +  * [[http://​beej.us/​guide/​bgc|Beej'​s Guide to C Programming]]
 +  * [[http://​ocw.mit.edu/​courses/​electrical-engineering-and-computer-science/​6-087-practical-programming-in-c-january-iap-2010/​index.htm|Practical Programming in C]], MIT OpenCourseWare (slides usados na disciplina).
 +  * [[http://​www1.cs.columbia.edu/​~naliniv/​teaching/​2010-fall-3101-2.php|C Programming]],​ Columbia University (slides)
 +
 +===== Material de apoio =====
 +
 +Programação em C:
 +
 +  * [[http://​www.learn-c.org|Learn C Online]]
 +  * [[http://​www.tutorialspoint.com/​cprogramming/​index.htm|C Programming Tutorial]]
 +  * [[https://​www.doc.ic.ac.uk/​lab/​cplus/​cstyle.html|Recommended C Style and Coding Standards]]
 +  * [[http://​www.c-faq.com/​|FAQ de programação em C]]
 +  * {{crefcard.v2.2.pdf|C Reference Card}} :!:
 +  * [[https://​www-s.acm.illinois.edu/​webmonkeys/​book/​c_guide/​|The C Library Reference Guide]]
 +  * [[http://​www.advancedlinuxprogramming.com|Advanced Linux Programming]]
 +  * [[http://​www.ime.usp.br/​~pf/​algoritmos/​|Projeto de Algoritmos]] do prof. Paulo Feofiloff, IME/USP
 +
 +Apostilas:
 +
 +  * {{apostila_c_-_ufpr.pdf|DINF UFPR}} (2008)
 +  * {{apostila_c_-_ufpr_pet-cc.pdf|PET-CC UFPR}} (2006)
 +  * {{apostila_c_-_nce.pdf|NCE UFRJ}} (2016)
 +  * {{apostila_c_-_ufmg.pdf|EEL UFMG}} (2001)
 +  * {{apostila_c_-_unicamp_gacli.pdf|GACLI UNICAMP}} (2000)
 +  * {{apostila_c_-_ctm_caxias.pdf|CTM Caxias do Sul}} (1997)
 +
 +
 +Having Fun with C:
 +
 +  * [[http://​www.ioccc.org|Obfuscated C Code Contest]]
 +  * [[http://​www.underhanded-c.org/​|Underhanded C Code Contest]]
 +
 +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]]
 +
 +Editores em UNIX:
 +
 +  * [[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]]
 +
 +<note important>​
 +Podem ocorrer mudanças nesta página, com a devida divulgação prévia aos alunos.
 +</​note>​