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

Fermé
mOOm123 Messages postés 3 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 - Modifié par mOOm123 le 22/11/2016 à 00:53
mOOm123 Messages postés 3 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 - 22 nov. 2016 à 20:17
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();}

  }

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 22/11/2016 à 07:01
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 mardi 22 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016
22 nov. 2016 à 20:14
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 samedi 12 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 1
22 nov. 2016 à 07:23
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
22 nov. 2016 à 18:10
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
22 nov. 2016 à 18:41
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 mardi 22 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016
22 nov. 2016 à 20:17
XD ! Oui c'est un ancêtre comme vous le dite mais c'est le prof qui nous demandé .
0