Lecture

Résolu/Fermé
manutd1993 Messages postés 17 Date d'inscription dimanche 21 septembre 2014 Statut Membre Dernière intervention 5 octobre 2014 - 21 sept. 2014 à 19:48
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 oct. 2014 à 18:00
Bonjour,

Voilà pour un exercice de cours, je dois réussir à trouver l'opération à faire à partir d'un calcul en chaîne de caractères. Ex: quand j'écris 7/2 - 3/5 , le programme doit reconnaître le signe - et me sortir le résultat : 29/10

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
21 sept. 2014 à 23:27
Bonjour,

Oui, tu as posé l'énoncé. Maintenant, faudrait que tu nous fasses part de ta réflexion ? Ou que tu nous dises ce que tu ne comprends pas ou ne parviens pas à faire ? N'hésite pas à nous montrer ce que tu as commencé à faire et dis-nous où tu bloques.

Petite réflexion au passage : l'exemple vient de l'énoncé où de toi ? Ca sera nécessairement des fractions ? Cela peut-être d'autres signes ?

Cdlt,
0
manutd1993 Messages postés 17 Date d'inscription dimanche 21 septembre 2014 Statut Membre Dernière intervention 5 octobre 2014
Modifié par manutd1993 le 22/09/2014 à 01:49
int main(){

int num1;
int den1;
int num2;
int den2;
char frac;


printf("Bienvenue\n");

printf("veuillez entrer la premiere fraction :\n");
scanf("%d%c%d", &num1,&frac,&den1);

printf("veuillez entrer la deuxieme fraction :\n");
scanf("%d%c%d", &num2,&frac,&den2);



/*Variables*/
int numero = 0;
int x;
int y;


/*Menu de séléction*/

printf("|****************************|\n");
printf("|************Menu************|\n");
printf("|****************************|\n");

printf("\n");

printf("1: Additionner les fractions\n");
printf("2: Soustraire les fractions\n");
printf("3: Multiplier les fractions\n");
printf("4: Diviser les fractions\n");
printf("\n");
printf("Veuillez saisir l operation souhaitee :");
scanf("%d",&numero);


while (numero > 4 || numero < 1){
printf("\nErreur\nEntrer un numero parmis les choix du menu : ");
scanf("%d",&numero);
}



printf("\n");

/*code*/

int div;
if (numero ==1){
x=(num1*den2)+(den1*num2);
y=(den2*den1);
for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
printf("resultat: %d/%d", x,y);
}else{
if (numero ==2){
x=(num1*den2)-(den1*num2);
y=(den2*den1);
for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
printf("resultat: %d/%d", x,y);
}else{
if (numero ==3){
x=(num1*num2);
y=(den1*den2);
for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
printf("resultat: %d/%d", x,y);
}else{
if (numero ==4){
x=(num1*den2);
y=(num2*den1);
for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
printf("resultat: %d/%d", x,y);
}
}
}

}
system("PAUSE");
return 0;
}
0
manutd1993 Messages postés 17 Date d'inscription dimanche 21 septembre 2014 Statut Membre Dernière intervention 5 octobre 2014
22 sept. 2014 à 01:55
voila fiddy, ca c'est le code que j'ai pour l'instant.

un code simple qui demande à l'utilisateur d'entrer la première fraction puis la deuxième et de choisir l'opération à faire, de plus ca me donne le résultat simplifié

Mais ce que je veux moi, c'est que j'entre en une fois le calcul (ex: 3/2+4/2) et le programme doit pouvoir lire cette chaine de caractères et me donner le résultat que ce soit addition, soustraction, multiplication ou division
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 22/09/2014 à 11:41
Bien compliqué ce code et peu lisible. Je te conseille l'utilisation de fonctions : multiplication(), division(), addition(), soustraction() acceptant chacun les 4 nombres (2 numérateurs et 2 dénominateurs) et 1 couple numérateur/dénominateur pour le résultat que tu passes en pointeur.

Du coup, cela peut donner :

#include...

void addition(int ...) {
     ...
}
...

int main(void) {
     int num1, denum1;
     int num2, denum2;
     int num3, denum3;
     char op;
     int ret;

     ret=scanf("%d/%d%c%d/%d",&num1, &denum1,&op, ...);
     if (ret == 5) {
           switch(op) {
               case '+':
                    addition(num1, ..., &num3, &denum3);
                    break;
               case '-':
                     ...
                ...
          }
     }
          printf("=%d/%d\n", ...);
     return 0;
}

A noter qu'il ne faut pas d'espaces dans la saisie sinon cela ne fonctionnera pas.

Merci la prochaine fois d'utiliser la balise "<code c>".
Exemple d'utilisation :
<"code c">
ici tu mets ton code
<"/code">
(à mettre sans les guillemets)
Cdlt,
0
manutd1993 Messages postés 17 Date d'inscription dimanche 21 septembre 2014 Statut Membre Dernière intervention 5 octobre 2014
23 sept. 2014 à 21:13
salut fiddy, j'ai essayer comme tu me l'a expliqué mais j'ai des erreurs.

Pourrais-tu jeter un coup d'oeil ?
0
manutd1993 Messages postés 17 Date d'inscription dimanche 21 septembre 2014 Statut Membre Dernière intervention 5 octobre 2014
23 sept. 2014 à 21:13
void addition(int den1,int den2,int num1,int num2,int y,int x ) {

x=(num1*den2)+(den1*num2);
y=(den2*den1);

for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
}

void soustraction(int den1,int den2,int num1,int num2,int y,int x ) {

x=(num1*den2)-(den1*num2);
y=(den2*den1);

for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
}

void multiplication(int den1,int den2,int num1,int num2,int y,int x ) {

x=(num1*num2);
y=(den1*den2);

for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
}

void division(int den1,int den2,int num1,int num2,int y,int x ) {

x=(num1*den2);
y=(num2*den1);

for (div = 2; div <=x && div <=y; div++){
while((x % div == 0) && (y %div == 0)){
x = x/div;
y = y/div;
}
}
}


int main(void) {
int num1, den1;
int num2, den2;
int num3, den3;
char op;
int ret;
int x, y;

printf("Veuillez entrer votre calcul: \n");
ret=scanf("%d/%d%c%d/%d",&num1, &den1,&op,&num2, &den2);
if (ret == 5) {
switch(op) {
case '+':
addition();
break;
case '-':
soustraction(num1, den1,op, num2, den2);
break;
case '*':
multiplication(num1, den1,op, num2, den2);
break;
case '/':
division(num1, den1,op, num2, den2);
break;
}

}
printf("=%d/%d\n",x,y);
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
23 sept. 2014 à 21:41
Heureusement que j'ai précisé :
"Merci la prochaine fois d'utiliser la balise "<code c>".
Exemple d'utilisation :
<"code c">
ici tu mets ton code
<"/code">
(à mettre sans les guillemets)"...

void addition(int den1,int den2,int num1,int num2,int y,int x ) {
Tu as oublié de mettre les pointeurs (relis mon post).
Même remarque pour le)s autres fonctions.

Je te conseille également de faire une fonction pour la simplification de la fraction. Ca sera plus lisible et facilitera la maintenance (ça t'évitera de récrire ce bloc dans toutes les fonctions...).
0