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.

4 réponses

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
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
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
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
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
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
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
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