begin process at 2012 02 10 19:01:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths et Algorithmes

 > CLASS IDENTITEREMARQUABLE.JAVA

CLASS IDENTITEREMARQUABLE.JAVA


 Description

un code simpliste juste pour le fun avec une méthode récursive et itérative.
Dans cette classe vous trouvez le calcul :
- d'une factoriel : n!
- d'une combinaison : C(n,k) tel que n <= k !
- d'une identité remarquable général : (a+b)^n = (b+a)^n

Source

  • public class IdentiteRemarquable
  • {
  • /**
  • * This method enable to calculate factorial
  • * @param
  • * n - n!
  • */
  • public static long factoriel(int n)
  • {
  • return n < 1 ? 1 : n * factoriel(--n);
  • }
  • /*
  • * This method enable to calculate a combinaison with n <= k
  • * C (n,k) = k! / (n!(k-n)!)
  • */
  • public static long combinaison(int n, int k)
  • {
  • return (factoriel(k) / (factoriel(n) * (factoriel(k-n))));
  • }
  • /**
  • * This method enable to calculate (a+b)^n
  • * (a+b)^n = Sum( C(n,k) * a^k * b^(n-k) )
  • */
  • public static long calculate(int a, int b, int n)
  • {
  • long out = 0;
  • for (int k = 0; k <= n; k++)
  • {
  • out += combinaison(k, n) * Math.pow((double)a, (double)k) * Math.pow((double)b, (double)(n - k));
  • }
  • return out;
  • }
  • /**
  • * Test program
  • */
  • public static void main(String[] args)
  • {
  • // factoriel
  • int f = 5;
  • long resultF = IdentiteRemarquable.factoriel(f);
  • System.out.println("f(" + f + ") = " + resultF); // fact(5) = 120
  • // combinaison
  • int n = 3;
  • int k = 17;
  • long c = IdentiteRemarquable.combinaison(n, k);
  • System.out.println("c(" + n + "," + k + ") = " + c); // C (3,17) = 680
  • // (a+b)^n
  • int a = 5;
  • int b = 2;
  • int n2 = 2;
  • long r = IdentiteRemarquable.calculate(a, b, n2);
  • System.out.println("(" + a + "+" + b + ")^" + n2 + " = " + r); // (5+2)^2 = 49
  • System.out.println(IdentiteRemarquable.calculate(12, 7, 10)); // (12 + 7)^10 = ...
  • }
  • }
public class IdentiteRemarquable
{
	/**
	 * This method enable to calculate factorial
	 * @param
	 *	n - n!
	 */
	public static long factoriel(int n)
	{
		return n < 1 ? 1 : n * factoriel(--n);
	}

	/*
	 * This method enable to calculate a combinaison with n <= k
	 * C (n,k) = k! / (n!(k-n)!)
	 */
	public static long combinaison(int n, int k)
	{
		return (factoriel(k) / (factoriel(n) * (factoriel(k-n))));
	}

	/**
	 * This method enable to calculate (a+b)^n
	 * (a+b)^n = Sum( C(n,k) * a^k * b^(n-k) )	
	 */
	public static long calculate(int a, int b, int n)
	{
		long out = 0;

		for (int k = 0; k <= n; k++)
		{
			out += combinaison(k, n) * Math.pow((double)a, (double)k) * Math.pow((double)b, (double)(n - k)); 
		}

		return out;
	}


	/**
	 * Test program
	 */
	public static void main(String[] args)
	{
		// factoriel
		int f = 5;
		long resultF = IdentiteRemarquable.factoriel(f);

		System.out.println("f(" + f + ") = " + resultF); // fact(5) = 120

		// combinaison
		int n = 3;
		int k = 17;
		long c = IdentiteRemarquable.combinaison(n, k);

		System.out.println("c(" + n + "," + k + ") = " + c); // C (3,17) = 680

		// (a+b)^n
		int a = 5;
		int b = 2;
		int n2 = 2;
		long r = IdentiteRemarquable.calculate(a, b, n2);

		System.out.println("(" + a + "+" + b + ")^" + n2 + " = " + r); // (5+2)^2 = 49

		System.out.println(IdentiteRemarquable.calculate(12, 7, 10)); // (12 + 7)^10 = ... 

	}
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CLASSE MATRICE

 Sources de la même categorie

IMPLÉMENTATION DE L'ENSEMBLE C AVEC JAVA par Scupper
CALCUL D'EXPONENTIEL ( PRÉCISION MODIFIABLE) par Scupper
Source avec Zip TRANSFORMATION D'UNE EXPRESSION ARITHMETIQUE (INFIXÉ) EN POS... par billatosco
PROBLÈME DES N-REINES par jojolemariole
Source avec Zip ARRAYMATRIX -MATRICE MULTIDIMENSIONELLE ET GÉNÉRIQUE- , IMP... par labandus

