Sommer la partie réele est décimale

fati56 Messages postés 24 Statut Membre -  
fati56 Messages postés 24 Statut Membre -
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. amigo
     
    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. fati56 Messages postés 24 Statut Membre
       
      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. amigo
     
    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. fati56 Messages postés 24 Statut Membre
       
      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. amigo
     
    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. fati56 Messages postés 24 Statut Membre
       
      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. amigo
     
    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. fati56 Messages postés 24 Statut Membre
       
      ok j'essaierai de trv une solution il doit surem y avoir une.
      en tt cas merci bcp pr ton aide.a+.
      0