Besoin d'aide, débutant..

Résolu
boozid Messages postés 6 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 15 mai 2008 - 9 août 2006 à 14:48
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 - 11 août 2006 à 09:14
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

leguerinos Messages postés 5 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 11 décembre 2006
9 août 2006 à 14:58
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.
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 août 2006 à 15:26
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 août 2006 à 15:29
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
3
MorbhAck Messages postés 127 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 août 2007
9 août 2006 à 15:33
Il y a plus simple pour arrondir un chiffre a virgule !

ceil(1.21315);
         /\
         ||
   Ton chiffre a arrondir !
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
9 août 2006 à 15:38
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 !"
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
9 août 2006 à 15:40
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.
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
9 août 2006 à 15:43
Pour arrondir c'est plutot ceil(x - 0.5) ou floor(x + 0.5).
3
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
9 août 2006 à 15:48
pour arrondir sans fonctions , (int)(mon_nombre+0.5) .. prend la valeur par default a cause du int et arrondit grace au +0.5
3
boozid Messages postés 6 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 15 mai 2008
9 août 2006 à 15:37
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
9 août 2006 à 15:40
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>
0
boozid Messages postés 6 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 15 mai 2008
9 août 2006 à 15:41
ok ca marche merci à tous ;)

boozid
0
boozid Messages postés 6 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 15 mai 2008
9 août 2006 à 15:42
SAKingdom "boozid>>Tu sais pas lire? "
évite, sinon viens me le dire en face.. ;)

boozid
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
11 août 2006 à 09:14
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 !"
0
Rejoignez-nous