PRG29002 - Programação I - Eng.Telecom 2016-2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Professor da Disciplina: Cleber Jorge Amaral
e-mail: cleber.amaral@ifsc.edu.br

Ementa de PRG29002

Critérios e instrumentos de avaliação

  • Conceitos numéricos entre 0 e 10. 0 é reservado para alunos com frequência insuficiente
    • N1 = Prova teórica sobre pseudocodigo e fluxograma (sem apoio de computador)
    • N2 = Prova prática sobre C
    • N3 = Apresentação de projeto de desenvolvimento em C (Avaliação do projeto = 30% e da performance do aluno na apresentação = 70%)
    • Recuperação realizada após cada prova e do trabalho uma reapresentação que valerá no máximo conceito 7.
    • Média = (N1+N2+N3)/3
  • Ter 75% de frequência.

Datas importantes

  • Provas e prazos a definir

Material de aula

Diário de aula

Introdução aos algoritmos

Aula inaugural e introdução aos algoritmos
  • Apresentada ementa através dos slides disponibilizados.
  • Introduzido conceito de algoritmo, discutido definição de problema bem definido
  • Trabalhamos um problema na forma de brainstorming que não foi bem especificado mas serviu para introduzir o conceito de abstração e deixar o pensamento livre para criar soluções de um controle eletrônico dos status das chaves do almoxarifado
    • No desenvolvimento definimos a necessidade de uma estrutura de dados (tabela) para ter o cadastro das chaves que devem ser controladas. Estas chaves foram identificadas por um conjunto de letras único (R1, R2, CAD2 - para representar as chaves do Lab. Redes 1, Lab. Redes 2, e Lab CAD2 respectivamente como exemplo). Neste caso esta tabela ficou com apenas um campo que serve tanto de descrição como de identificação já que este conjunto de letras deve ser único.
    • Vimos que seria necessário uma estrutura na forma de um quadro (tabela) que armazenaria o estado da chave. Serve como representação virtual do estado físico do objeto. No exercício fizemos que a chave que está fora (emprestada) poderia ser expressa com estado 1, a chave presente no quadro físico com código 0. Acabamos não definindo bem como fazer mas sabemos que de alguma forma teríamos que relacionar as chaves que estão fora com uma identificação da pessoa que pegou.
    • Nesta linha vimos que também seria necessário uma estrutura para conter as pessoas que podem pegar chaves. Sem se preocupar com detalhes de permissão a quais chaves, consideramos que uma pessoa cadastrada poderia pegar qualquer chave disponível. Neste cadastro teriamos um campo de identificação, como nos limitamos a um sistema com teclado e monitor ficamos com a matricula e um outro campo contendo o nome da pessoa já que o programa teria que mostrar em tela o nome já que não é comum as pessoas memorizarem as matriculas dos colegas.
  • Ficou como exercício para casa:
    • Gerar um descritivo mais detalhado deste problema, fazendo com que fique bem definido. Neste caso, imagine-se como sendo o cliente, os detalhes que não foram especificados você mesmo deve especificar afim de que fique bem definido
    • Agora coloque-se como executor deste projeto, como você resolve o problema que você mesmo ajudou a definir?
    • Faça na forma de tabelas, diagramas ou texto mesmo, representações de como estes dados estão se relacionando
    • Em sala não tivemos tempo para definir como funcionaria a gravação do histórico das chaves, pense numa forma de controlar este processo. Já usou excel, consegue imaginar uma maneira?
    • Consegue imaginar o fluxo de operação? Digo, o programa mostrará um menu, o usuário entrará com uma informação, o programa então mostra certa mensagem... como são os ciclos de empréstimo e devolução? Como funcionaria a consulta de histórico? E o cadastro de chaves e pessoas?
Algoritmos - fluxogramas
  • Concluindo a análise do problema das chaves, uma descrição que proponho é: Desenvolver um programa em C para registrar os empréstimos e devoluções de chaves do almoxarifado de tele. Deve ser possível cadastrar as chaves (através de um apelido: R1, R2, CAD2...), cadastrar as pessoas autorizadas a pegar as chaves (matricula e nome) e mostrar um quadro em tela que exibe o estado atual dos empréstimos. Deve enfim possuir uma função que mostra o histórico de emprestimos e devoluções. Este problema agora pode ser perfeitamente descrito em um algoritmo, não? Vejamos como poderia ficar a interface:
    • Exemplo de Menu principal do programa
- - - - - - - - - - - - - - - - - - - - - - - 
Estado atual das chaves:
R1 = Emprestada (João)
R2 = Disponível
CAD2 = Emprestada (Pedro)
CAD3 = Disponível
- - - - - - - - - - - - - - - - - - - - - - - 
1: pegar/devolver uma chave
2: cadastro de chaves
3: cadastro de pessoas
4: ver histórico de empréstimos
5: sair do programa
Digite a opção ______
    • Exemplo da opção 1 (pegar/devolver)
Digite sua identificação: ___
Digite o nome da chave a pegar ou devolver: ____
    • Exemplo da opção 2 (cadastro de chaves)
