Création
d'entreprise
Posez votre question Signaler

Langage C et algorithme d'arrondi

limbergh 650Messages postés 8 juillet 2007Date d'inscription 29 juin 2010Dernière intervention - Dernière réponse le 13 janv. 2008 à 17:02
Bonjour tt le monde,
j'ai un problème avec mon script en C.
Le voici
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
long ENTIER(float x)
{
return (long) x;
}
double ABSOLUE (double x)
{
if (x < 0)
return x * -1;
else
return x;
}
int SIGNE (double x)
{
if (x < 0)
return -1;
else
return 1;
}
int main(int argc, char *argv[])
{
int choix, x, nbdec;
float N, S;
do
{
printf("\n-1-saisie du nombre reel");
printf("\n-2-saisie du nombre de decimales ");
printf("\n-3-affichage du nombre saisi");
printf("\n-4-affichage arrondi inferieur");
printf("\n-5-affichage arrondi superieur");
printf("\n-6-affichage arrondi commercial");
printf("\n---------votre choix ?");
scanf("%d", &choix);
switch(choix)
{
case 1 :
{
printf("introduisez un nombre : " );
scanf("%f", &N);
break;
}
case 2 :
{
printf("introduisez le nombre de decimale :");
scanf("%d", &nbdec);
break;
}
case 3 :
{
printf("\n\nle nombre est %5.5f" ,N);
printf("\n\nle nombre de decimale est : %d\n\n", nbdec);
break;
}
case 4 :
{
S = SIGNE(N) * ENTIER (ABSOLUE(N));
printf("le nombre est %5.5f ==> %5.5f\n\n", N, S);
break;
}
case 5 :
{
S =SIGNE(N) * ENTIER (ABSOLUE(N) * pow(10., nbdec)) / pow(10., nbdec);
printf("le nombre est %5.5f ==> %5.5f \n\n", N, S);
break;
}
case 6 :
{
S = SIGNE(N) * ENTIER (ABSOLUE(N)+.5);
printf("\n l'arrondi de %5.5f ==> %5.5f\n\n ", N, S);
break;
}
}
}
while(choix!=0);
system("PAUSE");
return 0;
}
Quand je veux arrondir le nombre entré, en case 4, 5, 6, il ne le fait jamais et je ne vois pas ou j'ai une erreur,
si quelqu'un peut m'aiguiller je suis preneur...
Merci d'avance pour vos interventions
Lire la suite 

Langage C et algorithme d'arrondi »

2 réponses
Réponse
+0
moins plus
S = SIGNE(N) * ENTIER (ABSOLUE(N)+.5);

SIGNE() te rend un int, donc un entier
ENTIER() te rend un long, donc un entier

le produit de deux entiers ne donnera jamains qu'un entier

tu mets cet entier, sans cast bien-sûr, dans un flotant que tu affiche en flottant.

Le résultat, même si de type flottant, ne te donnera qu'un nombre entier !!

Donc vois le casting :

float f;
long d;

f = (float)d;

Cela tévitera d'aileurs nombre d'injures de ton compilo !
Ajouter un commentaire
Réponse
+0
moins plus
merci pour les explications, j'ai bien compris ma connerie...

Et les injures c'est pareil pour moi que le compilateur
Ajouter un commentaire
Ce document intitulé « langage C et algorithme d'arrondi » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?