Accueil > > > LES NOMBRES RATIONNELS
LES NOMBRES RATIONNELS
Information sur la source
Description
une implémentation des nombres rationnels avec toutes leurs opérations;addition, soustraction, multiplication, division et depuis un nombre rationnel donner sa forme canonique(ex: 2/4 ---> 1/2)
Source
-
- package rationnel;
-
- /**
- *
- * @author yassine
- */
-
- public class Rationnel extends Number implements Comparable<Rationnel>{
-
- private int numerateur;
- private int denominateur;
- static final int DIVISION_PAR_0=0;
-
-
- public void setNumerateur(int a){
- numerateur=a;
- }
- public int getNumerateur(){
- return numerateur;
- }
-
- public void setDenominateur(int a){
- if(a==0) erreur(DIVISION_PAR_0);
- else
- denominateur=a;
-
- }
- public int getDenominateur(){
- return denominateur;
- }
-
- public Rationnel(int n,int d){
- this.setNumerateur(n);
- this.setDenominateur(d);
- }
- public Rationnel(int n){
- this(n,1);
- }
- public Rationnel(){
- this(0,1);
- }
- public Rationnel(Rationnel r){
- this(r.numerateur,r.denominateur);
- }
- /*
- * pour a>b>0 pgcd(a,b)=pgcd(a-b,b);
- */
-
- public static int pGCD(int a,int b){
- if(a<0) a=-a;
- else
- if(a==0) return b;
- if(b<0) b=-b;
- else
- if(b==0) return a;
- if(a==b)
- return a;
- if(a<b)
- return pGCD(a,b-a);
- return pGCD(a-b,b);
- }
-
- public static Rationnel toCanonique(Rationnel r){
- int pgcd=pGCD(r.getNumerateur(),r.getDenominateur());
- r.setNumerateur(r.getNumerateur()/pgcd);
- r.setDenominateur(r.getDenominateur()/pgcd);
- return r;
- }
- public Rationnel toCanonique(){
- return Rationnel.toCanonique(this);
- }
- static Rationnel moinsUnaire(Rationnel r){
- Rationnel tmp=new Rationnel(r);
- tmp.setNumerateur( tmp.getNumerateur()*-1);
- return tmp;
- }
- static Rationnel inverse(Rationnel r){
- Rationnel r2=new Rationnel(r);
- int tmp=r2.getNumerateur();
- r2.setNumerateur(r2.getDenominateur());
- r2.setDenominateur(tmp);
- return r2;
- }
- private static int numAPB(Rationnel a,Rationnel b){
- return a.getNumerateur()*b.getDenominateur()+a.getDenominateur()*b.getNumerateur();
- }
- private static int numAB(Rationnel a, Rationnel b){
- return a.getNumerateur()*b.getNumerateur();
- }
- private static int denAB(Rationnel a,Rationnel b){
- return a.getDenominateur()*b.getDenominateur();
- }
- public static Rationnel addition(Rationnel a,Rationnel b){
- Rationnel tmp=new Rationnel(numAPB(a,b),denAB(a,b));
- return toCanonique(tmp);
- }
- public static Rationnel soustraction(Rationnel a,Rationnel b){
- return Rationnel.addition(a,Rationnel.moinsUnaire(b));
- }
- public static Rationnel multiplication(Rationnel a,Rationnel b){
- return toCanonique(new Rationnel(numAB(a,b),denAB(a,b)));
- }
-
- public static Rationnel division(Rationnel a,Rationnel b){
- return Rationnel.multiplication(a,inverse(b));
- }
-
- public static Rationnel puissance(Rationnel r,int n){
- return (new Rationnel((int)Math.pow(r.numerateur, n),
- (int)Math.pow(r.denominateur, n))).toCanonique();
-
- }
-
-
- public Rationnel addition(Rationnel r){
- return Rationnel.addition(this, r);
- }
-
- public Rationnel soustraction(Rationnel r){
- return Rationnel.soustraction(this, r);
- }
-
- public Rationnel multiplication(Rationnel r){
- return Rationnel.multiplication(this, r);
- }
-
- public Rationnel division(Rationnel r){
- return Rationnel.division(this,r);
- }
-
- public Rationnel puissance(int n){
- return Rationnel.puissance(this,n);
- }
-
- public void affecter(Rationnel a,Rationnel b){
- a.setNumerateur(b.getNumerateur());
- a.setDenominateur(b.getDenominateur());
- }
- //les mêmes opération avec une affectation sur l'instance courante
- public void additionA(Rationnel r){
- Rationnel tmp=addition(this,r);
- affecter(this,tmp);
- }
-
-
- public void soustractionA(Rationnel r){
- Rationnel tmp=soustraction(this,r);
- affecter(this,tmp);
- }
-
- public void multiplicationA(Rationnel r){
- Rationnel tmp=multiplication(this,r);
- affecter(this,tmp);
- }
-
- public void divisionA(Rationnel r){
- Rationnel tmp=division(this,r);
- affecter(this,tmp);
- }
-
- public void puissanceA(int n){
- Rationnel tmp=puissance(this,n);
- affecter(this,tmp);
- }
-
- public int compareTo(Rationnel o) {
- return this.soustraction(o).numerateur;
- }
-
-
-
- @Override
- public int hashCode() {
- int hash = 7;
- this.toCanonique();
- hash = 41 * hash + getNumerateur();
- hash = 41 * hash + getDenominateur();
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final Rationnel other = (Rationnel) obj;
- return compareTo(other)==0;
- }
- @Override
- public Rationnel clone(){
- return new Rationnel(this);
- }
- @Override
- public String toString(){
- return getNumerateur()+"/"+getDenominateur();
- }
-
-
- @Override
- public int intValue() {
- return (int) getNumerateur()/getDenominateur();
- }
-
- @Override
- public long longValue() {
- return (long) getNumerateur()/getDenominateur();
- }
-
- @Override
- public float floatValue() {
- return (float) getNumerateur()/getDenominateur();
- }
-
- @Override
- public double doubleValue() {
- return (double) getNumerateur()/getDenominateur();
- }
-
- static void erreur(int n){
- switch(n){
- case DIVISION_PAR_0:
- System.out.println("Erreur: Division par 0");
- System.exit(-1);
- break;
- default:
- System.exit(-1);
- }
- }
-
-
-
- }
package rationnel;
/**
*
* @author yassine
*/
public class Rationnel extends Number implements Comparable<Rationnel>{
private int numerateur;
private int denominateur;
static final int DIVISION_PAR_0=0;
public void setNumerateur(int a){
numerateur=a;
}
public int getNumerateur(){
return numerateur;
}
public void setDenominateur(int a){
if(a==0) erreur(DIVISION_PAR_0);
else
denominateur=a;
}
public int getDenominateur(){
return denominateur;
}
public Rationnel(int n,int d){
this.setNumerateur(n);
this.setDenominateur(d);
}
public Rationnel(int n){
this(n,1);
}
public Rationnel(){
this(0,1);
}
public Rationnel(Rationnel r){
this(r.numerateur,r.denominateur);
}
/*
* pour a>b>0 pgcd(a,b)=pgcd(a-b,b);
*/
public static int pGCD(int a,int b){
if(a<0) a=-a;
else
if(a==0) return b;
if(b<0) b=-b;
else
if(b==0) return a;
if(a==b)
return a;
if(a<b)
return pGCD(a,b-a);
return pGCD(a-b,b);
}
public static Rationnel toCanonique(Rationnel r){
int pgcd=pGCD(r.getNumerateur(),r.getDenominateur());
r.setNumerateur(r.getNumerateur()/pgcd);
r.setDenominateur(r.getDenominateur()/pgcd);
return r;
}
public Rationnel toCanonique(){
return Rationnel.toCanonique(this);
}
static Rationnel moinsUnaire(Rationnel r){
Rationnel tmp=new Rationnel(r);
tmp.setNumerateur( tmp.getNumerateur()*-1);
return tmp;
}
static Rationnel inverse(Rationnel r){
Rationnel r2=new Rationnel(r);
int tmp=r2.getNumerateur();
r2.setNumerateur(r2.getDenominateur());
r2.setDenominateur(tmp);
return r2;
}
private static int numAPB(Rationnel a,Rationnel b){
return a.getNumerateur()*b.getDenominateur()+a.getDenominateur()*b.getNumerateur();
}
private static int numAB(Rationnel a, Rationnel b){
return a.getNumerateur()*b.getNumerateur();
}
private static int denAB(Rationnel a,Rationnel b){
return a.getDenominateur()*b.getDenominateur();
}
public static Rationnel addition(Rationnel a,Rationnel b){
Rationnel tmp=new Rationnel(numAPB(a,b),denAB(a,b));
return toCanonique(tmp);
}
public static Rationnel soustraction(Rationnel a,Rationnel b){
return Rationnel.addition(a,Rationnel.moinsUnaire(b));
}
public static Rationnel multiplication(Rationnel a,Rationnel b){
return toCanonique(new Rationnel(numAB(a,b),denAB(a,b)));
}
public static Rationnel division(Rationnel a,Rationnel b){
return Rationnel.multiplication(a,inverse(b));
}
public static Rationnel puissance(Rationnel r,int n){
return (new Rationnel((int)Math.pow(r.numerateur, n),
(int)Math.pow(r.denominateur, n))).toCanonique();
}
public Rationnel addition(Rationnel r){
return Rationnel.addition(this, r);
}
public Rationnel soustraction(Rationnel r){
return Rationnel.soustraction(this, r);
}
public Rationnel multiplication(Rationnel r){
return Rationnel.multiplication(this, r);
}
public Rationnel division(Rationnel r){
return Rationnel.division(this,r);
}
public Rationnel puissance(int n){
return Rationnel.puissance(this,n);
}
public void affecter(Rationnel a,Rationnel b){
a.setNumerateur(b.getNumerateur());
a.setDenominateur(b.getDenominateur());
}
//les mêmes opération avec une affectation sur l'instance courante
public void additionA(Rationnel r){
Rationnel tmp=addition(this,r);
affecter(this,tmp);
}
public void soustractionA(Rationnel r){
Rationnel tmp=soustraction(this,r);
affecter(this,tmp);
}
public void multiplicationA(Rationnel r){
Rationnel tmp=multiplication(this,r);
affecter(this,tmp);
}
public void divisionA(Rationnel r){
Rationnel tmp=division(this,r);
affecter(this,tmp);
}
public void puissanceA(int n){
Rationnel tmp=puissance(this,n);
affecter(this,tmp);
}
public int compareTo(Rationnel o) {
return this.soustraction(o).numerateur;
}
@Override
public int hashCode() {
int hash = 7;
this.toCanonique();
hash = 41 * hash + getNumerateur();
hash = 41 * hash + getDenominateur();
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Rationnel other = (Rationnel) obj;
return compareTo(other)==0;
}
@Override
public Rationnel clone(){
return new Rationnel(this);
}
@Override
public String toString(){
return getNumerateur()+"/"+getDenominateur();
}
@Override
public int intValue() {
return (int) getNumerateur()/getDenominateur();
}
@Override
public long longValue() {
return (long) getNumerateur()/getDenominateur();
}
@Override
public float floatValue() {
return (float) getNumerateur()/getDenominateur();
}
@Override
public double doubleValue() {
return (double) getNumerateur()/getDenominateur();
}
static void erreur(int n){
switch(n){
case DIVISION_PAR_0:
System.out.println("Erreur: Division par 0");
System.exit(-1);
break;
default:
System.exit(-1);
}
}
}
Conclusion
si vous avez trouver une erreur prévenez moi :)
Historique
- 03 décembre 2008 23:35:27 :
- une erreur d'orthographe
- 04 décembre 2008 01:42:03 :
- j'ai défini un ensemble multiplicatif et j'ai oublié de faire la puissance
- 07 décembre 2008 02:30:27 :
- j'ai ajouté et amélioré des méthodes
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
JFileChooser- pb recupération du nombre de fichiers [ par Infameus ]
Je developpe un diaporama et pour cela j'utilise la classe JfileChooser, avec la methode getFilesSelected, je récupère mes fichiers images, mais j'aim
nombre de ligne JTextArea [ par kramp ]
j'aimerais savoir comment récupérer le nombre de lignes affichées dans une JTextArea qui a été construite avec un String et la méthode setLineWrap(tru
compteur d'images... [ par blubsy ]
Bonjour, je voudrais pouvoir faire avoir un script qui me permet de compter le nombre de fois ou une image est appelé de mon site...Ce système doit èt
ajouter un nombre à un nom [ par sanpexos ]
Salut tout le mondeJ'aimerais savoir comment ajouter un nombre à un nom.J'ai une boucle à faire pour obtenir un certain nombre d'onglets défini par l'
Jeux du nombre mysterieux [ par criss ]
comment faire pour réaliser un programme qui permet à l'utilisateur de deviner un nombre caché. L'ordinateur choisit un nombre aléatoire (un entier) e
probleme avec parseInt() [ par r3m1 ]
Voila, j ai une zone de texte dans laquelle l'utilisateur doit saisir un nombre.Je veux ensuite transferer ce nombre dans un Integer.J'utilise le code
Comment déterminer nombre de chiffres dans un int [ par Bouki ]
la question est dans le sujetpar exemple si a == 10 ca renvoie 2 et si b == 9 ca renvoie 1
Limiter nombre caractère dans TextField [ par MrEddy ]
SalutExiste t'il un moyen propre de limiter le nombre de caractère pouvant etre tappé dans un TextField ???Merci
probleme d'affichage JPanel [ par topic1 ]
je debute en programmation java j'essaye de creer dans une Jframe trois JPanel deux affichant un graphique et un troisieme contenant des boutonsmon pr
Generation nombre aléatoire parmis liste [ par Sw1tch ]
Salut,J'aimerais pouvoir générer un nombre aléatoire parmis une liste. Je prends un nombre aléatoire entre 1 et 78 avec (int)(Math.random() *78 + 1) ;
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|