Les structures de données. Rajae El Ouazzani



Documents pareils
Les structures de données. Rajae El Ouazzani


Initiation à la programmation en Python

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Représentation d un entier en base b

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Algorithmique et Programmation, IMA

V- Manipulations de nombres en binaire

Java Licence Professionnelle CISII,

Bases de programmation. Cours 5. Structurer les données

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

4. Les structures de données statiques

Rappels sur les suites - Algorithme

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Chap III : Les tableaux

Programmation C++ (débutant)/instructions for, while et do...while

I. Introduction aux fonctions : les fonctions standards

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Initiation à l algorithmique

Algorithmique avec Algobox

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique et de Langage C v 3.0

Algorithme. Table des matières

Cours Programmation Système

TD3: tableaux avancées, première classe et chaînes

Programme Compte bancaire (code)

Programmation en langage C

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Cours d initiation à la programmation en C++ Johann Cuenin

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Cours d Informatique

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours d algorithmique pour la classe de 2nde

Programmation Classique en langage C

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

STAGE IREM 0- Premiers pas en Python

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Licence Sciences et Technologies Examen janvier 2010

1. Structure d'un programme FORTRAN 95

Introduction au langage C

ACTIVITÉ DE PROGRAMMATION

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Plan du cours. Historique du langage Nouveautés de Java 7

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

1 Recherche en table par balayage

Cours 1 : La compilation

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation avec Xcas ou Python

Claude Delannoy. 3 e édition C++

Initiation. àl algorithmique et à la programmation. en C

Initiation à LabView : Les exemples d applications :

Solutions du chapitre 4

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Définitions. Numéro à préciser. (Durée : )

Présentation du langage et premières fonctions

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Architecture des ordinateurs

Le langage C. Séance n 4

Cours de Systèmes d Exploitation

Algorithmique avec Algobox

TP 1. Prise en main du langage Python

Notions fondamentales du langage C# Version 1.0

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Corrigé des TD 1 à 5

Organigramme / Algorigramme Dossier élève 1 SI

Cours Informatique Master STEP

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Adama MBODJI MBODJ.SYSTEM

Langage Éric Guérin 5 octobre 2010

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Algorithmique et Programmation Fonctionnelle

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Introduction à MATLAB R

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Programmer en JAVA. par Tama

Logiciel de base. Première année ENSIMAG

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Conventions d écriture et outils de mise au point

Projet de programmation (IK3) : TP n 1 Correction

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Feuille TD n 1 Exercices d algorithmique éléments de correction

Les arbres binaires de recherche

Transcription:

Les structures de données Rajae El Ouazzani

La récursivité 2

Définition Une procédure ou une fonction est dite récursive si elle fait appel à elle même, directement ou indirectement. 3

Exemple : Réalisation de la récursivité? procedure RECURSIVE(PARAMÈTRES) Début Si TEST_D'ARRET alors Début instructions en cas d'arrêt Fin Sinon Début instructions RECURSIVE(PARAMÈTRES CHANGÉS) // appel récursif instructions Fin FinSi Fin 4

Remarque On constate que les paramètres de l'appel récursif doivent changer. En effet, à chaque appel, l'ordinateur stocke les variables locales; le fait de ne rien changer dans les paramètres ferait que l'ordinateur effectuerait un appel infini à cette procédure. 5

Appel récursif --> Boucle Pour éviter les boucles infinies, les appels récursifs doivent être conditionnels (à l'intérieur d'un SI ou un SINON ou un Tant Que, etc). Exemple de la fonction factorielle: n!= n*(n-1)*(n-2)* *1 pour n>0 et 0!=1 Ou bien: n!= n*(n-1)! pour n>0 et n!=1 pour n=0 6

Exercice Ecrire l algorithme itératif de la fonction qui calcule le factoriel d un entier n. Traduire l algorithme en langage C 7

Algorithme La fonction itérative est donnée cidessous : La fonction récursive suivante : fonction fact(n: entier): entier var i, f: entier début f := 1 pour i := 1 à n faire f: = f * i finpour renvoyer f fin; fonction fact(n: entier): entier var f: entier début f:=0 si n = 1 alors f := 1 // test d arrêt sinon f := n * fact(n - 1) // cas général fsi renvoyer f fin 8

Traduction en Langage C La fonction itérative est donnée cidessous : #include<stdio.h> la fonction récursive suivante : #include<stdio.h> int fact_iter(int n){ int i, f; f = 1; for(i = 1; i<=n; i++) f = f * i; return f; } int fact_recu(int n){ int i, f=0; if(n == 1) f = 1; else f = n * fact(n-1); return f; } 9

Traduction en Langage C La programme principale int main(){ int n, factoriel; printf("entrer un entier "); scanf("%d",&n); factoriel=fact_iter(n); factoriel=fact_recu(n); printf("%d", factoriel); getchar(); return 0; } 10

Explications Déroulement de l algorithme pour n=4 : D abord, on compare n au test d arrêt. 1-4! = 4 * 3! 2-3! = 3 * 2! 3-2! = 2 * 1! 4-1! = 1 (cas particulier) Faire un retour en arrière pour calculer 4! fonction fact(n: entier): entier var f: entier début f:=0 si n = 1 alors f := 1 sinon f := n * fact(n 1) fsi renvoyer f fin L'exécution i attend la terminaison de l'exécution i-1 pour continuer son traitement. 11

