Besoin d'aide, débutant..

Résolu
Messages postés
6
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
15 mai 2008
-
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
Je débute en C, pouvez vous me dire ce qu'il ne va pas ?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>


-> Mes qqes lignes de programme sont censé divisé a par b et de retourner la valeur : le pb est que qd je fais 15/2 cela ne me donne pas 7.5 mais 7.0000..

#include <stdio.h>



 main( )
{
     int a,b;
     float c;
     scanf("%d",&a);
     scanf("%d",&b);
     c=a/b;
     printf("c=%d",c)    
  
  system("PAUSE"); 
  return 0;
}


je crois que c'est dans la déclaration de mes variables que ca ne va pas..

-> Deuxième question :
comment récuperer la valeur entière sans forcement arrondir, d'un nombre à virgule ?
càd que si j'ai 325.9236 je veux 325..

merci
boozid

13 réponses

Messages postés
5
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
11 décembre 2006

Je n'ai encore que queleque base en C++ mais je vais essayer de t'aider.

En fait le problème provient de tes operandes c'est a dire a et b.
Si a et b sont des entiers alors a/b te renvoi un entier, par conséquent en modifiant le type de a et b cela devrait corriger ton probleme.

J'espère ne pas te dire de bétises sinon je m'en excuse d'avance.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
int main( )
{
    int a,b;
    float c;

    scanf("%d", &a);
    scanf("%d", &b);

    c = (float)a/(float)b;
    printf("c=%f", c);   
 
    system("PAUSE");
    return 0;
}

2. Disons que que tu as ceci:
    float c = 3.5454f;
pour arrondire:
    int d = c;

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Mais si tu veux arrondir à la valeur la plus proche, cette petite fonction, je crois, ferra l'affaire:

int arrondi (float Number)
{   
    float Rest = 0;
    int ToAdd = 0;   
    int Result = 0;

    Rest = (Number - (int)Number);

    if (Rest >= 0.5f)
        ToAdd = 1;

    Result = (int)((Number - Rest) + ToAdd);

    return Result;
}

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
Messages postés
127
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 août 2007

Il y a plus simple pour arrondir un chiffre a virgule !

ceil(1.21315);
         /\
         ||
   Ton chiffre a arrondir !
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut boozid,

pour obtenir 7.5 en divisant 15 par 2, il faut faire 15/2.0. En fait tu forces un division par un float, 2.0.
Si tes valeurs sont contenues dans des variables, c'est comme leguerinos l'a dit. Donc pour obtenir un résultat à virgule, je te propose ceci : c = b/(float)a;
Je pense (mais pas sûr) que ça ira comme ça. Si non, essaie de rajouter (float) devant b.

En ce qui concerne la valeur entière d'un chiffre à virgule, il suffit de faire :
int Valeur_entiere = (int)chiffre_a_virgule;

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
5
On peux faire


(float)a/b

(float)a/(float)b

a/(float)b


c'est équivalent du moment qu'une des deux opérandes est float l'autre (si entière) est promue en float.

L'expression a/b est de type int si a et b sont de type int.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
5
Pour arrondir c'est plutot ceil(x - 0.5) ou floor(x + 0.5).
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
pour arrondir sans fonctions , (int)(mon_nombre+0.5) .. prend la valeur par default a cause du int et arrondit grace au +0.5
Messages postés
6
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
15 mai 2008

merci ca marche ! ;)

même si je ne comprend pas pourquoi si je déclare la variable c en float je ne peux pas diviser a par b même s'ils sont déclaré en entier ? je ne modifie pourtant pas leur valeur...

en tt cas merci leguerinos..

et pour ma deuxième question sur la valeur entière svp ?

boozid
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
boozid>>Tu sais pas lire? ;) Lit le reste des posts pour ta deuxième questions.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution
Forum de débats sur la programmation
< body>
Messages postés
6
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
15 mai 2008

ok ca marche merci à tous ;)

boozid
Messages postés
6
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
15 mai 2008

SAKingdom "boozid>>Tu sais pas lire? "
évite, sinon viens me le dire en face.. ;)

boozid
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Pense à accepter la ou les réponses qui t'ont aidé.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"