Programme de debutant

Signaler
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
-
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
-
je suis un ultra debutant et pour decouvrir un peu le c++, j ai pondu un petit truc, seulement je comprends pas pourquoi les valeurs s arretent a 65536. meme en passant long int au lieu de int a la declaration des variables.

#include <stdio.h>


main()
{


      long int i,n;


      n=2;


      for (i=1; i<10; i++)
      {
           printf("%d\n", n);
           n=n*n;
      }


      system("pause");


      return 0;
}


merci

11 réponses

Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Salut,

je ne sais pas trop quel bouquin tu as pour découvrir le C++, mais si les premières page ressemble à ce code... brûle le.

C'est du C de la mode des années 70's.




// Petite boucle

#include 

int main() {

    long n = 2;

    for( int i = 0; i < 10; ++i, n *= n ) 

        std::cout << i << std::endl;

}





Pour la limite de 65536, disons que pour les entiers, faut pas en demander trop ;)

tu peux changer le 'long' en 'double' si tu veux voir des plus grand nombres.

Mais 'n *=2 ' semble plus raisonnable pour juste voir les puissances de 2.




// Ma participation à la saturation du net:
// http://hylvenir.free.fr
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
arggh...



il faut lire :



std::cout << n << std::endl;



of course ;)




Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
je n ai pas de bouquin, je fais juste quelques decouvertes pour l instant...
j ai chopper ca sur un site...
mais un long int, cest bien plus qu un simple entier??? normalement ca devrait depasser les 65536? non?
bon je vais faire ca avec double.

merci
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
cest marrant mais ca ne fonctionne pas ton code avec dev c++
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
c'est bizarre, c'est un copier/coller d'un code pour dev-cpp.

C'est quoi l'erreur ?

Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
un long int (32 bits) devrait aller jusqu'a 2^31-1 soit 2 147 483 647 en arithmétique signée.
ton problème vient du fait que tu calcul ((2^2)^2)... 10 fois ce qui fait au final
1.797.10^308 donc il a un très gros dépassement de capacité et donc ton calcul est faux.boucle 1 : n2 n*n 4boucle 2 : n 4 n*n 16boucle 3 : n 16 n*n 256boucle 4 : n 256 n*n65536boucle 5 : n 65536 n*n 4294967296
= > ne tient pas sur 32 bits car ça fait en hexa (8 chiffres heax maxi):
1 0000 0000 tronqué à 0000 0000 ce qui donne donc n = 0
les boucles suivante, n étant égal à 0, tu auras toujours 0.

En conclusion, losque l'on programme il faut toujours savoir quelles seront les valeurs min et max des valeurs que l'on manipule pour éviter des dépassements de capacité sinon le risque est énorme (comme la destruction d'une fusée ariane par exemple...)
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
ok ok, bon cest note pour le depassement, mais pour l exemple de
hylvenir ca marche pas, meme en changeant i par n. dev c++ me dit qu il
y a une erreur, en fait, qu il y en a 31!
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Le code qu'il t'a donné c'est du c++ donc si ton fichier est un .c ça va pas marcher, il faut un .cpp
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
merci de me tenir par la main, cest bien de la que venait le probleme !
Messages postés
58
Date d'inscription
mercredi 2 février 2005
Statut
Membre
Dernière intervention
4 février 2012

une int, varie selon le processeur.

Pour les processeurs modernes c est 32 bits, pareil qu une long.......

si tu veux la faire depasser les 65536, il faut la declarer unsigned ( uniquement nul ou positive )

tu peux alors allez jusqu a 4 milliard et des poussieres ( 2^32)-1

C pas trop si ca peux t aider....
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
cest bien ce que j avais compris, merci de me l affirmer !