Le factorielle d'un entiers (sans utilisé du "PRODUIT" )

mOOm123 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
mOOm123 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir, j'ai du mal a trouver une solution pour faire le factorielle d'un nombre sans utilisation de "PRODUIT" . Car je vais le traduire en language assembleur Intel 8085 , du coup il n'y a pas une instruction pour le "produit" c'est la raison pour laquelle je veux que sa soit en somme avec la BOUCLE DO WHILE .

En s'inspirant de cette code source , qui fait la puissance d'un entier (bien sur AUCUN PRODUIT est utilisé) ... J'aimerai que vous m'aidiez , MERCI !

Voici le code :


import java.util.Scanner;
public class m {

 public static void main(String[] args) {
  

    Scanner sc=new Scanner(System.in);
        int i,n,j,x,p,s;
        System.out.print("n=");
        n=sc.nextInt();
        System.out.print("x=");
        x=sc.nextInt();
        p=1;
        i=n;
        
      do{
         s=0;
         j=x;
         do{
          s=s+p;
          j=j-1;
         }while(j!=0);
        p=s;
        i=i-1;
        }while(i!=0);
    System.out.println(x+"="+p);
   sc.close();}

  }
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

"il n'y a pas une instruction pour le "produit" c'est la raison pour laquelle je veux que sa soit en somme"
Ce n'est pas très efficace de faire la somme pour calculer un produit.
Il vaudrait mieux faire ça avec des décalages de bits pour les puissances de 2.

Ex: 7*8=7*2^3, c'est à dire qu'il faut juste mettre 7 en binaire (111) et rajouter 3 zéros derrières, résultat 111000 (en binaire), c'est à dire 56.

Tu auras donc faire 1 instruction de décalage de bits (shift en anglais), ce qui est bien mieux que faire 7 sommes de 8 (ou 8 sommes de 7)...

En Java, les décalages de bits se font avec <<
Exemple :
System.out.println(7 << 3); // 56

La confiance n'exclut pas le contrôle
0
mOOm123 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Je vous suis pas , je pene qu'on est meme pas dans la meme longueur d'onde !
0
josaphat_mayuba Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   1
 
tu peux utiliser une méthode récursive cela fait très longtemps que j'ai travaillé avec l'assembleur mais je pense qu'il est possible de faire une méthode récursive.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
La récursivité n'améliorera pas le programme, ça ne fait que cacher une manipulation de piles, inutiles dans le cas présent.
De plus si le langage n'autorise pas les produits (ce qui est déjà une aberration en soit) je ne le vois pas gérer la récursivité non plus (mais je n'ai pas vérifié)
0
Utilisateur anonyme > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bonjour

Si, si, on peut gérer la récursivité en assembleur 8085. Mais c'est "sportif" et complètement inutile ici.
Par contre, il est parfaitement normal que le langage n'autorise pas les produits. L'assembleur, par définition, reflète directement les instructions du processeur, et l'unité arithmétique et logique du 8085 ne dispose pas de la multiplication. N'oublions pas que c'est un ancêtre.
0
mOOm123 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
XD ! Oui c'est un ancêtre comme vous le dite mais c'est le prof qui nous demandé .
0