As chaves atualmente cadastradas são: R1, R2, CAD2, CAD3
Digite um nome existente para deletar ou um novo nome para criar uma nova: ____
  • Agora que temos um exemplo de um problema bem definido.
  • Vimos antes que uma consulta como "Qual a melhor maneira de vir do IFSC do centro até o IFSC de São José" não seria bem definida. Há vários detalhes que não estão declarados.
  • Outro exemplo, imagine como poderia ser desenvolvido um algoritmo que tem a missão de realizar a distribuição de móveis em uma casa. Esta é uma tarefa complexa, muitos até contratam arquiteto e decorador para esta tarefa pois envolve preferencias, requisitos de circulação, utilização de pontos de hidráulica, elétrica, uso de eletrodomésticos, enfim, são muitos detalhes técnicos e de gosto do usuário.
  • Problemas desta natureza precisam de técnicas de inteligencia artificial como "Machine Learning" que dá a habilidade a máquina de aprender sem ter sido explicitamente programada para aquela tarefa. Eles vão aprendendo com a massa de dados que vai sendo gerada e pelo comportamento do usuário que está operando o software. Com o tempo ele "aprende" que o usuário costuma se deslocar de carro, por exemplo, que pelo seu histórico costuma se deslocar em determinados horários, por sua agenda do Google planeja ir a determinado local, enfim.
  • Introdução ao fluxograma
    • Ver o vídeos e desenvolver em sala os algoritmos na forma de fluxogramas
    • Desenvolver um algoritmo na forma de fluxograma que lê uma nota que varia de 0 a 10, e imprime em tela "Aluno aprovado" ou "aluno reprovado" sabendo que são aprovados alunos com nota >= 6.0
    • Desenvolver um algoritmo na forma de fluxograma que lê três temperaturas e exibe em tela a menor delas. PDF com o fluxograma pronto
  • Exercícios:
    1. Desenvolve um algoritmo na forma de fluxograma para cálculo da média de dois números fracionários exibindo o resultado
    2. Desenvolva um algoritmo na forma de fluxograma que calcula a média de consumo de um veículo. Deve obter a distância que um veículo percorreu e a quantidade de litros consumida, exibindo em tela o consumo médio em km/l.
    3. Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta qual é o valor maior
    4. Desenvolva um algoritmo na forma de fluxograma que lê dois valores inteiros e apresenta a diferença do maior para o menor
    5. Desenvolve um algoritmo na forma de fluxograma que obtém a nota do aluno e mostra em tela o conceito sabendo que A se for >= 9.0, B >= 7.5 e < 9.0, C >= 6.0 e < 7.5 e D < 6.0
Fluxogramas
  • Desenvolver o fluxograma para o algoritmo de controle das chaves do almoxarifado

Referências

Referências bibliográficas

  • Araújo, Everton Coimbra de. Algoritmos: fundamento e prática; 3ª ed. [S.l]:Visual Books, 2007. 414p. ISBN 9788575022092.
  • KERNIGHAN, Brian W.; RITCHIE, Dennis M C: a linguagem de programação padrão ANSI; 1ª ed.[S.l]:Campus, 1989. 304p. ISBN 9788570015860.
  • SCHILDT, Herbert C Completo e Total; 3ª ed. [S.l]:Makron Books, 2009. 827p. ISBN 9788534605953.
  • FORBELLONE, Andre L. Lógica de Programação; 3ª ed. [S.l]:Makron Books, 2005. 197p. ISBN 9788576050247.
  • KING, K.N. C Programming: A Modern Approach; 2ª ed. [S.l]:W. W. Norton & Company, 2008. 832p. ISBN 9780393979503.
  • MANZANO, Jose Augusto Navarro Garcia Estudo Dirigido em Linguagem C. ; 16ª ed. [S.l]:Erica, 2012. 216p. ISBN 9788571948877.
  • NEVES, Júlio Cézar Programação Shell Linux; 5a ed. Rio de Janeiro:Brasport, 2005. 408p. ISBN 8574522031.
  • VEIGA, Roberto G. A. Comandos do Linux: guia de consulta rápida; ed. São Paulo:Novatec, 2004. 144p. ISBN 85-7522-060-8.

Referências adicionais

Ferramentas úteis

  • VisualG3: Uma IDE para desenvolvimento de programas em pseudocódigo (freeware), permite editar e compilar programas utilizando uma sintaxe própria de pseudocódigo muito parecida com a que trabalhamos em sala. Muito útil para verificar o funcionamento real dos algoritmos.
  • LibreOffice: O LibreOffice é um programa gratuito (freeware) e de código aberto (opensource). Além de editor de textos, planilhas e apresentações tem a ferramenta Draw que permite a criação de fluxogramas.
  • VirtualBox: O Oracle VirtualBox é um programa gratuito (freeware) que permite criar e instanciar máquinas virtuais. O uso de máquinas virtuais é bastante interessante quando desejamos ter diferentes sistemas operacionais em um computador bem como quando se está realizando ensaios e deseja-se isolar estes experimentos do sistema principal.
  • Ubuntu: O Ubuntu é uma distribuição linux (freeware e opensource) bastante estável e com uma comunidade bastante ativa que está sempre atualizando o sistema e presente nos foruns e redes sociais para dirimir dúvidas.
  • LinuxMint: O LinuxMint é uma distribuição linux (freeware e opensource) bastante estável e confortável aos usuários windows, pois traz um gerenciador de janelas configurado de uma forma mais natural para estes usuários e vem com um conjunto de programas pré-instalados que consegue atender a maior parte das demandas inicias.
  • dbDesigner4: O dbDesigner é uma ferramenta gratuita para elaboração de diagramas de bancos de dados relacionais. Não trabalhamos com bancos na disciplina PRG29002, porém trabalhamos com dados, esta ferramenta é útil para organizá-los em diagramas.