Rechercher : dans
Par :

Langage C et algorithme d'arrondi

Dernière réponse le 13 jan 2008 à 17:02:41 limbergh, le 13 jan 2008 à 14:58:23 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « langage C et algorithme d'arrondi » dans :
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

tatou_38, le 13 jan 2008 à 15:56:05

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 !

tatou_38
Angers

Répondre à tatou_38

2

 limbergh, le 13 jan 2008 à 17:02:41

Merci pour les explications, j'ai bien compris ma connerie...

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

Répondre à limbergh