[C][NEW] Permutation de 2 variable (avec condition)

Permutation de 2 variable (avec condition) [C][NEW] - C - Programmation

Marsh Posté le 11-09-2007 à 18:34:01    

Bonjour tout le monde, je dois faire pour m'entrainer un petit programme qui affiche le quotient et le reste de la division entière de deux nombres entiers entrés au clavier ainsi que le quotient rationnel de ces nombres.
 
voici donc mon programme
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{float numerateur;
float denominateur;
 
 
printf("\nBonjour, veuillez saisir le numerateur de votre division\n" );
scanf("%d", &numerateur);
printf("\nBonjour, veuillez saisir le denominateur de votre division\n" );
scanf("%d", &denominateur);
 
 
 
printf("Quotient de votre division : %.0f", numerateur/denominateur);
printf("\nReste de votre division : %f\n", ???? );
printf("\nQuotient rationnel de votre division : %f\n", ???? );
 
 
 
system("pause" );
return 0;
}
 
Cependant je ne sais pas comment faire le reste de la division et le quotient rationnel de ma division.  
 
merci de votre aide :) :

Message cité 1 fois
Message édité par zondervan le 15-09-2007 à 19:53:19
Reply

Marsh Posté le 11-09-2007 à 18:34:01   

Reply

Marsh Posté le 11-09-2007 à 18:37:51    

/ et %


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-09-2007 à 19:03:19    

C'est à dire? sous quel forme d'écriture?
merci
 
car pour le reste numerateur%denominateur ne marche pas? Sinon le quotient rationnel c'est juste la division avec les chiffres significatifs c'est à dire
 
printf("\nQuotient rationnel de votre division : %f\n", numerateur/denominateur);


Message édité par zondervan le 11-09-2007 à 19:20:38
Reply

Marsh Posté le 11-09-2007 à 20:51:53    

zondervan a écrit :

Bonjour tout le monde, je dois faire pour m'entrainer un petit programme qui affiche le quotient et le reste de la division entière de deux nombres entiers entrés au clavier ainsi que le quotient rationnel de ces nombres.


Les nombres doivent être entiers et non réels.
Division entière  

Quotient : q = a / b
Reste : r = a % b


(on peut aussi utiliser idiv()...)
 
Division réelle (rationnelle, je suppose...)


Quotient : q = a / b


en forçant un des opérandes en réel avec un cast (double).


Message édité par Emmanuel Delahaye le 11-09-2007 à 20:56:00

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 12-09-2007 à 18:09:14    

Ok merci j'y suis arrivé, voici le resultat final, sa peut toujour interresser
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{int denominateur, numerateur, division, reste;
float rationnel;
 
 
printf("\nRentrez le numerateur de votre division\n" );
scanf("%d", &numerateur);
printf("\nRentrez le denominateur de votre division\n" );
scanf("%d", &denominateur);
 
division=numerateur/denominateur;
reste=numerateur % denominateur;
rationnel=(float)numerateur/denominateur;
 
printf("\nLe quotient de %d/%d est egale a %d", numerateur, denominateur, division);
printf("\nLe reste de %d/%d est egale a %d\n", numerateur, denominateur, reste);
printf("Le quotient rationnel de %d/%d est egale a %f", numerateur, denominateur, rationnel);
system("pause" );
return 0;
}
 

Reply

Marsh Posté le 12-09-2007 à 18:38:48    

En même temps je rencontre un problème sur un programme qui permute et affiches 3 variable ABC de types entier au clavier tel que A devient B, B devient et C devient A : Attention c'est le contenu des variables qui doit etre modifié et cette ligne doit rester identique avant et aprés le changement : printf("\nA=%d,B=%d,C=%d\n", A,B,C);
 
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{int A;
int B;
int C;
 
 
 
 
printf("\nVeuillez saisir votre variable A : \n" );
scanf("%d", &A);
printf("\nVeuillez saisir votre variable B :\n" );
scanf("%d", &B);
printf("\nVeuillez saisir votre variable C :\n" );
scanf("%d", &C);
printf("\nA=%d,B=%d,C=%d\n", A,B,C);
 
A=C;
B=C;
C=A;
 
 
 
 
printf("\nA=%d,B=%d,C=%d\n", A,B,C);
 
 
 
 
system("pause" );
return 0;
}
 
 
donc voila sa serait sympa de m'aider car j'arrive pas a faire que C devient A puisqu'il est déja associé à B
merci

Reply

Marsh Posté le 12-09-2007 à 19:12:44    

Il faut une variable intermédiaire...

 

Et STP, relis les règles du forum et apprend à utiliser les balises code...

 


Message édité par Emmanuel Delahaye le 12-09-2007 à 19:13:17

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 12-09-2007 à 19:30:57    

ok désolé pour les balises je voulais pas recréer un message, sinon qu'entends tu par variable intermediaire
merci

Reply

Marsh Posté le 12-09-2007 à 19:42:38    

zondervan a écrit :

ok désolé pour les balises je voulais pas recréer un message, sinon qu'entends tu par variable intermediaire
merci



temp := a
a := b
b := c
c := temp...


