Programmation Impérative II

Slides:



Advertisements
Présentations similaires
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Advertisements

CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ? 2- Comment écrire des.
ALGORITHMES RECURSIFS
Récursivité.
Chapitre 6 Les traitements avancés
Méthodes de tri.
Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
Introduction à la notion de fonction 1. Organisation et gestion de données, fonctions 1.1. Notion de fonction ● Déterminer l'image d'un nombre par une.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
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.
UE2 - M22 Licence acoustique
Tableaux en C Mardi 2/05.
Semaine 8 Retour sur les tableaux : fonctions et récursivité
Exercice On considère un Système de contrôle de température composé de: Capteur, ordinateur Le capteur transmit à chaque heure de la journée la température.
Coloration de graphe, backtracking, branch and bound
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Allocation dynamique de mémoire
Détection des erreurs.
Algorithmique et programmation de modèles numériques
Cours 4 : Tris de Tableaux
Complément sur les pointeurs
L’Instruction de Test Alternatif
2°) Déterminez l’organigramme pour déterminer les diviseurs d’un nombre ( premier ou pas ). Méthode : on va …
Algorithme de Dichotomie
Les Instructions – Organigramme
Principes de programmation (suite)
Initiation à la programmation impérative et algorithmique
Tableaux à plusieurs dimensions en langage C
Algorithme de Dichotomie
Algorithmique & Langage C
VI. Tri par tas (Heap sort)
Semaine #4 INF130 par Frédérick Henri.
Information, Communication, Calcul
Équations - Inéquations
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Concepts de base de la programmation
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
M1103 : Structures de données et algorithmes fondamentaux
Exercice PHP DEUST TMIC
Entrées/Sorties - Variables - Calculs - Alternative
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
Chapitre 3 : Caractéristiques de tendance centrale
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
Efficacité des algorithmes
Lois de Probabilité Discrètes
Lois de Probabilité Discrètes
Langages de programmation TP11
De Scratch à Python : une transition douce… COMMUNICATION
Filière Génie Civil – 2018 Langage C Tableaux – Exercices de révision
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
MATHÉMATIQUES FINANCIÈRES I
Algorithme de tri - Tri à bulles
Reconnaissance de formes: lettres/chiffres
H. Wertz -- Exécution Symbolique
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
Recherche de zero d'une fonction MARMAD ANAS MPSI -2.
Programmation Scratch
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Tris Simples/Rapides.
Exercices récapitulatifs
Question 1 Pour afficher un tableau d’entiers tab en C :
Quelle est la valeur de S après exécution des instructions suivantes :
Chapter 11: Récursivité Java Software Solutions Second Edition
2°) Déterminez l’organigramme pour déterminer les diviseurs d’un nombre ( premier ou pas ). Méthode : on va …
Python Nicolas THIBAULT
PROGRAMMATION SOUS R. PRESENTE PAR : ACHETTOU ISMAIL LAARICH TARIQ ENCADRE PAR : Pr. EXPOSÉ SUR LA PROGRAMMATION SUR R 2.
Type Tableau Partie 1 : Vecteurs
Transcription de la présentation:

Programmation Impérative II Fonction récursive minh-anh.tran@u-pec.fr

Fonction récursive Récursivité Exemple: Factoriel Fonction récursive vs. Fonction itérative Algorithme de tri par sélection Recherche dichotomique

Récursivité Traitement récursif Faire un traitement identique sur des données différentes jusqu’à la condition de terminaison Fonction récursive fonction qui appelle elle-même si la condition de terminaison n’est pas vérifiée pas d’initialisation des variables locales initialisation et transmission des valeurs par l'intermédiaire des paramètres de la fonction

Exemple: Factoriel Calculer Fact(n) = 1*2*...*n Fonction récursive Fact(n)=Fact(n-1)*n si n >1 Fact(1)=1 Exemple: Factoriel Calculer Fact(n) = 1*2*...*n Fonction récursive int Fact (int i) { if (i == 1) return (1); else return (i * Fact (i-1)); } Premier appel dans le programme principal printf ("4! = %d\n", Fact (4));

Exemple: Factoriel Les appels pour Fact(4) Fonction récursive int Fact (int i) { if (i == 1) return (1); else return (i * Fact (i-1)); } Premier appel printf ("4! = %d\n", Fact (4)); Les appels pour Fact(4) 1- i=4 Fact(4) = 4*Fact(3) 4-return(4*6=24) dernière valeur retournée 2- i=3 Fact(3) = 3*Fact(2) 3-return(3*2=6) 3- i=2 Fact(2) = 2*Fact(1) 2- return(2*1=2) 4- i=1 condition de terminaison 1- return(1)