Exemple de la fonction Fibonacci U 0 = 1, U 1 = 1, U n = U n-1 + U n-2 pour n > 1 fonction Fib( n:entier ):entier int f=0; Début: SI n < 2 f := 1 SINON f := Fib( n-1 ) + Fib( n-2 ) FSI returner f; Fin 12

Exercice Traduire l algorithme en C 13

Traduction de la fonction Fibonacci en C #include<stdio.h> int fib(int n){ int f=0; if(n < 2) f = 1; else f=fib(n-1)+ fib(n-2); return f;} int main(){ int n, fibonacci; printf("entrer un entier "); scanf("%d",&n); fibonacci=fib(n); printf("%d", fibonacci); getchar(); getchar(); return 0; } 14

Exercice Appliquer l algorithme sur l exemple suivant: Fib(4) 15

Déroulement de la fonction : 16

Remarques: Dans un module récursif (procédure ou fonction), les paramètres doivent être clairement spécifiés. Dans le corps du module, il doit y avoir: un ou plusieurs cas particuliers: ce sont les cas simples qui ne nécessitent pas d'appels récursifs. un ou plusieurs cas généraux: ce sont les cas complexes qui sont résolus par des appels récursifs. L'appel récursif d'un cas général doit toujours mener vers un des cas particuliers. 17

Exercice Soit la procédure suivante, qui affiche bonjour n fois. Ecrire cette procédure en C Transformer cette procédure itérative en une procédure récursive. Ecrire la procédure récursive en C procedure compter_iter ( n:entier) var i: entier début pour i := 1 à n faire Ecrire(" bonjour ") finpour fin 18

Transformer une fonction itérative en une fonction récursive Soit la procédure suivante : Cette procédure peut être traduite en une procédure récursive, qui admet un paramètre: procedure compter_iter(n:entier) var i: entier début pour i := 1 à n faire Ecrire(" bonjour ") finpour fin procedure compter_recu(n: entier) Début // test d arrêt: n<=0 si n> 0 alors début Ecrire(" bonjour "); compter(n-1); fin finsi fin 19

Traduction en langage C Version itérative: Version récursive void compter(int n) { int i; for (i = 0 ; i< n; i++) printf(" bonjour "); } int main(){ int n; printf("entrer un entier "); scanf("%d",&n); compter(n); return 0; } void compter(int n) { // test d arrêt: n<=0 if (n>0) { printf(" bonjour "); compter(n-1); //boucle de n à 1 } } 20

Exercice Soit la procédure suivante: Traduire la procédure en C Traduisez la boucle a en une procédure récursive. procedure affiche var a, b: entier début pour a := 0 à 3 faire pour b := 0 à 9 faire Ecrire( a * 10 + b) finpour finpour fin 21

Solution procedure affiche var a, b: entier début pour a := 0 à 3 faire pour b := 0 à 9 faire Ecrire( a * 10 + b) finpour finpour fin void affiche() { int a,b; for(a=0 ;a<=3; a++) for(b = 0; b<=9; b++) printf("%d\t", a * 10 + b); printf("\n"); } int main(){ int n; affiche(); return 0; } 22

On supprime la boucle de a comme suit: procedure affiche(a: entier) var b: entier debut si a < 4 et a>=0 alors // Ajouter une condition debut pour b := 0 à 9 faire Ecrire( a * 10 + b) affiche(a - 1); // Appel récursif de affiche avec a en paramètre finpour fin finsi fin 23

Exercice Traduire la procédure en C 24

Traduction de la procédure en C: void affiche(int a) { int b; if(a<4&& a>=0) { for(b = 0; b<=9; b++) printf("%d\t", a * 10 + b); affiche(a-1); } } 25

Exercice Donner le résultat affiché par cette fonction 26

Exercice Ecrire une procédure qui convertit un décimal en binaire Traduire la procédure en C 27

Exemple Une procédure itérative qui permet d'afficher la valeur binaire d'un entier n: Procédure binaire_iter(n : entier ) Var valeur, x, i, reste : entier Var tableau tab (15) d entiers Début Reste:=0 x:=0 // l indice de la première case de tab Tant que (n > 0) faire // sortir de la boucle si le quotient n<=0 reste := n mod 2 tab[x] := reste; // sauvegarder les restes dans un tableau tab x:=x+1 n := n/2; Fin tant que pour i allant de x à 0 avec un pas de -1 écrire (tab[i]) // affichage des valeurs de tab avec une boucle décroissante Finpour Fin 28

Traduction en LC void binaire_iter(int n) { int valeur, i, x=0, reste=0,tab[15]; while (n > 0) { reste = n%2 ; tab[x] = reste; x++; n = n/2; } for(i=x;i--;i>0) { printf("%d",tab[i]); } } 29

Exercice Ecrire une procédure récursive correspondante Traduire la procédure en C 30

La procédure binaire_recu correspondante binaire_recu est une procédure récursive qui permet d'afficher la valeur binaire d'un entier n. Procédure binaire_recu (n : entier ) Var reste: entier Début Si (n<=0) alors sortir // test d arrêt Sinon // n>0 { reste= n mod 2 binaire (n/2) // Appel récursif écrire ( reste ) } // Affichage des restes en commençant pas le dernier reste Finsi Fin 31

Traduction de binaire_recu en L C void binaire(int n) { int reste; if (n<=0) { printf("\n le binaire équivalent est :"); return; } reste = n % 2; binaire(n/2); printf("%d", reste); } 32

Conclusion: Schéma général d'une décomposition récursive 33