Salut tout le monde!
bon voila je travaille actuellement sur un projet de math (de la probabilité), et j'aurai besoin d'un petit coup de main!
le but de l'exercice c'est de faire passer des chiffres en ligne de commande via une chaine de caractere, ces chiffres doivent etre utiliser pour calculer la formule de la probabilité qui est (4k + 5)/10k avec k = nombre passé en ligne de commande par exple :
> a.out "1+3+5"
0.978
> a.out "1x3"
0.510
>truc@bidule
En entrée : Chaîne de caractères représentant l’expression dont on veut calculer la probabilité
En sortie : Probabilité résultat avec 3 chffres après la virgule
le caractere + rrepresente union
le caractere x represente inter
j'ai reussi a pratiquement tout faire mais voila que je bloque sur la gestion des priorités (cad faire les calculs pour les inter (x) avant celui des unions (+))
j'espere que quelqu'un d'entre vous parviendra m'aider merci d'avance

!!
voici mon code source (je suis sous pc bsd):
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_next_nbr(int *cpt,char *src)
{
char str[strlen(src) ];
int i = 0;
int j = *cpt;
// str = malloc ((strlen(src) + 1) * sizeof(char));
while ((src[j] >= '0') && (src[j] <= '9') && j< strlen(src))
{
str[i] = src[j];
i++;
j++;
}
str[i] = '\0';
*cpt = j;
return(atoi(str));
}
int main (int argc, char ** argv)
{
int i;
int j;
char *str;
char operante;
float resultat;
float resultat_union;
float resultat_inter;
float p_res, p_nbr2;
i = 0;
j = 0;
resultat = 0;
resultat_union = 0;
resultat_inter = 0;
p_res = 0;
p_nbr2 = 0;
float nbr,nbr2;
int etat=0;
int neg;
if(argv[1][i] != '-')
resultat = get_next_nbr(&i, argv[1]);
else
{
i++;
resultat = get_next_nbr(&i, argv[1]) * (-1);
}
while (argv[1][i] != '\0')
{
j = 0;
operante = argv[1][i];
i++;
if(argv[1][i] != '-')
nbr2 = get_next_nbr(&i, argv[1]);
else
{
i++;
nbr2 = get_next_nbr(&i, argv[1]) * (-1);
}
if(operante == 'x')
{
if (etat > 0)
{
if (nbr2 < 0)
{
p_nbr2 = (1-(((4.0*(-nbr2))+5)/(10*(-nbr2))));
}
else
{
p_nbr2 = (((nbr2*4.0)+5)/(10*nbr2));
}
resultat = resultat * p_nbr2;
}
else
{
if (nbr2 < 0)
{
p_nbr2 = (1-(((4.0*(-nbr2))+5)/(10*(-nbr2))));
}
else
{
p_nbr2 = (((nbr2*4.0)+5)/(10*nbr2));
}
if (resultat < 0)
{
resultat = (1-(((4.0*(-resultat))+5)/(10*(-resultat))));
}
else
{
resultat = (((resultat*4.0)+5)/(10*resultat));
}
resultat = resultat * p_nbr2;
}
}
if (operante == '+')
{
if (etat > 0)
{
if (nbr2 < 0)
{
p_nbr2 = (1-(((4.0*(-nbr2))+5)/(10*(-nbr2))));
}
else
{
p_nbr2 = (((nbr2*4.0)+5)/(10*nbr2));
}
resultat_union = resultat + p_nbr2;
resultat_inter = resultat * p_nbr2;
}
else
{
if (nbr2 < 0)
{
p_nbr2 = (1-(((4.0*(-nbr2))+5)/(10*(-nbr2))));
}
else
{
p_nbr2 = (((nbr2*4.0)+5)/(10*nbr2));
}
if (resultat < 0)
{
resultat = (1-(((4.0*(-resultat))+5)/(10*(-resultat))));
}
else
{
resultat = (((resultat*4.0)+5)/(10*resultat));
}
resultat_union = resultat + p_nbr2;
resultat_inter = resultat * p_nbr2;
}
resultat = (resultat_union - resultat_inter);
}
etat = 1;
}
printf("%.3f\n", resultat);
}
ps: si vous avez besoin d'eclairecissement à propos du sujet n'hesitez pas!!