Trabalho Prático I
Programação Imperativa (PI2009)
José Carlos Ramalho
Alberto Simões
Palavras-chave: Programação Imperativa, Trabalho Prático, C
Este documento descreve o único tema disponível para a
realização do primeiro trabalho prático que os alunos a fazer a
disciplina em epígrafe têm de realizar de forma a irem obtendo uma
avaliação prática à disciplina.
Este primeiro trabalho corresponderá a uma percentagem ainda em estudo mas
que se situará no intervalo entre 25% e 33%.
A data limite para submissão será
a meia-noite do último dia das férias
da Páscoa
.
1. Objectivos de formação e resultados de aprendizagem
Este projecto tem como objectivos principais a formação
genérica e específica de estudantes em fundamentos de computação
na área da programação imperativa.
Os objectivos de formação genérica incluem: (i) a pesquisa,
análise e selecção de informação, (ii) o treino na resolução de
problemas, (iii) o desenvolvimento da capacidade de análise, e
(iv) o desenvolvimento da capacidade de comunicação escrita e
oral.
Os objectivos de formação específica incluem: (i) a análise da
especificação e do problema, (ii) o desenvolvimento de
algoritmos e consequente programação numa linguagem imperativa,
(iii) a execução e realização de testes de conformidade.
A avaliação dos resultados esperados de aprendizagem irão
verificar se as/os estudantes conseguem demonstrar ter adquirido
o seguinte conjunto de competências genéricas e específicas:
- competências genéricas
- a capacidade de comunicação escrita e oral na
apresentação e discussão dos processos usados e
resultados obtidos;
- a capacidade de utilização de utilitários
genéricos de informática em ambiente Linux e de
elaboração de documentos anotados.
- competências específicas de Programação Imperativa
- a capacidade de desenvolver algoritmos para
resolver problemas, de forma criativa, criteriosa e
crítica, e inserida/o num grupo de trabalho;
- o conhecimento e a capacidade de codificar
algoritmos e estruturas de dados segundo os
princípios da programação estruturada;
- a capacidade e aptidões práticas para gerar,
executar e testar programas codificados em C, usando
um conjunto adequado de utilitários (GNU);
- o conhecimento e as aptidões de desenvolver e
aplicar testes de conformidade e de analisar
situações de fronteira na execução de programas;
- capacidade e aptidões na produção de documentação
adequada à manutenção por terceiros dos programas
desenvolvidos.
2. Tema: "Cifra de César"
O tema escolhido para este projecto foi um dos algoritmos de cifragem
mais conhecidos, tendo sido usado pelo imperador romano Júlio César para
enviar mensagens aos seus generais.
Os parágrafos que se seguem foram retirados da Wikipédia e são aqui transcritos
após revisão feita pelo corpo docente da disciplina.
Em criptografia, a Cifra de César, também conhecida como cifra de troca
ou ainda código de César, é uma das mais simples e conhecidas técnicas de
criptografia. É um tipo de cifra de substituição em que cada letra do texto
é substituída por outra, que se apresenta no alfabeto abaixo dela um número
fixo de vezes. Por exemplo, com uma troca de 3 posições, A seria
substituído por D, B viraria E e assim por diante.
O nome do método teve origem numa técnica semelhante usada por Júlio
César para se comunicar com os seus generais.
O sistema de criptografia de uma cifra de César serve frequentemente de
base ou é incorporado como parte de esquemas mais complexos, como a cifra
de Vigenère, e continua tendo aplicações modernas, como no sistema ROT13.
Como todas as cifras de substituição monoalfabéticas, a cifra de César é
facilmente decifrada e na prática não oferece essencialmente nenhuma
segurança na comunicação.
Para mais detalhes históricos e do algoritmo em si aconselha-se a leitura
da respectiva
página da Wikipédia.
3. O Trabalho a realizar
Neste trabalho, terás de implementar 3 funcionalidades que a aplicação
deverá exibir: após arranque o utilizador irá poder seleccionar uma de 3
operações possíveis.
- Codificar uma mensagem: será pedido ao utilizador que indique um
deslocamento; após a introdução de um valor numérico com 2 dígitos o
programa pede ao utilizador que introduza a mensagem a cifrar; após a
introdução da mensagem a aplicação aplica o algoritmo de cifragem e apresenta
no monitor a frase cifrada.
- Descodificar uma mensagem: será pedido ao utilizador que introduza
um deslocamento e uma frase cifrada; a aplicação colocará no monitor a
mensagem original.
- Descodificar uma mensagem com deslocamento desconhecido: será pedido
ao utilizador que introduza uma mensagem cifrada ao que a aplicação irá responder
enviando para o monitor a mensagem original (é aceitável que aplicação, se não
conseguir adivinhar o deslocamento, apresente no monitor as 26 hipóteses
possíveis.
4. Entrega do trabalho
O trabalho deverá ser enviado por via electrónica para um endereço a anunciar
oportunamente no site da disciplina.
O trabalho será enviado num ficheiro comprimido do tipo ZIP.
O ZIP deverá ter a seguinte constituição:
- Relatório em formato LaTeX (no site há informação sobre relatórios
em "Material Didáctico de Apoio";
- Relatório em formato PDF;
- Código C da aplicação desenvolvida;
- Makefile (não é obrigatório mas se alguém fizer...).