Pogrammation c

Fermé
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 - 2 déc. 2009 à 18:48
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 3 déc. 2009 à 00:00
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

3 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
2 déc. 2009 à 22:15
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.
0
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 7
2 déc. 2009 à 22:21
justement pouriez m'aidez a faire l'addition

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

le resultat doit etre 19/15
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
2 déc. 2009 à 22:30
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.
0
mb42 Messages postés 432 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 14 janvier 2014 7
2 déc. 2009 à 22:43
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
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
3 déc. 2009 à 00:00
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.
0