Somme

djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004 - 8 déc. 2003 à 00:36
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 8 déc. 2003 à 19:48
slt
je doi faire un programe ki me calcul la somme des chiffre en position imparie de mon nombre, par exemple, 123467: 1+3+6 = 10

kelkun aurai une idee comment faire svp???

27 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 déc. 2003 à 01:17
Salut,
En supposant que ton nombre soit dans une chaine de caractere:
Dans une boucle, tu avances sur la chaine en aditionnant que les chiffres dont leur index est pair.

nb[] = "123467";
int total = 0;
for(int i=0; nb[i]; i++) {
if(!(i%2)) total += nb[i]-'0';
}
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 09:59
g pa le droi d utiliser les tableau(chaine de caracter)... c pr ca ke jvoi pa cmt faire...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 déc. 2003 à 10:51
Salut,
Dans ce cas, tu extrais tout les chiffres de ton nombre dans un tableau d'int (avec des divisions par 10 et des %10), ensuite meme technique que pour la chaine, tu ne prend que les nombres du tableau dont les index sont pairs.
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
8 déc. 2003 à 12:43
En fait c'est plutot avec 100 vu que tu ne veux que les impairs !

Essaie ça:

int totalImpairs(int N)
{

total = 0;
while (N>0)
{
total += N%10;
N = N/100;
}

return total;
}

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 12:49
merci bcp!!
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 déc. 2003 à 12:52
Salut Garslouche,
Ta fonction additionne les chiffres de rang impairs en partant de la droite, alors qu'il faut partir de la gauche.
Resultat, si un le nombre a un nombre de chiffre impair, ca marche, mais si le nombre de chiffre est pair ca ne marche pas.
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 12:53
CMT JE fais pr la faire en sens inverse alors...???
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 déc. 2003 à 12:55
Salut,
Moi je stockerais les chiffres dans un tableau, j'inverserais le sens du tableau, et je ne prendrais que les index pairs.
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 12:56
MOI Ossi, ms g pa ldroi a l utikisation des tableau...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2003 à 13:02
tu peux utiliser un fonction récursive:

int f(int a)
{
a ? a : a % 10 + f(a / 100);
}

g pas testé mais c un truc de ce genre

au fait je suis pas sur: 1234 ca donne 1+3 ou bien 2+4?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2003 à 13:02
non je me suis gouré en fait c ca:

int f(int a)
{
a ? a % 10 + f(a / 100): a;
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2003 à 13:04
je me suis encore trompé
int f(int a)
{
return a ? a % 10 + 10 * f(a / 100): a;
}
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
8 déc. 2003 à 15:37
aardman, je n'y ai effectivement pas fait attention mais rien ne dit qu'il faut commencer par la gauche. Pourquoi le premier chiffre serait le plus grand ?
Mais si c'et effectivement le cas ça s'adapte assez facilement...

int totalImpairs(int N)
{
total = 0;

if ((int)(log10(N))%2)
N=N/10;

while (N>0)
{
total += N%10;
N = N/100;
}

return total;
}
Et il faudra ajouter #include "math.h" en début de fichier

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 16:08
DS CE QUE TU A ECRI? CE ST LA SOME DES CHIFRE EN POSITION PAIRE...
il m aurai falu les position impaire.....
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
8 déc. 2003 à 16:49
Ah? 'faut pas s'enerver...

Euh...bah je viens de le tester pour voir...
avec 1234567 et 12345678 j'obtiens 16 (1+3+5+7 = 16)
alors qu'avec les pairs j'obtiendrais 2+4+6 = 12 et 2+4+6+8=20

A moins que les positions ne soient indexées en commençant à 0.
à ce moment là il faudrait encore modifier un peu...et remplacer

if ((int)(log10(N))%2)

par

if ((int)(log10(N))%2 == 0)

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 17:08
je m enerve pa o contraire merci beaucoup...
ms sans vouloir etre chiant... ya t il une possibilité de faire ca sans utiliser la bibliotek math???
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 déc. 2003 à 17:17
Salut,
Dans l'exemple que fourni djkill55 tout en haut de cette page, il a commencé a addtionné les rangs impairs a partir de la gauche, voila pourquoi je pensais qu'il fallais commencer par la gauche.
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 17:19
ms il fo comencer par la gauche... le pb est de savoir si il est possible de faire la meme chose sans utiliser la bibliotek "math"...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 déc. 2003 à 17:38
voila un truc qui marche (je l'ai testé ce coup la)

int somme2(int n)
{
return n ? n % 10 + somme2(n / 100) : n;
}

int somme(int n)
{int a 0, b n;
while(b)
{
b /= 10;
++a;
}
if(!(a % 2))
n /= 10;
return somme2(n);
}

(il faut appeller somme)
0
djkill55 Messages postés 33 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 mars 2004
8 déc. 2003 à 17:47
il est ou ton printf la??? et c kelle valeur k il afiche...??
0
Rejoignez-nous