Programme de debutant

MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 7 févr. 2005 à 22:29
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 26 févr. 2005 à 11:11
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

Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 févr. 2005 à 23:06
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
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
7 févr. 2005 à 23:06
arggh...



il faut lire :



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



of course ;)




Ma participation à la saturation du net:
http://hylvenir.free.fr
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
8 févr. 2005 à 07:42
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
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
8 févr. 2005 à 07:45
cest marrant mais ca ne fonctionne pas ton code avec dev c++
0

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

Posez votre question
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
8 févr. 2005 à 08:09
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
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
8 févr. 2005 à 09:07
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...)
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
8 févr. 2005 à 18:28
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!
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
8 févr. 2005 à 18:31
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
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
8 févr. 2005 à 18:38
merci de me tenir par la main, cest bien de la que venait le probleme !
0
nicooooo1 Messages postés 58 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 4 février 2012
17 févr. 2005 à 09:36
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....
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
26 févr. 2005 à 11:11
cest bien ce que j avais compris, merci de me l affirmer !
0
Rejoignez-nous