Calculer 2 char,et retourner le res en char
toto
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je sais que ce sujet a du etre traiter, mais je ne trouve pas de solution adapaté a mon probleme. Voila ce que je veux faire :
J'ai 2 caracteres et un operateur, c1 et c2 et op, et si ce sont des entiers (par exemple c1='3' et c2='6'), et par exemple op='*', alors je voudrais calculer c1*c2 et avoir le résultat sous la forme d'un char, et non d'un entier, tel que
char resultat = '18'
J'ai vu beaucoup d'exmples multiples avec atoi ou sscanf, mais je ne trouve pas de solution qui me plaisent, ou en tout cas je n'arrive pas a écrire correctement le code adequate !
C'est pourquoi je me tourne vers vous, si vous pouvez m'aider ...
Cordialement
Tom
Je sais que ce sujet a du etre traiter, mais je ne trouve pas de solution adapaté a mon probleme. Voila ce que je veux faire :
J'ai 2 caracteres et un operateur, c1 et c2 et op, et si ce sont des entiers (par exemple c1='3' et c2='6'), et par exemple op='*', alors je voudrais calculer c1*c2 et avoir le résultat sous la forme d'un char, et non d'un entier, tel que
char resultat = '18'
J'ai vu beaucoup d'exmples multiples avec atoi ou sscanf, mais je ne trouve pas de solution qui me plaisent, ou en tout cas je n'arrive pas a écrire correctement le code adequate !
C'est pourquoi je me tourne vers vous, si vous pouvez m'aider ...
Cordialement
Tom
A voir également:
- Calculer 2 char,et retourner le res en char
- Retourner ecran pc - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment calculer la moyenne sur excel - Guide
- Coco char - Accueil - Réseaux sociaux
- Comment retourner une video - Guide
16 réponses
hello !
chuis pas fortiche en C et consorts mais ce que tu cherches à faire ne peut l'être qu'avec un sélecteur (switch) sur ton opérateur qui t'oblige à un truc du genre
selon op
si '+' : resultat = to_char(to_num(c1) + to_num(c2))
si '-' : resultat = to_char(to_num(c1) - to_num(c2))
si '*' : resultat = to_char(to_num(c1) * to_num(c2))
si '/' : resultat = to_char(to_num(c1) / to_num(c2))
sinon raise 'opérateur non supporté'
fin_selon
l'autre voie aurait été de disposer de macros avec lesquelles tu a la possibilité d'exécuter le code contenu dans une chaine
=> str = "a = c1 " + op + " c2"
=> exec str
=> result = to_char(a)
manque de bol, ces mécanismes existaient surtout dans les langages interprétés comme palliatif à leurs limitations
chuis pas fortiche en C et consorts mais ce que tu cherches à faire ne peut l'être qu'avec un sélecteur (switch) sur ton opérateur qui t'oblige à un truc du genre
selon op
si '+' : resultat = to_char(to_num(c1) + to_num(c2))
si '-' : resultat = to_char(to_num(c1) - to_num(c2))
si '*' : resultat = to_char(to_num(c1) * to_num(c2))
si '/' : resultat = to_char(to_num(c1) / to_num(c2))
sinon raise 'opérateur non supporté'
fin_selon
l'autre voie aurait été de disposer de macros avec lesquelles tu a la possibilité d'exécuter le code contenu dans une chaine
=> str = "a = c1 " + op + " c2"
=> exec str
=> result = to_char(a)
manque de bol, ces mécanismes existaient surtout dans les langages interprétés comme palliatif à leurs limitations
ce que je cherche justement c'est le code exacte en C, avec les bonnes fonctions, parsque l'algo je l'ai c'est pas compliqué ... mais j'arrive pas a l'appliquer correctement en C ... si vous pouvez m'aider svp ...
Bonsoir,
On peut faire un truc comme ça, mais tu es limité à la valeur +127 avec un char.
Cordialement.
Cchristian.
On peut faire un truc comme ça, mais tu es limité à la valeur +127 avec un char.
char aa = 'A'; // Tels que t'arrivent les caractères ? printf ("\n %i\n", aa); 65 char cc = int (aa) + 62; // par exemple. printf ("\n %i", cc); 127 cc = int (aa) + 63; printf ("\n %i", cc); -128 // A partir de là ça coince ............... cc = int (aa) + 64; printf ("\n %i", cc); -127 cc = int (aa) + 65; printf ("\n %i", cc); -126 cc = int (aa) + 66; printf ("................);--
Cordialement.
Cchristian.
Bonsoir,
merci de m'aider c'est gentil. ce que je veux reelement faire en gros c'est additioner ou multiplier 2 char qu auraient comme valeur un chiffre,donc par exemple faire ça :
char nb1 = '3'
char nb2 = '4'
char resultat = nb1 * nb2 = '18'
Comment faire les conversions ?
merci d'avance !
merci de m'aider c'est gentil. ce que je veux reelement faire en gros c'est additioner ou multiplier 2 char qu auraient comme valeur un chiffre,donc par exemple faire ça :
char nb1 = '3'
char nb2 = '4'
char resultat = nb1 * nb2 = '18'
Comment faire les conversions ?
merci d'avance !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut
Teste :
Il y a peut-être des étourderies, j'ai pas testé ;)
Cdlt
Teste :
#include <stdio.h> #include <stdlib.h> int main(void){ char *a="6"; char *b="3"; char op='*'; char p[15]; int res; switch(op){ case '+':res=strtol(a,NULL,10)+strtol(b,NULL,10);break; case '-':res=strtol(a,NULL,10)-strtol(b,NULL,10);break; case '*':res=strtol(a,NULL,10)*strtol(b,NULL,10);break; case '/':res=strtol(a,NULL,10)/strtol(b,NULL,10);break; } sprintf(p,"%d",res); printf("%s\n",p); return 0; }
Il y a peut-être des étourderies, j'ai pas testé ;)
Cdlt
Bonsoir,
En effet je n'avais pas compris, j'espère que c'est mieux maintenant :
En effet je n'avais pas compris, j'espère que c'est mieux maintenant :
char nb1 = '3'; char nb2 = '6'; char oper = '*'; signed int pos_nb1 = -1; signed int pos_nb2 = -1; int ind_nb = 0; char TAB_VAL [10] = {'0','1','2','3','4','5','6','7','8','9' }; pos_nb1 = -1 ; pos_nb2 = -1 ; for ( ind_nb = 0; ind_nb < 10; ind_nb++ ) { if ( TAB_VAL [ind_nb] == nb1 ) { pos_nb1 = ind_nb ;} if ( TAB_VAL [ind_nb] == nb2 ) { pos_nb2 = ind_nb ;} } if ( pos_nb1 == -1 || pos_nb2 == -1 ) { printf ("\n Anomalie valeur(s) incohérentes nb1: %c : nb2 : %c\n", nb1, nb2) ;} else { switch (oper) { case '*': printf ("\n\n Resultat pos_nb1 * pos_nb2 : %i\n", pos_nb1 * pos_nb2) ; break ; case '+': printf ("\n\n Resultat pos_nb1 + pos_nb2 : %i\n", pos_nb1 + pos_nb2) ; break ; case '-': printf ("\n\n Resultat pos_nb1 - pos_nb2 : %i\n", pos_nb1 + pos_nb2) ; break ; case '/': printf ("\n\n Resultat pos_nb1 / pos_nb2 : %i\n", pos_nb1 / pos_nb2); break ; } }
re bonjour,
j'ai testé divers fonctions, et sa marche, a part que cela ne me renvoi pas un char ...
en fait j'ai bien réussi a transformer mes 2 char en int,et aprés calcul, je voudrais par contre retransformer en char mon résultat (qui est un int).
Merci si vous pouvez m'aider !
j'ai testé divers fonctions, et sa marche, a part que cela ne me renvoi pas un char ...
en fait j'ai bien réussi a transformer mes 2 char en int,et aprés calcul, je voudrais par contre retransformer en char mon résultat (qui est un int).
Merci si vous pouvez m'aider !
oui mais moi je veux retourner le résultat en fait, pas l'afficher.
faire un
return resultat
mais avec resultat prealablement converti en char.
Comment faire ?
merci de m'aider !
faire un
return resultat
mais avec resultat prealablement converti en char.
Comment faire ?
merci de m'aider !
C'est trop restrictif. Un char, tu pourras juste mettre un chiffre inférieur à '9'.
Prends plutôt une chaîne de caractère : "12"+"15"="27". Là tu peux mettre plusieurs chiffres.
Apparemment t'as pas testé ma fonction plus haute. Je te la redonne, essaie là au moins. Ca répond exactement à ce que tu demandes.
Prends plutôt une chaîne de caractère : "12"+"15"="27". Là tu peux mettre plusieurs chiffres.
Apparemment t'as pas testé ma fonction plus haute. Je te la redonne, essaie là au moins. Ca répond exactement à ce que tu demandes.
#include <stdio.h> #include <stdlib.h> int main(void){ char *a="6"; char *b="3"; char op='*'; char p[15]; int res; switch(op){ case '+':res=strtol(a,NULL,10)+strtol(b,NULL,10);break; case '-':res=strtol(a,NULL,10)-strtol(b,NULL,10);break; case '*':res=strtol(a,NULL,10)*strtol(b,NULL,10);break; case '/':res=strtol(a,NULL,10)/strtol(b,NULL,10);break; } sprintf(p,"%d",res); //p contient le résultat printf("%s\n",p); return 0; } Cdlt
Non parsque moi je veux retourner un char, le resultat, et non l'afficher ... et mype, le return resul ne marche pas, il me dit "return makes integer from pointer without a cast" ...
Voila mon code :
char simplifierArith(char c1,char c2, char op) {
int resultat;
char resul[255];
int nb1,nb2;
if(c1>='0' && c1<='9')
nb1=c1-'0';
if(c2>='0' && c2<='9')
nb2=c2-'0';
switch(op) {
case '+':resultat=nb1+nb2;break;
case '-':resultat=nb1-nb2;break;
case '*':resultat=nb1*nb2;break;
case '/':resultat=nb1/nb2;break;
case '^':resultat=nb1^nb2;break;
}
sprintf(resul,"%d",resultat);
return resul;
}
Voila ... le pb c'est que cette fonction se trouve dans un trés gros programme, et je n epeux retourner q'un char, pas un char * ... donc en gros jsui coincé c'est ça ? mais sa devrait fonctionné si resul n'avait qu'un chiffre non ?
Merci de m'adier.
char simplifierArith(char c1,char c2, char op) {
int resultat;
char resul[255];
int nb1,nb2;
if(c1>='0' && c1<='9')
nb1=c1-'0';
if(c2>='0' && c2<='9')
nb2=c2-'0';
switch(op) {
case '+':resultat=nb1+nb2;break;
case '-':resultat=nb1-nb2;break;
case '*':resultat=nb1*nb2;break;
case '/':resultat=nb1/nb2;break;
case '^':resultat=nb1^nb2;break;
}
sprintf(resul,"%d",resultat);
return resul;
}
Voila ... le pb c'est que cette fonction se trouve dans un trés gros programme, et je n epeux retourner q'un char, pas un char * ... donc en gros jsui coincé c'est ça ? mais sa devrait fonctionné si resul n'avait qu'un chiffre non ?
Merci de m'adier.
Ok en fait c'est bon ça marche si le résultat n'est pas un nombre, donc si resultat<9 ... pour le reste jsui coincé parsque si je change tout mes char en char* dans le programme ça risque de tout faire planter ...
Salut,
Tu as mis dans ton code l'opérateur ^, j'espère que tu ne penses pas que c'est l'opérateur puissance ;)
Sinon oui, en effet tu es bloqué. Le char se code sur un byte. Toutes les opérations que tu dois faire seront sur un byte. Donc, le plus grand chiffre que tu pourras atteindre est '9'.
Si c'est bien ça que tu veux. L'algorithme est encore plus simple.
Cdlt
Tu as mis dans ton code l'opérateur ^, j'espère que tu ne penses pas que c'est l'opérateur puissance ;)
Sinon oui, en effet tu es bloqué. Le char se code sur un byte. Toutes les opérations que tu dois faire seront sur un byte. Donc, le plus grand chiffre que tu pourras atteindre est '9'.
Si c'est bien ça que tu veux. L'algorithme est encore plus simple.
char a='1'; char op='+'; char b='2'; char res; switch(op){ case '+': res= '0'+(a-'0')+(b-'0');break; case '-': res= '0'+(a-'0')-(b-'0');break; case '*': res= '0'+(a-'0')*(b-'0');break; case '/': res= '0'+(a-'0')/(b-'0');break; } printf("%c\n",res);
Cdlt