Langage C et algorithme d'arrondi

limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -
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

2 réponses

tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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 !
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
merci pour les explications, j'ai bien compris ma connerie...

Et les injures c'est pareil pour moi que le compilateur
0