CI067 - Oficina de Computação

Ementa: Uso dirigido de ferramentas de desenvolvimento de software. Práticas de projetos de algoritmos.

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.

Enfoque: A ênfase desta disciplina está em projetos de programação não-triviais de média comlexidade, que usem conhecimentos de estruturas de dados ou algoritmos relacionados vistos em outras disciplinas do curso (notadamente Algoritmos I e II). Como exemplos de projetos podem ser considerados a implementação de comandos Unix com os quais os alunos já tenham alguma familiaridade (tr, cat, cut), ou a extensão de programas que já estão funcionais. A seqüência de passos do projeto de um programa será seguida (concepção, especificação, projeto, codificação, testes e documentação) com especial ênfase nos aspectos da programação. Serão mostrados aos alunos exemplos de código de boa qualidade, com estilo legível, e boa documentação interna do código. Os aspectos de testes do programa, sua depuração e documentação (no estilo de página de manual) também serão contemplados e sua importância discutida.



Plano Geral de Aulas

Aulas Objetivos Notas de Aula Exercícios
1-7 Linguagem C: Introdução, estrutura de programas C, tipos de dados, expressões aritméticas, lógicas e relacionais,
estruturas de controle. Conversão de tipos, cast.
Estruturas de dados: Arrays, Enumeração e registros (struct), strings.
Funções - definição, passagem de parâmetros por valor;
1 2 3 4 5 6 7 8 9 10 11 12 
13 14 15 16 17 18 19 20 21 22 
23 24 25 
1 2 9
8 Avaliação 1
9-14 Linguagem C: Entrada e Saída. Ponteiros. Funções - passagem de parâmetros por referência.
Relação entre arrays e ponteiros. Alocação dinâmica de memória. Manipulação de arquivos;
26 27 28 29 30 31 32  3 4 5
15 Avaliação 2
16-18 Processo de compilação, ligação e montagem.
Programas extensos: modularização, bibliotecas, ferramentas de construção (makefiles);
33 34 6 7 8
19-20 Depuração de programas; 35 
21-28 Exercicios de Programação;
29-30 Avaliação 3.


Critérios de Avaliação

As avaliações (execução de provas ou entrega de trabalhos) são presenciais, isto é, elas ocorrem em sala de aula nas datas definidas no Calendário de Avaliações da respectiva turma.

Nos casos amparados pelo artigo 106, Seção V, Resolução 37/97-CEPE, o aluno terá direito à 2a.-chamada para as avaliações às quais não compareceu. A data e local serão divulgados no Calendário de Avaliações da respectiva turma.

Em quaisquer outros casos, trabalho não entregue implica em nota 0 (zero) para o aluno.


Material de Apoio

  1. Bibliografia Básica
    1. Kernighan, B.W. and Ritchie, D.M. The C Programming Language, Prentice-Hall Inc. 2nd edition.
    2. Medina, M. & Fertig, C. Algoritmos e Programação - Teoria e Prática, Editora Novatec, 2005.
    3. Ziviani, N. Projeto de algoritmos : com implementações em PASCAL e C. 2a. edição, Ed. Pioneira Thomson, 2004.
  2. Bibliografia Complementar
    1. Schildt H. C Completo e Total, 3ª Edição, Makron Books, 1997.
    2. Knuth, D. E. The Art of Computer Programming, Addison Wesley, 2005
  3. Textos e Manuais
    1. Zola, W. & Hara, C. Linguagem C - Notas de Aula. Versão em PDF.
    2. PET-Computação - UFPR. Apostila Linguagem C. Versão em PDF.
    3. Cruz, A.J.O. Linguagem C. Apostila da disciplina Computação para Informática. Acessado em 20 de março de 2007. Versão em PDF.
    4. Downey, A.B et al. How to Think Like a Computer Scientist, versão C++, Open Book Project. Acessado em 23 de maio de 2005. Versão em PDF.
    5. Huss, E. The C Library Reference Guide. 1997.
    6. C Reference Card.
    7. Manuais on-line do sistema Unix (Seções 2 e 3).
  4. Ferramentas de Programação
    1. GCC online documentation
    2. Doxygen - sistema de documentação para linguagem C, C++ e outras.  PDF Exemplos simples aqui. Exemplos mais completos aqui.
    3. Bueno, A.D. Programação Orientada a Objeto em C++ - Parte IV: Programação para GNU/Linux, Editora Novatec, 2003, ISBN: 85-7522-040-3.
    4. Make:
      1. Matloff, N.. Managing Modularity: Makefiles and Libraries. 2005
      2. The Makefile.
      3. GNU make
      4. Zago, A.F.. Dicas sobre Makefile (Mensagens diversas sobre o assunto).
    5. Depuração:
      1. Matloff, N.. Guide to Faster, Less Frustrating Debugging. 2002
      2. Matloff, N.. The Student's Guide of the Secret Art of Debugging. 2001
      3. GNU's Debugging with GDB
      4. GNU's Debugging with DDD
      5. GDB Reference Card
      6. Quick GDB Reference Guide

FAQs:

  • O que eu posso e não posso fazer com minha conta nos computadores do DINF?
    É EXTREMAMENTE importante que os alunos tomem conhecimento das Normas e Recomendações para Utilização dos Sistemas Computacionais do Departamento de Informática da UFPR. Elas estão disponíveis no corredor de acesso aos Laboratórios e também aqui.

  • Como acessar o webmail do DInf?
    Acesse a URL http://webmail.inf.ufpr.br/, e preencha os campos na página com seu login e senha nos sistemas do DINF.

  • Existe alguma forma de acesso remoto (de casa ou do trabalho) aos sistemas computacionais do DINF?
    • Se você está em uma máquina com sistema Linux, execute "ssh hostname.c3sl.ufpr.br", onde "hostname" é o nome de uma das servidoras do DINF.

      Por exemplo, "ssh -X macalan.c3sl.ufpr.br" permite acesso remoto à servidora "macalan".

    • Se está em um sistema MS-Windows, use o programa PuTTY.


  • Como copiar arquivos de/para minha área de trabalho nos computadores do DINF?
    • Se você está em uma máquina com sistema Linux:
      • Para copiar arquivo "prog.p" em seu computador para a máquina "macalan":
        scp    prog.p    macalan.c3sl.ufpr.br:prog.p

      • Para copiar arquivo "prog.p" na máquina "macalan" para seu computador:
        scp    macalan.c3sl.ufpr.br:prog.p    ./prog.p

    • Se está em um sistema MS-Windows, use o programa WinSCP.


A program should be light and agile, its subroutines connected like a strings of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little nor too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity.
A program should follow the 'Law of Least Astonishment'. What is this law? It is simply that the program should always respond to the user in the way that astonishes him least.
A program, no matter how complex, should act as a single unit. The program should be directed by the logic within rather than by outward appearances.
If the program fails in these requirements, it will be in a state of disorder and confusion. The only way to correct this is to rewrite the program.

Geoffrey James, "The Tao of Programming"



Last modified: Tue Jun 2 10:58:41 BRT 2015