Rechercher : dans
Par :

Ce prog en C ne doit pas afficher de négatif

Dernière réponse le 11 nov 2009 à 14:30:16 max08111991, le 11 nov 2009 à 13:06:36 
 Signaler ce message aux modérateurs

Bonjour,
comme le dit le titre ce programme en C affiche des nombres négatif alors qu'il ne devrait pas

#include <stdio.h>
#include <conio.h>
int main(void)
{
float prec=0;
float suiv=1;
int nbr;
int cpt;
float terme;
printf("Entrez le nombre de terme:");
scanf("%d",&nbr);
printf("0\n1\n");
for(cpt=2;cpt<nbr;cpt++)
{
terme = suiv + prec;
prec = suiv;
suiv = terme;
printf("%d\n", int(terme));
}
getch();
}

il fonctionne bien mais quand j'entre un nombre de terme supérieur a 46

il me met des nombres négatifs dans la suite!!

comment faire pour que cette suite continue sans problème?????????? "Ne dites jamais à votre ordinateur que vous êtes pressés"

Configuration: Windows XP
Firefox 3.0.12

1

dubcek, le 11 nov 2009 à 14:02:02

Hello
dépassement de limite de int, essaye
printf("%lu\n", (unsigned long)terme);

Répondre à dubcek

2

loupius, le 11 nov 2009 à 14:06:42

Oui c'est normal car tu dépasses la valeur maximale d'un entier qui, pour un 16 bits est (à 1 près) (2 puissance 16)/2) soit environ 2 milliards.
Si tu veux aller plus aller plus loin, il te faut prendre des 'long long' qui, suivant ta machine, peut être codé sur 32 bits. Mais de toutes façons, il y aura toujours une limite.
Si tu ne veux pas de limites, sache qu'il existe un langage pour lequel les entiers n'ont pas limites (sauf évidemment celle de la mémoire de ta machine), c'est Python.
Ah, un détail: c'est (int)terme et non int(terme).
Et puis si tu repostes, utilise les balises < code > à droite des balises < souligne >.
Bonne continuation.

Répondre à loupius

3

loupius, le 11 nov 2009 à 14:07:59

Tu arrives trop tard !

Répondre à loupius

4

dubcek, le 11 nov 2009 à 14:22:42

Pourquoi imprimer un entier ?
printf("%20.f\n", terme);

Répondre à dubcek

5

 loupius, le 11 nov 2009 à 14:30:16

Ah oui, c'est vrai; d'autant plus qu'un 'float' sur 32bits n'a qu'une précision de 6 chiffres significatifs et un 'double', une bonne douzaine seulement (à vérifier).
Donc afficher des entiers ('castés' d'un float) supérieurs au million a vraiment peu d'intérêt.

Répondre à loupius
Collection CommentÇaMarche.net