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 -
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
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
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 !
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 !