Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Universidade Federal da Bahia
Instituto de Matemática
Departamento de Ciência da Computação
MAT A57 – Laboratório de Programação 1 – Turma 01 – Prof Italo Valcy
1º Trabalho prático – 2013.1 – 22/Jul/2013
Calculadora simplificada (TC – Tiny Calculator)
Tarefa
Nesse trabalho o aluno deverá implementar uma aplicação em C que funcionará como um 
interpretador de operações matemáticas simplificado, similar a uma calculadora. Além das 
operações matemáticas convencionais, essa calculadora será capaz de salvar o resultado de um 
cálculo (valor atual do display) em uma variável definida pelo usuário e também a executar laços de 
repetições, conforme definido pelo usuário.
Para a implementação do sistema TC, você deve seguir algumas premissas indicadas abaixo: 
• O programa deve ler as instruções de cálculo, definidas abaixo, tanto através da entrada 
padrão, quanto a partir de um arquivo informado como argumento de linha de comando;
• O programa deve efetuar alocação dinâmica de memória para armazenar os valores de um 
cálculo quando solicitado pelo usuário;
• O programa deve estar bem estruturado, com funções para tratar cada funcionalidade e com 
arquivos separando seus módulos (e.g. interface de linha de comando, cálculos, tratamento 
de arquivos, etc.)
As operações que o sistema TC deve implementar são as seguintes (tags entre devem ser 
substituídos por valores/nomes apropriados):
1. CLD: Clear Display – Zera o valor acumulado no acumulador (display);
2. SET : atribui um valor ao acumulador, sobre-escrevendo-o, seja 
um valor direto ou um valor armazenado em determinada variável;
3. ADD : adiciona um valor ao total acumulado, seja um valor 
direto ou um valor armazenado em determinada variável, salvando o resultado no 
acumulador;
4. SUB : subtrai um valor do total acumulado, seja um valor direto 
ou um valor armazenado em determinada variável, salvando o resultado no acumulador;
5. MUL : multiplica o total acumulado por um valor, seja um valor 
direto ou um valor armazenado em determinada variável, salvando o resultado no 
acumulador;
6. DIV : divide o total acumulado por um valor, seja um valor direto 
ou um valor armazenado em determinada variável, salvando o resultado no acumulador. 
Deve-se ter cuidado com divisões por zero, elas não devem ser de fato executadas. Ao 
encontrar uma divisão por zero, deve-se imprimir um erro na tela (“ERR: divisao por zero”), 
mantendo o valor do acumulador antigo;
7. POW : potenciação do total acumulado (base) por um valor 
(expoente), seja um valor direto ou um valor armazenado em determinada variável, salvando 
o resultado no acumulado. A operação de potenciação aceita números inteiros positivos e 
negativos como expoente; caso a base seja zero e o expoente seja zero, deve-se imprimir um 
erro na tela (“ERR: potenciacao invalida”), mantendo o valor do acumulador antigo;
8. SQRT: calcula a raiz quadrada do acumulador, salvando o resultado no acumulador. Caso o 
valor acumulado, antes de efetuar a operação de raiz quadrada, seja negativo, deve-se 
imprimir um erro na tela (“ERR: raiz quadrada invalida”), mantendo o valor do acumulador 
antigo;
9. REP : repete determinada instrução 
determinado número de vezes, seja o número de vezes informado diretamente ou um valor 
armazenado em determinada variável. A instrução pode ser qualquer uma das seguintes 
(vistas anteriormente): ADD, SUB, MUL, DIV, POW, SQRT.
10. STOD : Store Display – Salva o valor acumulado no acumulador (display) 
em uma variável informada pelo usuário.
11. PRINT: imprime no terminal o valor do acumulador, com duas (2) casas decimais;
12. OFF: encerra a execução da calculadora TC.
Acerca das variáveis:
• O nome das variaveis será composto apenas por letras minúsculas (de “a” a “z”), com no 
máximo 32 letras. Caso o usuário tente declarar uma variável fora desse formato, deve-se 
imprimir um erro no terminal (“ERR: nome de variavel invalido”) e manter o valor do 
acumulador anterior;
• Toda variável deve ser preenchida (instrução STOD) antes de ser usada. Caso o usuário tente 
usar uma variável que não foi preenchida anteriormente, deve-se imprimir um erro no 
terminal (“ERR: variavel nao definida”) e manter o valor do acumulador anterior;
Observações gerais:
• O acumulador sempre começa com valor zero;
• Cada uma das instruções acima possui alguns argumentos ou nenhum. Ao detectar uma 
instrução com quantidade errada de argumentos, ou ainda uma instrução não definida acima, 
deve-se imprimir um erro no terminal (“ERR: instrucao invalida”) e manter o valor do 
acumulador anterior;
• Uma linha de instrução conterá no máximo 1024 caracteres, incluindo seus argumentos;
• Cada instrução é separada de seus argumentos através de espaços (um ou muitos) ou 
tabulações/tabs (um ou muitos);
• Ao ler as instruções de um arquivo, a instrução de finalização da calculadora é opcional. 
Caso ela apareça antes do final do arquivo, ela deve encerrar o programa conforme seu 
comportamento normal.
Exemplos de execução
Execução 01:
Entrada: Saída
./tc
CLD
SET 8.8
ADD 0.5
SUB 0.3
SUB -9
STOD qualquernome
CLD
SET 5
MUL qualquernome
PRINT
REP 6 ADD 10
90.00
1.20
STOD salvaacumulador
SET 3
STOD xxxxx
SET 5
STOD numerocinco
SET salvaacumulador
REP xxxxx DIV numerocinco
PRINT
OFF
Execução 02:
Considere a existência do arquivo “/tmp/entrada1.tc” com o seguinte conteúdo:
ADD 50
REP 4 ADD 10
POW 2
STOD xyz
SET 10
POW 3
REP 8 ADD 100
SUB 99
ADD xyz
SQRT
PRINT
Entrada: Saída
./tc /tmp/entrada1.tc 99.00
Observações
O trabalho é em grupo de até três alunos.
O grupo deve entregar o código-fonte diretamente compilável, sem a necessidade de instalação de 
IDEs específicas ou outros programas além do compilador.
Data de entrega: 30/08/2013, até às 23:59 (horário de Brasília). O trabalho deve ser entregue por e-
mail, para o endereço do professor (italo@dcc.ufba.br).
No dia 02/09/2013 e 09/09/2013, o grupo deverá apresentar o código-fonte para o professor e 
acompanhar os testes de execução. Cada grupo terá 20 minutos. A cada dia, será sorteado a ordem 
de apresentação.
Observação: somente serão aceitos trabalhos feitos utilizando-se um dos seguintes compiladores:
• C: gcc ou djgpp 
Não serão aceitos trabalhos em outros compiladores. Erros ocasionados por utilização de outros 
compiladores serão considerados erros do trabalho.

Mais conteúdos dessa disciplina