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.

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.

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
O acrônimo NaN significa "Not a Number". Ele é um padrão da IEEE usado em muitas linguagens de programação para imprimir números indefinidos ou inválidos. Ajuste sua função imprime_r para imprimir NaN em vez de INVALIDO.

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

Entregue um único arquivo tp2.tgz que contenha por sua vez os seguintes arquivos:

  • racional.h: o mesmo arquivo fornecido, não o modifique
  • racional.c: sua implementação das funções definidas em racional.h
  • tp2.c: contém a função main que usa os racionais
  • makefile
  • c/numeros_racionais_-_ponteiros.txt
  • Última modificação: 2024/10/15 11:05
  • por maziero