Somme des n premmiers nombres en C

Résolu/Fermé
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010 - Modifié par acrony le 23/11/2010 à 10:54
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010 - 23 nov. 2010 à 13:55
Bonjour,



je suis entrain de commencer a programmer en C et je suis coince sur ce code. Je voudrais en fait faire la somme des n premiers chiffres. J'utilise une boucle ''do while'' et la décrémentation. Mais le résultat est incohérent. Un coup de main les gars...

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int n = 0, sum = 0;
printf("Input the number : ");
scanf("%d", &n);
printf("%d", &n);
do {n + n--;
}while( n-- > 0);

sum = n + n--;
printf("The result is: ");
printf("%d", &sum);

6 réponses

Tatanos Messages postés 966 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 26 mai 2016 156
23 nov. 2010 à 10:57
Bonjour,

Le but est, par exemple, de calculer la somme de 1 à 80 si tu lui passe 80 en paramètre ? (n = 80 quoi)
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
23 nov. 2010 à 11:01
Salut

oui c'est ca le truc
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
23 nov. 2010 à 11:04
Bonjour,

Ca fait longtemps que j'ai pas fait de C, mais là comme ça, je vois que tu décrémentes n deux fois dans la boucle.
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
23 nov. 2010 à 11:14
Salut

en fait, je me disais que tant que n-- > 0 on décrémente. c'est a dire que par ex: si je prends n=5, tant que 5-- >0 on doit pouvoir avoir 5+(5-1)+(5+(5-1-1)) etc jusqu'à ce que 5-- soit égal a zéro je me sers de la décrémentation de n comme d'un compteur et le calcul qui se fait sur n+n-- s'arrête quand n-- est égale a zéro. Je sais pas si je suis clair ou logique, peut-être que je me goure...
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
23 nov. 2010 à 11:37
j'utilise codeblocks, et j'ai applique la formule mathématiques des n premiers nombres soufflée par tatanos (N * (N+1)) / 2 au lieu de mon code, les résultats sont toujours aussi incohérents par exemple avec 10 comme valeur j'ai un résultat de l'ordre du million alors que je devrais avoir 55, c'est d'ailleurs le même résultat quelques soient la valeur de n
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
Modifié par Gaunts le 23/11/2010 à 11:48
poste ton code avec les balises < code> < /code>
0
Tatanos Messages postés 966 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 26 mai 2016 156
Modifié par Tatanos le 23/11/2010 à 11:07
Bon, du coup je n'y connais rien en C, mais je peux te donner une formule mathématique pour calculer la somme des N premiers nombres qui est :

(N * (N+1)) / 2
0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
23 nov. 2010 à 11:15
merci
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
23 nov. 2010 à 11:21
Re, j'ai fait des test et effectivement ya plusieurs problemes.
Déja, tu décrémentes 2 fois donc tu fais -2 à chaque calcul.
Ensuite, ici, aucune valeur n'augmente. Tu ne fais que décrémenter n, ça ne peut pas te donner de résultat.

Voila ce que je te conseille:
1) soit tu prend la formule de tatanos.
2) soit tu veux utiliser des boucles, et dans ce cas:
tu input n;
tu places sum à la valeur de n;
tant que n > 0, tu additionne n à la valeur de sum.
0

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

Posez votre question
Pitch@n Messages postés 222 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 1 août 2013 66
Modifié par Pitch@n le 23/11/2010 à 12:15
Salut ;)

Je pense que c'est ca que tu veux ;) essaye de bien comprendre le code

Voila le code avec un for

#include <stdio.h> 
#include <stdlib.h> 


int main(){ 
  int n = 0, sum = 0, i = 0;   
  printf("Input the number : "); 
  scanf("%d", &n); 
  printf("%d\n", n); 
  sum = n;    
  for(i=0; i<n ;i++){ 
 sum += n-i;  
  }   
   
  printf("The result is: %d\n", sum); 
} 


ici avec un do-while

#include <stdio.h> 
#include <stdlib.h> 


int main(){ 
  int n = 0, sum = 0, i = 0;   
  printf("Input the number : "); 
  scanf("%d", &n); 
  printf("%d\n", n); 
  sum = n;    
  do{ 
 sum += n-i; 
 i++; 
  }while(i < n);  
   
  printf("The result is: %d\n", sum); 
} 



Valou ;) en espérant ne pas me tromper

Si l'argent se trouvait sur les arbres,
les femmes aimeraient les singes.
0
Gaunts Messages postés 1125 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 18 mars 2012 116
23 nov. 2010 à 12:15
C'est ça, mais je voulais qu'il le fasse lui même^^
0
Pitch@n Messages postés 222 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 1 août 2013 66
23 nov. 2010 à 12:39
Toute mes excuses ^^
Essaye de le refaire sans regarder Arcony

Ta variable sum est modifié a chaque passage dans la boucle c'est donc dans la boucle que tu dois avoir ton sum = ...

0
acrony Messages postés 14 Date d'inscription mardi 23 novembre 2010 Statut Membre Dernière intervention 2 décembre 2010
23 nov. 2010 à 13:55
Ok mais j'ai opte pour l'application toute bête de la formule mathématique et ca marche mais je vais teste tes suggestions.
Merci
0