Calculer 2 char,et retourner le res en char
Fermé
toto
-
20 nov. 2008 à 17:41
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 nov. 2008 à 11:42
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 nov. 2008 à 11:42
A voir également:
- Calculer 2 char,et retourner le res en char
- Retourner ecran windows - Guide
- Comment calculer la moyenne sur excel - Guide
- Comment retourner une video - Guide
- 2 ecran pc - Guide
- Word numéro de page 1/2 - 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 ...
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
20 nov. 2008 à 20:06
20 nov. 2008 à 20:06
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
20 nov. 2008 à 21:18
20 nov. 2008 à 21:18
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
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
20 nov. 2008 à 22:13
20 nov. 2008 à 22:13
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 ; } }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
20 nov. 2008 à 22:18
20 nov. 2008 à 22:18
Pour convertir un simple char en int, ya plus simple que faire une boucle avec un tableau ;)
char a='5'; int nb; if (a>='0' && a<='9') nb=a-'0';
cchristian
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
131
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
20 nov. 2008 à 22:30
20 nov. 2008 à 22:30
En effet, je ne connaissais pas, merci,
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 !
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
21 nov. 2008 à 17:42
21 nov. 2008 à 17:42
tu peux utiliser sprintf
char resul[255]; sprintf(resul,"%d",resultat); printf("%s",resul);
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 !
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
21 nov. 2008 à 17:54
21 nov. 2008 à 17:54
ben... tu remplaces le printf par
return resul;
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
21 nov. 2008 à 18:17
21 nov. 2008 à 18:17
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" ...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
21 nov. 2008 à 23:46
21 nov. 2008 à 23:46
Ce que tu comprends pas, c'est que dans ta question initiale :
char resultat = '18' C'est impossible en C. Un char, c'est juste un byte. '18' c'est deux bytes.
Donc, il te faut impérativement passer par un tableau de char.
char resultat = '18' C'est impossible en C. Un char, c'est juste un byte. '18' c'est deux bytes.
Donc, il te faut impérativement passer par un tableau de char.
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
22 nov. 2008 à 01:14
22 nov. 2008 à 01:14
c'est clair fiddy te la bien expliqué il te faut un char *
ça doit etre parce que dans l'en tete de ta fonction tu as pas mis que tu retourne un char *
poste ton code
ça doit etre parce que dans l'en tete de ta fonction tu as pas mis que tu retourne un char *
poste ton code
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 ...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
22 nov. 2008 à 11:42
22 nov. 2008 à 11:42
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