Números racionais - ponteiros
Este projeto foi originalmente proposto pelo prof. Marcos Castilho para a disciplina de Programação 1 (CI1001).
Este trabalho visa modificar o módulo de números racionais desenvolvido anteriormente para usar ponteiros e funções com passagem de parâmetros por referência.
Atividade
Você deve implementar um programa que manipule números racionais, que são números da forma a/b, onde a e b são números inteiros. Nesta versão, as funções que manipulam racionais usam passagem de parâmetros por referência.
Você deve baixar este arquivo e abri-lo para poder fazer o trabalho, pois irá precisar de todos os arquivos ali contidos:
racional.h
: arquivo de cabeçalho com os protótipos das funções (não deve ser alterado).racional.c
: arquivo que implementa as operações sobre números racionais (“esqueleto” a completar).tp2.c
: código que usa a biblioteca de racionais (“esqueleto” a completar).makefile
: arquivo do utilitário “make” para compilar seu código.entrada*.txt
: dados de entrada para testes.
No arquivo racional.h
foi definida uma estrutura (struct) para o tipo abstrato de dados racional e os protótipos das funções que permitem manipular essa estrutura. Você deve implementar essas funções no arquivo racional.c
.
Programa principal
O programa principal (tp2.c
) contém a função main
. Ele deve incluir o header racional.h
e implementar corretamente o seguinte pseudocódigo:
defina um vetor para até 100 números racionais leia um valor n tal que 0 < n < 100 preencha o vetor com n números racionais lidos da entrada (leia o numerador e o denominador de cada racional) imprima "VETOR = " e o conteúdo do vetor lido elimine deste vetor os elementos inválidos imprima "VETOR = " e o conteúdo do vetor resultante ordene este vetor imprima "VETOR = " e o conteúdo do vetor resultante calcule a soma de todos os elementos do vetor imprima "SOMA = " e a soma calculada acima nova linha retorne 0
imprime_r
para imprimir NaN
em vez de INVALIDO
.
Exemplo de funcionamento
Considerando que o usuário digitou a seguinte entrada (que está no arquivo entrada1.txt
):
15 -1 3 5 0 2 7 1 9 9 0 8 -5 -7 0 0 8 6 11 7 -17 1 0 12 36 -5 1 4 9 5 0
A saída correspondente deve ser:
VETOR = -1/3 NaN 2/7 1/9 NaN -8/5 NaN 0 6/11 -7/17 NaN 1/3 -5 4/9 NaN VETOR = -1/3 4/9 2/7 1/9 -5 -8/5 1/3 0 6/11 -7/17 VETOR = -5 -8/5 -7/17 -1/3 0 1/9 2/7 1/3 4/9 6/11 SOMA = -331343/58905
Para a entrada de dados contida no arquivo entrada2.txt
, a saída deve ser:
VETOR = NaN NaN VETOR = VETOR = SOMA = 0
Para a entrada de dados contida no arquivo entrada3.txt
, a saída deve ser:
VETOR = 19/3 16/3 2/9 11/16 -9 -7/19 15/16 1/13 -7/18 13/20 11/9 16/15 -17/15 2/7 7/4 5/6 -9/10 NaN 1/12 3/2 -17/12 8/3 5/3 14/13 -9 2/9 1/9 18/19 -13/10 -7 -11/17 17/20 -1/14 1/6 NaN -12/7 0 4/7 -2/7 -7/15 1/11 11/2 8/3 19/11 19/2 2/7 8/19 -1 -1 -3/11 VETOR = 19/3 16/3 2/9 11/16 -9 -7/19 15/16 1/13 -7/18 13/20 11/9 16/15 -17/15 2/7 7/4 5/6 -9/10 -3/11 1/12 3/2 -17/12 8/3 5/3 14/13 -9 2/9 1/9 18/19 -13/10 -7 -11/17 17/20 -1/14 1/6 -1 -12/7 0 4/7 -2/7 -7/15 1/11 11/2 8/3 19/11 19/2 2/7 8/19 -1 VETOR = -9 -9 -7 -12/7 -17/12 -13/10 -17/15 -1 -1 -9/10 -11/17 -7/15 -7/18 -7/19 -2/7 -3/11 -1/14 0 1/13 1/12 1/11 1/9 1/6 2/9 2/9 2/7 2/7 8/19 4/7 13/20 11/16 5/6 17/20 15/16 18/19 16/15 14/13 11/9 3/2 5/3 19/11 7/4 8/3 8/3 16/3 11/2 19/3 19/2 SOMA = 82626407/6126120
Entregáveis
Entregue um único arquivo tp2.tgz
que contenha por sua vez os seguintes arquivos:
racional.h
: o mesmo arquivo fornecido, não o modifiqueracional.c
: sua implementação das funções definidas emracional.h
tp2.c
: contém a funçãomain
que usa os racionaismakefile