Tu fais ça 3 fois et tu retrouves les emplacements initiaux...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 12-09-2007 à 19:58:51    

ok merci beaucoup

Reply

Marsh Posté le 12-09-2007 à 19:58:51   

Reply

Marsh Posté le 12-09-2007 à 21:38:19    

zondervan a écrit :

ok désolé pour les balises je voulais pas recréer un message, sinon qu'entends tu par variable intermediaire
merci


C'est évident => si tu écrits "A=C" ben tu perds le A initial. Comment tu fais pour le retrouver ensuite ???
 
Sinon la magie du Xor permet de permuter 2 variables sans passer par une variable intermédiaire. C'est amusant à lire mais sans plus

int a=10;
int b=7;
 
a=a^b;
b=a^b;
a=a^b;
 
// => a=7 et b=10


 
C'est pas compliqué à démontrer mais ça n'offre aucun intérêt particulier (ni de rapidité ni de codage)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 13-09-2007 à 09:25:43    

et surtout ça fait genre astuce de ha><><0Rz ... ie truc inutile et illsisible pour les colélgues ou par toi même dans 10 ans.

Reply

Marsh Posté le 14-09-2007 à 00:26:49    

Joel F a écrit :

truc inutile et illsisible pour les colélgues ou par toi même dans 10 ans.


J'ai déjà dit que cela n'avait aucun intérêt hormis la curiosité. Mais d'où sors-tu que ce soit illisible ? A ce moment là on peut appliquer ce qualificatif à la plupart des codes non commentés !!!

// Permutation de variables via xor bit à bit
a=a^b;
b=a^b;
a=a^b;


Un petit commentaire dans le code et ta critique tombe à l'eau. Non. en fait, la seule remarque intelligente que tu aurais pu faire, c'est de préciser que ça ne marche pas si on applique l'algo pour permuter une variable avec elle-même

int a=10;
a=a^a;
a=a^a;
a=a^a;
// => a=0

Message cité 1 fois
Message édité par Sve@r le 14-09-2007 à 00:36:26

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-09-2007 à 17:52:57    

Sve@r a écrit :


Un petit commentaire dans le code et ta critique tombe à l'eau.  


 
Enfin bon, o_O , le clarity of intent, ca passe largement au dessus de tout ça.
C'ets illisible dans le sens ou ca te distrait du vrai profit de la lecture de code aka
savoir ce qu'il se passe fonctionellement dans ton code. Ca plus le fait que sur 100
codeux, y en a pas mal qui savent même pas que ^ == xor ... tu vas donc les voir  
passer x temps à se gratter la tete sur ce snippet.  Remarque, effet de bord non négligeable,
ca te permet de trier les bons des mauvais :o
 
Et j'en rajoute uen couche, :o, l'interet est nul, on me souffle dans mon oreillette que à part
si tu fais du dev sur DSP ou autre truc à contrainte forte, se toucher le mulot poru pondre ça, ca merite le kick ban sodo gravier. Je milite donc pour l'arret du montrage de swap avec ^ :o

Reply

Marsh Posté le 15-09-2007 à 19:59:11    

vous pouvez m'expliquer comment cela fonctionne Permutation de variables via xor bit à bit
a=a^b;
b=a^b;
a=a^b;
 
car j'en avais besoin pour un programme en permutant 2 variable mais sans variable intermédiaire
merci

Reply

Marsh Posté le 15-09-2007 à 20:18:31    

En numérotant les variables au fur et à mesure qu'elles s'écrasent ça devient plus évident, mais y'a rien de magique, essaye sur un bout de papier avec des nombres de 4-5 bits tu verras vite ce qu'il se passe :
a2 = a^b;
b2 = a2^b = a^b^b = a;
a3=  a2^b2 = a^b^a = b;


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 15-09-2007 à 20:27:52    

ok merci ^^et sinon y'a aucune autre méthode pour permuter 2 variable mais sans variable intermédiaire

Reply

Marsh Posté le 15-09-2007 à 20:36:54    

zondervan a écrit :

ok merci ^^et sinon y'a aucune autre méthode pour permuter 2 variable mais sans variable intermédiaire


Peut être, mais
- C'est une problème de math ou d'algorithme
- Quel intérêt ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 15-09-2007 à 20:38:37    

d'algorithme et c'est juste demander en langage C^^

Reply

Marsh Posté le 15-09-2007 à 21:23:12    

Code :
  1. a = a + b;
  2. b = a - b;
  3. a = a - b;

Reply

Marsh Posté le 15-09-2007 à 21:36:47    

OK merci beaucoup,  
je préfère cette méthode, plus simple à comprendre!!!

Reply

Marsh Posté le 15-09-2007 à 21:43:00    

et qui ne marche pas avec tout les types \o/

Reply

Marsh Posté le 15-09-2007 à 23:01:31    

merci du renseignements mais dans mon énoncé il précise bien deux variables de type int donc là sa passe!
merci quand même

Reply

Marsh Posté le 16-09-2007 à 15:03:02    

zondervan a écrit :

OK merci beaucoup,  
je préfère cette méthode, plus simple à comprendre!!!


Question d'habitude...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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