Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
c:numeros_racionais_-_ponteiros [2024/09/24 19:23] – [Atividade] mazieroc:numeros_racionais_-_ponteiros [2024/10/15 14:05] (atual) maziero
Linha 1: Linha 1:
 +====== Números racionais - ponteiros ======
 +
 +
 +{{  homer-computer.png?250|}}:!: Este projeto foi originalmente proposto pelo prof. [[https://www.inf.ufpr.br/marcos/|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  <sup>a</sup>/<sub>b</sub>, 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 {{tp2.tgz|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:
 +
 +<code>
 +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
 +</code>
 +
 +<note important>
 +O acrônimo **NaN** significa [[https://pt.wikipedia.org/wiki/NaN|"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''.
 +</note>
 +
 +==== Exemplo de funcionamento ====
 +
 +Considerando que o usuário digitou a seguinte entrada (que está no arquivo ''entrada1.txt''):
 +
 +<code>
 +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
 +</code>
 +
 +A saída correspondente deve ser:
 +
 +<code>
 +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
 +</code>
 +
 +Para a entrada de dados contida no arquivo ''entrada2.txt'', a saída deve ser:
 +
 +<code>
 +VETOR = NaN NaN
 +VETOR = 
 +VETOR = 
 +SOMA = 0
 +</code>
 +
 +Para a entrada de dados contida no arquivo ''entrada3.txt'', a saída deve ser:
 +
 +<code>
 +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
 +</code>
 +
 +===== 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 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''