Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1447 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pour reccuperer le reste d'une division entiere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pour reccuperer le reste d'une division entiere

n°863551
TAUVIN
y faut ya k'a
Posté le 03-10-2004 à 18:26:48  profilanswer
 

Bonjour a vous tous !
 
je suis novice en c, et je cherche a recupperer le reste et le quotient d'une division entiere, j'ai lu qu'il faut utiliser la librairie stdlib.h pour pouvoir utiliser div_t div (int x, int y);
je n'arrive pas a faire fonctionner mon machin !!!  :pfff:  
quelqu'un pourrait t'il m'aider pour une chose aussi simple que ca?
Voici mon code:

Code :
  1. #include <stdio.h>  // entrées sorties standards.
  2. #include <stdlib.h> // Pour le reste de la division
  3. // Sortie Nom_Main (Entrées)
  4. main () // debut du pp  (
  5. {
  6.     int a,b;
  7.    
  8.     struct div_t {   // le type structure pour pouvoir recuperer le quotient et le reste
  9.         int quot;
  10.         int rem;
  11.     };
  12.     struct div_t division;  // variable de type struc div_t
  13.    
  14.    
  15.     printf ("Entrez un nombre s'il vous plait:\n" );
  16.     scanf ("%d",&a);
  17.     printf (" entrez un deuxieme nombre :\n" );
  18.     scanf ("%d",&b);
  19.     if (a<=b)
  20.     printf(" le premier est le plus petit" );
  21.     else
  22.     printf (" le premier est le plus grand" );
  23.     getch ();
  24.    
  25.     // division.quot,division.rem = div(a,2);
  26.    
  27.      printf(" a est de : %d\n",a);
  28.      printf(" la division est de : %d\n",div (a,2));
  29.      printf(" le reste de : %d\n",div (a,2));
  30.    
  31.      printf ("la div est de : %d\n",division.quot);
  32.      printf(" le reste est de : %d\n",division.rem);
  33.      
  34.      getch ();
  35.    
  36. }


Merci d'avance!  :hello: TAUVIN  :hello:

mood
Publicité
Posté le 03-10-2004 à 18:26:48  profilanswer
 

n°863556
cris56
Posté le 03-10-2004 à 18:32:27  profilanswer
 

pas besoin d'une fonction pour ca, le processeur calcul egalement le reste de la division entiere
utilise l'operateur % (modulo)

n°863562
cris56
Posté le 03-10-2004 à 18:37:45  profilanswer
 

printf ("Entrez un nombre s'il vous plait:\n" ); ->
puts ("Entrez un nombre s'il vous plait:" ); :)

n°863564
TAUVIN
y faut ya k'a
Posté le 03-10-2004 à 18:40:50  profilanswer
 

merci pour l'info du puts, je vais regarder le %
(un petit exemple???)   :)

n°863568
KangOl
Profil : pointeur
Posté le 03-10-2004 à 18:42:52  profilanswer
 

a = 17%3;

n°863569
Taz
bisounours-codeur
Posté le 03-10-2004 à 18:44:01  profilanswer
 

div fonctionne très bien. mais quand on voit ton code ça fait peur.

n°863571
TAUVIN
y faut ya k'a
Posté le 03-10-2004 à 18:46:35  profilanswer
 

je n'ai surement pas la même expérience que toi Taz (moi aussi defois, j'ai peur) mais j'essaye de faire les chose bien pourtant ! :-)

n°863572
Taz
bisounours-codeur
Posté le 03-10-2004 à 18:48:08  profilanswer
 

#     struct div_t {   // le type structure pour pouvoir recuperer le quotient et le reste
#         int quot;
#         int rem;
#     };  
 
 
c'est quoi ce machin ?
 
 
%d\n",div (a,2));
 
t'as vu ce que ça retourne div ? et toi tu veux que printf bouffe ça comme un int ?

n°863574
masklinn
í dag viðrar vel til loftárása
Posté le 03-10-2004 à 18:51:08  profilanswer
 

1- la structure div_t est définie dans stdlib.h, pourquoi tu la redéfinis?
2- une définition de structure dans une fonction? [:gratgrat]  
3- bordel t'as écrit toi même que la sortie de div() est de type div_t, alors pourquoi tu essaies d'imprimer du div_t comme si c'était de l'entier?

Citation :

   printf(" la division est de : %d\n",div (a,2));
    printf(" le reste de : %d\n",div (a,2));


 
Dans tous les cas t'aurais au moins pu regarder la MSDN, il y a un exemple d'utilisation :pfff:  

Code :
  1. /* DIV.C: This example takes two integers as command-line
  2. * arguments and displays the results of the integer
  3. * division. This program accepts two arguments on the
  4. * command line following the program name, then calls
  5. * div to divide the first argument by the second.
  6. * Finally, it prints the structure members quot and rem.
  7. */
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <math.h>
  11. void main( int argc, char *argv[] )
  12. {
  13.    int x,y;
  14.    div_t div_result;
  15.    x = atoi( argv[1] );
  16.    y = atoi( argv[2] );
  17.    printf( "x is %d, y is %d\n", x, y );
  18.    div_result = div( x, y );
  19.    printf( "The quotient is %d, and the remainder is %d\n",
  20.            div_result.quot, div_result.rem );
  21. }
  22. Output
  23. x is 876, y is 13
  24. The quotient is 67, and the remainder is 5


