Algorithmique (Partie 2).

Slides:



Advertisements
Présentations similaires
Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
Advertisements

CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
TP 1 BIS Programmation structurée à l’aide de fonctions (FC) et de bloc fonctionnels (FB)
Cours 4 data frames. Modes ouiNumérique, caractère, complexe logique Liste list ouiNumérique,caractère,complexe logiqueSérie temporelle ts OuiNumérique,caractère,complexe.
Comment utiliser le débogueur de Visual Studio /8/2015 INF145 1 Créé par Julien Galarneau Allaire, révisé par Eric Thé S.E.G.
1 Programmation en C++ Cycle de vie ● La vie d'un objet ● Destructeur ● Gestion de mémoire dynamique.
1 Programmation en C++ IO en C++/SL ● Standard Library ● Types, objets pour IO ● L'entrée de clavier ● Sortie à l'écran ● Fichiers.
Cours 08 SYSTÈME DE FICHIERS
MàN Info Licence acoustique
Procédures Framework LDAP
UE2 - M22 Licence acoustique
Cross-Plateform Cours JavaScript
JAVA.
I- ANALYSE DU BESOIN / Plan
LES TABLEAUX EN JAVA.
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Algorithme et programmation
Les Tableaux Mme DJEBOURI. D.
Algorithmique AU El harchaoui noureddine
Les Bases de données Définition Architecture d’un SGBD
Algorithmique demander jeu du pendu.
Ajouter le code dans une page html
Initiation aux bases de données et à la programmation événementielle
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
L’Instruction de Test Alternatif
Javadoc et débogueur Semaine 03 Version A16.
Les Instructions – Organigramme
Bases de programmation en Python
Principes de programmation (suite)
Initiation à la programmation impérative et algorithmique
Tableaux à plusieurs dimensions en langage C
Réalisation d'agents de surveillance Zephir
Algorithmique & Langage C
Python for beginners Qu'est ce que Python
VI. Tri par tas (Heap sort)
Programmation Impérative II
Semaine #4 INF130 par Frédérick Henri.
  EXCEL FORMATION d'introduction.
Concepts de base de la programmation
Documentation technique (Linux)
Notion De Gestion De Bases De Données
Création Et Modification De La Structure De La Base De Données
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Cours N°10: Algorithmiques Tableaux - Matrices
Package R Markdown: Un outil pour générer des pages html avec R Studio
Programmation Android Bases De Données, SQL-lite
Exercice PHP DEUST TMIC
Formation sur les bases de données relationnelles.
من إعداد الأساتذة بوزاوية حميد و عيسى محمد
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
Gilles BADUFLE À partir d’un PPT modifié du C.A.H.M.
CRITERES DE QUALITE 1) PRECISION 2) RAPIDITE 3) AMORTISSEMENT
Assembleur, Compilateur et Éditeur de Liens
NUMERATION et REPRESENTATION DES NOMBRES
B.Shishedjiev - Informatique
03- Evaluation Access 2003 Cette évaluation comporte des QCM (1 seule réponse) et des Zones à déterminer dans des copies d’écran.
Chapitre 3: Les scriptes
Algorithmique.
Reconnaissance de formes: lettres/chiffres
PRO1026 Programmation et enseignement
H. Wertz -- Exécution Symbolique
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Exercices récapitulatifs
PROGRAMMATION ET ENSEIGNEMENT
Tableaux croisés dynamiques sous Excel: des outils simples pour une analyse rapide de jeux de données en cytométrie Camille SANTA MARIA Ingénieur d’étude.
03/05/2019 L’organisation et la gestion des fichiers sur le site collaboratif Martine Cochet 2SitePleiadeGestionFichiers.
Chapter 11: Récursivité Java Software Solutions Second Edition
Python Nicolas THIBAULT
Type Tableau Partie 1 : Vecteurs
Les données structurées et leur traitement
Transcription de la présentation:

Algorithmique (Partie 2)

Sources http://www.atelierphp.net/intro/atelier.php https://openclassrooms.com/courses/concevez-votre-site-web-avec- php-et-mysql "

Organiser son environnement Pour exécuter un programme PHP, on a besoin d’installer sur sa machine : Un serveur Web Un interpréteur PHP (Un serveur de base de données : pas utile pour l’instant, mais pourra servir par la suite et souvent livré avec le serveur Web) Il est nécessaire d’utiliser un serveur Web et un interpréteur PHP Voir le cours Openclassrrom N°2 « préparer son environnement de travail » https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et- mysql/preparer-son-environnement-de-travail Mais pour s ’exercer simplement sur des programmes simples, on peut utiliser http://sandbox.onlinephpfunctions.com/

Contenu Sous-programmes Structures, enregistrement, table Fichiers

Les sous-programmes

Les sous-programmes Algorithmique : Diviser pour régner Décomposer un problème en sous problème Mettre chaque solution à un sous problème dans un morceau de programme, un sous-programme Composer les morceaux On distingue les fonctions ou les procédures

Une fonction est un (sous-)programme Qui porte un nom A des paramètres en entrées Retourne une valeur

Définition d’une fonction en langage algorithmique Fonction nom_de_fonction (paramètre1 : type 1, … paramètre i : type i, …) : type Var /* Variables locales */ Début /*bloc d’instruction*/ Retourne variable FinFonc Les paramètres formels d’une fonction définissent les types des valeurs à entrer pour calculer la valeur retournée (Retourne ) de type type. Les variables déclarées dans une fonction sont des variables locales à la fonction. Fonction somme (a : réél, b : réél) : réel Var c : réél Début c  a + b Retourne c FinFonc a et b sont les paramètres formels de la fonction somme. La variable c est une variable locale à la fonction ‘’somme’’, elle n’est pas connue (vue) à l’extérieur de cette fonction.

Définition d’une fonction en PHP Fonction nom_de_fonction (paramètre1 : type 1, … paramètre i : type i, …) : type Var /* Variables locales */ Début /*bloc d’instruction*/ Retourne variable FinFonc Les paramètres formels d’une fonction définissent les types des valeurs à entrer pour calculer la valeur retournée (Retourne ) de type type. Les variables déclarées dans une fonction sont des variables locales à la fonction. <?php function nom_de_fonction ($parametre_1, $parametre_2, ..., $ parametre_n) { echo "Exemple de fonction.\n"; return $return_value; } ?>

Définition d’une fonction en PHP Fonction somme (a : réél, b : réél) : réel Var c : réél Début c  a + b Retourne c FinFonc a et b sont les paramètres formels de la fonction somme. La variable c est une variable locale à la fonction ‘’somme’’, elle n’est pas connue (vue) à l’extérieur de cette fonction. <?php \\définition : function addition ($a, $b) { $c=$a+$b; return $c; } \\appel : $d = addition (2,10); ?>

Utilisation d’une fonction PROGRAMME Toto VAR x,y,z : réels DEBUT z  somme(x,y) FIN a et b dans la définition de la fonction ‘’somme’’ sont les paramètres formel x,y dans le programme Toto sont les paramètres effectifs (ou réels) Les paramètres formels et effectifs peuvent porter le même nom, mais pas nécessairement A l’appel de la fonction (z  somme(x,y)), a prend la valeur de x, b prend la valeur de y Au retour, la valeur retournée par la fonction est affectée à la variable z

Une procédure est un (sous-)programme Qui porte un nom A des paramètres en entrée (E) A des paramètres en sorties (S) A des paramètres en entrées sorties (ES)

Définition d’une procédure en langage algorithmique Procédure nom_de_procédure (mode paramètre1 : type 1, … , mode paramètre i : type i, …) Var /* Variables locales */ Début /*bloc d’instruction*/ FinProc mode: Entrée, Sortie, EntréeSortie (les paramètres en sortie et en entrée/sortie sont déclarées dans le programme appelant) Procédure somme (E a : réél, E b : réél, S c : réel) Début c  a + b Finproc a, b, c dans la définition de la procédure somme sont les paramètres formel

Utilisation d’une procédure PROGRAMME Toto VAR x,y,z : réels DEBUT somme(x,y,z) FIN a, b, c dans la définition de la procédure ‘’somme’’ sont les paramètres formel x, y, z dans le programme Toto sont les paramètres effectifs (ou réels) A l’appel de la procédure somme(x, y, z), a prend la valeur de x, b prend la valeur de y Une procédure ne retourne pas explicitement de valeur, mais comme c est déclaré en sortie, c est modifié. Une procédure ne peut pas être affectée à une variable

Mode de passage de paramètres Par valeur : La valeurs du paramètre effectif est copiée dans le paramètre formel La modification du paramètre formel n’entraîne pas la modification du paramètres effectif C’est le mode de passage des paramètres en entrée Par référence : La référence du paramètre effectif est copiée dans le paramètre formel La modification du paramètre formel entraîne la modification de la variable référencée par ce paramètre C’est le mode de passage des paramètres en sortie et en entrée/sortie

En règle générale En théorie : En pratique : Les paramètres d’une fonction sont passés par valeur Les paramètres en entrée d’une procédure sont passés par valeur Les paramètres en sortie et en entrée/sortie sont passés par référence En pratique : En PHP, tout est possible, mais pas conseillé

La visibilité des variables On peut déclarer des variables dans les programmes appelant et dans les sous-programmes appelés ! Comment cela se passe-t-il si elle ont le même nom ? Par défaut, une variable définie dans un sous-programme n’est visible que dans ce sous programme (portée locale), sauf si elle est explicitement déclarée comme globale. Deux variables locales de même nom n’ont pas de lien entre elles

Les variables globales VAR GLOBALES c: réél Procédure somme (E a: réel, E b : réel) VAR DEBUT c  a + b FIN PROGRAMME Essai x, y : réel Lire(x,y) Somme (x,y) Ecrire c

En PHP Function pour’’Fonction’’ et ‘’Procédure’’ <?php $myPrice="100" ; print ("1_Prix hors taxe : $myPrice <br/>") ; $myPrice="100" ; add_tva_val($myPrice); print ("2_Après passage par valeur : $myPrice<br/>") ; $myPrice="100" ; add_tva_ref($myPrice); print ("3_Après passage par référence : $myPrice<br/>"); function add_tva_val($myPrice) { $myPrice = .19*$myPrice + $myPrice ; } function add_tva_ref(&$myPrice) { $myPrice = .19*$myPrice + $myPrice ; } ?> Function pour’’Fonction’’ et ‘’Procédure’’ Passage par valeur par défaut : $var Passage par référence : &$var

En PHP Résultat de l’exécution : <?php $myPrice="100" ; print ("1_Prix hors taxe : $myPrice <br/>") ; $myPrice="100" ; add_tva_val($myPrice); print ("2_Après passage par valeur : $myPrice<br/>") ; $myPrice="100" ; add_tva_ref($myPrice); print ("3_Après passage par référence : $myPrice<br/>") ; function add_tva_val($myPrice) { $myPrice = .19*$myPrice + $myPrice ; } function add_tva_ref(&$myPrice) { $myPrice = .19*$myPrice + $myPrice ; } ?> Function pour’’Fonction’’ et ‘’Procédure’’ Passage par valeur par défaut : $var Passage par référence : &$var Résultat de l’exécution : 1_Prix hors taxe : 100  2_Après passage par valeur : 100 3_Après passage par référence : 119

Fonctions prédéfinies en PHP Exemple : chaînes de caractères round() : arrondi les réels count() : nombre d’éléments dans un tableau strlen(): retourne la longueur d’une chaîne strpos() : cherche la position de la première occurrence de la chaîne en paramètre substr(): découpe une portion de chaîne isempty(): teste si une variable a une valeur … Des centaines: http://php.net/manual/fr/ indexes.functions.php

Les structures Un exemple de type construit à partir des types de base.

Les structures - Exemple Type Structure Etudiant no-etudiant : chaîne nom: chaîne année_inscription : chaîne adresse : chaîne FinStruct Structure des enregistrements no-etudiant nom annee_inscription adresse etudiant 1 12 Alfred 2017 Cite Haute Malgrange etudiant 2 n enregistrements de structure ‘’Etudiant’’ … etudiant n

Les structures – Définition Type Structure nom-type champ1 : type champ2 : type champ3 : type champ4 : type FinStruct Type Structure Etudiant no-etudiant : chaîne nom: chaîne année_inscription : chaîne adresse : chaîne FinStruct

Les enregistrements : instances de structures Exemple: etudiant1, etudiant2: Etudiant Notion d’enregistrement Un enregistrement est une variable d’un type structuré de donnée. VAR nom-enregistrement : nom de type

Les structures - Utilisation Type Structure nom-type champ1 : type champ2 : type champ3 : type champ4 : type FinStruct Accéder à un champ d’un enregistrement nom_enregistrement.nom_de_champ variable1 : nom-type variable2  variable1.champ2 etudiant1 : type_etudiant variable4  etudiant1.nom

Les enregistrements dans les structures Une structure peut avoir un champ de type structure Type Structure nom-type-2 champ1 : type champ2 : nom-type champ3 : type FinStruct Type Structure nom-type champ11 : type champ22 : type champ33 : type champ44 : type FinStruct Var exemple : nom-type-2 Variable5  exemple.champ2.champ22

Un nouveau type construit : les tables (tableau d’enregistrements) Une table est un tableau d’enregistrements VAR var etudiants : tableau[1..10] de type-etudiant Nom de l’étudiant i: Etudiants[i].nom

Structures et tables en PHP On ne dispose pas de type « structure » On va s’appuyer sur la notion de classe d’objets Avec les notations ‘’new’’ et ‘’ ->’’ En réalité, on entrebaille la porte de la programmation objet. Aussi, n’entrez pas dans le détail de ces notations, c’est inutile et il vous manque une partie du contexte : exemple du mot clé public

Création des types de structure : < Création des types de structure : <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab; Utilisation des enregistrements structurés : $article=new tarticle; $article->fab=new tfabricant; $article->ref="Art001_01"; $article->fab->ref="Fabl234"; echo $article->ref; echo "<br />"; echo $article->fab->ref; ?>

$article[0]=new tarticle; $article[1]=new tarticle; $article[0]->fab=new tfabricant; $article[1]->fab=new tfabricant; $article[0]->ref="Art001_01"; $article[1]->ref="Art002_02"; $article[0]->fab->ref="Fabl234"; $article[1]->fab->ref="Fab4321"; echo $article[0]->ref; echo "<br />"; echo $article[0]->fab->ref; echo $article[1]->ref; echo $article[1]->fab->ref; ?> Une table d’article <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab;

Une table d’article for($i=0;$i<3;$i++) { $article[$i]=new tarticle; $article[$i]->fab=new tfabricant; } $article[0]->ref="Art001_01"; $article[0]->fab->ref="Fabl234"; $article[1]->ref="Art002_02"; $article[1]->fab->ref="Fab4321"; echo $article[0]->ref; echo "<br />"; echo $article[0]->fab->ref; echo $article[1]->ref; echo $article[1]->fab->ref; ?> <?php class tfabricant { public $ref; public $nom; public $adresse; public $tel; } class tarticle { public $libelle; public $prix; public $fab;

Les fichiers

Objectif Assurer la persistance des données : Permettre la sauvegarde et la récupération des données entre deux sessions de travail Les données sont sauvegardées sur des supports particuliers : disque dur (ex C:), clé USB …

Types de fichiers Fichiers texte : lignes de texte successives Fichiers binaires : suite de ‘’0’’ et ‘’1’’ qui ne correspondent pas (sauf accident) à du texte. Interprétation interne des fichiers : liée aux programmes qui les utilisent Formats : HTML, JPEG, .doc, .pdf, MP3 …

Accès aux fichiers Séquentiel Direct Séquentiel indexé

Principales fonctions Ouvrir un fichier (en lecture, en écriture) Traiter un fichier : lire et écrire des lignes, des enregistrements, des caractères … Fermer un fichier

Forme générale d’un programme de traitement d’un fichier Début //On récupère la référence au fichier fic  ouvrir(nom_de_fichier) Tantque non EOF (fic) faire //on lit la ligne en cours du fichier //dans la variable ‘’ligne’’ lire(fic, ligne) //traiter la ligne traiter(ligne) //passer à la ligne suivante Findetantque Fermer(fic) Fin Programme TRAITER-FICHIER Var fic: fichier nom_de_fichier : chaîne ligne : chaîne ‘’fic’’ est la référence du fichier dans le programme ‘’nom de fichier’’ est le nom du fichier sur disque EOF fonction qui teste la fin d’un fichier (End Of File)

Exemple PHP avec ‘’fgets’’ <?php  // on déclare le nom du fichier à ouvrir $fichier = ‘fichier.txt';  //ouverture du fichier en lecture seule $fp = fopen($fichier,'r');  //feof indiquera la fin du fichier //le fichier est parcouru jusqu'à la fin while(!feof($fp))  {     //lecture du fichier, stockage dans $ligne     $ligne = fgets($fp);      //affiche la ligne à l'écran, n'oubliez pas     print $ligne.'<br/>';   } fclose($fp); //pensez à refermer à la fin du script ?>

Fichiers en PHP Ouverture : int fopen(string filename, string mode) Les associations d'ouvertures liées à fopen() 'w' ouvre le fichier pour écriture, et détruit les données si le fichier en contient 'w+' comme ci dessus mais crée le fichier si celui ci n'éxiste pas 'a' ouvre le fichier pour ajouter de nouvelles données en fin de fichier 'a+' comme ci-dessus mais crée le fichier si celui n'existe pas 'r' ouvre le fichier en lecture seulement

Fichiers en PHP Lecture string fgets(int fp, [int length]) Fermeture retourne la ligne courante du fichier Si lenght est précisé, lit lenght caractères ou jusqu’à la fin de ligne Fermeture bool close(string filename) Ecriture int fwrite(int fp, string chaîne [, int length]) écrit le contenu de chaîne dans le fichier fp; si lenght (optionnel) est précisé, au plus lenght octets seront écrits Synonyme : fputs

Autres fonctions Autres : array file(string filename) lit un fichier et le range dans un tableau ligne par ligne string fread(int fp, int length) idem fgets mais ignore les fins de ligne int filesize(string filename)

Exemple PHP avec ‘’fgets’’ <?php  // on déclare le nom du fichier à ouvrir $fichier = ‘fichier.txt';  //ouverture du fichier en lecture seule $fp = fopen($fichier,'r');  //feof indiquera la fin du fichier //le fichier est parcouru jusqu'à la fin while(!feof($fp))  {     //lecture du fichier, stockage dans $ligne     $ligne = fgets($fp);      //affiche la ligne à l'écran, n'oubliez pas     print $ligne.'<br/>';   } fclose($fp); //pensez à refermer à la fin du script ?>

Exemple ‘’file’’ <?php $myFileArray = file(‘fichier.txt'); for ($index=0;$index<count($myFileArray);$index++)     {         print ($myFileArray[$index]."<br/>");     } ?>

Les fichiers d’enregistrements en PHP Délimiter les champs avec un caractère spécial Mettre un enregistrement par ligne 12:Alfred:2017:CiteHauteMalgrange Lecture : lire une ligne et récupérer les champs grâce aux délimiteurs (voir fonction ‘’explode’’) Ecriture : coller les champs en insérant le délimiteur entre eux (voir fonction ‘’implode’’)

Sujet de TP (2017 – 2018) Tri d’un fichier de données selon un champ de la structure des enregistrements. On désire réaliser un programme qui prend en entrée une liste d’étudiants initialement non triée et qui retourne la même liste d’étudiants mais triée par numéro d’étudiant croissant.   La liste d’étudiants est stockée dans un fichier texte dont chaque enregistrement contient un étudiant avec la structure suivante : no-étudiant, nom, prénom et inscription. Le fichier tient entièrement en mémoire. On propose d’organiser l’étude en trois temps de la façon suivante : - Ecrire un programme en PHP qui trie un tableau d’entiers en mémoire - Adapter le programme pour trier des entiers stockés dans un fichier Adapter le programme pour trier des étudiants (structures composées des champs no-étudiant, nom, prénom et inscription) stockés dans un fichier.  A Chaque étape, donner : L’algorithme utilisé en langage algorithmique Le programme correspondant (On pourra utiliser les fonctions implode et explode pour gérer les structures.)  Une fois le programme trié, on veut : pouvoir insérer dans le fichier un nouvel étudiant pouvoir supprimer un étudiant de numéro donné

TP 2018-2019

FIN

Algorithmique sur les tableaux

Algorithmique sur les tableaux Fortement liée à la notion de boucle Recherche d’un élément Plus petit/ plus grand élément Moyenne Tris …

Recherche d’un élément PROGRAMME Recherche VAR nombres : tableau [1..10] d’entiers valeur_cherchée : entier trouve: booléen DEBUT i 1 trouve  faux Tant que i<=10 et trouve = faux Faire Si nombre[i] = valeur_cherchée Alors trouve  vrai Fsi i  i + 1 FinTantQue Si Trouve alors Afficher « Trouvé en position » i -1 sinon Afficher « Pas trouvé » FinSi FIN

Recherche d’un élément en PHP <?php $nombres = array(3,7,59,45,12,999, 45,5,88,1); $trouve=false; $valeur-recherchee=5; $i = 0; while(($i<9) && (! $trouve) { If ($nombres[$i] == $valeur-recherchee) trouve = true; $i = $i + 1; } If ($trouve) echo ‘’trouvé en position’’.($i-1). ’’\n ’’; ?>

Foreach <?php $a = array (1, 2, 3, 17); $i = 0; foreach($a as $v){ print "\$a[$i] => $v.\n"; $i = $i + 1;} ?> $a[0] => 1. $a[1] => 2. $a[2] => 3. $a[3] => 17. <?php $a = array (1, 2, 3, 17); foreach ($a as $v){     print "Valeur courante de \$a: $v.\n"; } ?> Valeur courante de $a: 1. Valeur courante de $a: 2. Valeur courante de $a: 3. Valeur courante de $a: 17.

Foreach <?php $a = array ("un" => 1,"deux" => 2,"trois" => 3,"dix-sept" => 17 ); foreach($a as $k => $v) {     print "\$a[$k] => $v.\n"; } ?> $a[un] => 1. $a[deux] => 2. $a[trois] => 3. $a[dix-sept] => 17.

La récursivité Une fonction (procédure) récursive est une fonction (procédure) qui s’appelle elle-même, directement ou par l’intermédiaire d’une autre fonction ou procédure. Un problème difficile de la programmation récursive est de trouver la(les) bonne(s) condition(s) d’arrêt.

La récursivité Croisée Procedure recursive1 () DEBUT … Recursive2 () FIN Procedure recursive2 () recursive1 () Simple Procedure recursive () DEBUT … recursive () FIN

Exemple : calcul d’une factorielle n! = n*n-1*n-2*…*2*1 => fact(n) = n*fact(n-1) fact(5) = 5*fact(4) fact(4) = 4*fact(3) fact(3) = 3*fact(2) fact(2) = 2*fact(1) fact(1) = 1*fact(0) fact(0) = 1

Exemple : calcul d’une factorielle Version 1 : Fonction factorielle (n: entier) : entier DEBUT fact  n*factorielle(n-1) Retourne fact FIN Oui, mais quand est-ce que l’on s’arrête ?

Factorielle Version 2 Fonction factorielle (n: entier) : entier DEBUT Si n > 1 alors retourne n*factorielle(n-1) Sinon retourne n Fsi FIN Oui mais, et factorielle 0 ?

Factorielle Version 3 Fonction factorielle (n: entier) : entier DEBUT Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN

La récursivité Une fonction (procédure) récursive est une fonction (procédure) qui s’appelle elle-même, directement ou par l’intermédiaire d’une autre fonction ou procédure. Un problème difficile de la programmation récursive est de trouver la(les) bonne(s) condition(s) d’arrêt.

La récursivité Croisée Procedure recursive1 () DEBUT … Recursive2 () FIN Procedure recursive2 () recursive1 () Simple Procedure recursive () DEBUT … recursive () FIN

Exemple : calcul d’une factorielle n! = n*n-1*n-2*…*2*1 => fact(n) = n*fact(n-1) fact(5) = 5*fact(4) fact(4) = 4*fact(3) fact(3) = 3*fact(2) fact(2) = 2*fact(1) fact(1) = 1*fact(0) fact(0) = 1

Exemple : calcul d’une factorielle Version 1 : Fonction factorielle (n: entier) : entier DEBUT fact  n*factorielle(n-1) Retourne fact FIN Oui, mais quand est-ce que l’on s’arrête ?

Factorielle Version 2 Fonction factorielle (n: entier) : entier DEBUT Si n > 1 alors retourne n*factorielle(n-1) Sinon retourne n Fsi FIN Oui mais, et factorielle 0 ?

Factorielle Version 3 Fonction factorielle (n: entier) : entier DEBUT Si n = 0 Alors retourne 1 Sinon retourne n*fact(n-1) Fsi FIN

Factorielle en PHP <?php function factorielle($nbre) { if($nbre == 0) return 1; } else return $nbre*factorielle($nbre-1); echo factorielle(5); ?>