{ "cells": [ { "cell_type": "markdown", "id": "7b33ad92", "metadata": {}, "source": [ "# Septième exercice en JavaScript" ] }, { "cell_type": "markdown", "id": "7f4e9974", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "60fae855", "metadata": {}, "source": [ "*Résumé en français* : Ecrire une fonction qui admet en paramètre un nombre entier positif et qui retourne le nombre de fois où vous devez multiplier ses chiffres pour obtenir un seul chiffre." ] }, { "cell_type": "markdown", "id": "755fa541", "metadata": {}, "source": [ "## Version classique" ] }, { "cell_type": "markdown", "id": "7d7bf9bc", "metadata": {}, "source": [ "On doit compter (variable `compteur`) combien de fois il faut multiplier les chiffres entre eux jusqu'à obtenir un seul chiffre. Ce nombre d'itérations étant inconnu, nous allons naturellement utiliser une boucle **Tant Que** (`while`). Maintenant, comment faire la multiplication des chiffres d'un nombre ? On peut par exemple **transformer** ce nombre en **chaine** puis en **liste** et multiplier les éléments de cette liste grâce à une boucle." ] }, { "cell_type": "code", "execution_count": 1, "id": "7190588b", "metadata": {}, "outputs": [], "source": [ "var mul = n => \n", "{\n", " liste = [...''+n] ; // Conversion nombre > chaine > liste\n", " produit = 1 ;\n", " for (c of liste) produit *= +c ;\n", " return produit\n", "}" ] }, { "cell_type": "code", "execution_count": 2, "id": "ab2f3607", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mul(999)" ] }, { "cell_type": "markdown", "id": "7a7aef7f", "metadata": {}, "source": [ "Ce qui donne ce programme pour la version classique :" ] }, { "cell_type": "code", "execution_count": 3, "id": "ab411e7f", "metadata": {}, "outputs": [], "source": [ "var persistence = n =>\n", "{\n", " var compteur = 0; // Notre compteur de tours\n", " while (n > 9) {\n", " compteur ++;\n", " produit = 1; // Calcul du produit des chiffres\n", " liste = [...''+n]; // Conversion du nombre en liste\n", " for (c of liste) produit *= +c; // +c --> entier\n", " n = produit \n", " }\n", " \n", " return compteur;\n", "}" ] }, { "cell_type": "code", "execution_count": 4, "id": "3ddb3512", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ " persistence(999)" ] }, { "cell_type": "markdown", "id": "ebf47515", "metadata": {}, "source": [ "## Version récursive" ] }, { "cell_type": "markdown", "id": "85a4d639", "metadata": {}, "source": [ "Si un nombre est plus petit que 10, sa **persistence** est **0**. Sinon, sa **persistence** est **1 +** la **persistence** du **produit de ses chiffres**. Par exemple :\n", "\n", "
persistence(39) = 1 + persistence(3 * 9)\n",
    "                = 1 + persistence(27)\n",
    "                = 1 + (1 + persistence(2 * 7)) \n",
    "                = 1 + 1 + persistence(14)\n",
    "                = 1 + 1 + (1 + persistence(1 * 4))\n",
    "                = 1 + 1 + 1 + persistence(4)              \n",
    "                = 1 + 1 + 1 + 0\n",
    "                = 3
" ] }, { "cell_type": "markdown", "id": "7b8ad345", "metadata": {}, "source": [ "Programme final version récursive :" ] }, { "cell_type": "code", "execution_count": 5, "id": "a5aaf28e", "metadata": {}, "outputs": [], "source": [ "var persistence = n => {\n", " if (n < 10) return 0;\n", " produit = 1;\n", " liste = [...''+n];\n", " for (c of liste) produit *= +c; \n", " return 1 + persistence(produit) \n", "}" ] }, { "cell_type": "code", "execution_count": 6, "id": "f8b3c126", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "persistence(999)" ] }, { "cell_type": "markdown", "id": "fe674992", "metadata": {}, "source": [ "La multiplication des chiffres peut se faire par `reduce` plutôt que par une boucle `for` classique :" ] }, { "cell_type": "code", "execution_count": 7, "id": "d0975eb5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[...'999'].reduce((a,c) => a * (+c), 1) // avec parenthèses" ] }, { "cell_type": "code", "execution_count": 8, "id": "dbf904f4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[...'999'].reduce((a,c) => a * +c, 1) // ou sans parenthèse !" ] }, { "cell_type": "code", "execution_count": 9, "id": "b296c2a1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "729" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[...'999'].reduce((a,c) => a * +c) // ou sans initialisation !!" ] }, { "cell_type": "markdown", "id": "8cdb4402", "metadata": {}, "source": [ "On obtient finalement :" ] }, { "cell_type": "code", "execution_count": 10, "id": "bc7b69d2", "metadata": {}, "outputs": [], "source": [ "var persistence = num => \n", " num < 10 ? \n", " 0 :\n", " 1 + persistence([...'' + num].reduce((a, c) => a * +c))" ] }, { "cell_type": "code", "execution_count": 11, "id": "2692cbf0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "persistence(999)" ] } ], "metadata": { "kernelspec": { "display_name": "JavaScript (Node.js)", "language": "javascript", "name": "javascript" }, "language_info": { "file_extension": ".js", "mimetype": "application/javascript", "name": "javascript", "version": "18.3.0" } }, "nbformat": 4, "nbformat_minor": 5 }