Fonction récursive vs. fonction itérative int Fact_iter (int N) { int j = 1, resultat = 1; while (j < N) { j++; resultat = resultat * j;} return (resultat); } phase d’initialisation: par les paramètres de fonction while : appels récursifs

Algorithme de tri par sélection Problème. Trier un tableau T de taille n: T[0], T[1], ... T[n-1] Tri par sélection On trouve le plus petit élément, on le place On continue avec le second plus petit, etc. Implémentation tri itératif tri récursif

Tri itératif par sélection void tri_select_iter (int T[], int n) { int i, j, k, aux; for (i=0; i<n-1; i++) k=i; for (j=i+1; j<=n-1; j++) if (T[j] < T[k]) {k = j;} } aux=T[i]; T[i]=T[k]; T[k]=aux; Pour un tableau T de taille n, trier tous ses éléments T[0], T[1], ... T[n-1] Trouver k: l'indice du plus petit élément d'entre T[i], T[i+1], ... T[n-1] Echanger T[i] et T[k]

Tri récursif par sélection void tri_select_rec (int i, int T[], int n) { int j, k, aux; if (i < n-1) k=i; for (j=i+1; j<=n-1; j++) if (T[j] <T[k]) { k=j; } } aux=T[i]; T[i]=T[k]; T[k]=aux; tri_select_rec (i+1, T, n); Pour un tableau T de taille n, trier les éléments suivants T[i], T[i+1], ... T[n-1] Trouver k: la position du plus petit élément d'entre T[i], T[i+1], ... T[n-1] Echanger T[i] et T[k] Appel récursif

Diviser pour Conquérir 1- Diviser le problème en sous-problèmes de taille plus petite 2- Trouver des solutions des sous-problèmes 3- Trouver la solution globale à partir des sous-solutions Il est possible de simplifier la solution de certains problèmes par cette approche

Recherche dichotomique Paramètres d’entrée : Tableau T (éléments sont ordonnés) T[0] < T[1] < ... < T[n] X: élément à chercher dans le tableau Sous-problème : chercher X dans le sous-tableau T[g] < T[g+1] < ... < T[d] g: indice du premier élément d: indice du dernier élément

Recherche dichotomique Dicho(T,g,d,X) si (g>d) alors X n’est pas dans T sinon Diviser le tableau T(g,d) en 2 T(g,m-1) et T(m+1,d) où m=(g+d)/2 si (X=T[m]) alors trouvé sinon si (X < T[m]) alors chercher dans le 1er sinon chercher dans le 2ème

int dicho (int T[], int g, int d, int X) {int m; if (g <= d) {m = (g+d)/2; if (X==T[m]) return (m); else if (X<T[m]) return (dicho(T,g,m-1,X)); else return (dicho(T,m+1,d,X)); } else return (-1); int main(void) {int T[6], i; for (i=0; i<=5; i++) scanf("%d",&T[i]); printf("%d\n", dicho(T,0,5,12));}

Mettre des parenthèses {} après chaque if else for while int dicho (int T[], int g, int d, int X) { int m; if (g <= d) m = (g + d) / 2; if (X == T[m]) return (m); } else if (X < T[m]) return (dicho(T, g, m-1, X)); return (dicho(T, m+1, d, X)); else return (-1); Une bonne habitude: Mettre des parenthèses {} après chaque if else for while même s'il y a une seule instruction qui suit Bien ! Pas bien !

Les appels pour un tableau de taille 6 g=0,d=5 m=2 g=0,d=1 m=0 g=3,d=5 m=4 g=0,d=-1 g=1,d=1 m=1 g=3,d=3 m=3 g=5,d=5 m=5 g=1,d=0 g=2,d=1 g=3,d=2 g=4,d=3 g=5,d=4 g=5,d=4

Recherche dichotomique Nombre de comparaisons (T[m]==X) dans le pire des cas si X n’est pas dans T Recherche dichotomique = 3 Recherche séquentielle = 5

Recherche dichotomique Nombre de comparaisons (T[m]==X) dans le pire des cas si X n’est pas dans T Ce nombre est de l'ordre log2(taille de X)