Pogrammation c

Bonjour,

l'enoncé de mon probleme est le suivant :

Les rationnels peuvent être vus comme des couples d’entiers, la fraction 2/5 par exemple est
représentée par le couple (2,5).
Pour manipuler les rationnels il faut définir le type Rationnel, et implanter leur arithmétique
(addition, multiplication, ..).
1- Définir le type Rationnel.
2- Ecrire une fonction void PrintRat (Rationnel R) qui permet d’afficher un rationnel.
3- Ecrire une fonction void SetRat (Rationnel *R) qui permet de saisir un rationnel.
4- Ecrire une fonction Rationnel AddRat(Rationnel R1 , Rationnel R2) qui additionne deux
rationnels
5- Ecrire une fonction Rationnel ProdRat(Rationnel R1, Rationnel R2) qui calcule le produit de
deux rationnels
6- Ecrire une fonction Rationnel QuotRat(Rationnel R1, Rationnel R2) qui calcule le quotient de
deux rationnels
7- Ecrire une fonction Rationnel RedtRat(Rationnel R) qui permet la réduction, sous forme
irréductible, d’un rationnel exemple 6/8 3/4 :
8- Ecrire une fonction AddTabRat(Rationnel tab[], int n) qui permet d’additionner un tableau de n rationnels.

ma solution est :

[CODE]
#include<stdio.h>
#include<conio.h>
typedef struct
{
int n1;
int n2;
}Rationnel;

void PrintRat (Rationnel R)
{printf("l'entier 1 est %d",R.n1);
printf("l'entier 2 est %d",R.n2);
}

void SetRat (Rationnel *R)
{
printf(" donner le premier entier :");
scanf("%d",&R->n1);
printf("donner le deuxiemme entier :");
scanf("%d",&R->n2);
}

Rationnel AddRat(Rationnel R1,Rationnel R2)
{Rationnel R3;
R3.n1=R1.n1+R2.n1;
R3.n2=R1.n2+R2.n2;
return R3;
}

Rationnel ProdRat(Rationnel R1,Rationnel R2)
{
Rationnel R3;
R3.n1=R1.n1*R2.n1;
R3.n2=R1.n2*R2.n2;
return R3;
}

Rationnel QuotRat(Rationnel R1,Rationnel R2)
{ Rationnel R3;
if(R2.n1!=0)
R3.n1=R1.n1/R2.n1;
else
printf("ereur");
if(R2.n2!=0)
R3.n2=R1.n2/R2.n2;
else
printf("ereur");
return R3;
}

void main()
{
Rationnel K,K1,K2;
SetRat(&K);
PrintRat(K);
K=AddRat(K1,K2);
K=ProdRat(K1,K2);
K=QuotRat(K1,K2);
getch();
}
/CODE

je n'arrive pas a compliter 7 et 8

pouriez vous m'aidez a le compliter

et coriger ce code

merci d'avance
Configuration: Windows XP
Firefox 3.0.15

3 réponses

  1. je suppose que la solution est

    Rationnel AddRat(Rationnel R1,Rationnel R2)
    {Rationnel R3;
    R3.n1=(R1.n1*R2.n2)+(R2.n1*R1.n2);
    R3.n2=R1.n2*R2.n2;
    return R3;
    }

    mais y'a t-il une relation avec le PGCD
    1. mais y'a t-il une relation avec le PGCD
      Pour réduire le rationnel, on peut effectivement faire:
      tant que existe PGCD(R1, R2)
        diviser R1 et R2 par PGCD
      Je ne sais pas si cet algorithme est efficace en terme d'occupation de l'unité de calcul.
      Bonne continuation.
  2. justement pouriez m'aidez a faire l'addition

    3/5 + 2/3 n'est pas egale 5/8

    le resultat doit etre 19/15
    1. Ce n'est pas difficile, il faut simplement réduire au même dénominateur, soit:
      Avec 'R1 = a/b' et 'R2 = c/d', le résultat vaut: 'R = R1 + R2 = (a*d + c*b) / (b*d)'.
      L'idéal, suite à chaque calcul, serait de réduire, si nécessaire, le relationnel, c'est-à-dire de trouver la fraction la plus simple possible.
      Bonne continuation.
  3. Je ne vois pas, dans ce code, ce qui pourrait empêcher la compilation si ce n'est:
    - le 'main' qui est de type 'int' et qui doit donc retourner un entier.
    Par contre, l'addition et la division ne sont pas arithmétiquement correctes... à moins que les règles aient récemment changées ;-)
    Bonne continuation.
    NB: Dommage de traiter ce sujet en C, le plus-plus serait le bienvenu.