 Sources en rapport avec celle ci

IMPLÉMENTATION DE L'ENSEMBLE C AVEC JAVA par Scupper
CALCUL D'EXPONENTIEL ( PRÉCISION MODIFIABLE) par Scupper
Source avec Zip Source avec une capture CHIFFRAGE AFFINE par bothan
Source avec Zip Source avec une capture CITY 3, C'EST UN JEU DE VILLE par edouard333
Source avec Zip CLASSE MATRICE par The Red Man

Commentaires et avis

Commentaire de coucou747 le 13/07/2008 11:20:10 administrateur CS

salut
en vrai, t'as plusieurs facons de calculer n!, et le tien n'est pas particulierement interessant...
t'as l'exemple recursif pur (le tien)
l'exemple iteratif
et l'exemple tail-recursif (qui est deja plus interessant)

en java, t'as la chance d'avoir des methodes private, ce qui te permet de faire des methodes innaccessibles, donc de faire des methodes recursives "avec un premier appel different" on appelle ca un chapeau...

voici ce genre d'exemple en java :

class foo{
private int fact(int n, int acc){
   if (n==0) return 1;
   return fact(n-1, n*acc);
}
public int fact( int n) throws Exception{
   if (n<0) throw new Exception("Oo");
   return fact(n, 1);
}
}

Commentaire de Chatbour le 14/07/2008 11:15:21

Salut,

coucou747 -> tu peux donner un exemple sur la méthode tail-récursive ?

Commentaire de The Red Man le 14/07/2008 13:34:36

salut coucou747,

peux-tu me dire l'intérêt d'utiliser la méthode du "tail-récursive" par rapport à la récursivité pur ?

Commentaire de coucou747 le 14/07/2008 14:49:09 administrateur CS

la mathode tail-rec, c'est celle que j'ai mise plus haut.
beaucoup de compilateurs s'occupent des fonctions tail-recursives pour les rendre iteratives, ce qui evite de faire exploser la pile.

Commentaire de The Red Man le 14/07/2008 15:18:10

ah d'accord eh bien merci pour l'info !

Commentaire de itek le 16/12/2008 07:16:43

voici ma version de la fonction en utilisant tail-rec et Biginteger:

    private BigInteger factoriel(BigInteger currentNumber, BigInteger sum) {
        if(currentNumber.intValue()== 1) {
            return sum;
        } else {
            return factoriel(currentNumber.subtract(new BigInteger("1")), sum.multiply(currentNumber));
     }

     }
    public BigInteger factoriel( BigInteger n) {
        return factoriel(n, new BigInteger("1"));
    }
  
    /*
    * This method enable to calculate a combinaison with n <= k
    * C (n,k) = k! / (n!(k-n)!)
    */
    public  BigInteger combinaison(String n, String k){
     BigInteger Bn = new BigInteger (n);
     BigInteger Bk = new BigInteger (k);
     return (factoriel(Bk).divide((factoriel(Bn).multiply((factoriel(Bk.subtract(Bn)))))));
    }

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Algorithme de de combinaison [ par henrypower ] slt à vous je développe en ce moment une application et j'aimerais avoir un programme java (optimal) qui prend en entrée une matrice de dimension n( n Arrondi à n chiffres significatifs [ par juancho2786 ] Bonsoir , je fais une méthode qui permet d'arrondir à n chiffres significatis seulement j'ai un problème. Par exemple lorsque le nombre à arrondir est double != Double [ par lafolle24320 ] Bonjour à tous, est ce que quelqu'un pourrait m'expliquer clairement la différence entre un double et un Double. En fait j'ai un calcul : avec beam en toutes les combinaisons [ par didoux95 ] Bonjour a tous.j'ai pb que je ne parvient pas a le resoudre.voila, j'ai par exemple un Vector&lt;Integer&gt; V = new Vector&lt;Integer&gt;(); contenan demande d'exercices d'algorithme [ par imadinho88 ] slt mes amis je suis un etudiant en developpement d'informatique (1ere année) j 'ai un controle ds l'algorithme la semaine prochaine et j'ai pas trouv Algorithme de Cox et de Boor [ par verybichon ] Quelqu'un saurait il comment on peut faire une B-Spline en passant par l'algorithme de Cox et de Boor en programmation java??J'ai visité tous les site faire une combinaison [ par ulysse00 ] bonjour j'ai malheureusement un problème et je coince et je n'arrive pas a le résoudre je voulais faire une combinaison entre les élément par exemple NSGA2 [ par romeofr ] J'ai un probleme pour developper un algorithme d'optimisation combinatoire multi objectifJe cherche un script pour m'aider a implemanter l'algorithm Sortir un zéro avec un Math.random()*10+1 [ par daviddubois ] Bonjour tout le monde,J'essaie d'avoir des chiffres de 0 à 10 avec un Math.random(), le problème est qu'il sort des chiffres entre 1 et 10.Il ne sort la fonction Math.random() [ par dorine82 ] bonjour,j'aimerais savoir comment utiliser deux threads chacun a son tour. si par exemple j' ai le thread A et le thread B , je dois avoir comme resul


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales