ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

La Méthode de Simplexe Standardisation
GEF 243B Programmation informatique appliquée
Tris.
Initiation à la programmation et algorithmique cours 4
Portée des variables VBA & Excel
Fonctions & procédures
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
DECLARATION DE VARIABLES
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
ARITHMETIQUE Bernard Izard 3° Avon PG I - DIVISEURS
Exercices Algorithmiques
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
5. Les structures répétitives
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
Principes de programmation (suite)
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
8PRO100 Éléments de programmation Comment faire prendre une décision à un ordinateur?
Methode de Tri efficace
Nombres entiers. Ensembles de nombres
Définition d’un maillon de liste
Base de programmation Script unity en c#.
Test bilan de calcul mental N°1 :
Racines carrées 1) Racine carrée d’un nombre positif
Algorithme de Bellman-Ford
Introduction à l’algorithmique
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
Daniel Amyot et Alan Williams
STRUCTURES DE DONNÉES Maxime CROCHEMORE
8PRO107 Éléments de programmation
ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot.
Les Algorithmes de Tri Introduction Tri par Sélection
Parcours d'une séquence de longueur fixe
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Programmation linéaire en nombres entiers : les méthodes de troncature
III. Récursivité Principe et exemples
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Mise en forme en Mathématiques
Python Fonction et procédure
Animateur : Med HAIJOUBI
Un peu de maths (et d’info)
Algo-Prog en Ada TD1 2 MIC Romaric GUILLERM
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Eléments d’arithmétique dans l’ensemble des naturels
Arithmétique Classe 3e.
Algorithmique Les structures Rappel L'enchaînement séquentiel
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
Septembre Semaines du 2 au 13 septembre DATECOURSEXERCICESEXERCICES à fairePOUR le Jeudi 5 Vendredi 6 Lundi 9 Prise de contacts. Programme ISN. Déroulement.
LES PILES ET FILES.
Cela signifie encore que n divise toute expression de la forme ka + k’b où k et k’ sont des entiers. Exemple: 7 divise 14 et 21 donc il divise ,par.
Architecture Chapitre 4 Interruptions. 2 Plan Principe Schéma d’acquisition Les états d’une interruption Décentralisation des interruptions Exemples.
Université de Sherbrooke
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmique et programmation (1)‏
ITI Lab # 11 Adapté de versions antérieures créées par: Daniel Amyot et Alan Williams.
Pour les boucles FOR on a fait intervenir la boucles TANT QUE équivalentes dont on connaît calculer le temps d’exécution. Toutes le procédures de comptage.
Introduction à la programmation (420-PK2-SL) cours 13 Gestion des applications Technologie de l’information (LEA.BW)
ITI1520 Lab #9 - Matrices Adapté de versions antérieures créées par Romelia Plesa, Sylvia Boyd, Alan Williams, Diana Inkpen, Daniel Amyot, Gilbert Arbez,
Introduction à la programmation (420-PK2-SL) cours 18 Gestion des applications Technologie de l’information (LEA.BW)
Algorithmique Tableaux de données
Algorithmique Boucles et Itérations
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Transcription de la présentation:

ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams

Objectifs Récursivité 2 exemples simples (pour rafraîchir votre mémoire) 3 exercices algorithmiques et de programmation

Récursivité – Exemple simple Écrivez un algorithme récursif qui compte le nombre de chiffres dans un nombre entier non-négatif N. Exemple: si N = 34567, alors le résultat est 5. Si N = 1234567890, alors le résultat est 10.

Récursivité – Algorithme DONNÉE: N (un nombre entier non-négatif) INTERMÉDIAIRE: ResteDeChiffres (chiffres restants) RÉSULTAT: Compteur (nombre de chiffres dans N) EN-TÊTE: Compteur  NombreDeChiffres(N)

Récursivité – Algorithme - Suite MODULE: ResteDeChiffres = N / 10 ResteDeChiffres = 0 ? vrai faux Compteur  NombreDeChiffres(ResteDeChiffres) Compteur  Compteur + 1 Compteur  1

Trace pour N = 254 Ligne N ResteDe Chiffres Comp-teur Valeurs initiales 254 ? (1) ResteDeChiffres = N / 10 25 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) (4) Compteur  Compteur + 1

Trace, page 2 Compteur  NombreDeChiffres(ResteDeChiffres) Compteur  NombreDeChiffres(N) 25 Ligne N ResteDe Chiffres Comp-teur Valeurs initiales 25 ? (1) ResteDeChiffres = N / 10 2 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) (4) Compteur  Compteur + 1

Trace , page 3 Compteur  NombreDeChiffres(ResteDeChiffres) Compteur  NombreDeChiffres(N) 1 2 Ligne N ResteDe Chiffres Compteur Valeurs initiales 2 ? (1) ResteDeChiffres = N/10 (2) ResteDeChiffres = 0 ? vrai (5) Compteur  1 1

Trace , page 2 Compteur  NombreDeChiffres(ResteDeChiffres) Compteur  NombreDeChiffres(N) 2 25 Ligne N ResteDe Chiffres Comp-teur Valeurs initiales 25 ? (1) ResteDeChiffres = N / 10 2 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) 1 (4) Compteur  Compteur + 1

Trace, page 1 Ligne N ResteDe Chiffres Compteur Valeurs initiales 254 ? (1) ResteDeChiffres = N / 10 25 (2) ResteDeChiffres = 0 ? faux (3) Appel Compteur  NombreDeChiffres(ResteDeChiffres) 2 (4) Compteur  Compteur + 1 3

Regardons comment le code fourni fonctionne Voir CompteChiffres.java L’implémentation Java de cet algorithme a été augmentée avec des instructions d’affichage pour indiquer où nous entrons/sortons d’une invocation, et pour tracer la valeur locale de n): Immédiatement après la variable locale des déclarations 1: Entrant la méthode avec n = … Juste avant l’appel de la méthode récursive: 2: Appel récursif venant de n = … Juste après l’appel de la méthode récursive: 3: Revenant d’un appel récursif avec n = … Juste avant la commande “return” 4: Retournant de la méthode avec n = …, compteur = … Dans le cas de base 5: Cas de base avec n = …

2e exemple simple Écrivez un algorithme récursif qui vérifie si un tableau d’entier A est trié en ordre croissant. Note: croissant est différent de strictement croissant (où deux éléments ne peuvent pas être égaux) La taille de A est supérieure ou égale à 2. Exemples: A = {3, 6, 8, 5, 9}: Faux A = {4, 5, 6, 6, 9, 14}: Vrai

2e exemple - solution DONNÉES: A (tableau d’entiers) N (taille du tableau A) RÉSULTAT: Trié (Booléen: vrai si A est trié) INTERMÉDIAIRE: TriéPetit (Booléen: vrai si un A plus petit est trié) EN-TÊTE: Trié  VérifieTrié(A,N) HYPOTHÈSE: N  2

2e exemple – solution simple MODULE: N = 2? faux vrai Cas de base… TriéPetit  VérifieTrié(A, N-1) Trié  TriéPetit ET (A[N-2]  A[N-1]) Trié  A[0]  A[1]

2e exemple – solution efficace Plus besoin de se rendre à A[0] si on remarque auparavant que A n’est pas trié! On arrête avant de faire l’invocation récursive… MODULE: A[N–2]  A[N–1] ? faux vrai N = 2 ? Trié  Faux vrai faux Trié  VérifieTrié(A, N-1) Trié  Vrai

Exemple 2 – Programme Java Voir TableauTrier.java Examinez la traduction de l’algorithme au Java, exécutez et tester. Insérez des appels System.out.println pour tracer l’exécution de la méthode récursive.

Exercice #1 Écrivez un algorithme récursif pour vérifier si tous les caractères aux positions 0...N d’un tableau de caractères (A) sont des chiffres. Hypothèse: la taille de A est plus grande que N. Commencez avec le document Word Lab8Ex1.doc pour développez votre algorithme. Notez que l’algorithme Principal vous est fourni. Traduisez votre algorithme au Java Un programme partiel vous est fourni – VerifieChiffre.java.

Exercice #2 Écrivez un algorithme récursif pour créer un tableau contenant les valeurs de 0 à N-1. Commencez avec le document Word Lab8Ex2.doc pour développez votre algorithme. Notez que l’algorithme Principal vous est fourni. Traduisez votre algorithme au Java Un programme partiel vous est fourni – CreerTableau.java. Indice: Vous aurez parfois besoin de 2 algorithmes: Un premier algorithme pour faire une initialisation et démarrer la récursivité en invoquant le second algorithme Un second algorithme, qui lui est récursif et qui fait le gros du travail.

Exercice #3 – Algorithme d’Euclide Le Plus Grand Commun Diviseur (PGCD) de deux nombres entiers est le plus grand entier qui divise les deux nombres avec un restant de 0. L’algorithme d’Euclid pour trouver le PGCD de x et y est: pgcd(x,y) est … y si x ≥ y et x mod y est 0 pgcd(y, x) si x < y pgcd(y, x mod y) autrement Si on assure que x ≥ y, alors l’algorithme devient pgcd(x, y) est … y si x mod y est 0 pgcd(y, x mod y) autrement

Exercice #3 – Algorithme d’Euclide L’algorithme récursif pour notre logiciel devient: M  Max(x, y) (doit développer l’algorithme Max) N  x + y – M (donc, le minimum de x et y) Cas de base: M MOD N = 0  le résultat est N Cas récursif: Réduction: M  M MOD N Récursivité: ResPartiel  PGCD(N, M) Résultat: ResPartiel Question: est-ce que l’algorithme atteint toujours le cas de base: Notez que M MOD N est au plus N-1.

Exercice #3 - Algorithme d’Euclide Écrivez un algorithme récursif pour trouver le Plus Grand Commun Diviseur (PGCD) de deux nombres x et y. Commencez avec le fichier Word Lab8Ex3.doc Notez que vous devez développez 2 algorithmes, un pour Max et un pour CalcPGCD Vous n’avez PAS à développer un algorithme principal. Traduisez vos algorithmes au Java Créez la class Euclide et traduisez les deux algorithmes à des méthodes Java Testez les méthodes avec l’onglet Interaction du Dr Java pour appeler la méthode calcPGCD. Euclide.calcPGCD(1234,4321) Euclide.calcPGCD(8192,192)