pour reccuperer le reste d'une division entiere

pour reccuperer le reste d'une division entiere - C - Programmation

Marsh Posté le 03-10-2004 à 18:26:48    

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:

Reply

Marsh Posté le 03-10-2004 à 18:26:48   

Reply

Marsh Posté le 03-10-2004 à 18:32:27    

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

Reply

Marsh Posté le 03-10-2004 à 18:37:45    

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

Reply

Marsh Posté le 03-10-2004 à 18:40:50    

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

Reply

Marsh Posté le 03-10-2004 à 18:42:52    

a = 17%3;

Reply

Marsh Posté le 03-10-2004 à 18:44:01    

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

Reply

Marsh Posté le 03-10-2004 à 18:46:35    

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

Reply

Marsh Posté le 03-10-2004 à 18:48:08    

#     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 ?

Reply

Marsh Posté le 03-10-2004 à 18:51:08    

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
Reply

Marsh Posté le 03-10-2004 à 18:53:10    

%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).

Reply

Marsh Posté le 03-10-2004 à 18:53:10   

Reply

Marsh Posté le 03-10-2004 à 18:56:09    

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

Reply

Marsh Posté le 03-10-2004 à 18:56:23    

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

Reply

Marsh Posté le 03-10-2004 à 19:01:16    

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
Reply

Marsh Posté le 03-10-2004 à 19:46:07    

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.
Reply

Marsh Posté le 03-10-2004 à 19:49:05    

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

Reply

Marsh Posté le 03-10-2004 à 19:54:09    

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

Reply

Marsh Posté le 03-10-2004 à 19:58:09    

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

Reply

Marsh Posté le 03-10-2004 à 20:01:48    

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

Reply

Marsh Posté le 05-10-2004 à 00:29:23    

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.

Reply

Marsh Posté le 05-10-2004 à 01:02:08    

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

Reply

Marsh Posté le 20-12-2010 à 22:04:15    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed