ASD 06/07 - Corrigé TD 7

Documents pareils
Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Programmation Objet - Cours II

CORRECTION EXERCICES ALGORITHME 1

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Génie Logiciel avec Ada. 4 février 2013

Cours de Programmation Impérative: Zones de mémoires et pointeurs

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

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

Correction TD Algorithmique 5.3 Pile Liste 5.3 Pile

alg - Classes, instances, objets [oo] Exercices résolus

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

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Correction TD algorithmique

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )

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

NOTATIONS PRÉLIMINAIRES

Cours d Informatique

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

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

TRIGONOMETRIE Algorithme : mesure principale

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

Théorie des Langages

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmique avec Algobox

Etude de fonctions: procédure et exemple

C++ - Classes, instances, objets [oo] Exercices résolus

Adama MBODJI MBODJ.SYSTEM

Quelques algorithmes simples dont l analyse n est pas si simple

Licence Sciences et Technologies Examen janvier 2010

Algorithmique et Programmation, IMA

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Sommaire. Structure. Liste simplement chaînée ALGORITHME ET STRUCTURES DE DONNÉES II

L exclusion mutuelle distribuée

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

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

Développements limités. Notion de développement limité

Les arbres binaires de recherche

Système binaire. Algèbre booléenne

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

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Algèbre binaire et Circuits logiques ( )

1 Recherche en table par balayage

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

Dérivation : Résumé de cours et méthodes

Agrégation des portefeuilles de contrats d assurance vie


Algorithmes récursifs

Calculer avec Sage. Revision : 417 du 1 er juillet 2010

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

La fonction exponentielle

Algorithmique et structures de données I

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Représentation des Nombres

Cours d algorithmique pour la classe de 2nde

Comparaison de fonctions Développements limités. Chapitre 10

Continuité et dérivabilité d une fonction

LA LETTRE DE MOTIVATION

Fonctions homographiques

Description des structures de donnees

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

4. Les structures de données statiques

Continuité en un point

Programmation avec Xcas ou Python

STAGE IREM 0- Premiers pas en Python

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Rappels sur les suites - Algorithme

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Introduction à MATLAB R

Questions d Entretiens en Finance de Marché Retour 2011/2012

CHAPITRE V SYSTEMES DIFFERENTIELS LINEAIRES A COEFFICIENTS CONSTANTS DU PREMIER ORDRE. EQUATIONS DIFFERENTIELLES.

Exercices sur les interfaces

Traduction des Langages : Le Compilateur Micro Java

Informatique Générale

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur

Développer, factoriser pour résoudre

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

TP Protocoles SMTP et POP3 avec Pratiquer l algorithmique

Polynômes à plusieurs variables. Résultant

Dérivation : cours. Dérivation dans R

Chapitre 3 Les régimes de fonctionnement de quelques circuits linéaires

Disque Dur Internet «Découverte» Guide d utilisation du service

EXERCICES - ANALYSE GÉNÉRALE

Travaux Dirigés n 1 : chaînes de caractères

Fonctions de deux variables. Mai 2011

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Les structures. Chapitre 3

ANICOTTE Guillaume GUFFROY Matthieu LIMA Juliette SALLOUH Chamsseddine CAHIER DES CHARGES SI 28

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Programmation C. Apprendre à développer des programmes simples dans le langage C

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

Algorithme. Table des matières

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

CAPTURE DES PROFESSIONNELS

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Repérage d un point - Vitesse et

Transcription:

ASD 06/07 - Corrigé TD 7 Exercice 7.1 La fonction f transforme son paramètre, la liste L, en inversant tous les liens (le maillon précédent devient maillon suivant et donc le premier maillon devient le dernier) : f renverse la liste L. La fonction f appelle une fonction récursive, f_aux à deux paramètres : L1 est la partie de la liste déjà inversée, L2 est la partie de la liste qui reste à inverser. Algorithme itératif : On peut reprendre l algorithme récursif et le dérécursiviser. On utilise exprès les mêmes idéntificateurs de variables pour metter en évidence les liens avec la version récursive : à tout instant L2 est la partie de la liste qui reste à inverser (c est donc le paramètre), L1 est la partie de la liste déjà inversée, L sert à pointer sur la suite de L2 quand on ajoute à la liste L1 le maillon en tête de liste pointé par L2. fonction renverse_iter(val L2: ListedEntiers): ListedEntiers; var L1,L: ListedEntiers; L1:= NIL; tantque Non(ListeVide?(L2)) faire: L:= L2^.Sv; L2^.Sv:= L1; L1:= L2; L2:= L; fintanque; retourner L1; Remarquer que la première affectation et les deux dernières dans la boucle on les retrouve en tant que passage de paramètres dans la version récursive. Remarquer aussi que le test devient une boucle. 1

Exercice 7.2 1. La procédure concatène les deux listes à l adresse de la première (par exemple). procédure concatener(réf L1,L2: ListedeE); var tmp: ListedeE; tmp:= L1^.Sv; L1^.Sv:= L2^.Sv; L2^.Sv:= tmp; L1:= L2; L2:= NIL Remarque : complexité constante au lieu que proportionnelle à la longueur de la première liste dans le cas où elles ne seraient pas circulaires. 2. Primitives de pile : procédure Empiler(réf P: PileDeE, x:e); niou(q); q^.info:= x; si PileVide?(P) alors q^.sv:= q; P:= q; q^.sv:= P^.Sv; P^.Sv:= q; procédure Dépiler(réf P: PileDeE); q:= P^.Sv; si P^.Sv = P alors // il y a un seul élément P:= NIL; P^.Sv:= q^.sv; // P pointe toujours sur le fond de la Pile 2

fonction Valeur(val P: PileDeE): E; retourner((p^.sv)^.info); fonction PileVide?(val P: PileDeE): booléen; retourner(p = NIL); procédure ViderPile(réf P: PileDeE); q:= P^.Sv; tantque P^.Sv <> P faire: P^.Sv:= q^.sv; q:= P^.Sv; fintantque; P:= NIL; Primitives de file : procédure Enfiler(réf F: FileDeE, x:e); niou(q); q^.info:= x; si FileVide?(F) alors q^.sv:= q; F:= q; q^.sv:= F^.Sv; F^.Sv:= q; F:= q; // F pointe toujours sur la queue de la file 3

procédure Défiler(réf F: FileDeE); q:= F^.Sv; si F^.Sv = F alors // il y a un seul élément F:= NIL; F^.Sv:= q^.sv; fonction Valeur(val F: FileDeE): E; retourner((f^.sv)^.info); fonction FileVide?(val F: FileDeE): booléen; retourner(f = NIL); procédure ViderFile(réf F: FileDeE); q:= F^.Sv; tantque F^.Sv <> F faire: F^.Sv:= q^.sv; q:= F^.Sv; fintantque; F:= NIL; Remarques : Toutes les primitives ont compléxité constante, toutefois ces implémentations de Pile et File ne sont pas meilleures que celles avec tableaux sauf pour la possibilité d augmentation de la taille. Les primitives ont pratiquement le même code, sauf Empiler et Enfiler puisque dans la première le pointeur indique l élément le plus ancien (fond de la pile), dans la deuxième le pointeur indique l élément le plus recent (queue de la file) : ce choix permet d accéder en temps constant aux éléments à dépiler et défiler respectivement. 4

Exercice 7.3 Dans cet exercice on définit : type mon^ome = enreg Coef: réel; Exp: entier; Sv: ^mon^ome; finenreg; polyn^ome= ^mon^ome; On suppose que les monômes sont chaînés dans un ordre établi (croissant ou décroissant). On ne se pose pas la question de la normalisation des résultats, c.a.d. de l élimination des monômes nuls : c est plus simple d écrire une fonction de normalisation plutôt que d alourdir le code pour essayer de produire des polynômes résultats déjà normalisés. 1. Somme : on a intêret à écrire une fonction récursive qui retourne le polynôme résultat (l algorithme itératif demande de traiter à part le cas du premier élément, ce qui donne une duplication de code lourde). fonction somme(val P1: polyn^ome, val P2: polyn^ome): polyn^ome; var p:^mon^ome; si(p1=nil et P2=NIL) alors retourner nil; niou (p); si(p1!=nil et (P2=NIL ou (P2!=NIL et P1^.Exp>P2^.Exp))) alors p^.coef:=p1.coef; p^.exp:=p1.exp; p^.sv:=somme(p1^.sv, P2); retourne p; si(p2!=nil et (P1=NIL ou (P1!=NIL et P1^.Exp<P2^.Exp))) alors p^.coef:=p2.coef; p^.exp:=p2.exp; p^.sv:=somme(p1, P2^.Sv); retourne p; p^.coef:=p1.coef+p2.coef; p^.exp:=p1.exp; p^.sv:=somme(p1^.sv, P2^.Sv); retourne p; 5

2. Dérivée (on s inspire de copier_liste_rec) : fonction dérivée(val P: polyn^ome): polyn^ome; si P <> NIL alors retourne dérivée_aux(p); erreur; // par exemple...ou bien test avant appel fonction dérivée_aux(val P: polyn^ome): polyn^ome; var d:^mon^ome; si P <> NIL alors niou(d); d^.coef:= P^.Coef * P^.Exp; d^.exp:= P^.Exp - 1; d^.sv:= dérivée_aux(p^.sv); retourne(d); retourne NIL; 6