Algorithmique avancée et programmation C Exercices de TD avec solutions. N. Delestre
|
|
|
- Patrice Lapierre
- il y a 9 ans
- Total affichages :
Transcription
1 Algorithmique avancée et programmation C Exercices de TD avec solutions N. Delestre
2 2
3 Table des matières 1 Rappels : chaîne de caractères, itérations, conditionnelles estunprefixe Palindrome Position d une sous-chaîne Racine carrée d un nombre : recherche par dichotomie Rappels : les tableaux Plus petit élément Sous-séquences croissantes Recherche dichotomique Lissage de courbe Rappels : récursivité Palindrome Puissance d un nombre Recherche du zéro d une fonction par dichotomie Dessin récursif Inversion d un tableau Représentation d un naturel Analyse Conception préliminaire Conception détaillée Calculatrice Analyse Conception préliminaire Conception détaillée Un peu de géométrie Le TAD Point2D Polyligne Analyse Conception préliminaire Conception détaillée Utilisation d une polyligne Point à l intérieur Surface d une polyligne par la méthode de monté-carlo
4 4 TABLE DES MATIÈRES 7 Tri par tas Qu est ce qu un tas? Fonction estuntas Procédure fairedescendre Procédure tamiser Procédure trierpartas Sudoku Conception préliminaire Conception détaillée Fonctions métiers Liste SDD ListeChainee Type et signatures de fonction et procédure Utilisation Conception détaillée d une liste ordonnée d entiers à l aide d une liste chainée Utilisation : Liste ordonnée d entiers Arbre Binaire de Recherche (ABR) Conception préliminaire et utilisation d un ABR Une conception détaillée : ABR Arbres AVL Graphes Le labyrinthe Partie publique Partie privée Skynet d après Codingame c Un arbre recouvrant minimal Le chemin le plus court Skynet le virus Programmation dynamique L algorithme de Floyd-Warshall La distance de Levenshtein Calcul sur un exemple Algorithme
5 Chapitre 1 Rappels : chaîne de caractères, itérations, conditionnelles Pour certains de ces exercices on considère que l on possède les fonctions suivantes : fonction longueur (unechaine : Chaine de caracteres) : Naturel fonction iemecaractere (unechaine : Chaine de caracteres, iemeplace : Naturel) : Caractere précondition(s) 0 < iemep lace et iemep lace longueur(unechaine) 1.1 estunprefixe Proposez la fonction estunprefixe qui permet de savoir si une première chaîne de caractères est préfixe d une deuxième chaîne de caractères (par exemple pré est un préfixe de prédire ). Objectifs pédagogiques de l exercice : utiliser des identifiants significatifs (pas ch1, ch2) savoir choisir la bonne itération fonction estunprefixe (leprefixepotentiel,unechaine : Chaine de caracteres) : Booleen Déclaration i : NaturelNonNul resultat : Booleen si longueur(leprefixepotentiel)>longueur(unechaine) alors retourner FAUX i 1 resultat VRAI tant que resultat et i longueur(leprefixepotentiel) faire si iemecaractere(unechaine,i)=iemecaractere(leprefixepotentiel,i) alors i i+1 resultat FAUX si tantque 5
6 6 CHAPITRE 1. RAPPELS : CHAÎNE DE CARACTÈRES, ITÉRATIONS, CONDITIONNELLES retourner resultat si 1.2 Palindrome Une chaîne de caractères est un palindrome si la lecture de gauche à droite et de droite à gauche est identique. Par exemple radar, été, rotor, etc. La chaîne de caractères vide est considérée comme étant un palindrome Écrire une fonction qui permet de savoir si une chaîne est un palindrome. Objectifs pédagogiques de l exercice : savoir choisir la bonne itération fonction estunpalindrome (ch : Chaine de caracteres) : Booleen Déclaration g,d : NaturelNonNul resultat : Booleen si longueur(ch)=0 alors retourner VRAI resultat VRAI g 1 d longueur(ch) tant que resultat et g<d faire si iemecaractere(ch,g) = iemecaractere(ch,d) alors g g+1 d d-1 resultat FAUX si tantque retourner resultat si 1.3 Position d une sous-chaîne Soit l analyse descendante présentée par la figure 1.1 qui permet de rechercher la position d une chaîne de caractères dans une autre chaîne indépendemment de la casse (d où le suffixe IC à l opération positionsouschaineic), c est-à-dire que l on ne fait pas de distinction entre majuscule et minuscule. Pour résoudre ce problème il faut pouvoir : obtenir la longueur d une chaîne de caractères ; obtenir la sous-chaîne d une chaîne en précisant l indice de départ de cette sous-chaîne et sa longueur (le premier caractère d une sous-chaîne à l indice 1) ;
7 1.3. POSITION D UNE SOUS-CHAÎNE 7 positionsouschaineic longueur sontegalesic souschaine iemecaractere minuscule FIGURE 1.1 Une analyse descendante savoir si deux chaînes de caractères sont égales indépendemment de la casse. L opération positionsouschaineic retournera la première position de la chaîne recherchée dans la chaîne si cette première est présente, 0. Par exemple : positionsouschaineic("abcdefgh","cde") retournera la valeur 3 ; positionsouschaineic("abcdefgh","abc") retournera la valeur 1 ; positionsouschaineic("abcdefgh","xyz") retournera la valeur Complétez l analyse descendante en précisant les types de données en entrée et en sortie. 2. Donnez les signatures complètes (avec préconditions si nécessaire) des sous-programmes (fonctions ou procédures) correspondant aux opérations de l analyse descendante. 3. Donnez l algorithme du sous-programme correspondant à l opération positionsouschaineic et souschaine Objectifs pédagogiques de l exercice : savoir interpréter une analyse descendante savoir identifier les préconditions Chaîne de caractères Chaîne de caractères positionsouschaineic Naturel Chaîne de caractères longueur Naturel Chaîne de caractères Chaîne de caractères sontegalesic Booléen Chaîne de caractères NaturelNonNul Naturel souschaine Chaîne de caractères Chaîne de caractères NaturelNonNul iemecaractere Caractere Caractère minuscule Caractère Note : minuscule est sur les caractères et non chaîne de caractères il y aurait une autre sous boite...
8 8 CHAPITRE 1. RAPPELS : CHAÎNE DE CARACTÈRES, ITÉRATIONS, CONDITIONNELLES fonction positionsouschaineic (chaine, chainearechercher : Chaine de caracteres) : Naturel précondition(s) longueur(chainearechercher) longueur(chaine)) fonction longueur (chaine : Chaine de caracteres) : Naturel fonction souschaine (chaine : Chaine de caracteres, position : NaturelNonNul, long : Naturel) : Chaine de caracteres précondition(s) position+long longueur(chaine) fonction sontegalesic (chaine1, chaine2 : Chaine de caracteres) : Booleen fonction minuscule (c : Caractere) : Caractere fonction positionsouschaineic (chaine, chainearechercher : Chaine de caracteres) : Naturel précondition(s) longueur(chainearechercher) longueur(chaine)) Déclaration i : Naturel i 1 tant que i+longueur(chainearechercher)+1 longueur(chaine) et non sontegalesic(souschaine(chaine,i, longueur(chainearechercher)),chainearechercher) faire i i+1 tantque si i+longueur(chainearechercher)>longueur(chaine)+1 alors i 0 si retourner i fonction souschaine (chaine : Chaine de caracteres, position : NaturelNonNul, long : Naturel) : Chaine de caracteres précondition(s) long longueur(chaine)-position+1 Déclaration resultat : Chaine de caracteres ; i : Naturel resultat pour i 0 à long-1 faire resultat resultat + iemecaractere(chaine,pos+i) pour retourner resultat 1.4 Racine carrée d un nombre : recherche par dichotomie L objectif de cet exercice est de rechercher une valeur approchée de la racine carrée d un nombre réel positif x (x 1) à ɛ près à l aide d un algorithme dichotomique. Pour rappel : La dichotomie ( couper en deux en grec) est, en algorithmique, un processus itératif [..] de recherche où, à chaque étape, on coupe en deux parties (pas forcément égales) un espace de recherche qui devient restreint à l une de ces deux parties. On suppose bien sûr qu il existe un test relativement simple permettant à chaque étape de déterminer l une des deux parties dans laquelle se trouve une solution. Pour optimiser le nombre
9 1.4. RACINE CARRÉE D UN NOMBRE : RECHERCHE PAR DICHOTOMIE 9 d itérations nécessaires, on s arrangera pour choisir à chaque étape deux parties sensiblement de la même taille (pour un concept de taille approprié au problème), le nombre total d itérations nécessaires à la complétion de l algorithme étant alors logarithmique en la taille totale du problème initial. (wikipédia). 1. Déir l espace de recherche pour le problème de la recherche d une racine carrée. 2. Quelle condition booléenne permet de savoir si il doit y avoir une nouvelle itération? 3. Quel test va vous permettre de savoir dans laquelle des deux parties se trouve la solution? 4. Proposez l algorithme de la fonction suivante (on suppose que x et epsilon sont positifs et que x est supérieur ou égal à 1) : fonction racinecarree (n,epsilon : ReelPositif) : ReelPositif 5. Quelle est la complexité de votre algorithme? Objectifs pédagogiques de l exercice : savoir écrire un algorithme dichotomique sur un intervalle continue savoir calculer la complexité d un algorithme dichotomique fonction racinecarree (n,epsilon : ReelPositif) : ReelPositif Déclaration a,b,m : ReelPositif a 0 b n tant que b-a>epsilon faire m (a+b)/2 si m*m<n alors b m a m si tantque retourner a
10 10 CHAPITRE 1. RAPPELS : CHAÎNE DE CARACTÈRES, ITÉRATIONS, CONDITIONNELLES
11 Chapitre 2 Rappels : les tableaux Dans certains exercices qui vont suivre, le tableau d entiers t est déi par [1..MAX] et il contient avec n éléments significatifs (0 n MAX). 2.1 Plus petit élément Écrire une fonction, mintableau, qui à partir d un tableau d entiers t non trié de n éléments significatifs retourne le plus petit élément du tableau. Objectifs pédagogiques de l exercice : savoir écrire un algorithme de recherche d un élément (algo de type hypothèse et remise en cause de cette hypothèse) savoir choisir la bonne itération fonction mintableau (t : Tableau[1..MAX] d Entier ; n : Naturel) : Entier précondition(s) n 1 et n MAX Déclaration i : Naturel, min : Entier min t[1] pour i 2 à n faire si t[i]<min alors min t[i] si pour retourner min 2.2 Sous-séquences croissantes Écrire une procédure determinersequences, qui à partir d un tableau d entiers t de n éléments, fournit le nombre de sous-séquences strictement croissantes de ce tableau, ainsi que les indices de début et de de la plus grande sous-séquence. Exemple : t un tableau de 15 éléments : 1, 2, 5, 3, 12, 25, 13, 8, 4, 7, 24, 28, 32, 11,
12 12 CHAPITRE 2. RAPPELS : LES TABLEAUX Les séquences strictement croissantes sont : < 1, 2, 5 >, < 3, 12, 25 >, < 13 >, < 8 >, < 4, 7, 24, 28, 32 >, < 11, 14 >. Le nombre de sous-séquence est : 6 et la plus grande sous-séquence est : < 4, 7, 24, 28, 32 >. Objectifs pédagogiques de l exercice : savoir choisir des identifiants significatifs savoir choisir la bonne itération savoir identifier les cas particuliers, compétence qui sera utile lors de l écriture de tests unitaires (ici le cas particulier est le cas ou la plus grande sous-séquence croissante est la dernière) procédure determinersequences (E t : Tableau[1..MAX] d Entier ; n : Naturel ;S nbsssequences, De- LaPlusGrandeSsSequence, DeLaPlusGrandeSsSequence : Naturel) précondition(s) n 1 Déclaration i, SequenceCourante : Naturel nbsssequences 1 DeLaPlusGrandeSsSequence 1 DeLaPlusGrandeSsSequence 1 SequenceCourante 1 pour i 1 à n-1 faire si t[i]>t[i+1] alors nbsssequences nbsssequences+1 si i-sequencecourante>delaplusgrandesssequence-delaplusgrandesssequence alors DeLaPlusGrandeSsSequence SequenceCourante DeLaPlusGrandeSsSequence i si SequenceCourante i+1 si pour si n-sequencecourante>delaplusgrandesssequence-delaplusgrandesssequence alors DeLaPlusGrandeSsSequence SequenceCourante DeLaPlusGrandeSsSequence n si 2.3 Recherche dichotomique Écrire une fonction, recherchedichotomique, qui détermine par dichotomie le plus petit indice d un élément, (dont on est sûr de l existence) dans un tableau d entiers t trié dans l ordre croissant de n éléments. Il peut y avoir des doubles (ou plus) dans le tableau. Objectifs pédagogiques de l exercice : savoir écrire un algorithme dichotomique sur un ensemble discret.
13 2.4. LISSAGE DE COURBE 13 fonction recherchedichotomique (t : Tableau[1..MAX] d Entier ; n : Naturel ; element : Entier) : Naturel précondition(s) 1 i n / t[i] = element Déclaration a,b,m : Naturel a 1 b n tant que a < b faire m (a + b) div 2 si t[m] element alors b m a m + 1 si tantque retourner b Quelques remarques sur les algorithmes dichotomiques sur du discret : On sort du tant quand les deux indices se croisent Il faut savoir quand garder l élément du milieu (et donc quand l exclure, il y a un risque de boucle inie). Ici, comme on cherche le plus petit indice de l élément recherché, lorsque t[m] est cet élément, il faut le garder (c est peut être lui qui est recherché). 2.4 Lissage de courbe L objectif de cet exercice est de développer un filtre non causal, c est-à-dire une fonction qui lisse un signal en utilisant une fenêtre glissante pour moyenner les valeurs (Cf. figure 2.1). Pour les premières et dernières valeurs, seules les valeurs dans la fenêtre sont prises en compte FIGURE 2.1 Lissage d un signal avec une fenêtre de taille 3 Soit le type Signal : Type Signal = Structure donnees : Tableau[1..MAX] de Reel nbdonnees : Naturel structure Après avoir fait une analyse descendante du problème, proposez l algorithme de la fonction filtrenoncausal avec la signature suivante : fonction filtrenoncausal (signalnonlisse : Signal, taillefenetre : Naturel) : Signal
14 14 CHAPITRE 2. RAPPELS : LES TABLEAUX précondition(s) taillef enetre 1 impair(taillef enetre) Objectifs pédagogiques de l exercice : savoir construire une analyse descendante savoir utiliser des tableaux et des structures se rendre compte qu il y a un problème : on devrait être capable d écrire ces algos sans savoir comment est conçu un signal introduction au Type Abstrait de Données Analyse descencante : f iltren oncausal : Signal Naturel Signal min : Naturel Naturel Naturel max : Naturel Naturel Naturel moyenne : Signal Naturel Naturel Reel somme : Signal Naturel Naturel Reel Algorithmes : fonction somme (unsignal : Signal,, : Naturel) : Reel précondition(s) f in > 0 f in unsignal.nbdonnees Déclaration resultat : Reel i : Naturel resultat 0 pour i à faire resultat resultat+ unsignal.donnes[i] pour retourner resultat fonction moyenne (unsignal : Signal,, : Naturel) : Reel précondition(s) f in > 0 f in unsignal.nbdonnees retourner somme(unsignal,,)/(-+1) fonction filtrenoncausal (unsignal : Signal, taillefenetre : Naturel) : Signal précondition(s) taillef enetre 1 impaire(taillef enetre) Déclaration resultat : Signal i : Naturel resultat.nbdonnees unsignal.nbdonnees pour i 1 à resultat.nbdonnees faire
15 2.4. LISSAGE DE COURBE 15 resultat.donnes[i] moyenne(unsignal,max(1,i-taillefenetre div 2), min(unsignal.nbdonnees,i+taillefenetre div 2)) pour retourner resultat
16 16 CHAPITRE 2. RAPPELS : LES TABLEAUX
17 Chapitre 3 Rappels : récursivité 3.1 Palindrome Écrire une fonction qui permet de savoir si une chaîne est un palindrome. Est-ce un algorithme récursif terminal ou non-terminal? Objectifs pédagogiques de l exercice : savoir identifier les cas particuliers et généraux d une récursivité savoir être utilisateur de l algo tout en étant concepteur savoir si un algo récursif est terminal ou non terminal fonction estunpalindrome (unechaine : Chaine de caracteres) : Booleen si longueur(unechaine)=0 ou longueur(unechaine)=1 alors retourner VRAI si iemecaractere(unechaine,1) iemecaractere(unechaine,longueur(unechaine)) alors retourner FAUX retourner estunpalindrome(souschaine(unechaine,2,longueur(unechaine)-2)) si si 3.2 Puissance d un nombre Écrire une fonction récursive, puissance, qui élève le réel b à la puissance n (naturel). Objectifs pédagogiques de l exercice : idem exercice précédent fonction puissance (b : Reel, n : Naturel) : Reel 17
18 18 CHAPITRE 3. RAPPELS : RÉCURSIVITÉ Déclaration temp : Reel si n = 0 alors retourner 1 si estpair(n) alors temp puissance(b,b div 2) retourner temp*temp retourner b*puissance(b,n-1) si si 3.3 Recherche du zéro d une fonction par dichotomie Écrire une fonction récursive, zerofonction, qui calcule le zéro d une fonction réelle f(x) sur l intervalle réel [a, b], avec une précision epsilon. La fonction f ne s annule qu une seule et unique fois sur [a, b]. Pour trouver ce zéro, on procède par dichotomie. Objectifs pédagogiques de l exercice : idem exercice précédent fonction zerofonction (a,b,epsilon : Reel, f : FonctionRDansR) : Reel précondition(s) a b et eststrictementmonotone(f) Déclaration m : Reel m (a + b) / 2 si (b - a) epsilon alors retourner m si memesigne(f(a),f(m)) alors retourner zerofonction(m, b, epsilon,f) retourner zerofonction(a, m, epsilon,f) si si 3.4 Dessin récursif Supposons que la procédure suivante permette de dessiner un carré sur un graphique (variable de type Graphique) : procédure carre (E/S g : Graphique,E x,y,cote Reel)
19 3.4. DESSIN RÉCURSIF 19 L objectif est de concevoir une procédure carres qui permet de dessiner sur un graphique des dessins récursifs tels que présentés par la figure 3.1. La signature de cette procédure est : procédure carres (E/S g : Graphique,E x,y,cote : Reel, n : NaturelNonNul) (a) carres(100, 100, 100, 1) (b) carres(100, 100, 100, 3) (c) carres(100, 100, 100, 4) FIGURE 3.1 Résultats de différents appels de la procédure carres 1. Dessinez le résultat de l exécution de carres(g, 100, 100, 100, 2). 2. Donnez l algorithme de la procédure carres. Objectifs pédagogiques de l exercice : Comprendre les différents appels récursifs Être sûr de bien respecter la signature (NaturelNonNul pour n) lors de l appel. Bien faire la différence entre concepteur de l algo et utilisateur (dans ce cas vérifier les conditions déies dans la signature) Algorithme procédure carres (E/S g : Graphique,E x,y,cote : Reel, n : NaturelNonNul) carre(x,y,cote) si n>1 alors carres(x-cote/2,y,cote/2,n-1) carres(x,y+cote,cote/2,n-1) carres(x+cote,y+cote/2,cote/2,n-1) carres(x+cote/2,y-cote/2,cote/2,n-1) si NB : Cet exercice est inspiré de parisse/giac/doc/ fr/casrouge/casrouge018.html.
20 20 CHAPITRE 3. RAPPELS : RÉCURSIVITÉ 3.5 Inversion d un tableau Soit un tableau d entiers t. Écrire une procédure, inversertableau, qui change de place les éléments de ce tableau de telle façon que le nouveau tableau t soit une sorte de miroir de l ancien. Exemple : Objectifs pédagogiques de l exercice : idem premiers exercices du chapitre procédure inversertableaur (E/S t : Tableau[1..MAX] d Entier ;E, : Naturel) si < alors echanger(t[], t[]) inversertableaur(t, +1, -1) si procédure inversertableau (E/S t : Tableau[1..MAX] d Entier ;E n : Naturel) inversertableaur(t, 1,n)
21 Chapitre 4 Représentation d un naturel L objectif de cet exercice est de concevoir quatre fonctions permettant de représenter un naturel en chaîne de caractères telles que la première fonction donnera une représentation binaire, la deuxième une représentation octale, la troisième une représentation décimale et la dernière une représentation hexadécimale. 4.1 Analyse L analyse de ce problème nous indique que ces quatre fonctions sont des cas particuliers de représentation d un naturel en chaîne de caractères dans une base donnée. De plus pour construire la chaîne de caractères résultat, il faut être capable de concaténer des caractères représentant des chiffres pour une base donnée. Proposez l analyse descendante de ce problème. Naturel representation Binaire Chaine Naturel representation Decimale Chaine Naturel representation Octale Chaine Naturel representation Hexadecimale Chaine Naturel representation NAire Chaine nombre EnChiffre Caractere 4.2 Conception préliminaire Donnez les signatures des fonctions ou procédures identifiées précédemment. 21
22 22 CHAPITRE 4. REPRÉSENTATION D UN NATUREL fonction naturelenchiffre (nombre : 0..35, base : 2..36) : Caractere précondition(s) nombre < base fonction representationnaire (valeur : Naturel ; base : 2..36) : Chaine de caracteres fonction representationbinaire (n : Naturel) : Chaine de caracteres fonction representationoctale (n : Naturel) : Chaine de caracteres fonction representationdecimale (n : Naturel) : Chaine de caracteres fonction representationhexadecimale (n : Naturel) : Chaine de caracteres 4.3 Conception détaillée Donnez les algorithme de ces fonctions ou procédures fonction naturelenchiffre (nombre : 0..35, base : 2..36) : Caractere précondition(s) nombre < base Déclaration chiffre : Caractere, i : Naturel chiffre 0 pour i 0 à nombre faire si chiffre = 9 alors chiffre A chiffre succ(chiffre) si pour retourner chiffre fonction representationnaire (valeur : Naturel ; base : 2..36) : Chaine de caracteres Déclaration representation : Chaine de caracteres, nombre : Naturel representation nombre valeur tant que nombre 0 faire representation naturelenchiffre(nombre mod base) + representation nombre nombre div base tantque si representation = alors representation 0 si retourner representation
23 4.3. CONCEPTION DÉTAILLÉE 23 fonction representationbinaire (n : Naturel) : Chaine de caracteres retourner representationnaire(n,2) fonction representationoctale (n : Naturel) : Chaine de caracteres retourner representationnaire(n,8) fonction representationoctale (n : Naturel) : Chaine de caracteres retourner representationnaire(n,10) fonction representationhexadecimale (n : Naturel) : Chaine de caracteres retourner representationnaire(n,16)
24 24 CHAPITRE 4. REPRÉSENTATION D UN NATUREL
25 Chapitre 5 Calculatrice L objectif de cet exercice est d écrire une procédure, calculer, qui permet de calculer la valeur d une une expression arithmétique simple (opérande gauche positive, opérateur, opérande droite positive) à partir d une chaîne de caractères (par exemple ). Cette procédure, outre le résultat, permettra de savoir si la chaîne est réellement une expression arithmétique (Conseil : Créer des procédures/fonctions permettant de reconnaître des opérandes et opérateurs). On considère posséder le type Operateur déi de la façon suivante : Type Operateur = {Addition, Soustraction, Multiplication, Division} Objectifs pédagogiques de l exercice : L objectif de cette exercice est montrer que l interprétation d une chaîne de caractères peut être quelques choses de compliquer ( compilation) 5.1 Analyse Remplissez l analyse descendante présentée par la figure 5.1 sachant que la reconnaissance d une entité (opérateur, opérande, etc.) dans la chaîne de caractères commencent à une certaine position et que la reconnaissance peut échouer. Objectifs pédagogiques de l exercice : La difficulté ici est d avoir une analyse cohérente du problème. 25
26 26 CHAPITRE 5. CALCULATRICE... calculer reconnaitre Operateur reconnaitre Operande reconnaitres uitechiffres xpuissancen reconnaitre Virugle chaineennaturel estunchiffre... FIGURE 5.1 Analyse descendante d une calculatrice simple Chaine calculer Reel Booléen Booléen Chaine NaturelNonNul reconnaitre Operateur Operateur NaturelNonNul Booleen Chaine NaturelNonNul reconnaitre Operande Reel NaturelNonNul Booleen Chaine NaturelNonNul reconnaitre SuiteChiffre Chaine NaturelNonNul Booleen Reel Entier xpuissancen Reel Chaine NaturelNonNul reconnaitre Virugle NaturelNonNul Booleen Chaine chaineennaturel Naturel Booleen Caractere estunchiffre Booleen 5.2 Conception préliminaire Donnez les signatures des opérations de l analyse précédente. procédure calculer (E letexte : Chaine de caracteres ; S estuneexpressionsyntaxiquementcorrecte,
27 5.3. CONCEPTION DÉTAILLÉE 27 estuneexpressionsemantiquementcorrecte : Booleen ; valeur : Reel) précondition(s) longueur(letexte) > 0 procédure reconnaitreoperateur (E letexte : Chaine de caracteres, E/S position : NaturelNonNul, S estunoperateur : Booleen ; loperateur : Operateur) précondition(s) < longueur(letexte) procédure reconnaitreoperande (E letexte : Chaine de caracteres, E/S position : NaturelNonNul ; S estuneoperande : Booleen ; lereel : Reel) précondition(s) longueur(letexte) procédure reconnaitresuitechiffres (E letexte : Chaine de caracteres ;E/S position : NaturelNonNul ;S suitechiffres : Chaine de caracteres, estunesuitedechiffres : Booleen) précondition(s) position longueur(letexte) procédure reconnaitrevirgule (E letexte : Chaine de caracteres ;E/S position : NaturelNonNul ;S estunevirgule : Booleen) précondition(s) position longueur(letexte) fonction estunchiffre (c : Caractere) : Booleen fonction XPuissanceN (x : Reel, n : Entier) : Reel procédure chaineennaturel (E c : Chaine de caracteres, S n : Naturel, estunnombre : Booleen) 5.3 Conception détaillée Donnez les algorithmes des fonctions et procédures identifées. Objectifs pédagogiques de l exercice : Montrer qu une fois la conception préliminaire terminée, on peut répartir la conception détaillée entre plusieurs personnes procédure reconnaitreoperateur (E letexte : Chaine de caracteres, E/S position : NaturelNonNul, S estunoperateur : Booleen ; loperateur : Operateur ; ) précondition(s) longueur(letexte) estunoperateur VRAI position position+1 cas où iemecaractere(letexte,position) vaut + : loperateur Addition - : loperateur Soustraction * : loperateur Multiplication / : loperateur Division autre : estunoperateur FAUX
28 28 CHAPITRE 5. CALCULATRICE position position-1 cas fonction estunchiffre (c : Caractere) : Booleen retourner c 0 et c 9 procédure reconnaitresuitechiffres (E letexte : Chaine de caracteres ;E/S position : NaturelNonNul ;S suitechiffres : Chaine de caracteres, estunesuitedechiffres : Booleen) précondition(s) position longueur(letexte) suitechiffres estunesuitedechiffres FAUX tant que estunchiffre(iemecaractere (letexte, position)) faire suitechiffres suitechiffres + iemecaractere (letexte, position) position position + 1 tantque si suitechiffres alors estunesuitedechiffres VRAI si procédure reconnaitreoperande (E letexte : Chaine de caracteres, E/S position : Naturel ; S estuneoperande : Booleen ; lereel : Reel ; prochaindebut : NaturelNonNul) précondition(s) longueur(letexte) Déclaration chpartieentiere, chpartiedecimale : Chaine de caracteres partieentiere, partiedecimale : Naturel ok, ilyaunevirgule : Booleen reconnaitresuitechiffres(letexte,position,chpartieentiere,ok) si ok alors chaineennaturel(chpartieentiere,partieentiere,ok) reconnaitrevirgule(letexte,position,ilyaunevirgule) si ilyaunevirgule alors reconnaitresuitechiffres(letexte,position,chpartiedecimale,ok) si ok alors chaineennaturel(chpartiedecimale,partiedecimale,ok) lereel partieentiere + partiedecimale / XPuissanceN(10,longueur(chPartieDecimale)) si lereel naturelenreel(partieentiere) si si estuneoperande ok
29 5.3. CONCEPTION DÉTAILLÉE 29 procédure calculer (E letexte : Chaine de caracteres ; S estuneexpressionsyntaxiquementcorrecte, estuneexpressionsemantiquementcorrecte : Booleen ; valeur : Reel) précondition(s) longueur(letexte) > 0 Déclaration i : Naturel operandeg, operanded : Reel operateur : Operateur toujoursvalide : Booleen // Affectation par défaut des valeurs résultat estuneexpression FAUX valeur 0 i 1 reconnaitreoperande(letexte,i, toujoursvalide, operandeg) si toujoursvalide et i<longueur(letexte) alors reconnaitreoperateur(letexte, i, toujoursvalide, operateur) si toujoursvalide et i longueur(letexte) alors reconnaitreoperande(letexte, i, toujoursvalide, operanded) si toujoursvalide et i = longueur(letexte) + 1 alors estuneexpressionsyntaxiquementcorrecte VRAI estuneexpressionsemantiquementcorrecte VRAI cas où operateur vaut Addition: valeur operandeg + operanded Soustraction: valeur operandeg - operanded Multiplication: valeur operandeg * operanded Division: si operanded 0 alors valeur operandeg / operanded estuneexpressionsemantiquementcorrecte FAUX si cas si si si
30 30 CHAPITRE 5. CALCULATRICE
31 Chapitre 6 Un peu de géométrie Objectifs pédagogiques de l exercice : Manipuler les TAD Appliquer le principe d encapsulation 6.1 Le TAD Point2D Soit le TAD Point2D déit de la façon suivante : Nom: Point2D Utilise: Reel Opérations: point2d: Reel Reel Point2D obtenirx: Point2D Reel obteniry: Point2D Reel distanceeuclidienne: Point2D Point2D Reel translater: Point2D Point2D Point2D fairerotation: Point2D Point2D Reel Point2D 1. Analyse : Donnez la partie axiomes pour ce TAD (sauf pour l opération fairerotation) Axiomes: - obtenirx(point2d(x, y)) = x - obteniry (point2d(x, y)) = y - distanceeuclidienne(point2d(x 1, y 1 ), point2d(x 2, y 2 )) = (x 2 x 1 ) 2 + (y 2 y 1 ) 2 - translater(point2d(x 1, y 1 ), point2d(x 2, y 2 )) = point2d(x 1 + x 2, y 1 + y 2 ) Attention, il ne sert à rien d ajouter trop d axiomes, au risque d avoir un TAD inconsistant ou de proposer des tautologie. Par exemple l axiome point2d(obtenirx(p1), obteniry (p1)) = p1 est une tautologie. En effet si on remplace p1 par point2d(x, y), on a alors point2d(obtenirx(point2d(x, y)), obteniry (point2d(x, y))) = point2d(x, y) Soit 31
32 32 CHAPITRE 6. UN PEU DE GÉOMÉTRIE qui est toujours vrai. point2d(x, y) = point2d(x, y) 2. Conception préliminaire : Donnez les signatures des fonctions et procédures des opérations de ce TAD fonction point2d (x,y : Reel) : Point2D fonction obtenirx (p : Point2D) : Reel fonction obteniry (p : Point2D) : Reel fonction distanceeuclidienne (p1,p2 : Point2D) : Reel procédure translater (E/S p : Point2D,E vecteur : Point2D) procédure fairerotation (E/S p : Point2D,E centre : Point2D, angle : Reel) 6.2 Polyligne Une ligne polygonale, ou ligne brisée (on utilise aussi parfois polyligne par traduction de l anglais polyline) est une figure géométrique formée d une suite de segments, la seconde extrémité de chacun d entre eux étant la première du suivant.[...] Un polygone est une ligne polygonale fermée. (Wikipédia) La figure 6.1 présente deux polylignes composées de 5 points. (a) polyligne ouverte (b) polyligne fermée FIGURE 6.1 Deux polylignes De cette déition nous pouvons faire les constats suivants : Une polyligne est constituée d au moins deux points ; On peut obtenir le nombre de points d une polyligne ; Une polyligne est ouverte ou fermée (qu elle soit ouverte ou fermée ne change pas le nombre de points : dans le cas où elle est fermé, on considère qu il a une ligne entre le dernier et le premier point) ; On peut insérer, supprimer des points à une polyligne (par exemple la figure 6.2 présente la supression du troisième point de la polyligne ouverte de la figure 6.1). Attention deux points d une polyligne ne peuvent pas avoir les même coordonnées ; On peut parcourir les points d une polyligne ; On peut effectuer des transformations géométriques (translation, rotation, etc.) ; On peut calculer des propriétés d une polyligne (par exemple sa longueur totale) Analyse Proposez le TAD Polyligne (sans les parties Axiome et Sémantique) sachant avec les opérations suivantes : créer une polyligne ouverte à partir de deux Point2D ;
33 6.2. POLYLIGNE 33 FIGURE 6.2 Supression d un point savoir si une polyligne est fermée ; ouvrir une polyligne ; fermer une polyligne ; connaitre le nombre de points d un polyligne ; obtenir le ième point d une polyligne ; insérer le ième point d une polyligne ; supprimer le ième point d une polyligne (on suppose qu elle a au moins 3 points) ; calculer la longueur d un polyligne ; translater une polyligne ; faire une rotation d une polyligne. Nom: Polyligne Utilise: Reel,Booleen,NaturelNonNul,Point2D Opérations: polyligne: Point2D Point2D Polyligne estfermee: Polyligne Booleen ouvrir: Polyligne Polyligne fermer: Polyligne Polyligne nbpoints: Polyligne NaturelNonNul iemepoint: Polyligne NaturelNonNul Point ajouterpoint: Polyligne Point NaturelNonNul Point supprimer: Polyligne NaturelNonNul Polyligne longueur: Polyligne Reel translater: Polyligne Point2D Polyligne fairerotation: Polyligne Point2D Reel Polyligne Préconditions: polyligne(pt1, pt2): pt1 pt2 iemep oint(pl, i): i nbp oints(pl) ajouterp oint(pl, pt, i): i nbp oints(pl) et j 1..nbP oints(pl), iemep oint(pl, j) pt supprimer(pl, i): i nbp oints(pl) et nbp oints(pl) Conception préliminaire Proposez la signature des fonctions et procédures pour le type Polyligne.
34 34 CHAPITRE 6. UN PEU DE GÉOMÉTRIE fonction polyligne (pt1,pt2 : Point2D) : Polyligne précondition(s) pt1 pt2 fonction estfermee (pl ; Polyligne) : Booleen procédure fermer (E/S pl : Polyligne) procédure ouvrir (E/S pl : Polyligne) fonction nbpoints (pl ; Polyligne) : Naturel fonction iemepoint (pl ; Polyligne, position : NaturelNonNul) : Point2D précondition(s) i nbp oints(pl) procédure ajouterpoint (E/S pl : Polyligne,E pt : Point2D, position : Naturel) précondition(s) i nbp oints(pl) + 1 et j 1..nbP oints(pl), iemep oint(pl, j) pt procédure supprimer (E/S pl : Polyligne,E position : Naturel) précondition(s) i nbp oints(pl) et nbp oints(pl) 2 fonction longueur (pl : Polyligne) : Reel procédure translater (E/S pl : Polyligne,E vecteur : Point2D) procédure fairerotation (E/S pl : Polyligne,E centre : Point2D, angleenradian : Reel) Conception détaillée On propose de représenter le type Polyligne de la façon suivante : Type Polyligne = Structure lespts : Tableau[1..MAX] de Point2D nbpts : Naturel estfermee : Booleen structure Proposez les fonctions et procédures correspondant aux opérations suivantes : créer une polyligne ouverte à partir de deux Point2D ; ouvrir une polyligne ; translater une polyligne. fonction polyligne (pt1,pt2 : Point2D) : Polyligne Déclaration resultat : Polyligne resultat.nbpts 2 resultat.lespts[1] pt1 resultat.lespts[2] pt2 retourner resultat procédure ouvrir (E/S pl : Polyligne) pl.estfermee FAUX procédure translater (E/S pl : Polyligne,E vecteur : Point2D) Déclaration i : Naturel pour i 1 à nbpoints(pl) faire
35 6.3. UTILISATION D UNE POLYLIGNE 35 Point2D.translater(pl.lesPts[i],vecteur) pour 6.3 Utilisation d une polyligne Dans cette partie, nous sommes utilisateur du type Polyligne et nous respectons le principe d encapsulation Point à l intérieur Nous supposons posséder la fonction suivante qui permet de calculer l angle orienté en degré formé par les segments (ptcentre, pt1) et (ptcentre, pt2) : fonction angle (ptcentre,pt1,pt2 : Point2D) : Reel Il est possible de savoir si un point pt est à l intérieur ou à l extérieur d une polyligne fermée en calculant la somme des angles orientés formés par les segments issus de pt vers les points consécutifs de la polyligne. En effet si cette somme en valeur absolue est égale à 360 alors le point pt est à l intérieur de la polyligne, il est à l extérieur. Par exemple, sur la figure 6.3, on peut savoir algorithmiquement que pt est à l intérieur de la polyligne car α 1 + α 2 + α 3 + α 4 + α 5 = α 2 α 1 α pt 3 α 5 α FIGURE 6.3 Point à l intérieur d une polyligne Proposez le code de la fonction suivante en supposant que p est bien une polyligne fermée : fonction estalinterieur (p : Polyligne ; pt : Point2D) : Booleen fonction estalinterieur (p : Polyligne ; pt : Point2D) : Booleen précondition(s) non appartient(pt,p) Déclaration i : Naturel sommeangle : Reel sommeangle 0 pour i 1 à nbpoints(p)-1 faire sommeangle sommeangle+angle(pt,iemepoint(p,i),iemepoint(p,i+1)) pour sommeangle sommeangle+angle(pt,iemepoint(p,nbpoints(p)),iemepoint(p,1)) retourner sommeangle=360 ou sommeangle=-360
36 36 CHAPITRE 6. UN PEU DE GÉOMÉTRIE Surface d une polyligne par la méthode de monté-carlo Une des façons d approximer la surface d une polyligne est d utiliser la méthode de Monté-Carlo. Le principe de cette méthode est de calculer une valeur numérique en utilisant des procédés aléatoires, c est-à-dire des techniques probabilistes (Wikipédia). Dans le cas du calcul d une surface, il suffit de tirer au hasard des points qui sont à l intérieur du plus petit rectangle contenant la polyligne. La surface S de la polyligne pourra alors être approximée par la formule suivante : S SurfaceDuRectangle Nb points dans la polyligne Nb points total Par exemple, sur la figure 6.4, en supposant que le rectangle fasse 3 cm de hauteur et 4, 25 cm de largeur, et qu il y a 28 points sur 39 qui sont à l intérieur de la polyligne, sa surface S peut être approximée par : S 3 4, = 9, 39 cm2 38 FIGURE 6.4 Calcul de la surface d une polyligne par la méthode de Monté-Carlo On suppose posséder la fonction suivante qui permet d obtenir un réel aléatoire entre une borne minimum et une borne maximum : fonction reelaleatoire (bornemin,bornnemax : Reel) : Reel 1. Proposez l analyse descendante pour le calcul d une surface d une polyligne à l aide de la méthode de Monté-Carlo. surfacepolyligne Polyligne Naturel Reel rectangleenglobant Polyligne Point2D Point2D surfacerectangle Point2D Point2D Reel pointaleatoiredansrectangle Point2D Point2D Point2D 2. Donnez les signatures des procédures et fonctions de votre analyse descendante. fonction surfacepolyligne (p : Polyligne, nbpoints : Naturel) : Reel procédure rectangleenglobant (E p : Polyligne,S ptbasgauche, pthautdroit : Point2D) fonction surfacerectangle (ptbasgauche,pthautdroit : Point2D) : Reel fonction pointaleatoiredansrectangle (ptbasgauche,pthautdroit : Point2D) : Point2D 3. Donnez l algorithme de l opération principale (au sommet de votre analyse descendante). fonction surfacepolyligne (p : Polyligne, nbpoints : Naturel) : Reel Déclaration ptbasgauche, pthautdroit : Poin2D
37 6.3. UTILISATION D UNE POLYLIGNE 37 rectangleenglobant(p,ptbasgauche,pthautdroit) surface surfacerectangle(ptbasgauche,pthautdroit) nbdans 0 pour i 1 à nbpoints faire si estalinterieur(p,pointaleatoiredansrectangle(ptbasgauche,pthautdroit)) alors nbdans nbdans+1 si pour retourner surface*nbdans/nbpoints
38 38 CHAPITRE 6. UN PEU DE GÉOMÉTRIE
39 Chapitre 7 Tri par tas 7.1 Qu est ce qu un tas? Un tas est un arbre binaire particulier : la valeur de chaque noeud est supérieure aux valeurs contenues dans ses sous-arbres et l arbre est rempli par niveau (de gauche à droite), un nouveau niveau n étant commencé que lorsque le précédent est complet. Un tas peut être représenté l aide d un tableau t de telle sorte que les fils gauche et droit de t[i] sont respectivement t[2 i] et t[2 i + 1]. Dessinez l arbre binaire représenté par le tableau t suivant : t
40 40 CHAPITRE 7. TRI PAR TAS 7.2 Fonction estuntas Donnez l algorithme récursif de la fonction suivante qui permet de savoir si un tableau t de n éléments significatifs représente un tas à partir de la racine de position i : fonction estuntas (t : Tableau[1..MAX] d Entier, i,n : Naturel) : Booleen précondition(s) i n fonction estuntas (t : Tableau[1..MAX] d Entier, i,n : Naturel) : Booleen précondition(s) i n si 2*i > n alors retourner VRAI si 2*i+1 > n alors retourner t[i] t[2*i] si t[i] max(t[2*i],t[2*i+1]) alors retourner estuntas(t,2*i,n) et estuntas(t,2*i+1,n) retourner FAUX si si si 7.3 Procédure fairedescendre À l issue de l appel à cette procédure fairedescendre, l arbre (représenté par un tableau) dont la racine est en position i sera un tas. On présuppose que les deux arbres dont les racines sont positionnées en 2i et 2i + 1 sont des tas. La signature de cette procédure est : procédure fairedescendre (E/S t : Tableau[1..MAX] d Entier,E i,n : Naturel) précondition(s) (2*i n et estuntas(t,2*i,n)) ou (2*i+1 n et estuntas(t,2*i,n) et estuntas(t,2*i+1,n)) 1. En supposant que la première valeur du tableau t de la partie 7.1 ne soit pas 87 mais 30. Donnez les valeurs de t après l appel fairedescendre(t,1,10). 2. Proposez l algorithme de la procédure fairedescendre. 3. Donnez la complexité dans le pire des cas de votre algorithme. Justifiez. 1. On obtient alors le tableau : L algorithme est : fonction indicemax (t : Tableau[1..MAX] d Entier, n,i,j : Naturel) : Naturel précondition(s) i n et i j
41 7.3. PROCÉDURE FAIREDESCENDRE 41 si j n alors si t[i]>t[j] alors retourner i retourner j si retourner i si Version itérative procédure fairedescendre (E/S t : Tableau[1..MAX] d Entier,E i,n : Naturel) précondition(s) (2*i n et estuntas(t,2*i,n)) ou (2*i+1 n et estuntas(t,2*i,n) et estuntas(t,2*i+1,n)) Déclaration elementbienpositionne :Booleen posmax :Naturel elementbienpositionne FAUX tant que non elementbienpositionne faire si 2*i n alors posmax indicemax(t,n,2*i,2*i+1) si t[i]<t[posmax] alors echanger(t[i],t[posmax]) i posmax elementbienpositionne VRAI si elementbienpositionne VRAI si tantque Version récursive procédure fairedescendre (E/S t : Tableau[1..MAX] d Entier,E i,n : Naturel) précondition(s) (2*i n et estuntas(t,2*i,n)) ou (2*i+1 n et estuntas(t,2*i,n) et estuntas(t,2*i+1,n)) Déclaration posmax :Naturel si 2*i n alors posmax indicemax(t,n,2*i,2*i+1) si t[i]<t[posmax] alors echanger(t[i],t[posmax]) fairedescendre(t,posmax,n) si si 3. À chaque itération l indice de i est multiplié par 2 (à un près) jusqu à ce que i soit plus grand que n, la complexité est donc en log 2 (n).
42 42 CHAPITRE 7. TRI PAR TAS 7.4 Procédure tamiser L objectif de cette procédure est de transformer un tableau de n éléments significatifs quelconque en un tas. Pour ce faire on part du milieu du tableau en remontant jusqu au premier élément du tableau pour qu à l issue de chaque itération l arbre représenté par le tableau dont la racine est à la position i soit un tas. 1. Soit le tableau t suivant : t Donnez les valeurs de ce tableau à l issue de chaque itération. 2. Proposez l algorithme de la procédure tamiser. 3. Donnez la complexité dans le pire des cas de votre algorithme. Justifiez. 1. À l issue de chaque itération on a : i= i= i= i= i= On obtient l algorithme : procédure tamiser (E/S t : Tableau[1..MAX] d Entier,E n : Naturel) Déclaration i : Naturel pour i n div 2 à 1 pas de -1 faire fairedescendre(t,i,n) pour 3. L algorithme est une boucle déterministe dont l une des bornes est fonction de la taille du problème n, la complexité est donc n fois la complexité du corps de cette itération. On a donc une complexité dans le pire des cas qui de n log 2 (n). 7.5 Procédure trierpartas Le principe du tri par tas est simple. Après avoir transformé le tableau t composé de n éléments significatifs en un tas, cet algorithme est composé d itérations i (allant de n jusqu à 2) qui : échange t[1] et t[i] ; s assure que le tableau de i 1 éléments significatifs soit un tas. Voici les différentes étapes de cet algorithme une fois que le tableau t de la partie 7.4 ait été transformé en tas (tableau de la partie 7.1) :
43 7.5. PROCÉDURE TRIERPARTAS Dessinez l analyse descendante a posteriori de ce problème. 2. Proposez l algorithme de la procédure trierpartas. 3. Donnez la complexité dans le pire des cas de votre algorithme. Justifiez. 1. à faire 2. L algorithme procédure trierpartas (E/S t : Tableau[1..MAX] d Entier,E n : Naturel) tamiser(t,n) pour i n à 2 pas de -1 faire echanger(t[1],t[i]) fairedescendre(t,1,i-1) pour 3. Complexité : l algorithme est composé d un schéma séquentiel à deux instructions : tamiser est en n log 2 (n) et la deuxième instruction (le pour) est aussi en n log 2 (n). La complexité dans le pire des cas est en n log 2 (n).
44 44 CHAPITRE 7. TRI PAR TAS
45 Chapitre 8 Sudoku Le jeu du Sudoku est composé d une grille carrée de 9 cases de côté. Ce jeu consiste à compléter toute la grille avec des chiffres allant de 1 à 9. Chaque chiffre ne doit être utilisé qu une seule fois par ligne, par colonne et par carré de neuf cases 1. On suppose que l on numérote les lignes, les colonnes et les carrés d une grille de Sudoku de 1 à 9. La grille présentée par la figure 8.1 présente une grille de Sudoku à compléter. Numérotation des colonnes Numérotation des lignes Numérotation des carrés FIGURE 8.1 Exemple de grille de Sudoku Soit les TAD Coordonnee et GrilleSudoku suivants : Nom: Coordonnee Utilise: Naturel Opérations: coordonnee: Coordonnee obtenirligne: Coordonnee 1..9 obtenircolonne: Coordonnee 1..9 obtenircarre: Coordonnee 1..9 Axiomes: - obtenircolonne(coordonnee(c,l))=c 1. Déition donnée par le journal le Monde. 45
46 46 CHAPITRE 8. SUDOKU - obtenirligne(coordonnee(c,l))=l - obtenircarre(c)=3*((obtenirligne(c)-1) div 3)+((obtenirColonne(c)-1) div3)+1 Nom: GrilleSudoku Utilise: Naturel, Coordonnee, Booleen Opérations: grillesudoku: GrilleSudoku casevide: GrilleSudoku Coordonnee Booleen obtenirchiffre: GrilleSudoku Coordonnee 1..9 fixerchiffre: GrilleSudoku Coordonnee 1..9 GrilleSudoku vidercase: GrilleSudoku Coordonnee GrilleSudoku Sémantiques: grillesudoku: permet de créer une grille de Sudoku vide casevide: permet de savoir si une case d une grille de Sudoku vide obtenirchiffre: permet d obtenir le chiffre d une case non vide fixerchiffre: permet de fixer un chiffre d une case vide vidercase: permet d enlever le chiffre d une case non vide Préconditions: obtenirchiffre(g,c): non casevide(g,c) fixerchiffre(g,c,v): casevide(g,c) vidercase(g,c): non casevide(g,c) 8.1 Conception préliminaire Donnez la signature des fonctions et procédures correspondant aux deux TAD précédents. fonction coordonnee (c,l : 1..9) : Coordonnee fonction obtenirligne (c : Coordonnee) : 1..9 fonction obtenircolonne (c : Coordonnee) : 1..9 fonction obtenircarre (c : Coordonnee) : 1..9 fonction grillesudoku () : GrilleSudoku fonction casevide (g : GrilleSudoku, c : Coordonnee) : Booleen fonction obtenirchiffre (g : GrilleSudoku, c : Coordonnee) : 1..9 précondition(s) non casevide(g,c) procédure fixerchiffre (E/S g : GrilleSudoku,E c : Coordonnee, v : 1..9) précondition(s) casevide(g,c) procédure vidercase (E/S g : GrilleSudoku,E c : Coordonnee) précondition(s) non casevide(g,c) 8.2 Conception détaillée On se propose de concevoir le TAD Coordonnee de la façon suivante : Type Coordonnee = Structure ligne : 1..9 colonne : 1..9 structure Donnez les algorithmes des fonctions correspondant aux opérations de ce TAD.
47 8.3. FONCTIONS MÉTIERS 47 fonction coordonnee (c,l : 1..9) : Coordonnee Déclaration resultat : Coordonnee resultat.colonne c resultat.ligne l retourner retourner fonction obtenirligne (c : Coordonnee) : 1..9 retourner c.ligne fonction obtenircolonne (c : Coordonnee) : 1..9 retourner c.colonne fonction obtenircarre (c : Coordonnee) : 1..9 retourner 3*((c.ligne-1) div 3)+(c.colonne -1) div Fonctions métiers On se propose d écrire des fonctions et procédures permettant de vérifier ou d aider à la résolution manuelle d une grille de Sudoku. 1. Donnez l algorithme de la fonction suivante qui permet de savoir si une grille de Sudoku est totalement remplie (sans vérifier sa validité) : fonction estremplie (g : GrilleSudoku) : Booleen 2. On suppose que l on possède les fonctions suivantes qui permettent d obtenir l ensemble des chiffres déjà fixés d une colonne, d une ligne ou d un carré : fonction obtenirchiffresduneligne (g : GrilleSudoku, ligne : 1..9) : Ensemble< 1..9 > fonction obtenirchiffresdunecolonne (g : GrilleSudoku, colonne : 1..9) : Ensemble< 1..9 > fonction obtenirchiffresduncarre (g : GrilleSudoku, carre : 1..9) : Ensemble< 1..9 > Donnez l algorithme de la fonction suivante qui permet de savoir si on peut mettre un chiffre dans une case vide sans contredire la règle donnée en introduction : fonction estchiffrevalable (g : GrilleSudoku, chiffre : 1..9, case : Coordonnee) : Booleen précondition(s) casevide(g,case) 3. Donnez l algorithme la fonction suivante qui donne la liste des solutions possibles pour une case vide : fonction obtenirsolutionspossibles (g : GrilleSudoku, case : Coordonnee) : Liste< 1..9 > précondition(s) casevide(g,case) 4. Donnez l algorithme de la procédure suivante qui cherche la solution sol d une grille de sudoku g (si il y a une solution, trouve vaut alors vrai, faux ) : procédure cherchersolution (E g : GrilleSudoku,S trouve : Booleen, sol : GrilleSudoku) 1. fonction estremplie (g : GrilleSudoku) : Booleen
48 48 CHAPITRE 8. SUDOKU Déclaration i,j : 1..9 c : Coordonnee resultat : Booleen resultat VRAI DeBoucle FAUX i 1 j 1 tant que resultat et non DeBoucle faire c coordonnee(i,j) si non estvide(g,c) alors resultat FAUX si i=9 alors si j=9 alors DeBoucle VRAI i 1 j j+1 si i i+1 si si tantque retourner resultat fonction estchiffrevalable (g : GrilleSudoku, chiffre : 1..9, case : Coordonnee) : Booleen précondition(s) casevide(g,case) Déclaration e1,e2,e3 : Ensemble< 1..9 > e1 obtenirchiffresduneligne(g,obtenirligne(c)) e2 obtenirchiffresdunecolonne(g,obtenircolonne(c)) e3 obtenirchiffresduncarre(g,obtenircarre(c)) retourner non estpresent(e1,chiffre) et non estpresent(e2,chiffre) et non estpresent(e3,chiffre) fonction obtenirsolutionspossibles (g : GrilleSudoku, case : Coordonnee) : Liste< 1..9 > précondition(s) casevide(g,case) Déclaration resultat : Liste< 1..9 > i : 1..9 resultat liste() pour i 1 à 9 faire si estchiffrevalable(g,i,case) alors
49 8.3. FONCTIONS MÉTIERS inserer(resultat,1,i) si pour retourner resultat fonction premierecasevide (g) : Coordonnee précondition(s) non estremplie(g) Déclaration i,j : 1..9 c : Coordonnee trouve FAUX i 1 tant que non trouve et i 9 faire j 1 tant que non trouve et i 9 faire c coordonnee(i,j) si casevide(g,c) alors trouve VRAI si j j+1 tantque i i+1 tantque retourner c procédure trouversolution (E g : GrilleSudoku,S trouve : Booleen, sol : GrilleSudoku) Déclaration temp : GrilleSudoku k : 1..9 l : Liste<1..9> si estremplie(g) alors trouve VRAI sol g trouve FAUX c premierecasevide(g) l obtenirsolutionspossibles(g,c) k 1 tant que non trouve et k longueur(l) faire temp g fixerchiffre(temp,c,obtenirelement(l,k)) trouversolution(temp,trouve,sol) k k+1 tantque si
50 50 CHAPITRE 8. SUDOKU
51 Chapitre 9 Liste 9.1 SDD ListeChainee Type et signatures de fonction et procédure Après avoir rappelé le SDD ListeChainee dans le paradigme de la programmation structurée, donnez les signatures des fonctions et procédures permettant de l utiliser. Voir le cours Utilisation 1. Écrire une fonction booléenne itérative, estpresent, qui permet de savoir si un élément est présent dans une liste chaînée. 2. Écrire une fonction booléenne récursive, estpresent, qui permet de savoir si un élément est présent dans une liste chaînée. 3. Écrire une procédure récursive, concatener, qui concatène deux listes chaînées. 4. Écrire une procédure récursive, inverser, qui permet d inverser une liste chaînée. 5. Écrire une procédure itérative, inverser, qui permet d inverser une liste chaînée. 1. fonction estpresent itérative fonction estpresent (l : ListeChainee ; cherche : Element) : Booleen Déclaration resultat : Booleen liste : ListeChainee resultat FAUX liste l tant que non estvide(liste) et non resultat faire si obtenirelement(liste) = cherche alors resultat VRAI liste obtenirlistesuivante(liste) si 51
52 52 CHAPITRE 9. LISTE tantque retourner resultat 2. est présent récursif fonction estpresent (liste : ListeChainee ; cherche : Element) : Booleen si estvide(liste) alors retourner FAUX si obtenirelement(liste) = cherche alors retourner VRAI retourner estpresent(obtenirlistesuivante(liste),cherche) si si 3. concaténation procédure concatener (E/S l1 : ListeChainee,E l2 : ListeChainee) Déclaration temp : ListeChainee si estvide(l1) alors l1 l2 si non estvide(l2) alors temp obtenirlistesuivante(l1) concatener(temp,l2) si estvide(obtenirlistesuivante(l1)) alors fixerlistesuivante(l1, temp) si si si 4. inverser (récursif) procédure inverser (E/S l : ListeChainee) Déclaration temp : ListeChainee si non estvide(l) alors temp obtenirlistesuivante(l) inverser(temp) fixerlistesuivante(l,listechainee()) concatener(temp,l) si 5. inverser (itératif) procédure inverser (E/S l : ListeChainee) Déclaration resultat,temp : ListeChainee
53 9.2. CONCEPTION DÉTAILLÉE D UNE LISTE ORDONNÉE D ENTIERS À L AIDE D UNE LISTE CHAINÉE53 resultat listevide() tant que non estvide(l) faire temp l l obtenirlistesuivante(l) fixerlistesuivante(temp,resultat) resultat temp tantque l resultat 9.2 Conception détaillée d une liste ordonnée d entiers à l aide d une liste chainée Cet exercice propose de concevoir le type ListeOrdonneeDEntiers (ou LODE) avec le SDD ListeChainee de l exercice précédent. 1. Proposez une conception détaillée du type ListeOrdonneeDEntiers 2. Ecrire les fonctions/procédures creationlisteordonneedentiers, inserer, supprimer un élément (le premier, et que l on sait présent), obteniriemeelement à la ième position et longueur proposées par ce type Type ListeOrdonneeDEntiers = Structure entiers : ListeChainee<Entier> nbentiers : Naturel structure fonction longueur (l :ListeOrdonneeDEntiers) : Naturel retourner l.nbentiers fonction obtenirentiers (l :ListeOrdonneeDEntiers) : ListeChainee<Entier> retourner l.entiers procédure fixernbentiers (E/S l : ListeOrdonneeDEntiers ; E valeur : Naturel) l.nbentiers valeur procédure fixerentiers (E/S l : ListeOrdonneeDEntiers ; E liste : ListeChainee<Entier>) l.entiers liste fonction listeordonneedentiers () : ListeOrdonneeDEntiers
54 54 CHAPITRE 9. LISTE Déclaration resultat : ListeOrdonneeDEntiers fixerentiers(resultat, listechainee()) fixernbentiers(resultat, 0) retourner resultat // Version itérative procédure insererdanslistechainee (E/S l : ListeChainee <Entier> ; E element : Entier) Déclaration parcours, nouveau, temporaire : ListeChainee<Entier> si estvide(l) alors l ajouter(l,element) si obtenirelement(l) > element alors ajouter(l,element) g l d obtenirlistesuivante(g) tant que non estvide(d) et obtenirelement(d) < element faire g d d obtenirlistesuivante(g) tantque ajouter(d,element) fixerlistesuivante(g,d) si si // Version récursive procédure insererdanslistechainee (E/S l : ListeChainee <Entier> ; E element : Entier) Déclaration temp : ListeChainee<Entier> si estvide(l) alors ajouter(l, element) si obtenirelement(l) > element alors ajouter(l,element) temp obtenirlistesuivante(l) insererdanslistechainee(temp, element) fixerlistesuivante(l, temp) si si
55 9.2. CONCEPTION DÉTAILLÉE D UNE LISTE ORDONNÉE D ENTIERS À L AIDE D UNE LISTE CHAINÉE55 procédure inserer (E/S l : ListeOrdonneeDEntiers ;E element : Entier) Déclaration temp : ListeChainee<Entier> temp obtenirentiers(l) insererdanslistechainee(temp, element) fixerentiers(l, temp) fixernbentiers (l, longueur(l) + 1) procédure supprimerdanslistechainee (E/S l : ListeChainee, E e : Entier) précondition(s) estpresent(l, e) = VRAI Déclaration temp : ListeChainee <Entier> si obtenirelement(l) = e alors supprimertete(l) temp obtenirlistesuivante(l,e) supprimerdanslistechainee(temp,e) fixerlistesuivante(l, temp) si procédure supprimer (E/S l : ListeOrdonneeDEntiers ;E element : Entier) précondition(s) estpresent(l, e) = VRAI Déclaration temp : ListeChainee <Entier> temp obtenirentiers(l) supprimerdanslistechainee(temp,element) fixerentiers(l, temp) fixernbentiers(l, longueur(l) - 1) fonction obteniriemeelement (liste : ListeOrdonneeDEntiers ; i : Naturel) : Entier précondition(s) 0 < i longueur(liste) Déclaration l1 : ListeOrdonneeDEntiers j : Naturel l1 obtenirentiers(liste) pour j 2 à i faire l1 obtenirlistesuivante(l1) pour retourner obtenirelement(l1) fonction longueur (liste : ListeOrdonneeDEntiers) : Naturel
56 56 CHAPITRE 9. LISTE 3. retourner longueur(liste) 9.3 Utilisation : Liste ordonnée d entiers Écrire une fonction, fusionner, qui permet de fusionner deux listes ordonnées procédure insererunelisteordonneedentiers (E/S dans : ListeOrdonneeDEntiers ;E liste : ListeOrdonnee- DEntiers) Déclaration i : Naturel pour i 1 à longueur(liste) faire inserer(dans, obteniriemeelement(liste, i)) pour fonction fusionner (l1,l2 : ListeOrdonneeDEntiers) : ListeOrdonneeDEntiers Déclaration resultat : ListeOrdonneeDEntiers resultat listeordonneedentiers() insererunelisteordonnéedentiers(resultat, l1) insererunelisteordonnéedentiers(resultat, l2) retourner resultat
57 Chapitre 10 Arbre Binaire de Recherche (ABR) 10.1 Conception préliminaire et utilisation d un ABR Pour rappel, le TAD ABR modélisant un Arbre Binaire de Recherche est déi de la façon suivante : Nom: ABR (ArbreBinaireDeRecherche) Paramètre: Element Utilise: Booleen Opérations: abr: ABR estvide: ABR Booleen insérer: ABR Element ABR supprimer: ABR Element ABR estpresent: ABR Element Booleen obtenirelement: ABR Element obtenirfilsgauche: ABR ABR obtenirfilsdroit: ABR ABR Axiomes: - estvide(abr()) - non estvide(insérer(e,a)) - obtenirelement(insérer(e,abr()))=e - obtenirfilsgauche(insérer(e,a))=insérer(e,obtenirfilsgauche(a) et obtenirelement(a)> e - obtenirfilsdroit(insérer(e,a))=insérer(e,obtenirfilsdroit(a) et obtenirelement(a)< e... Préconditions: obtenirelement(a): non(estv ide(a)) obtenirfilsgauche(a): non(estv ide(a)) obtenirfilsdroit(a): non(estv ide(a)) 1. Donner les signatures des fonctions et procédures d un ABR. 2. Écrire une procédure récursive, afficherenordrecroissant, qui affiche, en ordre croissant, tous les éléments d un ABR. 3. Écrire une procédure récursive, afficherenordredecroissant, qui affiche, en ordre décroissant, tous les éléments d un ABR. 4. Écrire une fonction récursive, hauteur, qui calcule la hauteur d un ABR (-1 si l arbre est vide, 0 s il n y a qu un seul élément). 5. Écrire une fonction récursive, nbelements, qui calcule le nombre d éléments d un arbre. 57
58 58 CHAPITRE 10. ARBRE BINAIRE DE RECHERCHE (ABR) 1. Voir le cours procédure afficherenordrecroissant (E a : ABR) si non estvide(a) alors afficherenordrecroissant(obtenirfilsgauche(a)) ecrire(obtenirelement(a)) afficherenordrecroissant(obtenirfilsdroit(a)) si procédure afficherenordredecroissant (E a : ABR) si non estvide(a) alors afficherenordredecroissant(obtenirfilsdroit(a)) ecrire(obtenirelement(a)) afficherenordredecroissant(obtenirfilsgauche(a)) si fonction maximum (a, b : Element) : Element si a > b alors retourner a retourner b si fonction hauteur (a : ABR) : Entier si estvide(a) alors retourner -1 retourner 1+maximum(hauteur(obtenirFilsGauche(a)),hauteur(obtenirFilsDroit(a))) si fonction nbelements (a : ABR) : Naturel si estvide(a) alors retourner 0 retourner 1+nbElements(obtenirFilsGauche(a))+nbElements(obtenirFilsDroit(a)) si
59 10.2. UNE CONCEPTION DÉTAILLÉE : ABR Une conception détaillée : ABR Nous allons concevoir le type ABR à l aide du SDD ArbreBinaire 1. Rappeler le SDD ArbreBinaire (type et signatures des fonctions et procédures) 2. Proposer une implantation du type ABR 3. Expliciter la fonction booléenne : estpresent. 4. Expliciter la procédure d insertion : inserer. 5. Expliciter la procédure de suppression : supprimer. Voir le cours
60 60 CHAPITRE 10. ARBRE BINAIRE DE RECHERCHE (ABR)
61 Chapitre 11 Arbres AVL Pour rappel un AVL est un ABR qui conserve l équilibre entre tous ces fils (à +-1 près) après les opérations d insertion et de supression. 1. Expliciter les procédures de simple rotation, fairesimplerotationadroite et fairesimple- RotationAGauche, et de double rotations, fairedoublerotationadroite et fairedouble- RotationAGauche. 2. Montrer que les simples et doubles rotations conservent la propriété d un ABR (en considérant que l arbre ne contient pas de doublons). Voir le cours 3. Expliciter la procédure d équilibrage d un arbre qui aurait deux sous-arbres équilibrés mais qui pourrait ne pas être équilibré. Voir le cours 4. Expliciter la procédure d insertion : inserer. Voir le cours 5. Expliciter la procédure de suppression : supprimer. Il y a deux façons de résoudre ce problème : (a) Reprendre l algorithme de suppression d un élément dans un ABR puis rééquilibrer (b) Redescendre la valeur à supprimer vers une feuille par une utilisation des simples ou doubles rotations procédure supprimer (E/S a : ABR ; E e : Element) Déclaration nouveausommet : Element temp,tempg,tempd : ABR si non estvide(a) alors si e < obtenirelement(a) alors temp obtenirfilsgauche(a) supprimer(temp,e) fixerfilsgauche(a,temp) si e > obtenirelement(a) alors 61
62 62 CHAPITRE 11. ARBRES AVL temp obtenirfilsdroit(a) supprimer(temp,e) fixerfilsdroit(a,temp) si estvide(obtenirfilsgauche(a)) et estvide(obtenirfilsdroit(a)) alors ArbreBinaire.supprimerRacine(a,tempG,tempD) si hauteur(obtenirfilsgauche(a)) > hauteur(obtenirfilsdroit(a)) alors si hauteur(obtenirfilsgauche(obtenirfilsgauche(a))) > hauteur(obtenirfilsdroit( obtenirfilsgauche(a))) alors fairesimplerotationadroite(a) fairedoublerotationadroite(a) si temp obtenirfilsdroit(a) supprimer(temp,e) fixerfilsdroit(a,temp) équivalent mais avec des simple et double rotation à gauche si si si si si
63 Chapitre 12 Graphes 12.1 Le labyrinthe L objectif de cet exercice est d étudier le problème du labyrinthe, c est-à-dire créer un algorithme permettant de trouver le chemin qui mène de l entrée à la sortie (cf. figure 12.1). FIGURE 12.1 Un labytinthe Partie publique Un labyrinthe est composé de cases. On accède à une case à partir d une case et d une direction. Les directions possibles sont Nord, Sud, Est et Ouest. Par exemple, comme le montre la figure 12.2 le labyrinthe précédent peut être considéré comme étant composé de 25 cases. La case numéro 6 est la case d entrée. La case 20 est la case de sortie. La case 8 est accessible depuis la case 13 avec la direction Nord. Le TAD labyrinthe Les opérations disponibles sur un labyrinthe sont les suivantes : créer un labyrinthe, obtenir la case d entrée, savoir si une case est la case de sortie, obtenir une liste de directions possibles depuis une case donnée, obtenir la case accessible depuis une case avec une direction. 63
64 64 CHAPITRE 12. GRAPHES FIGURE 12.2 Un labytinthe composé de cases 1. Donnez le type Direction Type Direction = {Nord,Sud,Est,Ouest} 2. Donnez le TAD Labyrinthe Nom: Paramètre: Utilise: Labyrinthe Case Direction Opérations: labyrinthe: Naturel Naturel Labyrinthe casedentree: estcasedesortie: Labyrinthe Case Labyrinthe Case Booleen directionspossibles: Labyrinthe Case Liste<Direction> casedestination: Labyrinthe Case Direction Case Algorithme du petit-poucet Une solution pour trouver la sortie est d utiliser le principe du petit poucet, c est-à-dire mettre un caillou sur les cases rencontrées. Pour ne pas modifier le TAD Labyrinthe, plutôt que de marquer une case avec un caillou on peut ajouter une case à un ensemble. Pour vérifier si on a déja rencontré une case, il suffit alors de vérifier si la case est présente dans l ensemble. Après avoir rappelé les TAD Ensemble et ListeChaînée vu en cours, proposer le corps de la procédure suivante qui permet de trouver le chemin de sortie (s il existe) à partir d une case donnée 1 : procédure calculerchemindesortie (E l : Labyrinthe, casecourante : Case, E/S casesvisitees : Ensemble<Case>, S permetdallerjusqualasortie : Booleen, lesdirectionsasuivre : ListeChaînée<Direction>) procédure calculerchemindesortie (E l : Labyrinthe, casecourante : Case, E/S casesvisitees : Ensemble<Case>, S permetdallerjusqualasortie : Booleen, lesdirectionsasuivre : ListeChaînée<Direction>) Déclaration directions : Liste<Direction> i : Naturel 1. Vous pouvez vous inspirer de la procédure remplir vu dans le dernier cours
65 12.1. LE LABYRINTHE 65 solutiontrouvee : Booleen casetest : Case si estcasedesortie(casecourante) alors permetdallerjusqualasortie VRAI lesdirectionsasuivre listechainee() si non estpresent(casesvisitees,casecourante) alors casesvisitees ajouter(casesvisitees,casecourante) directions directionspossibles(l,casecourante) permetdallerjusqualasortie FAUX i 1 tant que i longueur(directions) et non permetdallerjusqualasortie faire casetest casedestination(l,obtenirelement(directions,i)) calculerchemindesortie(l,casetest,casesvisitees,permetdallerjusqualasortie, lesdirectionsasuivre) si permetdallerjusqualasortie alors lesdirectionsasuivre ajouter(lesdirectionsasuivre,obtenirelement(directions,i)) si i i+1 tantque si si Partie privée Le graphe On peut représenter un labyrinthe à l aide d un graphe étiqueté et valué. On considère dans ce cas que les valeurs des nœuds du graphe sont les cases du labyrinthe et les arcs étiquetés par les directions. Dessinez le graphe associé à l exemple de la figure FIGURE 12.3 Un labytinthe composé de 9 cases
66 66 CHAPITRE 12. GRAPHES Représentation du graphe Proposez la matrice d adjascence du graphe précédent V 2 V V 3 V 4 V V 5 V V 6 V V 7 V V 8 V V 9 V V Application Donnez l arbre recouvrant minimal pour le graphe présenté par la figure 13.1 depuis le sommet FIGURE 12.4 Un graphe valué positivement
67 12.2. SKYNET D APRÈS CODINGAME c Skynet d après Codingame c Un arbre recouvrant minimal Nous avons vu en cours que l algorithme de Dijkstra permet d obtenir un arbre a recouvrant depuis un sommet s sur un graphe valué avec des nombres positifs tel que le chemin de a reliant s a tout sommet du graphe est le plus court. Cet algorithme est le suivant : procédure dijkstra (E g : Graphe<Sommet,ReelPositif>, s : Sommet, S arbrerecouvrant : Arbre <Sommet>, coutdepuiss : Dictionnaire<Sommet,ReelPositif>) Déclaration l : Liste<Sommet> sommetdea, sommetaajouter : Sommet arbrerecouvrant creerracine(liste(),s) coutdepuiss dictionnaire() ajouter(coutdepuiss,s,0) l sommetsaccessiblesdepuisarbre(g,arbrerecouvrant) tant que non estvide(l) faire sommetleplusproche(l, arbrerecouvrant, coutdepuiss, sommetdea, sommetaajouter) ajouter(coutdepuiss, sommetaajouter, rechercher(coutdepuiss, sommetdea) + obtenirvaleur(g, sommetdea, sommetaajouter)) ajoutercommefils(arbrerecouvrant, sommetdea, sommetaajouter) l sommetsaccessiblesdepuisarbre(g, arbrerecouvrant) tantque Tel que : la fonction sommetsaccessiblesdepuisarbre permet d obtenir la liste des sommets présents dans le graphe G, non présents dans l arbre recouvrant A, mais accessibles depuis un sommet de l arbre ; la procédure sommetleplusproche qui permet d identifier le prochain sommet à ajouter dans l arbre ainsi que son futur père dans ce dit arbre ; la procédure ajoutercommefils qui permet d ajouter un sommet dans l arbre en spécifiant son père.
68 68 CHAPITRE 12. GRAPHES Signatures Donnez les signatures des trois opérations précédentes. fonction sommetsaccessiblesdepuisarbre (g : Graphe<Sommet,ReelPositif>, a : Arbre<Sommet>) : Liste<Sommet> procédure sommetleplusproche (E Liste<Sommet>,a : Arbre,cout : Dictionnaire<Sommet,ReelPositif>, S sommedea, sommetaajouter : Sommet) procédure ajoutercommefils (E/S a : Arbre<Sommet>, E sommetpere, sommetfils : Sommet) Algorithme Donnez l algorithme de la fonction sommetsaccessiblesdepuisarbre (n oubliez pas de décomposer le problème si besoin). Analyse : sommetsaccessiblesdepuisarbre : Graphe Arbre<Sommet> Liste<Sommet> valeurs : Arbre<Sommet> Liste<Sommet> estpresent : Liste<Sommet> Sommet Booleen Conception préliminaire : fonction valeurs (a : Arbre<Sommet>) : Liste<Sommet> fonction estpresent (l : Liste<Sommet>, s : Sommet) : Booleen Conception détaillée : fonction valeurs (a : Arbre<Sommet>) : Liste<Sommet> Déclaration temp : Liste<Sommet> si estvide(a) alors retourner liste() temp liste() inserer(temp,1,obtenirelement(a)) pour chaque f de obtenirfils(a) pour chaque v de valeurs(f) inserer(temp,1,v) pour pour retourner temp si fonction estpresent (l : Liste<Sommet>, s : Sommet ) : Booleen Déclaration i : Naturel i 1 tant que i longueur(l) et obtenirelement(l,i) s faire i i+1 tantque retourner i>longueur(l)
69 12.2. SKYNET D APRÈS CODINGAME c 69 fonction sommetsaccessiblesdepuisarbre (g : Graphe<Sommet,ReelPositif>, a : Arbre<Sommet>) : Liste<Sommet> Déclaration res : Liste<Sommet> sommetsdea : Liste<Sommet> res liste() sommetsdea valeurs(a) pour chaque s2 de obtenirsommets(g) si non estpresent(sommetsdea,s2) alors pour chaque s1 de sommetsdea si arcpresent(g,s1,s2) alors inserer(res,1,s2) si pour si pour retourner res Le chemin le plus court Donnez l algorithme de la fonction suivante qui permet d obtenir le chemin (une liste de sommets) le plus court permettant d aller d un sommet s1 à un sommet s2 d un graphe valué avec des nombres positifs : fonction cheminpluscourt (g :Graphe, s1,s2 : Sommet) : Liste<Sommet> précondition(s) sommetpresent(g,s1) et sommetpresent(g,s2) procédure cheminpluscourtr (E a : Arbre<Sommet>, scible : Sommet, S ch : Liste<Sommet>) si estvide(a) alors ch liste() si obtenirelement(a)=scible alors ch liste() inserer(ch,1,scible) pour chaque f de obtenirfils(a) cheminpluscourtr(f,scible,temp) si non estvide(temp) alors inserer(temp,1,obtenirelement(a)) si pour si si fonction cheminpluscourt (g : Graphe, s1,s2 : Sommet) : Liste<Sommet> précondition(s) sommetpresent(g,s1) et sommetpresent(g,s2)
70 70 CHAPITRE 12. GRAPHES Déclaration a : Arbre<Sommet> c : Dictionnaire<Sommet,ReelPositif> res : Liste<Sommet> dijkstra(g,s1,a,c) cheminpluscourtr(a,s2,res) retourner res Skynet le virus Le site Web propose des exercices ludiques de programmation. L un des exercices, Skynet le virus est présenté de la façon suivante : Votre virus a créé une backdoor sur le réseau Skynet vous permettant d envoyer de nouvelles instructions au virus en temps réel. Vous décidez de passer à l attaque active en empêchant Skynet de communiquer sur son propre réseau interne. Le réseau Skynet est divisé en sous-réseaux. Sur chaque sous-réseau un agent Skynet a pour tâche de transmettre de l information en se déplaçant de noeud en noeud le long de liens et d atteindre une des passerelles qui mène vers un autre sous-réseau. Votre mission est de reprogrammer le virus pour qu il coupe les liens dans le but d empêcher l agent Skynet de sortir de son sous-réseau et ainsi d informer le hub central de la présence de notre virus. Bref, l agent Skynet (S) est sur un graphe (par exemple celui de la figure 12.5 où les identifiants des sommets ne sont pas indiqués) valué (avec la valeur 1 pour chaque arc) dont certains sommets sont des passerelles (P). Le but du jeu est d empécher l agent skynet d atteindre une des passerelles en supprimant le moins d arcs du graphe. L algorithme de ce jeu est proposé par la procédure skynet. L agentskynet parcourt le graphe (grâce à la fonction sedeplace) de sommet en sommet à chaque itération. Pour résoudre ce problème, il faut couper un arc du graphe à chaque itération de façon à ce que l agent Skynet ne puisse pas atteindre l une des passerelles. De plus il faut faire le moins de coupures possibles (le score est fonction de ce paramètre). Pour cela il suffit de supprimer le premier arc du chemin le plus court entre l agenskynet et la plus proche passerelle. Complétez l algorithme de la procédure skynet (remplacer les... par une ou plusieurs instructions). procédure skynet (E/S g : Graphe<Sommet>, E agentskynet : Sommet, S agentskynetaatteindpasserelle : Booleen) Déclaration passerelles : Liste<Sommet> s : Sommet... passerelles sommetsdespasserelles(g) tant que agentskynetpeutatteindreunepasserelle(g,agentskynet) et non estpresent(passerelles, agentskynet) faire... supprimerarc(g,agentskynet,s) agentskynet sedeplace(g, agentskynet) tantque agentskynetaatteindpasserelle estpresent(agentskynet,passerelles) procédure skynet (E/S g : Graphe<Sommet>, E agentskynet : Sommet, S agentskynetaatteindpasserelle : Booleen)
71 12.2. SKYNET D APRÈS CODINGAME c 71 P S P P FIGURE 12.5 Un sous réseau Skynet Déclaration passerelles : Liste<Sommet> s1,s2,p : Sommet chmin,temp : Liste<Sommet> lmin : Naturel passerelles sommetsdespasserelles(g) tant que agentskynetpeutatteindreunsommet(g,agentskynet) et non estpresent(passerelles, agentskynet) faire chmin cheminpluscourt(g,agentskynet,obtenirelement(passerelles,1)) lmin longueur(chmin) pour chaque p de passerelles ch cheminpluscourt(g,agentskynet,p) si non estvide(ch) et longueur(ch)<lmin alors lmin longueur(ch) chmin ch si pour s obtenirelement(ch,2) supprimerarc(g,agentskynet,s) agentskynet sedeplace(g, agentskynet) tantque agentskynetaatteindpasserelle estpresent(agentskynet,passerelles)
72 72 CHAPITRE 12. GRAPHES
73 Chapitre 13 Programmation dynamique 13.1 L algorithme de Floyd-Warshall FIGURE 13.1 Un graphe orienté valué L algorithme de Floyd-Warshall est un algorithme qui permet de calculer la longueur du plus court chemin entre tous les nœuds d un graphe orienté valué positivement. L algorithme repose sur la remarque suivante : si (a 0,..., a i,..., a p ) est un plus court chemin de a 0 à a p, alors (a 0,..., a i ) est un plus court chemin de a 0 à a i, et (a i,..., a p ) un plus court chemin de a i à a p. De plus, comme les arêtes sont valuées positivement, tout chemin contenant un cycle est nécessairement plus long que le même chemin sans le cycle, si bien qu on peut se limiter à la recherche de plus courts chemins passant par des sommets deux à deux distincts. Floyd montre donc qu il suffit de calculer la suite de matrices déies par : M k i,j k 1 = min(mi,j, M k 1 i,k + M k 1 k,j ). 1 tel que M 0 est la matrice d adjacence du graphe avec : les nœuds qui sont numérotés de 1 à n (et k varie de 1 à n) ; Mi,i 0 = 0 ; Mi,j 0 = + s il n existe pas d arc reliant i à j
74 74 CHAPITRE 13. PROGRAMMATION DYNAMIQUE 1. Donnez la matrice d adjacence M 0 du graphe proposé par la figure 13.1 (pour plus de clarté, vous pouvez ne pas noter les + ). 2. Donnez les matrices M de Floyd pour k variant de 1 à À partir de la matrice M 6 donnez la longueur du plus court chemin reliant le nœud 2 au nœud M 0 = M 1 = M 4 = M 6 = M 3 = M 2 = M M 5 = M Le longueur du chemin le plus court allant de 2 à 4 est donnée par M 6 2,4 = La distance de Levenshtein La distance de Levenshtein est une distance mathématique donnant une mesure de la similarité entre deux chaînes de caractères. Elle est égale au nombre minimal de caractères qu il faut supprimer, insérer ou remplacer pour passer d une chaîne à l autre.
75 13.2. LA DISTANCE DE LEVENSHTEIN 75 On appelle distance de Levenshtein entre deux mots M et P le coût minimal pour aller de M à P en effectuant les opérations élémentaires suivantes : substitution d un caractère de M en un caractère de P ; ajout dans M d un caractère de P ; suppression d un caractère de M. On associe ainsi à chacune de ces opérations un coût. Le coût est toujours égal à 1, sauf dans le cas d une substitution de caractères identiques. (Wikipédia). Pour calculer cette distance on utilise un matrice m de taille P +1 M +1 (tel s représente la longueur de la chaîne s) indicées à partir de 0, tel que : m 0,j = j, j 0.. M m i,0 = i, i 0.. P m i,j = min(m i,j 1 + 1, m i 1,j + 1, m i 1,j Pi,M j ), i 0.. P, j 0.. M La distance de Levenshtein est alors égale à m P, M] Calcul sur un exemple 1. Soit les mots voiture et toile. Remplir la matrice suivante pour calculer la distance de Levenshtein entre ces deux mots. v o i t u r e La distance est donc de 4. m = m = t o i l e v o i t u r e t o i l e Comment interprétez vous la valeur m i,j? m i,j est la distance de Levenshtein entre les i premiers caractères de P avec les j premiers caractères de M Algorithme Proposez l algorithme correspondant.
Représentation des Nombres
Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...
Les arbres binaires de recherche
Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s
Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot
Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,
Algorithme. Table des matières
1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............
Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives
introduction Chapitre 5 Images récursives http ://univ-tln.fr/~papini/sources/flocon.htm Récursivité http://www.poulain.org/fractales/index.html Image qui se contient elle-même 1 Exemples mathématiques
Rappels sur les suites - Algorithme
DERNIÈRE IMPRESSION LE 14 septembre 2015 à 12:36 Rappels sur les suites - Algorithme Table des matières 1 Suite : généralités 2 1.1 Déition................................. 2 1.2 Exemples de suites............................
Architecture des Systèmes d Information Architecture des Systèmes d Information
Plan... Tableaux et tris I3 - Algorithmique et programmation 1 Rappels Nicol Delestre 2 Tableaux à n dimensions 3 Initiation aux tris Tableaux - v2.0.1 1 / 27 Tableaux - v2.0.1 2 / 27 Rappels : tableau
Codage d information. Codage d information : -Définition-
Introduction Plan Systèmes de numération et Représentation des nombres Systèmes de numération Système de numération décimale Représentation dans une base b Représentation binaire, Octale et Hexadécimale
Recherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
Algorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Logiciel de Base. I. Représentation des nombres
Logiciel de Base (A1-06/07) Léon Mugwaneza ESIL/Dépt. Informatique (bureau A118) [email protected] I. Représentation des nombres Codage et représentation de l'information Information externe formats
ARBRES BINAIRES DE RECHERCHE
ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d
1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : [email protected] Page personnelle : http://www.lri.fr/ hivert
1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : [email protected] Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes
1 Recherche en table par balayage
1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément
Définitions. Numéro à préciser. (Durée : )
Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.
Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point
03 Mai 2013 Collège Oasis Durée de L épreuve : 2 heures. apple Le sujet comporte 4 pages et est présenté en livret ; apple La calculatrice est autorisée ; apple 4 points sont attribués à la qualité de
MIS 102 Initiation à l Informatique
MIS 102 Initiation à l Informatique Responsables et cours : Cyril Gavoille Catherine Pannier Matthias Robine Marc Zeitoun Planning : 6 séances de cours 5 séances de TD (2h40) 4 séances de TP (2h40) + environ
Continuité et dérivabilité d une fonction
DERNIÈRE IMPRESSIN LE 7 novembre 014 à 10:3 Continuité et dérivabilité d une fonction Table des matières 1 Continuité d une fonction 1.1 Limite finie en un point.......................... 1. Continuité
Chapitre 2 Le problème de l unicité des solutions
Université Joseph Fourier UE MAT 127 Mathématiques année 2011-2012 Chapitre 2 Le problème de l unicité des solutions Ce que nous verrons dans ce chapitre : un exemple d équation différentielle y = f(y)
V- Manipulations de nombres en binaire
1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,
t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :
Terminale STSS 2 012 2 013 Pourcentages Synthèse 1) Définition : Calculer t % d'un nombre, c'est multiplier ce nombre par t 100. 2) Exemples de calcul : a) Calcul d un pourcentage : Un article coûtant
Représentation d un entier en base b
Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir
Feuille TD n 1 Exercices d algorithmique éléments de correction
Master Sciences, Technologies, Santé Mention Mathématiques, spécialité Enseignement des mathématiques Algorithmique et graphes, thèmes du second degré Feuille TD n 1 Exercices d algorithmique éléments
La Clé informatique. Formation Excel XP Aide-mémoire
La Clé informatique Formation Excel XP Aide-mémoire Septembre 2005 Table des matières Qu est-ce que le logiciel Microsoft Excel?... 3 Classeur... 4 Cellule... 5 Barre d outil dans Excel...6 Fonctions habituelles
Licence Sciences et Technologies Examen janvier 2010
Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.
EXCEL TUTORIEL 2012/2013
EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi
ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII
ALGORITHMIQUE II NOTION DE COMPLEXITE 1 2 Comment choisir entre différents algorithmes pour résoudre un même problème? Plusieurs critères de choix : Exactitude Simplicité Efficacité (but de ce chapitre)
Conversion d un entier. Méthode par soustraction
Conversion entre bases Pour passer d un nombre en base b à un nombre en base 10, on utilise l écriture polynomiale décrite précédemment. Pour passer d un nombre en base 10 à un nombre en base b, on peut
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT
Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT Ces exercices portent sur les items 2, 3 et 5 du programme d informatique des classes préparatoires,
UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
TP 1. Prise en main du langage Python
TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer
Fonctions de plusieurs variables
Module : Analyse 03 Chapitre 00 : Fonctions de plusieurs variables Généralités et Rappels des notions topologiques dans : Qu est- ce que?: Mathématiquement, n étant un entier non nul, on définit comme
Algorithmes récursifs
Licence 1 MASS - Algorithmique et Calcul Formel S. Verel, M.-E. Voge www.i3s.unice.fr/ verel 23 mars 2007 Objectifs de la séance 3 écrire des algorithmes récursifs avec un seul test rechercher un élément
Cours d Informatique
Cours d Informatique 1ère année SM/SMI 2007/2008, Info 2 Département de Mathématiques et d Informatique, Université Mohammed V [email protected] [email protected] 2007/2008 Info2, 1ère année SM/SMI 1
Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation
Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul
Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications
Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications A. Optimisation sans contrainte.... Généralités.... Condition nécessaire et condition suffisante
Initiation à LabView : Les exemples d applications :
Initiation à LabView : Les exemples d applications : c) Type de variables : Créer un programme : Exemple 1 : Calcul de c= 2(a+b)(a-3b) ou a, b et c seront des réels. «Exemple1» nom du programme : «Exemple
Adama MBODJI MBODJ.SYSTEM
MBODJ.SYSTEM Tableaux & vecteurs Algorithmes de tris Chaînes de caractères Listes linéaires Piles & Files Arbres Fichiers Je dédie cet ouvrage à mon père Souleymane MBODJI 2 Dédicace... 2 Sommaire... 3
Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur
Excel Avancé Plan Outils de résolution La valeur cible Le solveur Interactivité dans les feuilles Fonctions de recherche (ex: RechercheV) Utilisation de la barre d outils «Formulaires» Outils de simulation
Algorithmique avec Algobox
Algorithmique avec Algobox 1. Algorithme: Un algorithme est une suite d instructions qui, une fois exécutée correctement, conduit à un résultat donné Un algorithme doit contenir uniquement des instructions
Cours d Analyse. Fonctions de plusieurs variables
Cours d Analyse Fonctions de plusieurs variables Licence 1ère année 2007/2008 Nicolas Prioux Université de Marne-la-Vallée Table des matières 1 Notions de géométrie dans l espace et fonctions à deux variables........
De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que
Introduction. On suppose connus les ensembles N (des entiers naturels), Z des entiers relatifs et Q (des nombres rationnels). On s est rendu compte, depuis l antiquité, que l on ne peut pas tout mesurer
Statistiques Descriptives à une dimension
I. Introduction et Définitions 1. Introduction La statistique est une science qui a pour objectif de recueillir et de traiter les informations, souvent en très grand nombre. Elle regroupe l ensemble des
Traitement des données avec Microsoft EXCEL 2010
Traitement des données avec Microsoft EXCEL 2010 Vincent Jalby Septembre 2012 1 Saisie des données Les données collectées sont saisies dans une feuille Excel. Chaque ligne correspond à une observation
Programmation Objet - Cours II
Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION
145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu
Excel avancé. Frédéric Gava (MCF) [email protected]
Excel avancé Frédéric Gava (MCF) [email protected] LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Rappels et compléments
La fonction exponentielle
DERNIÈRE IMPRESSION LE 2 novembre 204 à :07 La fonction exponentielle Table des matières La fonction exponentielle 2. Définition et théorèmes.......................... 2.2 Approche graphique de la fonction
Raisonnement probabiliste
Plan Raisonnement probabiliste IFT-17587 Concepts avancés pour systèmes intelligents Luc Lamontagne Réseaux bayésiens Inférence dans les réseaux bayésiens Inférence exacte Inférence approximative 1 2 Contexte
Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3
8 Systèmes de numération INTRODUCTION SYSTÈMES DE NUMÉRATION POSITIONNELS Dans un système positionnel, le nombre de symboles est fixe On représente par un symbole chaque chiffre inférieur à la base, incluant
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
EXERCICES DE REVISIONS MATHEMATIQUES CM2
EXERCICES DE REVISIONS MATHEMATIQUES CM2 NOMBRES ET CALCUL Exercices FRACTIONS Nommer les fractions simples et décimales en utilisant le vocabulaire : 3 R1 demi, tiers, quart, dixième, centième. Utiliser
Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007
Vision industrielle et télédétection - Détection d ellipses Guillaume Martinez 17 décembre 2007 1 Table des matières 1 Le projet 3 1.1 Objectif................................ 3 1.2 Les choix techniques.........................
COURS EULER: PROGRAMME DE LA PREMIÈRE ANNÉE
COURS EULER: PROGRAMME DE LA PREMIÈRE ANNÉE Le cours de la première année concerne les sujets de 9ème et 10ème années scolaires. Il y a bien sûr des différences puisque nous commençons par exemple par
DOCM 2013 http://docm.math.ca/ Solutions officielles. 1 2 10 + 1 2 9 + 1 2 8 = n 2 10.
A1 Trouvez l entier positif n qui satisfait l équation suivante: Solution 1 2 10 + 1 2 9 + 1 2 8 = n 2 10. En additionnant les termes du côté gauche de l équation en les mettant sur le même dénominateur
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Les structures de données. Rajae El Ouazzani
Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l
LE PROBLEME DU PLUS COURT CHEMIN
LE PROBLEME DU PLUS COURT CHEMIN Dans cette leçon nous définissons le modèle de plus court chemin, présentons des exemples d'application et proposons un algorithme de résolution dans le cas où les longueurs
Formats d images. 1 Introduction
Formats d images 1 Introduction Lorsque nous utilisons un ordinateur ou un smartphone l écran constitue un élément principal de l interaction avec la machine. Les images sont donc au cœur de l utilisation
Modes Opératoires WinTrans Mai 13 ~ 1 ~
Modes Opératoires WinTrans Mai 13 ~ 1 ~ Table des matières Facturation... 2 Tri Filtre... 2 Procédures facturation... 3 Transfert Compta... 8 Création d un profil utilisateur... Erreur! Signet non défini.
TSTI 2D CH X : Exemples de lois à densité 1
TSTI 2D CH X : Exemples de lois à densité I Loi uniforme sur ab ; ) Introduction Dans cette activité, on s intéresse à la modélisation du tirage au hasard d un nombre réel de l intervalle [0 ;], chacun
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Chapitre 1 I:\ Soyez courageux!
Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel
ALGORITHMIQUE ET PROGRAMMATION En C
Objectifs ALGORITHMIQUE ET PROGRAMMATION Une façon de raisonner Automatiser la résolution de problèmes Maîtriser les concepts de l algorithmique Pas faire des spécialistes d un langage Pierre TELLIER 2
* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours
Exo7 Continuité (étude globale). Diverses fonctions Exercices de Jean-Louis Rouget. Retrouver aussi cette fiche sur www.maths-france.fr * très facile ** facile *** difficulté moyenne **** difficile *****
Correction TD algorithmique
Affectation Correction TD algorithmique Exercice 1 algo affect1b b 5 a b+1 b 2 Il vaut faire passer la notion de variable et la notion de stockage mémoire. Une variable n a donc pas d historique et à un
Introduction à la présentation graphique avec xmgrace
Chapitre 6 Introduction à la présentation graphique avec xmgrace Contenu 6.1 Avant-propos....................... 71 6.2 Faire un simple graphe................. 72 6.3 Un graphe avec plusieurs courbes...........
Chapitre 5 : Flot maximal dans un graphe
Graphes et RO TELECOM Nancy A Chapitre 5 : Flot maximal dans un graphe J.-F. Scheid 1 Plan du chapitre I. Définitions 1 Graphe Graphe valué 3 Représentation d un graphe (matrice d incidence, matrice d
TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année
TD de supervision J.P. Chemla Polytech Tours Département productique 2ème année 1 Présentation de l équipement On veut superviser une cuve dans un batiment. Les informations à visualiser sont les suivantes
Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques
Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques CTIA04 Page 1 1. Les types de données sous S7 300 Il existe plusieurs types de données utilisées pour la programmation
Algorithmique I. [email protected] [email protected] [email protected]. Algorithmique I 20-09-06 p.1/??
Algorithmique I [email protected] [email protected] [email protected] Télécom 2006/07 Algorithmique I 20-09-06 p.1/?? Organisation en Algorithmique 2 séances par semaine pendant 8 semaines. Enseignement
Python - introduction à la programmation et calcul scientifique
Université de Strasbourg Environnements Informatique Python - introduction à la programmation et calcul scientifique Feuille de TP 1 Avant de commencer Le but de ce TP est de vous montrer les bases de
Image d un intervalle par une fonction continue
DOCUMENT 27 Image d un intervalle par une fonction continue La continuité d une fonction en un point est une propriété locale : une fonction est continue en un point x 0 si et seulement si sa restriction
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Correction du Baccalauréat S Amérique du Nord mai 2007
Correction du Baccalauréat S Amérique du Nord mai 7 EXERCICE points. Le plan (P) a une pour équation cartésienne : x+y z+ =. Les coordonnées de H vérifient cette équation donc H appartient à (P) et A n
TOUT CE QU IL FAUT SAVOIR POUR LE BREVET
TOUT E QU IL FUT SVOIR POUR LE REVET NUMERIQUE / FONTIONS eci n est qu un rappel de tout ce qu il faut savoir en maths pour le brevet. I- Opérations sur les nombres et les fractions : Les priorités par
I. Ensemble de définition d'une fonction
Chapitre 2 Généralités sur les fonctions Fonctions de références et fonctions associées Ce que dit le programme : Étude de fonctions Fonctions de référence x x et x x Connaître les variations de ces deux
Précision d un résultat et calculs d incertitudes
Précision d un résultat et calculs d incertitudes PSI* 2012-2013 Lycée Chaptal 3 Table des matières Table des matières 1. Présentation d un résultat numérique................................ 4 1.1 Notations.........................................................
Chp. 4. Minimisation d une fonction d une variable
Chp. 4. Minimisation d une fonction d une variable Avertissement! Dans tout ce chapître, I désigne un intervalle de IR. 4.1 Fonctions convexes d une variable Définition 9 Une fonction ϕ, partout définie
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS
Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS Mémento Ouvrir TI-Nspire CAS. Voici la barre d outils : L insertion d une page, d une activité, d une page où l application est choisie, pourra
Priorités de calcul :
EXERCICES DE REVISION POUR LE PASSAGE EN QUATRIEME : Priorités de calcul : Exercice 1 : Calcule en détaillant : A = 4 + 5 6 + 7 B = 6 3 + 5 C = 35 5 3 D = 6 7 + 8 E = 38 6 3 + 7 Exercice : Calcule en détaillant
Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009
Déroulement Algorithmes et structures de données Cours 1 et 2 Patrick Reuter http://www.labri.fr/~preuter/asd2009 CM mercredi de 8h00 à 9h00 (Amphi Bât. E, 3 ème étage) ED - Groupe 3 : mercredi, 10h30
CORRECTION EXERCICES ALGORITHME 1
CORRECTION 1 Mr KHATORY (GIM 1 A) 1 Ecrire un algorithme permettant de résoudre une équation du second degré. Afficher les solutions! 2 2 b b 4ac ax bx c 0; solution: x 2a Solution: ALGORITHME seconddegré
La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique
La programmation linéaire : une introduction Qu est-ce qu un programme linéaire? Qu est-ce qu un programme linéaire? Exemples : allocation de ressources problème de recouvrement Hypothèses de la programmation
chapitre 4 Nombres de Catalan
chapitre 4 Nombres de Catalan I Dénitions Dénition 1 La suite de Catalan (C n ) n est la suite dénie par C 0 = 1 et, pour tout n N, C n+1 = C k C n k. Exemple 2 On trouve rapidement C 0 = 1, C 1 = 1, C
Les algorithmes de base du graphisme
Les algorithmes de base du graphisme Table des matières 1 Traçage 2 1.1 Segments de droites......................... 2 1.1.1 Algorithmes simples.................... 3 1.1.2 Algorithmes de Bresenham (1965).............
Solutions du chapitre 4
Solutions du chapitre 4 Structures de contrôle: première partie 4.9 Identifiez et corrigez les erreurs (il peut y en avoir plus d une par segment de code) de chacune des proposition suivantes: a) if (
EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version 1.0 30/11/05
EXCEL PERFECTIONNEMENT Version 1.0 30/11/05 SERVICE INFORMATIQUE TABLE DES MATIERES 1RAPPELS...3 1.1RACCOURCIS CLAVIER & SOURIS... 3 1.2NAVIGUER DANS UNE FEUILLE ET UN CLASSEUR... 3 1.3PERSONNALISER LA
Informatique Générale
Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) [email protected] Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html
TBI et mathématique. Pour vous soutenir dans votre enseignement des mathématiques. Les outils du logiciel Notebook. les ressources internet
TBI et mathématique Pour vous soutenir dans votre enseignement des mathématiques Dessin tiré du site www.recitus.qc.ca Les outils du logiciel Notebook et les ressources internet Document préparé par France
Quelques Algorithmes simples
Quelques Algorithmes simples Irène Guessarian [email protected] 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été
Information. BASES LITTERAIRES Etre capable de répondre à une question du type «la valeur trouvée respecte t-elle le cahier des charges?
Compétences générales Avoir des piles neuves, ou récentes dans sa machine à calculer. Etre capable de retrouver instantanément une info dans sa machine. Prendre une bouteille d eau. Prendre CNI + convocation.
1 I ) Une première approche de l algorithme en seconde, saison 2010 _ 2011. Antoine ROMBALDI
1 I ) Une première approche de l algorithme en seconde, saison 2010 _ 2011. Antoine ROMBALDI L objectif est de rendre les élèves capables : De décrire certains algorithmes en langage naturel. D en réaliser
Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé
Baccalauréat S ntilles-guyane 11 septembre 14 Corrigé EXERCICE 1 6 points Commun à tous les candidats Une entreprise de jouets en peluche souhaite commercialiser un nouveau produit et à cette fin, effectue
Cours 7 : Utilisation de modules sous python
Cours 7 : Utilisation de modules sous python 2013/2014 Utilisation d un module Importer un module Exemple : le module random Importer un module Exemple : le module random Importer un module Un module est
LibreOffice Calc : introduction aux tableaux croisés dynamiques
Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau
