Sommer la partie réele est décimale

Bonjour,
bein je cherche a écrire un programme en C,dans lequel on demande a l'utilisateur d'entrer par ex(deux réels),et faire la sommation par la suite des partie réelles et décimales séparements par ex si j'entre:
2,5
4,6
le programme doit me donner
2+4=6
5+6=11
mon programme est le suivant en effet y a pas d'erreurs de compilation ou d'execution mais je sais pas pourquoi ca marche pas!!!!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
float a,b,c,d;
int i,j,k,l;
char fat[255],lil[255];
unsigned int e,f;
printf("entrer vos deux chiffres:\n");
scanf("%f %f",&a,&b);
i=floor(a);
j=floor(b);
c=a-i;
d=b-j;
sprintf(fat,"%f",c);
sprintf(lil,"%f",d);
e=strlen(fat);
f=strlen(lil);
k=c*(10^e);
l=d*(10^f);
printf("%d\n",i+j);
printf("%d\n",k+l);
return 0;}

alors si quelq'un pourra bien m'aider je lui serai reconnaissante et merci d'avance.
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. Bonjour,

    Modifie ton prog et ajoute ces lignes

    sprintf(fat,"%f",c);
    sprintf(lil,"%f",d);

    printf("%s %s",fat,lil);
    getch();


    et tu verra tout de suite ton erreur.

    A+.
    0
    1. oui j'ai ajouté mais bon j'ai pas pu remarquer grands choses ,chui encore debutante en c ,ca te dirait de m'expliquer ûn peu comme meme l'erreur comise?
      merci pour ta réponse.
      bon j'ai modifier un peu mon code voila ce que ca a donné
      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h>

      int main()
      {
      double a,b;
      int k,l;
      char fat[255],lil[255];
      unsigned int e,f;
      printf("entrer vos deux chiffres:\n");
      scanf("%f %f",&a,&b);
      int i=(int)a;
      int j=(int)b;
      double c=a-i;
      double d=b-j;
      sprintf(fat,"%lf",c);
      sprintf(lil,"%lf",d);
      printf("%s %s",fat,lil);
      e=strlen(fat)-2;
      f=strlen(lil)-2;

      k=c*(10^e);
      l=d*(10^f);

      printf("%d\n",i+j);
      printf("%d\n",k+l);

      getch();

      return 0;}

      mais ca marche tjs pas!!!!j'ai besoin d'aideee
      0
  2. Re,

    Non, l'erreur vient de ton raisonnement.
    par exemple, quand j'ai executé ton programme j'ai entré 5.5 et 2.2

    Quand j'ai affiché fat et lil ça m'a donné
    0.500000 0.2000007

    ensuite tu calcule la longueur de fat et lil
    e=strlen(fat);----> e=8
    f=strlen(lil);-------> f=9

    ensuite tu ellève à la puissance
    k=c*(10^e); --->0.500000*10^8=50000000
    l=d*(10^f);----->0.2000007*10^9=200000700

    ça y est, tu vois le problème, ton raisonnement est faux à la base. ça ne donnera jamais un résultat correct.

    Salut.
    0
    1. ok merci mais est ce que tu peux me donner une petite idée d'ou j pourrais bien commencer??
      mais avant ca j'aimerai bien te donner une idée sur le raisonnement que j'ai fait
      bei d'abort séparer les parties réelles et décimales
      pour la partie d'cimale j'ai essayé de la convertir en caractére pour pouvoir y calculer la longuer
      par exemple si j'ai 0,123 sa longueur sera 3 en retranchat un un pour le 0 ,don c en la multipliant par 10^3 j'obtient 123 dc ce ce que je désire moi tu vois!!
      0
  3. OK,

    Il ne faut pas mesurer la longueur de fat et lil, mais s'imposer par exemple 1 ,2 ou 3 chiffres après la virgule
    Dans ton exemple tu as donné 1 chiffre apres la virgule et ça marche
    Maintemant si on se donne deux chiffres:
    2,50
    4,60
    le programme devrait donner
    2+4=6
    50+60=110

    ou encore
    2,50
    4,65
    le programme devrait donner
    2+4=6
    50+65=115

    Est ce bien le but recherché? Sinon tu veux faire quoi exactement.
    0
    1. oui c'est exact c'est ce que je cherche mais bon le probleme c'est que j'ai pas ineteret a imposer un certain nombre aprés la virgule, mais je dois le traiter dans le cas général
      merci pour ton aide c'est gentil.
      0
  4. Bon, dans ce cas, sans formater la chaine, sans imposer un format, je ne vois pas comment comment faire.
    Il faut accepter que
    2,5
    2,2
    donne
    4
    250000700

    le type de l et k doit etre Long et non integer.
    0
    1. ok j'essaierai de trv une solution il doit surem y avoir une.
      en tt cas merci bcp pr ton aide.a+.
      0