Il est sûrement pas magnifique et Taz va gueuler, mais quand même il m'a pas l'air bien compliqué


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°863576
TAUVIN
y faut ya k'a
Posté le 03-10-2004 à 18:53:10  profilanswer
 

%d\n",div (a,2));  mais il le bouffe !
il divise a par 2 et il l'affiche!
le probleme est pour le reste de la division:
 
sinon, comment faut faire pour utiliser div???
j'ai lu que ca retournait le quotient et le reste dans un type struct div_t (c'est pour ca que je l'ai fait).

mood
Publicité
Posté le 03-10-2004 à 18:53:10  profilanswer
 

n°863578
TAUVIN
y faut ya k'a
Posté le 03-10-2004 à 18:56:09  profilanswer
 

Merci masklinn,
 je ne cherchais pas forcement a la redefinir, mais seulement a l'utiliser (c'est pour ca que j'ai inclus le stdlib

n°863580
Taz
bisounours-codeur
Posté le 03-10-2004 à 18:56:23  profilanswer
 

bien essayer masklin, mais atoi, c'est mal :o

n°863588
masklinn
í dag viðrar vel til loftárása
Posté le 03-10-2004 à 19:01:16  profilanswer
 

Taz a écrit :

bien essayer masklin, mais atoi, c'est mal :o


je sais, c'est pourquoi je précise que c'est un exemple de la MSDN, je l'ai juste copié collé :o
c'est aussi pourquoi je précise que le code est tout sauf beau :o

Citation :

je ne cherchais pas forcement a la redefinir, mais seulement a l'utiliser (c'est pour ca que j'ai inclus le stdlib


dans stdlib sont définis à la fois div() et la structure div_t, c'est tout marqué dans la doc (MSDN), suffit de lire

Citation :

div returns a structure of type div_t, comprising the quotient and the remainder. The structure is defined in STDLIB.H.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°863641
Sve@r
Posté le 03-10-2004 à 19:46:07  profilanswer
 

Code :
  1. main()
  2. {
  3.    int a, b;
  4.    printf ("Entrez un nombre s'il vous plait:\n" );
  5.    scanf ("%d",&a);
  6.    printf ("Entrez un deuxieme nombre :\n" );
  7.    scanf ("%d",&b);
  8.    printf("La division de a par b donne %d\n", a/b);
  9.    printf("Le reste de cette division est %d\n", a%b);
  10. }


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°863645
Taz
bisounours-codeur
Posté le 03-10-2004 à 19:49:05  profilanswer
 

l'intérêt de div (et ses copains ldiv, lldiv, modf) c'est qu'ils retourne les 2 résultat de la division, en exécutant qu'une seule fois l'opération

n°863650
cris56
Posté le 03-10-2004 à 19:54:09  profilanswer
 

parce que l'instruction asm div calcul egalement le modulo (je crois que ca depend du cpu?) , c'est ca ?
 

n°863653
Taz
bisounours-codeur
Posté le 03-10-2004 à 19:58:09  profilanswer
 

oui. toute façon, tu prends ton cerveau, quand tu fais une division, tu as toujours les 2 résultats à la fois

n°863658
cris56
Posté le 03-10-2004 à 20:01:48  profilanswer
 

evidemment, seulement j'ai vu ca dans une doc intel, je me permet pas de presupposer que c'est un cas general
 
dans  ce cas l'operateur % comme l'operateur / font appel a div

n°864740
el muchach​o
Comfortably Numb
Posté le 05-10-2004 à 00:29:23  profilanswer
 

cris56 a écrit :

parce que l'instruction asm div calcul egalement le modulo (je crois que ca depend du cpu?) , c'est ca ?


 
Ben oui, en toute logique, obtenir le reste de la division donne 0 travail supplémentaire au CPU, donc c'est implémenté par défaut.

n°864743
bjone
Insert booze to continue
Posté le 05-10-2004 à 01:02:08  profilanswer
 

disons qu'il y a pas de raccourci mathématique permettant d'offrir une instruction donnant uniquement le reste (plus rapidement).

n°2043391
michael11
Posté le 20-12-2010 à 22:04:15  profilanswer
 

Bonjour,
 
Je me suis intéressé au C car on m'a dit qu'il allait très vite. Or la fonction lldiv qui permet de récupérer le quotient et le reste de la division d'un entier par un autre prend exactement 2 fois plus de temps qu'une simple division. Je l'ai testé sur deux PC différents. Autrement dit : faire une division via / (pour récupérer le quotient) suivie par un % (pour récupérer le reste) prend le même temps que lldiv.
Pourquoi, alors que quelqu'un le faisait très justement remarquer, la CPU effectue de toute manière la division et permet donc de récupérer à la fois le quotien eet le reste?
Comme je n'ai pas envie de me mettre à l'assembleur, si quelqu'un pourrait me donner une réponse cela me serait d'un grand secours.
 
Merci d'avance.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pour reccuperer le reste d'une division entiere

 

Sujets relatifs
[SQL] Comment éviter une division par 0 (zéro) --> résolu par DECODE()calque qui reste fixe
Division de temps[batch]Réccupérer la date de création/modification d'un fichier,
mon calque reste fixe quand je redimentionne ma pagecomment faire pour que le sommaire reste à la hauteur du lecteur ?
rafraichir une page entiere apres une validation d'un formErreur java.lang.OutOfMemory alors qu'il me reste de la RAM????
[Excel] Division par 10Division sous DOS: résultat en nombre décimal
Plus de sujets relatifs à : pour reccuperer le reste d'une division entiere


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR