Crie um Tipo Abstrato de Dados (TAD) que represente os números racionais e que contenha as seguintes funções:
(a) Cria racional;
(b) Soma racionais;
© Multiplica racionais;
(d) Testa se são iguais;

Passo 1

O enunciado pede um Tipo Abstrato de Dados (TAD) para representar números racionais, com operações de criação, soma, multiplicação e teste de igualdade. Vamos usar como base a aritmética de frações e garantir que todo racional esteja na forma irredutível.

Passo 2

Escolher a representação interna: vamos usar um registro com dois inteiros: numerador e denominador. Impor o invariante de que o denominador é sempre não nulo e positivo, e que o par está sempre simplificado (MDC = 1).

Passo 3

Definir a função criaRacional(n, d): verifica-se d ≠ 0, ajusta-se sinal para ficar no numerador, calcula-se o máximo divisor comum (MDC), divide-se numerador e denominador pelo MDC e retorna o registro. Essa rotina garante o invariante do TAD.

Passo 4

Definir soma(r1, r2): usa a fórmula
numerador = r1numerador * r2denominador + r2numerador * r1denominador
denominador = r1denominador * r2denominador
em seguida chama criaRacional(numerador, denominador) para simplificar e manter invariantes.

Passo 5

Definir multiplica(r1, r2): usa a fórmula
numerador = r1numerador * r2numerador
denominador = r1denominador * r2denominador
Depois chama criaRacional(numerador, denominador).

Passo 6

Definir igual(r1, r2): como ambos já estão em forma irredutível e com denominador positivo, basta comparar numerador e denominador: retorna true se r1.numerador = r2.numerador e r1.denominador = r2.denominador, false caso contrário.

Resposta

TAD Racional
Exporta: tipo Racional; criaRacional; soma; multiplica; igual
Tipo Racional = registro
numerador: inteiro
denominador: inteiro // sempre > 0
fim registro
Função criaRacional(n: inteiro, d: inteiro) : Racional
Pré-condição: d ≠ 0
Variáveis locais:
s: inteiro ← se d < 0 então -1 senão 1
num, den, m: inteiro
Instruções:
num ← n * s
den ← d * s
m ← MDC(|num|, den) // MDC = máximo divisor comum
num ← num ÷ m
den ← den ÷ m
retorna Racional{numerador ← num, denominador ← den}
Função soma(r1: Racional, r2: Racional) : Racional
Variáveis locais: num, den: inteiro
Instruções:
num ← r1.numerador * r2.denominador + r2.numerador * r1.denominador
den ← r1.denominador * r2.denominador
retorna criaRacional(num, den)
Função multiplica(r1: Racional, r2: Racional) : Racional
Variáveis locais: num, den: inteiro
Instruções:
num ← r1.numerador * r2.numerador
den ← r1.denominador * r2.denominador
retorna criaRacional(num, den)
Função igual(r1: Racional, r2: Racional) : boolean
Instruções:
retorna (r1.numerador = r2.numerador) E (r1.denominador = r2.denominador)

Exercícios relacionados