Informatique J1 MI 1003, Université de Bordeaux. Équipe enseignante MI informatique

Dimension: px
Commencer à balayer dès la page:

Download "Informatique J1 MI 1003, Université de Bordeaux. Équipe enseignante MI 1003 http://dept-info.labri.fr/initinfo. informatique"

Transcription

1 Informatique J1 MI 1003, Université de Bordeaux Équipe enseignante MI informatique

2

3 Table des matières 3 1 Premiers pas en python Affectation et expressions Fonctions Conditionnelles Listes et boucles for Manipulation d images Mise en jambes À vous de jouer Manipulation de couleurs Agrandissement d une image Une image peut en cacher une autre : stéganographie Manipulations géométriques Conversion d une image en noir et blanc Sommets d un graphe Échauffement : coloriages Voisins Calculs sur les degrés, sommets isolés Formule des poignées de mains Boucles Graphes simples Compléments de programmation Boucles while Suites récurrentes Dessin d une fractale Chaînes et connexité Échauffement Arbres Algorithmes Complexité Chemin Problèmes et algorithmes de coloration Coloration d un graphe. Nombre chromatique Graphes 2-coloriables Heuristique (hors-programme) A Aide-mémoire 49 3

4

5 Introduction et utilisation du fascicule L objectif de ce cours universitaire de licence semestre 1 est de donner un aperçu de ce qu est l informatique en tant que science telle qu elle est enseignée dans le cursus «informatique» à l université. L enseignement de la partie technique de l informatique est l objet du cours de C2i. L informatique couvrant de très nombreux domaines (bases de données, calcul, image, langages, réseau, sécurité, son,...), il est impossible de donner un aperçu complet horizontal en un seul semestre. Nous allons donc plutôt approfondir deux notions qui sont utilisées en informatique, les notions d image et de graphe, et dérouler verticalement les différents types de travaux que l on effectue typiquement en informatique : des programmes travaillant dessus, bien sûr, mais aussi des preuves théoriques, et des algorithmes permettant d écrire des programmes plus efficaces que des programmes naïfs. Ce cours ne nécessite pas de pré-requis en informatique. Il n utilise que quelques pré-requis de mathématiques : logique de base, preuve par récurrence. L ensemble des resources électroniques (e.g, pdf du polycopié, annales d examens) est sur le site web Il y aura un DS, et un examen terminal en fin de semestre. Il y aura également un TP noté ainsi que des tests. Contenu du fascicule Ce fascicule contient différents chapitres correspondant aux différents objets et propriétés de graphes que nous allons étudier pendant le semestre. À la fin du fascicule se trouve un aide-mémoire de la syntaxe de python et des fonctions de notre bibliothèque de graphes, il sera utile en TP pour les retrouver rapidement. Un support plus fourni mais plus ancien est disponible sur Internet sous forme d un livre : (Initiation à l Informatique, par Irène Durand et Robert Strandh) Mise en page Pour les retrouver facilement dans le fascicule, les introductions de notions sont faites à l aide d un cadre, par exemple graphe, ou pour les fonctions : listesommets(g) retourne la liste des sommets de G On trouve à gauche ce que l on appelle le prototype de la fonction, c est-à-dire son nom et la liste des paramètres que l on doit lui fournir. La partie droite décrit son comportement. Seule la liste des fonctions de la bibliothèque de graphes est fournie lors des épreuves. Toutes les autres notions encadrées doivent être apprises. 5

6 Typographie L informatique étant une science faisant le lien entre théorie et programmation, dans ce fascicule, on utilise les conventions de typographie suivantes pour bien distinguer les deux : les énoncés théoriques sont écrits en italique. Il ne s agit donc pas de code python, mais d énoncés mathématiques décrivant les objets de manière abstraite, permettant ainsi d écrire des preuves, par exemple. les énoncés python sont écrits en style machine à écrire (police à chasse fixe), il ne s agit donc pas d énoncés mathématiques, mais de code python, interprétés par la machine. Il est important de bien distinguer les deux, car ils ne s écrivent pas de la même façon et n ont pas exactement les mêmes détails de signification Par exemple i=i+1 est (presque) toujours faux en mathématiques, mais i=i+1 est très utilisé en python! Certains exercices incluent par exemple un énoncé mathématique qu il s agira de reformuler en python. Le langage de programmation python TM Les exercices de programmation de ce fascicule sont basés sur le langage python TM version 3.0 ou supérieure (cf. ). Attention, l ancienne version 2 de python est légèrement différente et incompatible. python est utilisé très largement dans l industrie, que ce soit pour des sites webs (par exemple youtube, pinterest, instagram, divers journaux,...), du traitement de données (par exemple Google Groups, Gmail, Google maps, dropbox, openstack,...), des scripts (par exemple les scripts 3D de blender), des applications pour smartphone, des jeux (Civilization IV, Battlefield 2, EVE Online,...), des applications de calcul scientifique (à la NASA), etc. 6

7 Chapitre 1. Premiers pas en python Voir l annexe A pour une description de l environnement Python Tutor. 1.1 Affectation et expressions python permet tout d abord de faire des calculs. On peut évaluer des expressions (arithmétiques ou booléennes, par exemple). Il faut pour cela respecter la syntaxe du langage. On peut sauvegarder des valeurs dans des variables. Chaque variable a un nom. Par exemple, pour sauvegarder la valeur dans une variable qui s appelle x, on tape l instruction x = 123 * 45 On peut ensuite réutiliser x, et sauvegarder la valeur de x 2 dans la variable de nom y en tapant l instruction y = x * x. Contrairement à sa signification mathématique, le symbole = signifie «calculer la valeur à droite du signe = et mémoriser le résultat dans la variable dont le nom est à gauche du signe =», il y a donc deux étapes bien distinctes : calculer d abord, et stocker le résultat ensuite. Exercice Que contiennent les variables x, y, z après les instructions suivantes? x = 6 y = x + 3 x = 3 z = 2 * y - 7 Exercice L instruction i = i + 1 a-t-elle un sens ; si oui lequel? Et i + 1 = i? Exercice Que contiennent les variables x, y, z après les instructions suivantes? x = 6 y = 7 z = x z = z + y Exercice Quel est le résultat de l instruction x = 2 * x? Si la valeur initiale de x est 1, donner les valeurs successives de x après une, deux, trois, etc. exécutions de cette instruction. Exercice Écrire une suite d instructions permettant d échanger le contenu de deux variables a et b (sans utiliser le raccourci python a, b = b, a). Exercice Écrire une instruction qui affecte à la variable m le résultat du calcul de la moyenne de deux réels a et b pondérés par les coefficients respectifs coef1 et coef2. Expressions booléennes Une expression booléenne est une expression qui n a que deux valeurs possibles, True (vrai) ou False (faux) ; les tests x == y (égalité), x!= y (inégalité), x < y, x <= y, x >= y, etc. sont des expressions booléennes. On peut combiner des expressions booléennes avec les opérateurs and, or et not. 7

8 Exercice Écrire une expression qui vaut True si x appartient à [0, 5[ et False dans le cas contraire. Écrire une suite d instructions permettant d évaluer cette expression. Divisions entières En termes simples, la division entière est une division arrondie «par défaut», c est-à-dire que l on ne conserve pas les chiffres après la virgule dans le résultat (le quotient) : 17/5 = 3, 4 mais on ne conserve que 3. Il y a alors un reste : = 2 Plus formellement, le quotient entier q de deux entiers a et b positifs, et le reste r de la division sont définis par : a = bq + r avec 0 r < b Par exemple le quotient et le reste de la division de 17 par 5 sont 3 et 2 car 17 = En python le quotient entier de a par b est noté a//b, et le reste a%b (aussi appelé modulo). Exercice Écrire une expression qui vaut True si l entier n est pair et False dans le cas contraire. Écrire une suite d instructions permettant d évaluer cette expression. Exercice Taper les instructions suivantes et prenez le temps d expliquer précisément l évolution des variables pendant l exécution pas à pas de ces instructions. x = 11 * 34 x = # ceci est un commentaire y = 13 / 4 # division avec virgule y = 13 // 4 # division entiere z = 13 % 2 z = 14 % 3 i = 5 i = i + 4 j = 0 b = i < j b = i!= 9 b = i == Fonctions Exemple de définition de fonction : def f(x): return x*x + x + 1 Ne pas oublier les deux points à la fin de la première ligne. Les lignes suivantes (dans ce premier exemple il y en a une seule) contiennent des instructions qui constituent le corps de la définition ; ces instructions seront exécutées chaque fois que l on utilisera la fonction, et doivent être indentées, c est-à-dire décalées pour indiquer à python qu elles font partie de la définition de la fonction. Ne pas oublier d appuyer deux fois sur entrée à la fin pour insérer une ligne vide (non indentée, donc) pour que python puisse savoir quand la définition est finie. La plupart des fonctions servent, comme en mathématiques, à calculer (et retourner) un résultat, indiqué dans l instruction return. Ne pas confondre définir et utiliser une fonction : en jargon informatique on distingue définition, que l on effectue en générale une seule fois, pour fournir le corps de la fonction, et appel de fonction, que l on fait autant de fois que l on veut. De même ne pas confondre les paramètres dans la définition (ici il y en a un seul, nommé x), et les arguments fournis lors de l appel. Le premier exercice ci-dessous illustre ces notions. 8

9 Exercice Après avoir défini la fonction f comme ci-dessus, taper les instructions suivantes qui appellent cette fonction en lui passant différents arguments et prenez le temps d expliquer en détail les résultats obtenus. y = f (2) t = 4 y = f(t) y = f (1) + f (2) x = (3* t + 1) / 2 y = f(x) x = (3* t + 1) // 2 y = f(x) z = f(x - t) t = f(t) x = f(f (1)) Comme pour l instruction d affectation, l appel d une fonction se fait donc en plusieurs étapes bien distinctes : les valeurs des arguments passés à la fonction sont d abord calculées. La fonction est alors appelée avec le résultat de ces calculs. Le contenu de la définition de la fonction est alors exécuté, les paramètres contenant alors les résultats des calculs des arguments. La fonction retourne (à l aide de return) une valeur. L exécution revient alors à l endroit où l on a effectué l appel à la fonction, et c est la valeur retournée par la fonction qui y est utilisée. Exercice Écrire une fonction moyenne(a,b) qui retourne la moyenne de deux nombres a et b. Testez-la. Exercice Écrire une fonction pair(n) qui teste si n est pair ; la valeur calculée doit être booléenne, c est-à-dire égale à True ou False. Testez-la. 1.3 Conditionnelles La syntaxe if... else... permet de tester des conditions pour exécuter ou non certaines instructions. Exemple : prix = 15 * n + 10 if age <= 18: prix = 10 * n + 5 if age <= 18: prix = 10 * n + 5 else : prix = 15 * n + 10 Ne pas oublier les deux points à la fin des lignes if, else. Les instructions à exécuter dans chacun des cas doivent être indentées et rigoureusement alignées verticalement (ici il y a quatre blancs au début de chaque instruction indentée) en fait l utilisateur est aidé dans cette tâche par le logiciel de programmation, qui insère les blancs à sa place. La partie else n est pas obligatoire : son absence indique simplement qu il n y a rien à faire dans ce cas. La syntaxe if... else... peut être imbriquée, par exemple : if age <= 5: prix = 0 else : if age <= 18: prix = 10 * n + 5 else : prix = 15 * n

10 Cela permet ici de distinguer trois cas : age 5, 5 < age 18 et age > 18. On peut utiliser la syntaxe if... elif... else... pour l écrire de manière plus simple. elif peut être répété autant de fois que voulu. Sur cet exemple : if age <= 5: prix = 0 elif age <= 18: prix = 10 * n + 5 else : prix = 15 * n + 10 Exercice Donner les valeurs des variables x et y après exécution de l exemple suivant pour x valant 1, puis pour x valant 8. if x % 2 == 0: y = x // 2 else : y = x + 1 x = x + 1 Même question pour chacun des codes suivants : if x % 2 == 0: y = x // 2 y = x + 1 x = x + 1 Code A if x % 2 == 0: y = x // 2 else : y = x + 1 x = x + 1 Code B if x % 2 == 0: y = x // 2 else : y = x + 1 x = x + 1 Code C Exercice Écrire et tester une fonction compare(a,b) qui retourne 1 si a < b, 0 si a = b, et 1 si a > b. Testez-la. Exercice Écrire une fonction max2(x,y) qui calcule et retourne le maximum de deux nombres x et y. Attention : bien appeler cette fonction max2, car la fonction max est prédéfinie en python. Exercice Écrire une fonction max3(x,y,z) qui calcule et retourne le maximum de trois nombres x, y, z. Donner plusieurs versions de cette fonction dont une utilise la fonction max2. Exercice Écrire une fonction uneminuteenplus qui calcule et retourne l heure une minute après celle passée en paramètre sous forme de deux entiers que l on suppose cohérents. Exemples : uneminuteenplus(14,32) retourne (14, 33). uneminuteenplus(14,59) retourne (15, 0). Ne pas oublier le cas de minuit. Exercice Le service de reprographie propose les photocopies avec le tarif suivant : les 10 premières coûtent 20 centimes l unité, les 20 suivantes coûtent 15 centimes l unité et au-delà de 30 le coût est de 10 centimes. Écrire une fonction coutphotocopies(n) qui calcule et retourne le prix à payer pour n photocopies. 10

11 1.4 Listes et boucles for python permet de manipuler les listes d éléments, par exemple [2,8,5] est une liste d entiers. La fonction len (abréviation de length) retourne la longueur d une liste (on dit aussi sa taille), par exemple len([2,8,5]) vaut 3. La boucle for permet de parcourir les éléments d une liste ; ne pas oublier les deux points à la fin de la ligne, et les lignes suivantes doivent être indentées (décalées). La fonction range permet de construire une liste d entiers consécutifs. Exercice Dans l environnement Python Tutor, entrer l instruction suivante et analyser ce qui est affiché : for i in [2, 8, 5]: print (i, i * i) Même question pour : u = [2, 8, 5] for i in u: print (i, i * i) Entrer les deux instructions suivantes et analyser les réponses de python : x = range ( 10) u = list ( range (10)) Continuer de même avec les instructions suivantes : for j in range ( 10): print (j, j * j) v = list ( range (3, 8)) for k in range (3, 8): print (k, 2 * k + 1) print (2 ** k) Les variables i, j, k sont-elles définies après exécution de ces instructions? Si oui, quelles sont leurs valeurs? Exercice Dans l environnement Python Tutor, tester chacun des groupes d instructions suivantes et analyser les résultats comme dans l exercice précédent : u = list ( range (1, 10)) v = list ( range (2, 20, 3)) for a in ["a","b","c"]: for i in [1,2,3]: print (a, i) u = [2,6,1,10,6] v = [2,5,6,4] for x in u: for y in v: print (x, y, x + y, x == y) 11

12 La syntaxe complète de range est donc : range ( debut,fin, pas ) Où pas est optionnel, par défaut il vaut 1, et debut est optionnel également, par défaut il vaut 0. Exercice On considère la définition suivante : def somme (n): s = 0 for i in range (1, n +1): s = s + i return s Quelles sont les valeurs de somme(3), de somme(5) et de somme(n)? Connaissez-vous une formule qui permet de calculer le même résultat? L instruction return arrête l exécution de la fonction qui la contient. Que calcule la fonction somme si par malheur on indente trop la dernière ligne, comme ci-dessous? def somme (n): s = 0 for i in range (1, n +1): s = s + i return s # gros bug! On considère maintenant la fonction suivante : def isommesup (n, smin ): s = 0 for i in range (1, n +1): s = s + i if s > smin : return i return 0 Que retourne isommesup(100,20)? isommesup(10,20)? isommesup(5,20)? D une manière générale, que calcule la fonction isommesup? Pourquoi la version suivant ne produit par le bon résultat? def isommesup2 (n, smin ): s = 0 for i in range (1, n +1): s = s + i if s > smin : return i else : return 0 Exercice Écrire une fonction sommecarres(n) qui calcule et retourne n i 2. i=1 12

13 Exercice La fonction factorielle peut être définie de la manière suivante : { 0! = 1, n! = 1 2 n pour n 1. Écrire une fonction factorielle(n) qui utilise cette définition pour calculer et retourner n!. Tester en affichant les factorielles des nombres de 0 à 16. Écrire une fonction minfact(n,f) qui retourne le plus petit entier k n tel que k! f, s il existe (c est-à-dire si n! f). Exercice On considère la définition suivante : def sommeliste (L): s = 0 for i in L: s = s + i return s Quelles sont les valeurs de sommeliste([1,3,13]), de sommeliste(range(5)), et de sommeliste([])? Exercice Écrire les fonctions suivantes prenant en paramètre une liste L : une fonction moyenneliste(l) qui calcule et retourne la moyenne de ces nombres, une fonction maximumliste(l) qui calcule et retourne le maximum de ces nombres. une fonction nbpairsliste(l) qui compte et retourne combien de ces nombres sont pairs. une fonction touspairs(l) qui renvoie True si tous les nombres de la liste sont pairs, et False sinon. 13

14

15 Chapitre 2. Manipulation d images Une image, en informatique, est un simple tableau à deux dimensions de points colorés (appelés pixels, picture elements). Les coordonnées (x, y) d un pixel expriment sa position au sein de l image : x est son abscisse, en partant de la gauche de l image, et y est son ordonnée, en partant du haut de l image (à l inverse de l ordonnée mathématique, donc). Elles partent toutes deux de 0. Le schéma ci-dessous montre un exemple d image en gris sur fond blanc, de 7 pixels de largeur et 4 pixels de hauteur, les abscisses vont donc de 0 à 6 et les ordonnées vont de 0 à 3. 0,0 1,0 2,0 3,0 4,0 5,0 6,0 0,1 1,1 2,1 3,1 4,1 5,1 6,1 0,2 1,2 2,2 3,2 4,2 5,2 6,2 0,3 1,3 2,3 3,3 4,3 5,3 6,3 La couleur RGB (r, g, b) d un pixel est la quantité de rouge (r pour red), vert (g pour green) et de bleu (b pour blue) composant la couleur affichée à l écran. Le mélange se fait comme trois lampes colorées rouge, vert et bleue, et les trois valeurs r, g, b expriment les intensités lumineuses de chacune de ces trois lampes, exprimées entre 0 et 255. Par exemple, (0, 0, 0) correspond à trois lampes éteintes, et produit donc du noir. (255, 255, 255) correspond à trois lampes allumées au maximum, et produit donc du blanc. (255, 0, 0) correspond à seulement une lampe rouge allumée au maximum, et produit donc du rouge. (255, 255, 0) correspond à une lampe rouge et une lampe verte allumées au maximum, et produit donc du jaune. Et ainsi de suite. Cela correspond très précisément à ce qui se passe sur vos écrans! Si vous prenez une loupe, vous verrez que l écran est composé de petits points (appelés sous-pixels) verts, rouges et bleus, allumés plus ou moins fortement pour former les couleurs. Dans ce chapitre, nous étudierons deux grands types d opérations disponibles typiquement dans les logiciels de manipulation d image : nous produirons parfois des images de zéro (synthèse d images), d autres fois nous transformeront des images existantes (traitement d images, ou filtres). 2.1 Mise en jambes À partir de maintenant, on utilisera plutôt l environnement idle3, décrit en annexe A. python permet bien sûr de manipuler des images, à l aide de la python Imaging Library (PIL), qui est préinstallée sur vos machines. Il faudra donc, pour ce chapitre, appeler from PIL. Image import * 15

16 pour importer la PIL. On dispose alors d un ensemble de fonctions pour manipuler des images. Voici un résumé des fonctions que nous utiliserons dans ce chapitre : open(nom) (ou Image.open dans Python Tutor) Image.save(img, nom) new("rgb",(large,haut)) (ou Image.new dans Python Tutor) Image.show(img) (seulement dans idle3) Image.putpixel(img, (x,y), (r,g,b)) Image.getpixel(img, (x,y)) Ouvre le fichier nom et retourne l image contenue dedans (par exemple open("teapot.png"). Sauvegarde l image img dans le fichier nom. Retourne une image de taille large haut, initialement noire. Affiche l image img. Peint le pixel (x, y) dans l image img de la couleur (r, g, b) Retourne la couleur du pixel (x, y) dans l image img Exercice Exécuter les instructions suivantes : monimage = new (" RGB ",(300,200)) Image. putpixel ( monimage, (50,50),(255,255,255)) Image. show ( monimage ) Expliquer ce qu effectue chaque instruction, et observer l image produite. Confirmer ainsi le sens dans lequel fonctionnent les coordonnées. Peindre le pixel de coordonnées (250, 150) en vert (n oubliez pas d appeler de nouveau Image.show(monImage) pour afficher le résultat). Peindre le pixel de coordonnées (50, 150) en violet. Exécuter l instruction suivante : ( largeur, hauteur ) = monimage. size Et observez le contenu de largeur et de hauteur. Récupérez une image de la célèbre théière de l Utah sur le site fr/initinfo et sauvegardez-la à côté de vos fichiers.py. Exécuter les instructions suivantes : monimage = open (" teapot. png ") Image. show ( monimage ) Vous pourrez facilement travailler sur cette photo. Vous pourrez bien sûr, pour tous les exercices, utiliser d autres images venant d Internet ou d ailleurs. Exercice Qu effectue la fonction suivante? def remplit ( img ): ( largeur, hauteur ) = img. size for x in range ( largeur ): for y in range ( hauteur ): Image. putpixel (img, (x,y ),(255,255,255)) Décrivez précisément ce qu effectue chaque ligne, testez-la. En vous inspirant très largement de cette fonction remplit, écrivez une fonction rectangleplein(img,x1,x2,y1,y2) qui dessine un rectangle plein dont les coins sont les pixels de coordonnées (x1, y1), (x2, y1), (x1, y2), (x2, y2). 2.2 À vous de jouer Exercice Écrire une fonction f(img) qui dessine une ligne horizontale blanche au milieu de l image (séparant donc l image en deux parties). Testez-la sur une image noire (générée par un appel à new). 16

17 Ajouter un paramètre c à votre fonction f, et remplacer, dans le corps de f, (255,255,255) par c, ce qui permet ainsi de désormais choisir la couleur de la ligne lors de l appel. Tester : f( monimage,(255,0,0)) Image. show ( monimage ) f( monimage,(0,255,0)) Image. show ( monimage ) f récupère donc l ensemble des trois valeur r, g, et b dans le seul paramètre c, qu elle peut passer tel quel à Image.putpixel. Exercice Écrire une fonction rectanglecreux(img,x1,x2,y1,y2,c) qui dessine les côtés d un rectangle de couleur c, les coins du rectangles étant les pixels de coordonnées (x1, y1), (x2, y1), (x1, y2), (x2, y2). Il s agit bien sûr de dessiner quatre lignes formant les côtés du rectangle. Testez-la plusieurs fois avec des coordonnées différentes et des couleurs différentes, sur une image noire et sur la photo de théière. Que se passe-t-il si l un des paramètres dépasse de la taille de l image? Est-il facile de corriger le problème? Exercice On souhaite ajouter des lignes verticales noires à une image. 1. Écrire une fonction verticales(img, nblignes) qui ajoute nblignes lignes verticales réparties de façon homogène dans l image. 2. Écrire une fonction emprisonner(img, nbbarreaux, epaisseur) qui ajoute nbbarreaux lignes verticales d epaisseur pixels et réparties de façon homogène dans l image. Exercice difficile Écrire une fonction diagonale(img) qui dessine en blanc la ligne diagonale entre le coin en haut à gauche et le coin en bas à droite de l image.tester avec différentes tailles d image, et corriger l erreur que vous avez commise. Exercice difficile En vous souvenant du schéma du cercle trigonométrique pour écrire l équation paramétrique de la courbe du cercle, écrire une fonction cercle(img,x,y,r) qui dessine un cercle de rayon r dont le centre a pour coordonnées (x, y). Note : Les outils trigonométriques (cos, sin, pi,...) sont disponibles en tapant : from math import * 2.3 Manipulation de couleurs Il est très courant d appliquer un filtre sur une image, c est-à-dire un calcul sur chacun des pixels de l image. Exercice Séparation des couleurs L instruction (r,g,b) = Image. getpixel (img, (10,10)) récupère les valeurs r, g et b de la couleur du pixel de coordonnées (10, 10). On peut alors par exemple utiliser Image. putpixel (img, (10,10),(r,0,0)) 17

18 pour ne conserver que la composante rouge du pixel (10, 10). Écrire une fonction filtrerouge(img) qui, pour chaque pixel de l image, ne conserve que la composante rouge. Testez-la sur la photo de théière. Faites de même pour le vert et le bleu et affichez les trois résultats ainsi que l image d origine côte à côte. Remarquez notamment que pour le bleu il n y a pas d ombre en bas à droite. En effet, la source lumineuse en haut à gauche ne contient pas de bleu. Exercice Écrire une fonction luminosite(img,facteur) qui pour chaque pixel multiplie par facteur les valeurs des trois composantes r, g, et b. Remarquez que la fonction Image.putpixel n apprécie pas que l on donne des valeurs non entières. Utilisez donc la fonction int(f) qui convertit une valeur avec virgule f en valeur entière. Testez les facteur 1.2, 2, 0.8, 0.5 sur la photo de théière (n oubliez pas de recharger la photo à chaque fois pour éviter de cumuler les effets). Exercice Écrire une fonction emprisonnerjoliment(img, nbbarreaux, epaisseur) qui améliore le rendu de l exercice en faisant apparaître un dégradé de gris sur chaque barreau. Pour calculer la couleur d un pixel d un barreau on pourra utiliser une formule telle que couleur = distance au centre du barreau 255 épaisseur Exercice Il paraît facile de convertir une photo couleur en photo en noir et blanc. Écrire une fonction monochrome(img) qui pour chaque pixel, calcule la moyenne lum = r+g+b 3 des composantes r, g, b, et peint le pixel de la couleur (lum, lum, lum). Les éléments verts semblent cependant plus foncés que sur la photo d origine. L œil humain est effectivement peu sensible au bleu et beaucoup plus au vert. Une conversion plus ressemblante est donc d utiliser plutôt l = 0.3 r g b. Essayez, et constatez que les éléments verts ont une luminosité plus fidèle à la version couleur. Exercice L effet de postérisation est obtenu en diminuant le nombre de couleurs d une image. Une manière simple de l obtenir est d arrondir les composantes r, g, b les pixels de l image à des multiples d un entier, par exemple des multiples de 64. Écrivez donc une fonction posteriser(img,n) qui arrondit les composantes des pixels de l image à un multiple de n. Essayez sur une photo avec n = 64, 128, 150, 200. Exercice Une manière simple de rendre une image floue est d utiliser l opération moyenne. Écrire une fonction flou(img) qui pour chaque pixel n étant pas sur les bords, le peint de la couleur moyenne des pixels voisins. Comparer le résultat à l original. Pourquoi faudrait-il plutôt passer une deuxième image en paramètre à la fonction, et ne pas toucher à la première image? 2.4 Agrandissement d une image Exercice Agrandissement d un facteur deux Écrire une fonction agrandirfacteur2(img) qui retourne une image correspondant à l agrandissement d un facteur deux de l image img. Pour réaliser cet agrandissement, chaque pixel de l image source donnera un carré 2 2 pixels dans l image destination. Tester cette fonction sur l image teapot.png. Appeler plusieurs fois la fonction pour produire un agrandissement d un facteur 8 de cette même image. L image apparait quelque peu pixelisée, comment atténuer facilement ce phénomène? 18

19 2.5 Une image peut en cacher une autre : stéganographie On peut utiliser le fait que l œil ne distingue pas les faibles différences de couleur pour dissimuler une image dans une autre. Prenons deux images de mêmes dimensions. Pour chacune des coordonnées (x, y), on va mélanger une partie du pixel (x, y) de l image A avec une partie du pixel (x, y) de l image B en faisant en sorte que l image obtenue A apparaisse presque comme l image A. Voyons comment traiter une seule composante de couleur, disons le rouge. Pour simplifier plus encore supposons, que l intensité de la composante rouge soit codée par un entier compris entre 0 et Imaginons que l on veuille mélanger un pixel de l image A dont la composante rouge vaut avec un pixel de l image B dont la composante rouge vaut La technique à mettre en œuvre consiste à recombiner les trois premiers chiffres de la composante issue de A avec les deux premiers chiffres de celle issue de B en plaçant les chiffres issus de A en tête. Ce mélange des deux composantes produit le nombre On remarque que la valeur de la composante du pixel de l image A est proche de celle de A car on a gardé ses trois chiffres les plus significatifs. Sur notre exemple, la différence est seulement 11 : la valeur obtenue est contre à l origine. Au pire, cette technique de camouflage transforme les deux derniers chiffres de 00 à 99, ou vice-versa, ce qui fait une différence de 99, au plus. Maintenant pour décoder une image cachée dans une autre, on peut retrouver une couleur proche de chaque pixel de la seconde image grâce aux 2 derniers chiffres de chaque composante. La composante de valeur indique que la valeur de la composante cachée se situe entre et soit une erreur au maximum de 999. En ajoutant 500 à cette valeur, et donc en estimant la valeur de la composante cachée à , on réduit l erreur maximale à 500. Exercice Écrire une fonction decoder_composante(n) qui, à partir d une valeur n comprise entre 0 et retourne la valeur de la composante cachée. Appliquons maintenant cette technique à une composante d un pixel dont la valeur est comprise en 0 et 255. Pour ce faire on exploite l écriture en base 2 d une composante : une telle valeur est codée sur un octet en binaire, soit 8 chiffres binaires. Pour camoufler une image on conserve les 5 premiers chiffres de la composante issue de A et les trois premiers de celle issue de B. Ainsi à partir de deux octets a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 et b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 on obtient le nombre binaire a 7 a 6 a 5 a 4 a 3 b 7 b 6 b 5. Réciproquement pour découvrir la valeur cachée dans une composante, il s agit d isoler les 3 derniers chiffres binaires de celle-ci puis de les décaler de 5 chiffres. À partir du nombre binaire a 7 a 6 a 5 a 4 a 3 b 7 b 6 b 5, on isole b 7 b 6 b 5 pour obtenir b 7 b 6 b Maintenant on sait que la composante originale doit avoir une valeur comprise entre b 7 b 6 b et b 7 b 6 b : l erreur maximale possible vaut donc (soit 31 en base 10). Aussi, en ajoutant (soit 16) à la composante décodée on réduit l erreur maximale à 16. Exercice L objectif est d écrire une fonction permettant de découvrir une image cachée à partir d une image source. 1. Écrire une fonction decoder_composante(n) qui, à partir d une valeur n comprise entre 0 et 256 retourne la valeur de la composante cachée. 2. Écrire une fonction devoiler_image(img) qui retourne l image cachée. 3. Utiliser cette fonction pour décoder l image cachée dans stegano.png Exercice Écrire une fonction dissimuler_image(image1, image2) qui retourne une nouvelle image où l image1 cache l image2. On supposera que les images sont de même taille (on peut facilement utiliser un outil externe pour redimensionner une des deux images au besoin). 19

20 2.6 Manipulations géométriques Exercice Écrire une fonction rotation90(img1, img2) qui stocke dans img2 l image img1 tournée de 90 degrés vers la droite, c est-à-dire dans le sens horaire. Pourquoi est-on obligé d utiliser une deuxième image, plutôt que faire la rotation «en place», c est-à-dire en n utilisant qu une image? Exercice difficile Écrire une fonction rotationcoincoin(img1, img2, angle) qui stocke dans img2 l image img1 tournée de angle radians vers la droite par rapport au coin supérieur gauche de l image. Conseil : parcourir simplement les pixels de l image img2 et calculer la position du pixel source correspondant dans l image img1 ; s il est en-dehors de l image, stocker un pixel noir. On pourra dans un premier temps calculer d abord la distance du pixel au coin supérieur gauche et l angle par rapport à l horizontale puis calculer les coordonnées du pixel ayant la même distance au coin supérieur gauche mais l angle diminué. Dans un deuxième temps, on pourra se souvenir de la transformation mathématique : x = x cos(ϕ) + y sin(ϕ) y = x sin(ϕ) + y cos(ϕ) Écrire une fonction rotationcentre(img1, img2, angle) qui stocke dans img2 l image img1 tournée de angle radians par rapport au centre de l image. 2.7 Conversion d une image en noir et blanc Exercice Écrire une fonction noiretblanc(img) qui convertit une image monochrome (telle que produite par la fonction monochrome de l exercice 2.3.4) en une image noir et blanc : chaque pixel peut valoir (0,0,0) ou (255,255,255)) selon que la luminosité est plus petite ou plus grande que 127. Exercice difficile Comme vous l avez constaté, la qualité des images produites par la fonction précédente laisse à désirer. L algorithme proposé par Floyd et Steinberg, permet de limiter la perte d information due à la quantification des pixels en blanc ou noir. Ecrire une fonction floydsteinberg(img) qui convertit une image monochrome en noir et blanc à l aide de l algorithme de Floyd et Steinberg (cf. page Wikipedia : Algorithme_de_Floyd-Steinberg). 20

21 Chapitre 3. Sommets d un graphe Un graphe est une modélisation d un ensemble (non vide) d objets reliés : les objets sont appelés sommets, et les liens entre les objets sont appelés arêtes. On peut utiliser les graphes pour représenter diverses situations courantes : les liens d amitiés entre étudiants, les matches entre équipes de sport, les liaisons moléculaires entre des atomes, les routes entres les villes,... Nous vous fournissons une définition python de la classe des graphes, ainsi que des autres classes (sommets et arêtes) nécessaires. Ces définitions se trouvent dans le module graphv3.py écrit par des enseignants de MI 1003, disponible en téléchargement sur le site labri.fr/initinfo. Utiliser un clic droit et "enregistrer sous" pour l enregistrer à côté de vos autres fichiers python. Ce module comporte aussi une vingtaine de fonctions qui permettent de manipuler graphes, sommets et arêtes sans connaître les détails des classes correspondantes. Un autre module bibv3.py contient un certain nombre de graphes construits en utilisant graphv3.py ; pour utiliser un module il faut commencer par l importer, et toute session de travail sur les graphes doit commencer par la phrase magique : from bibv3 import * Le module bibv3 importe à son tour le module graphv3 ; les noms de ces modules se terminent par "V3" pour indiquer qu ils sont adaptés à la Version 3 du langage python. Voici l un des graphes inclus dans le module bibv3 : les sommets sont quelques grandes villes françaises, et une arête entre deux villes indique que des rames TGV circulent entre elles. Le suffixe 2005 indique que ce graphe correspond à la situation cette année-là : Strasbourg est un sommet isolé, car la ligne TGV Est n était pas encore en service à l époque. De toute façon ces détails pratiques sont sans importance (de même que la position géographique étrange de Nantes), la seule chose à savoir est que le graphe tgv2005 comporte les 9 sommets et les 20 arêtes de la figure ci-contre. Lille Strasbourg Paris Bordeaux Nantes Lyon Toulouse Marseille Montpellier Figure 3.1 Le graphe tgv2005 Si pendant une session python on tape simplement tgv2005, ou print(tgv2005), l interprète (en jargon : Python Shell) répond : <graphe: tgv2005 > pour indiquer que c est un graphe. Pour désigner le sommet Bordeaux on pourrait croire qu il suffit de taper Bordeaux, hélas l interprète répond rouge de colère : NameError: name Bordeaux is not defined. En effet il n y a pas de variable appelée Bordeaux qui contiendrait ce sommet, c est seulement pour les graphes que des variables sont définis dans le module bibv3 les sommets sont beaucoup trop nombreux. On peut obtenir la liste complète des sommets d un graphe G avec la fonction listesommets(g), par exemple en tapant listesommets(tgv2005) on obtient : [<sommet: Lille, white, False>, <sommet: Paris, white, False>,... <sommet: Bordeaux, white, False>,... <sommet: Strasbourg, white, False>] 21

22 Chaque sommet est affiché avec confirmation de sa classe, suivie du nom du sommet et de sa couleur pour l instant white, donc coloré en blanc ; la dernière composante est booléenne et indique si le sommet est marqué ou non : ces marques seront utilisées section 3.6, pour l instant False est affiché partout car aucun sommet n est marqué. Le nom d un sommet, par exemple Bordeaux, est une simple chaîne de caractères utilisée pour identifier ce sommet à l intérieur du graphe lorsque l on affiche le sommet ou lorsque l on dessine le graphe. Comme on l a expliqué ci-dessus, ce n est pas le nom d une variable, c est juste une étiquette appliquée au sommet. Il faut utiliser la fonction sommetnom(g,nom) pour accéder au sommet par son nom : sommetnom (tgv2005, Bordeaux ) est une expression correcte pour désigner ce sommet, et on peut ensuite le stocker dans une variable en utilisant une affectation : bx = sommetnom (tgv2005, Bordeaux ). Pour bien distinguer les deux nous avons choisi ici un nom de variable bx distinct de l étiquette Bordeaux, mais souvent on utilise le même symbole un lecteur attentif aura noté que l étiquette du graphe tgv2005 est... tgv2005. listesommets(g) retourne la liste des sommets de G nbsommets(g) retourne le nombre de sommets de G, c est-à-dire la taille de la liste précédente sommetnom(g,etiquette) retourne le sommet de G désigné par son nom (etiquette), par exemple : sommetnom (tgv2005, Bordeaux ) Outre les graphes prédéfinis dans la bibliothèque que l on vous fournit, on peut également ouvrir des graphes récupérés depuis Internet. Quelques graphes supplémentaires sont disponibles sur le site du cours mais aussi sur Internet, on pourra par exemple consulter la bibliothèque qui contient d autres exemples. Les formats supportés sont.dot,.gml et.paj (dans l ordre de préférence). Attention à la taille des graphes, certains contiennent de millions de sommets (nodes) ou d arêtes (edges) et seront très longs à traiter! ouvrirgraphe(nom) Ouvre le fichier nom et retourne le graphe contenu dedans. (par exemple ouvrirgraphe("fichier.dot"). 3.1 Échauffement : coloriages Un sommet s peut être colorié avec une couleur c par la fonction coloriersommet(s,c), où c est une simple chaîne de caractères. La fonction dessiner(g) tient compte des couleurs des sommets si celles-ci font partie d une liste prédéfinie ; par exemple red, green, blue sont des couleurs reconnues par le programme de dessin, et la liste complète se trouve à l adresse vous y trouverez entre autres orange, chocolate et tomato! coloriersommet(s,c) colorie le sommet s avec la couleur c (par exemple red ) couleursommet(s) retourne la couleur du sommet s. dessiner(g) dessine le graphe G Exercice Stocker le sommet nommé Paris du graphe tgv2005 dans une variable p. 2. Appeler la fonction coloriersommet en lui passant en paramètre la variable p et la couleur green (vert). Appeler la fonction dessiner sur le graphe tgv2005. Constater la coloration. 22

23 3. Colorier le sommet Bordeaux du graphe tgv2005 en bleu, en une seule instruction, sans passer par une variable. Relancer dessiner pour constater la coloration. Exercice Puisque la fonction listesommets retourne une liste des sommets du graphe, on peut l utiliser au sein d une boucle for pour effectuer une opération sur chacun des sommets du graphe. Écrire une fonction toutcolorier(g,c) qui colorie tous les sommets du graphe G avec la couleur c. Utiliser cette fonction pour colorier en rouge tous les sommets du graphe tgv2005 ; vérifier le résultat de deux façons : a) en affichant la liste des sommets du graphe, b) en dessinant le graphe. Écrire l instruction qui permet d annuler l opération précédente, c est-à-dire de recolorier les sommets en blanc ; vérifier que les sommets du graphe tgv2005 sont bien décolorés. Exercice Écrire une fonction existecouleur(g,c) qui renvoie True s il existe au moins un sommet de couleur c dans le graphe G et False sinon. Exercice Écrire une fonction toutcouleur(g,c) qui renvoie True si tous les sommets du graphe G sont de couleur c, et False sinon. Exercice Écrire une fonction nbsommetscouleur(g,c) qui compte les sommets du graphe G qui ont la couleur c. 2. Écrire une fonction nbsommetscolores(g) qui compte les sommets colorés de G (c està-dire les sommets qui ont une couleur différente de white ) en appelant la fonction précédente et la fonction nbsommets(g). 3.2 Voisins Deux sommets s et t sont appelés voisins s il existe une arête e ayant s et t comme extrémités ; on dit que l arête e est incidente à chacun des sommets s et t. e 1 Par exemple, les sommets A et B du graphe cicontre sont voisins, ainsi que A et C, tandis que les sommets A et D ne sont pas voisins. Il peut exister plusieurs arêtes entre deux sommets, par exemple ici entre A et B, on parle alors d arête multiple. Un sommet peut aussi être voisin de lui-même, si les deux extrémités d une arête sont confondues dans ce cas on dit que l arête est une boucle. Sur le graphe ci-contre, il y a une boucle autour du sommet B et deux boucles autour du sommet D. e 3 A C e 2 B e 5 D e 4 e 6 Figure 3.2 un graphe avec une arête double et trois boucles e 7 23

24 La fonction listevoisins(s) retourne la liste des voisins du sommet s, obtenue en suivant chacune des arêtes incidentes. Un même sommet peut se retrouver plusieurs fois dans cette liste : par exemple B apparaît deux fois dans la liste des voisins de A. Une boucle autour du sommet s est par convention deux fois incidente à s : la liste des voisins de B contient deux fois le sommet B lui-même, à cause de la boucle autour de B (que l on peut considérer dans un sens ou dans l autre). Le degré d un sommet s est le nombre d incidences d arêtes, et la fonction degre(s) retourne sa valeur ; c est aussi le nombre de brins issus de s lorsque l on regarde le dessin une boucle compte pour deux dans le calcul du degré. Attention : jamais de lettre accentuée dans le nom d une fonction python. listevoisins(s) degre(s) retourne la liste des voisins du sommet s retourne le degré du sommet s, qui est aussi la taille de la liste précédente Exercice Pour chaque sommet du graphe de la figure 3.2, donner son degré et écrire la liste de ses voisins (leur ordre dans la liste est sans importance). Écrire l instruction python qui permet de vérifier le résultat en TP (ce graphe est disponible sous le nom fig32). Exercice Comment utiliser la fonction listevoisins pour obtenir la liste des villes voisines de Nantes dans le graphe tgv2005? Note : en TP on peut améliorer l affichage de ce genre de liste en utilisant la fonction nomsommet(s) qui retourne... le nom du sommet s, c est-à-dire son étiquette ; à ne pas confondre avec la fonction sommetnom, qui elle retourne un sommet d un graphe à partir de son étiquette. Exercice Écrire une fonction coloriervoisins(s,c) qui colorie tous les voisins du sommet s avec la couleur c. Utiliser cette fonction pour colorier en vert les voisins de Bordeaux dans le graphe tgv2005. Vérifier le résultat de deux façons : afficher la liste des sommets du graphe, et le dessiner. Exercice Écrire une fonction monocouleur(g) qui teste si les arêtes du graphe G sont monocolores (et non bicolores), c est-à-dire qui renvoie True si pour chaque sommet tous ses voisins sont de la même couleur que lui, et False sinon. Exercice Écrire une fonction sontvoisins(s1,s2) qui teste si les sommets s1 et s2 sont voisins, c est-à-dire qui renvoie True si c est le cas et False sinon. Tester cette fonction sur tous les couples de sommets du graphe fig32. Écrire l instruction qui permet de tester si en 2005 il y avait une ligne directe de TGV entre Bordeaux et Nantes. Exercice Écrire une fonction listevoisinscommuns (s1,s2) qui calcule et retourne la liste des voisins communs à deux sommets s1 et s2. Écrire une fonction trajet1correspondance (s1,s2) qui renvoie True ou False selon qu il était possible en 2005 d aller en TGV d une ville de sommet s1 à une ville de sommet s2 en effectuant au plus une correspondance. 3.3 Calculs sur les degrés, sommets isolés On rappelle que le degré d un sommet est le nombre d arêtes incidentes à ce sommet. Une boucle compte pour deux dans le degré. Par exemple dans le graphe de la figure 3.2 (reproduite ci-dessous) : 24

25 le degré de A est 3, car A est extrémité de e 1, e 2 et e 3 ; le degré de B est 4, car B est extrémité de e 1, e 2 et e 5 (qui contribue pour 2 unités au degré, car c est une boucle autour de B). Exercice Soit la fonction suivante : def mystere (G): n = nbsommets (G) x = 0 for s in listesommets ( G): x = x + degre (s) return x/n e 3 A C e 1 e 2 B e 5 D e 4 e 6 1. Quelle est la valeur calculée si G est le graphe de la figure ci-contre? 2. Que calcule la fonction mystere dans le cas général? e 7 Figure 3.2 idem au graphe page 23. Exercice Écrire une fonction degremax(g) qui calcule et retourne le degré maximum des sommets d un graphe G. 2. Écrire une fonction degremin(g) qui calcule et retourne le degré minimum des sommets d un graphe G. Pourquoi cette question est-elle un peu plus difficile que la précédente? Note : la fonction elementaleatoireliste(l) (avec L une liste d élément) peut être utile pour la seconde question de cet exercice, cf. aide-mémoire page 55 en fin de fascicule. Exercice Écrire une fonction nbsommetsdegre(g,d) qui calcule et retourne le nombre de sommets du graphe G ayant pour degré d. Exercice On dit qu un sommet est isolé s il n a aucune arête incidente. Écrire une fonction existeisole(g) qui teste si un graphe G a au moins un sommet isolé. Exercice Utiliser la fonction ouvrirgraphe(nom) pour ouvrir le graphe Power Grid qui représente le réseau électrique américain, à télécharger depuis edu/index.php En utilisant les fonctions des exercices précédents, vérifier qu il n y a pas de sommet isolé, compter le nombre de sommets de degré 1 et de sommets de degré 2, calculer le degré maximum des sommets, et calculer la moyenne des degrés des sommets. On peut ainsi avoir une idée de la robustesse du réseau électrique américain. Exercice Utiliser la fonction ouvrirgraphe(nom) pour ouvrir le graphe Les Miserables qui représente la co-apparition des personnages du roman Les Misérables, à télécharger depuis (utiliser le fichier.gml) Écrivez une fonction pour déterminer quel personnage interagit avec le plus avec d autres personnages. Il s agira très probablement du personnage principal de l œuvre. A-t-il pour autant croisé Eponine durant le récit? 25

26 Exercice Écrire une fonction verifiemolecule(g) qui vérifie que tous les sommets blancs sont de degré 1, tous les sommets noirs sont de degré 4, et tous les sommets rouges sont de degré 2. Elle renverra soit un sommet qui ne vérifie pas ces conditions, soit None pour indiquer que tous les sommets les vérifient. Utilisez la fonction ouvrirgraphe(nom) pour ouvrir les graphes représentant des molécules disponibles sur le site du cours et testez verifiemolecule dessus. 3.4 Formule des poignées de mains Exercice Un graphe est dit cubique si tous ses sommets sont de degré Dessiner un graphe cubique ayant 4 sommets ; même question avec 3 sommets, 5 sommets. Que constate-t-on? 2. Quel est le nombre d arêtes d un graphe cubique de n sommets? 3. En déduire qu un graphe cubique a un nombre pair de sommets. Exercice Écrire une fonction cubique(g) qui teste si le graphe G est cubique. Exercice On dispose de 235 machines, que l on souhaite relier en réseau. Est-il possible de relier chaque machine à exactement 17 autres machines? Justifier la réponse, soit en expliquant comment relier les machines, soit en expliquant pourquoi ce n est pas possible. Exercice Dessiner un graphe à 6 sommets tel que la liste des degrés des sommets soit : [2, 1, 4, 0, 2, 1]. 2. Même question avec [2, 1, 3, 0, 2, 1]. Exercice Une grille (rectangulaire) m n est constituée de m lignes horizontales et n lignes verticales, dont les croisements forment les sommets du graphe ; une grille 3 5 est représentée ci-contre. 1. Compter les sommets de degré 2 (respectivement 3 et 4) et en déduire la somme des degrés des sommets en fonction de m et n. 2. Compter les arêtes et comparer avec le résultat de la question précédente. Exercice La grille triangulaire T 5 est représentée ci-contre. Adapter les calculs de l exercice précédent au cas de T n. Exercice Écrire une fonction nbaretes(g) qui calcule et retourne le nombre d arêtes d un graphe G. Dès qu on l aura comprise on notera dans l encadré ci-dessous la formule liant le nombre d arêtes d un graphe à la somme des degrés de ses sommets, encore appelée formule générale des poignées de mains, qui fait partie des résultats à mémoriser : 26

27 3.5 Boucles On testera les fonctions de cette section sur le graphe de la figure 3.2, disponible sous le nom fig32. Exercice Écrire une fonction existeboucle(s) qui teste si le sommet s possède une boucle incidente, c est-à-dire une arête qui relie le sommet s à lui-même on dit aussi dans ce cas qu il existe «une boucle autour de s». Par exemple sur le graphe de la figure 3.2, la fonction doit retourner True pour les sommets B et D, et False pour les sommets A et C. Exercice Écrire une fonction nbboucles(s) qui compte le nombre de boucles autour d un sommet s. Exercice Écrire une fonction sansboucle(g) qui teste si un graphe G est sans boucle. Appliquer cette fonction à tous les graphes de la liste graphes. 3.6 Graphes simples Un graphe est dit simple s il n a ni boucle, ni arête multiple ; autrement dit les extrémités d une arête sont toujours distinctes, et il existe au plus une arête qui relie deux sommets s et t distincts. Par exemple le graphe tgv2005 est simple, et celui de la figure 3.2 ne l est pas ; les graphes simples sont de loin les plus fréquents en pratique. Dans un graphe simple la liste des voisins d un sommet s ne comporte jamais de répétition. On se propose d utiliser cette propriété caractéristique pour écrire une fonction estsimple(g) qui teste si le graphe G est simple. Une méthode efficace pour tester si tous les sommets d une liste sont distincts est de marquer chaque sommet en parcourant la liste, et si l on rencontre un sommet déjà marqué pendant ce parcours on sait que ce sommet est présent plusieurs fois dans la liste. Cette méthode comporte un piège, car un sommet marqué le reste! Si un utilisateur applique deux fois la fonction à la même liste on va trouver, lors de la seconde passe, que le premier sommet est marqué, et on va en déduire bêtement qu il s agit d un sommet répété. Il faut donc commencer par démarquer tous les sommets avant d appliquer l algorithme. Les fonctions disponibles pour manipuler les marques sur les sommets sont : marquersommet(s) demarquersommet(s) estmarquesommet(s) marque le sommet s démarque le sommet s retourne True si s est marqué, False sinon 27

28 Exercice Marquez le sommet Bordeaux. Dessinez le graphe pour observer comment c est illustré. 2. Écrire une fonction demarquervoisins(s) qui démarque tous les voisins du sommet s. 3. Écrire une fonction voisinsdistincts(s) qui teste si tous les voisins du sommet s sont distincts le résultat est True ou False. Tester la fonction sur chaque sommet s du graphe fig32, et afficher la liste des voisins de s après chaque test pour repérer les sommets marqués et vérifier que ce sont bien les sommets prévus. 4. Utiliser les fonctions précédentes pour écrire la fonction estsimple(g) qui teste si un graphe G est simple. Tester la fonction estsimple(g) sur tous les graphes de la liste graphes. Après exécution du test sur un graphe G, dessiner G et/ou afficher la liste de ses sommets pour repérer ceux qui sont marqués ; interpréter le résultat, en particulier pour les graphes simples. Exercice Essayer de construire un graphe simple ayant 4 sommets, et tel que les degrés de sommets soient tous distincts. 2. On se propose de démontrer par l absurde qu il n existe pas de graphe simple de n sommets (n 2) tel que tous ses sommets soient de degrés distincts. Supposons qu un tel graphe G existe. a) Montrer que G ne peut comporter de sommet de degré supérieur ou égal à n. b) En déduire les degrés possibles pour les n sommets. c) Montrer que ceci entraîne une absurdité (existence simultanée d un sommet de degré 0 et d un sommet de degré n 1). 3. Application : peut-on dire que dans un groupe de n personnes, il y en a toujours deux qui ont le même nombre d amis présents? 28

29 Chapitre 4. Compléments de programmation 4.1 Boucles while La boucle while (tant que) permet de répéter une partie de programme tant qu une condition est vraie. Attention, cela signifie que si vous vous trompez, éventuellement votre programme va planter, c est-à-dire répéter indéfiniment la boucle while sans jamais s arrêter, si la condition ne devient jamais fausse. Vous pouvez alors appuyer sur Control - c pour interrompre python. Par exemple, s = 0 for x in range ( 10): s = s + x peut s écrire s = 0 x = 0 while x < 10: s = s + x x = x + 1 Exercice On considère la fonction suivante : def mystere (n): c = [] while n > 0: c = [n % 2] + c n = n // 2 return c La variable c contient une liste, vide au départ (première instruction), et l opérateur +, appliqué à des listes, les concatène. Par exemple : [1, 1, 0] + [1, 0] = [1, 1, 0, 1, 0] Attention : cet usage de l opérateur + n est pas commutatif (la concaténation n est pas commutative), par exemple : [1, 0] + [1, 1, 0] = [1, 0, 1, 1, 0] Effectuer le calcul de mystere(21). De façon générale, que calcule la fonction mystere? Observez son fonctionnement avec Python Tutor. Exercice Écrire une fonction logarithme(a, n) qui retourne le plus petit entier k tel que a k > n (on supposera a > 1). Note : python sait calculer a k (notation a**k), mais il existe une solution simple et (légèrement) plus efficace qui utilise seulement la multiplication. Comment modifier cette fonction pour qu elle calcule le plus grand entier k tel que a k n (c est la définition habituelle du logarithme entier)? Exercice L objectif est d écrire un test de primalité, c est à dire une fonction premier(n) qui retourne True si l entier naturel n > 1 est premier et False sinon. Pour cela on parcourt les nombres supérieurs à 2 pour chercher un diviseur d de n : dès que l on en trouve un on arrête les calculs, n n est pas premier. 1. Si on ne trouve pas de diviseur d n, on est sûr que n est premier : pourquoi? Comment effectuer le test d n sans utiliser de fonction «racine carrée»? 2. Écrire la fonction premier(n) ; tester cette fonction en affichant tous les nombres premiers inférieurs à

30 3. Améliorer premier(n) en traitant à part le cas où n est pair ; dans le cas où n est impair, il suffit ensuite de chercher un diviseur d impair. Exercice On suppose dans cet exercice que l on dispose de la fonction premier(n) décrite dans l exercice précédent, et que son temps de calcul est proportionnel à n lorsque n est premier. 1. Écrire une fonction premiersuivant(n) qui calcule le plus petit nombre premier p > n. 2. Sachant que le calcul de premiersuivant(10**12) prend environ une seconde, quel est l ordre de grandeur maximal de n pour que le calcul de premiersuivant(n) dure moins d une minute? moins d une heure? moins d une journée? Quelle est la durée approximative du calcul de premiersuivant(2**40)? Même question pour Note : pour le traitement de cette question on suppose que le temps de calcul de premier(n) est négligeable lorsque n n est pas premier, ce qui est très souvent le cas (la plupart des entiers possèdent un petit facteur, découvert très vite lors de l exécution de premier(n)). Remarque : il existe des tests de primalité sophistiqués radicalement plus efficaces que le test naïf décrit dans l exercice ; ils permettent de tester en quelques secondes la primalité d un nombre dont l écriture décimale comporte plusieurs centaines de chiffres. 4.2 Suites récurrentes Exercice Comment calculer 2 avec chiffres après la virgule? Une méthode simple est d utiliser la suite u n suivante : { u0 = 3 u n+1 = un u n On peut notamment dessiner le graphe suivant pour observer la convergence x -> x x -> x/2 + 1/x suite u_n Écrire une fonction suite(n) qui calcule et retourne le terme de rang n de cette suite. 30

31 2. Utilisez une boucle pour afficher les 10 premiers termes de la suite. Une valeur approchée de 2 est [...]. On constate effectivement que la suite converge vers cette valeur, mais sans pouvoir toutefois l atteindre : le nombre de chiffres des valeurs de l ordinateur est limité! 3. Plus généralement, pour calculer x, on peut utiliser la suite { u0 = x u n+1 = 1 2 (u n + x u n ) où u 0 est une première estimation grossière de x, on a utilisé x lui-même pour simplifier. Écrire une fonction sqrt(x) qui retourne une approximation de x en calculant u 10 et imprimant les valeurs intermédiaires u n au passage. Tester avec 2, 3, Tester avec On constate que la convergence est lente, on n est pas sûr que 10 itérations suffisent. Remplacer la boucle for par une boucle while pour continuer le calcul tant que la différence entre deux termes consécutifs est plus grande que Tester avec Exercice Une suite de Syracuse est définie par récurrence de la façon suivante : u 0 = a { un /2 si u n est pair, u n+1 = 3u n + 1 sinon. où a est un entier naturel strictement positif. 1. Calculer les premiers termes de la suite pour a = 5 puis pour a = Écrire une fonction syracuse(a, n) qui calcule le terme de rang n de cette suite lorsque le premier terme u 0 est égal à a. Tester cette fonction pour a = 5 puis pour a = Que se passe-t-il lorsque pour une valeur de n, u n est égal à 1? 4. On conjecture (consulter par exemple Wikipedia) qu une suite de Syracuse finit toujours par atteindre la valeur 1. Écrire une fonction longueur(a) qui calcule et retourne la première valeur de n telle que u n = 1 lorsque le premier terme u 0 vaut a. 5. Vérifier la conjecture pour tous les entiers a < 100 (utilisez une boucle bien sûr, en utilisant print pour montrer les résultats!) Parmi ces valeurs de a, quelle est celle qui fournit une suite de longueur maximale? 6. Utiliser la fonction syracuse de la question 2 pour écrire la fonction longueur de la question 4 est une idée naturelle. Etudier dans ce cas combien de fois on exécute le calcul : u n+1 = u n /2 si u n est pair, u n+1 = 3u n + 1 sinon, pour calculer longueur(27). Améliorer le code de la fonction longueur(a) pour éviter les calculs inutiles. 7. Écrire la fonction listesyracuse(a) qui calcule et retourne la liste [u 0 = a, u 1, u 2,..., u n = 1] où u n désigne le premier terme égal à 1. Par exemple, avec a = 7 on obtient la liste [7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]. 31

32 8. Écrire une fonction hauteur(a) qui calcule et retourne la valeur maximale de u n lorsque le premier terme u 0 vaut a ; par exemple hauteur(7) vaut Dessin d une fractale On considère la suite complexe suivante : { z0 = c z n+1 = z 2 n + c Le langage python permet de manipuler facilement les nombres complexes : Pour initialiser une variable complexe il suffit d écrire : c = complex(re,im) où re désigne la partie réeelle de c et et im la partie imaginaire de c. Les opérateurs arithmétiques classiques (+, -, *, /) fonctionnent naturellement sur les complexes. La fonction abs(c) permet de récupérer le module de c. Exercice Définir une fonction suitecomplexe(x, y, size, n) qui retourne la valeur de n-ième terme de la suite (z n ) avec c = (x + iy) 3/size ( i). Exercice Définir une fonction suitecomplexediverge(x, y, size) qui retourne le plus petit entier n tel que n < 256 et le module de z n est supérieur à 2. Exercice Définir la fonction mandelbrot(size) qui retourne une image de taille (size, size) telle que le niveau de gris du pixel de coordonnées (x, y) est déterminé par la valeur calculée par suitecomplexediverge(x,y, size). Dessiner l image retournée par mandelbrot(256). Exercice Definir la fonction mandelbrotcouleur(size) sur le même schéma que la fonction mandelbrot(size) mais ce coup si la couleur de chaque pixel est : ((n 8) % 256, (n 32) % 256, (n 64) % 256) où n est la valeur retournée par la fonction suitecomplexediverge(x, y, size). 32

33 Chapitre 5. Chaînes et connexité Une chaîne dans un graphe est une suite alternée de sommets et d arêtes : [s 0, a 1, s 1, a 2, s 2... a n, s n ] où l arête a i relie le sommet s i 1 qui la précède et le sommet s i qui la suit ; on dit que cette chaîne relie les sommets s 0 et s n, ou qu elle représente un chemin de s 0 vers s n. Un cycle est une chaîne dont les deux extrémités coïncident (s 0 = s n ) ; on peut choisir n importe quel sommet du cycle comme sommet de départ. Le nombre d arêtes n est la longueur de la chaîne (ou du cycle). Une chaîne peut être réduite à un seul sommet, elle est alors de longueur nulle. C est d ailleurs même un cycle. Une chaîne est élémentaire si ses sommets et arêtes sont distincts deux à deux, sauf les sommets extrêmités qui peuvent être égaux (c est dans ce cas un cycle élémentaire). Il ne peut donc y avoir d allers-retours de la forme [s, a, t, a, s] (où a désigne une arête qui relie les sommets s et t). Un graphe est connexe si, par définition : pour tous sommets s et t, il existe une chaîne qui relie s et t. Une composante connexe d un graphe G = (S, A) est un sous-ensemble maximal de sommets tels que deux quelconques d entre eux soient reliés par une chaîne. Un graphe connexe a une composante connexe au plus. 5.1 Échauffement Exercice Soit le graphe suivant : e 5 e 2 e 3 S 1 S 3 S 5 e 1 e 7 e 8 e 4 S 4 e 6 S 2 1. Donner plusieurs exemples de chaînes élémentaires entre S 1 et S Donner un exemple de chaîne non élémentaire entre S 1 et S Donner les cycles élémentaires de longueur 4 de ce graphe. Exercice Soit Γ une chaîne d extrémités s et t ; on suppose que Γ n est pas élémentaire : 1. montrer que Γ contient un cycle de longueur non nulle ; 2. en déduire qu il existe une chaîne plus courte que Γ qui relie s et t ; 3. en déduire qu il existe une chaîne élémentaire qui relie s et t. 33

34 Exercice Le graphe suivant est-il connexe? Le graphe tgv2005 (page 21) est-il connexe? Exercice Indiquer si les propositions suivantes sont vraies ou fausses en justifiant votre réponse (rappel : un sommet isolé est un sommet de degré zéro) : 1. Si un graphe n a pas de sommet isolé, alors il est connexe. 2. Si un graphe possède un sommet isolé, alors il n est pas connexe. 3. Pour qu un graphe soit connexe il est nécessaire que tous ses sommets soient de degré supérieur ou égal à 1. Exercice La proposition suivante : «un graphe est connexe s il existe un sommet s 0 qui peut être relié (par des chaînes) à tous les autres sommets» est-elle vraie? Justifier ou donner un contre-exemple. 2. Même question pour la proposition suivante : «un graphe est connexe si et seulement si il existe une chaîne passant (au moins une fois) par chaque sommet du graphe». Exercice Montrer qu un graphe est connexe si et seulement s il ne contient qu une composante connexe. 5.2 Arbres Théorème 5.2 Un graphe connexe avec n sommets possède au moins n 1 arêtes. Exercice Peut-on en déduire les propositions suivantes? 1. Si un graphe de n sommets a au moins n arêtes, alors il n est pas connexe. 2. Si un graphe de n sommets a au moins n arêtes, alors il est connexe. 3. Si un graphe de n sommets a n 2 arêtes, alors il n est pas connexe. 34

35 Définitions Un graphe connexe avec n sommets et n 1 arêtes est appelé un arbre ; un sommet de degré 1 dans un arbre est appelé une feuille. Exercice Dessiner tous les arbres avec 1, 2, 3 ou 4 sommets. 2. Montrer qu un arbre de plus d un sommet possède au moins une feuille (et même deux). 3. Montrer qu un arbre privé d une feuille (et de l arête issue de cette feuille) reste un arbre. 4. Dessiner tous les arbres avec 5 sommets. 5. Dessiner tous les arbres avec 6 sommets (il y en a six). Exercice On se propose de montrer le théorème 5.2 par induction sur le nombre de sommets. 1. Vérifier que le théorème est vrai pour tout graphe à un sommet trop cool. 2. Induction : partant d un graphe à n + 1 sommets, on construit un ou plusieurs graphes à moins de n sommets pour appliquer l hypothèse d induction. On propose deux méthodes : a) 1 ère méthode : supprimer un sommet et toutes les arêtes qui lui sont incidentes. Dans ce cas, le graphe obtenu n est plus nécessairement connexe. Donner un exemple où cela se produit. Appliquer l hypothèse d induction sur chacune des composantes connexes du graphe obtenu pour conclure 1. b) 2 ème méthode : utiliser la contraction d une arête. Vérifier que le graphe obtenu reste connexe, et calculer son nombre de sommets et son nombre d arêtes pour conclure. Exercice Soit G un graphe connexe possédant un cycle élémentaire de longueur non nulle Γ : montrer que la suppression de n importe quelle arête de Γ laisse le graphe connexe. 2. En déduire qu un arbre ne possède pas de cycle de longueur non nulle. 3. En déduire que pour tous sommets s et t d un arbre il existe une seule chaîne élémentaire qui relie s et t. Note : chacune des deux dernières propriétés caractérise en fait les arbres parmi les graphes connexes, et sert souvent de définition pour la notion d arbre. 1. On pourra s appuyer sans le démontrer sur le fait suivant : si le graphe obtenu possède k composantes connexes alors le nombre d arêtes incidentes au sommet supprimé est supérieur à k. 35

36 5.3 Algorithmes Accessibilité On dit que le sommet t est accessible à partir du sommet s s il existe une chaîne reliant s et t. En théorie, il est facile de construire progressivement l ensemble A des sommets accessibles depuis s : 1. initialisation : A = {s} ; 2. tant qu il existe un sommet x / A qui est voisin d un sommet de A, ajouter x à A. Pour savoir si le sommet t est accessible depuis s on stoppe la construction de A dès qu à l étape 2 on a x = t, et dans ce cas la réponse est affirmative ; par contre si cet événement (x = t) ne se produit pas avant la fin de la construction de A (il n existe plus de sommet en dehors de A qui soit voisin d un sommet de A), la réponse est négative. Dans ce dernier cas A est une composante connexe du graphe G, et t appartient à une autre composante connexe. Exercice On travaille sur le graphe G de l exercice : appliquer à la main l algorithme de construction de l ensemble A des sommets accessibles à partir de S 1 en choisissant toujours le sommet de plus petit numéro à l étape 2. Recommencer en faisant varier le sommet de départ. Exercice Montrer que l ensemble A calculé par l algorithme d accessibilité correspond à l ensemble des sommets appartenant à la composante connexe du sommet s choisi initialement. Connexité Pour savoir si le graphe G est connexe, on choisit un sommet s, on construit l ensemble A des sommets accessibles depuis s, puis on teste si tous les sommets de G appartiennent à A. Exercice Montrer que le résultat de cet algorithme ne dépend pas du choix du sommet initial s. Programmation En pratique, pour déterminer si un sommet appartient à l ensemble A, on utilise ici les fonctions de marquage, introduites à la section 3.6. La reformulation de l initialisation A = s en python est donc de démarquer tous les sommets, et de marquer le sommet s. Cette méthode comporte un piège, car un sommet marqué le reste! Les fonctions accessible ou estconnexe (voir ci-dessous) doivent commencer par démarquer tous les sommets du graphe, sinon les résultats deviennent imprévisibles lorsque l on les applique plusieurs fois de suite au même graphe. Les fonctions disponibles pour manipuler les marques sur les sommets sont : marquersommet(s) demarquersommet(s) estmarquesommet(s) marque le sommet s démarque le sommet s retourne True si s est marqué, False sinon 36

37 Exercice Écrire les fonctions suivantes. On utilisera notamment l algorithme expliqué en début de section 5.3 en appliquant le marquage décrit ci-dessus. 1. toutdemarquer(g) qui démarque tous les sommets du graphe G ; 2. sommetaccessible(g) qui retourne un sommet non marqué ayant un voisin marqué, et qui retourne None s il n existe pas de tel sommet ; 3. accessible(g, s, t) qui renvoie True si, dans le graphe G, le sommet t est accessible depuis le sommet s, et False sinon. Tester cette dernière fonction sur le graphe Europe, avec les sommets de noms "Belgique" et "Hongrie", puis "Espagne" et "Angleterre". Après chaque test examiner quels sont les sommets marqués dans le graphe Europe. 4. marqueraccessibles(g, s) qui marque tous les sommets accessibles depuis le sommet s. Combien le graphe Europe possède-t-il de composantes connexes? Pour chacune employer la fonction marqueraccessibles de façon judicieuse afin de marquer tous les sommets de la composante ; vérifier en dessinant le graphe. Note : la Russie est absente du graphe, d où une composante connexe surprenante laquelle? Utiliser la fonction ouvrirgraphe(nom) pour ouvrir le graphe Power Grid qui représente le réseau électrique américain, à télécharger depuis php. Vérifiez que ce réseau est connexe. Exercice Ajouter les fonctions suivantes : 1. sommetstousmarques(g) qui teste si tous les sommets du graphe G sont marqués ; 2. estconnexe(g) qui teste si le graphe G est connexe. Tester avec les graphes tgv2005 et fig32. Arêtes Pour traiter les arêtes le module de manipulation de graphes contient les fonctions suivantes : listearetesincidentes(s) sommetvoisin(s,a) marquerarete(a) demarquerarete(a) retourne la liste des arêtes issues du sommet s retourne le voisin du sommet s en suivant l arête a marque l arête a démarque l arête a Ainsi le fragment de code for t in listevoisins(s): peut être remplacé par : for a in listearetesincidentes(s): t = sommetvoisin(s,a) ce qui est un peu plus compliqué, mais permet de traiter l arête a qui relie les sommets s et t. Note : si le graphe n est pas simple plusieurs arêtes incidentes à s peuvent mener au même voisin t, qui dans ce cas apparaît aussi plusieurs fois dans la liste des voisins de s. 37

38 Exercice difficile Modifier la fonction sommetaccessible de l exercice précédent pour marquer l arête qui relie ce sommet non marqué à son voisin marqué. Ne pas oublier de modifier aussi la fonction toutdemarquer pour démarquer les arêtes en même temps que les sommets. Tester à nouveau la fonction accessible comme dans l exercice 5.3.4, puis dessiner le graphe Europe. Les arêtes marquées apparaissent avec une épaisseur et une couleur différentes des arêtes non marquées : que remarque-t-on? Parcours aléatoire Le module de manipulation de graphes contient la fonction : melange(u) retourne une copie de la liste u dont les éléments ont été permutés de façon aléatoire Par exemple l instruction : for s in melange(listesommets(g)): parcourt la liste des sommets du graphe G dans un ordre aléatoire. Exercice Modifier la fonction sommetaccessible de l exercice précédent pour que le résultat ne dépende plus de l ordre dans lequel sont rangés les sommets du graphe, ni de l ordre des arêtes incidentes à un sommet. Tester à nouveau la fonction accessible comme dans l exercice 5.3.4, puis dessiner le graphe Europe : le chemin entre la Belgique et la Hongrie (par exemple) devrait changer à chaque exécution de l algorithme. 5.4 Complexité Dans cette section on note S l ensemble des sommets d un graphe G, et A l ensemble des arêtes ; S désigne alors le nombre de sommets du graphe, et A le nombre d arêtes. Exercice Lorsque l on exécute le code suivant : for s in listesommets(g): for t in listevoisins(s): op(s,t) combien de fois l opération op(s,t) est-elle exécutée? 2. En déduire que la complexité au pire de la fonction sommetaccessible de l exercice est proportionnelle à A + S. Note : les opérations de marquage des sommets (y compris les tests) sont des opérations élémentaires effectuées en temps constant. 3. Estimer de même la complexité (au pire) des fonctions accessible (exercice 5.3.4) et estconnexe (exercice 5.3.5). Remarque : il existe des méthodes plus sophistiquées pour programmer ces algorithmes, qui fournissent des fonctions de complexité (au pire) proportionnelle à ( A + S ). 38

39 5.5 Chemin difficile Exercice On voudrait maintenant obtenir un chemin. Il existe des algorithmes efficaces pour obtenir un chemin optimal, mais pour simplifier nous allons écrire un algorithme relativement peu efficace, et qui ne trouvera pas forcément un chemin optimal. L idée est d utiliser une fonction récursive : pour savoir si l on peut aller de s à t, il suffit de tester pour chaque voisin v de s si l on peut aller de v à t, et le cas échéant d ajouter s au chemin obtenu entre v et t. Puisqu on cherche un seul chemin, on peut le retourner dès que l on en a trouvé un. i. Pourquoi ce n est pas aussi simple? Pour éviter ce problème, il suffit de marquer le sommet s avant de parcourir ses voisins, et en tête de fonction, vérifier si le sommet est déjà marqué, auquel cas on retourne tout de suite None. ii. Écrire donc la fonction chemin(g,s,t) qui retourne un chemin de s à t s il en existe un (sous forme de la liste des sommets à parcourir), et sinon None. N oubliez pas de nettoyer le graphe au début, il vous faudra donc écrire deux fonctions : l une qui nettoie le graphe et appelle simplement l autre, cette dernière s appelant elle-même récursivement. N oubliez pas non plus le cas de base où t == s. iii. Déterminer un chemin entre Espagne et Allemagne dans le graphe Europe. 39

40 Chapitre 6. Problèmes et algorithmes de coloration 6.1 Coloration d un graphe. Nombre chromatique Un graphe est dit bien colorié si deux sommets voisins ont toujours des couleurs différentes. Un graphe ne peut pas être bien colorié s il possède une boucle (il existerait alors un sommet voisin de lui-même), et le nombre d arêtes qui relient deux sommets voisins est sans importance pour la coloration : on ne s intéressera donc qu aux graphes simples. Le nombre minimal de couleurs nécessaires pour bien colorier un graphe G est appelé nombre chromatique de G. Dans les chapitres précédents on a vu des algorithmes efficaces pour tester si un graphe est connexe ou eulérien, et pour construire des chemins dans des graphes ou des cycles eulériens. Pour les problèmes de coloration la situation est différente : en général on ne connaît pas d algorithme efficace, sauf pour le problème de coloration avec deux couleurs voir section 6.2. En particulier on ne connaît pas d algorithme qui, appliqué à un graphe G quelconque, calculerait rapidement son nombre chromatique ; on ne connait même pas de test efficace qui, appliqué à un graphe G quelconque, déterminerait si trois couleurs suffisent pour colorier G. On conjecture depuis plusieurs dizaines d années, sans savoir le démontrer, qu en fait il n existe pas d algorithme efficace pour des problèmes tels que la coloration avec trois couleurs : c est la conjecture P NP. L énoncé précis de cette conjecture repose entre autres sur une définition précise (et indépendante de la technologie) de la classe des algorithmes efficaces, et sort du cadre de ce cours. Exercice Écrire une fonction biencolorie(g) qui teste si un graphe est bien colorié. Exercice Un graphe complet d ordre n est un graphe de n sommets tel que chaque sommet est relié aux autres sommets par une arête ; on appelle K n un tel graphe. Dessiner K 2, K 3, K 4 et K 5. Quel est le nombre chromatique de K n? Exercice En remarquant que le graphe ci-contre contient des sous-graphes complets (lesquels?) montrer que son nombre chromatique est supérieur ou égal à 4. Vérifier que l on peut effectivement le colorier avec 4 couleurs. s 6 s 2 s 3 s 1 s 5 s 4 v 1 v 0 v 3 v 2 v 8 v 9 Exercice Calculer le nombre chromatique du graphe de Petersen, représenté ci-contre à gauche. v 4 v 6 v 5 v 7 40

41 Exercice Indiquer si les propositions suivantes sont vraies ou fausses en justifiant votre réponses : 1. Si un graphe contient un graphe complet K n, son nombre chromatique est au moins n. 2. Pour montrer que le nombre chromatique d un graphe est n, il suffit d établir un coloriage avec n couleurs. 3. Pour montrer que le nombre chromatique d un graphe est n, il suffit de montrer qu il contient un graphe complet K n 4. Si le nombre chromatique d un graphe est n, il contient forcément un graphe complet K n. 5. Pour montrer que le nombre chromatique d un graphe est au plus n 1, il suffit de montrer qu il ne contient pas de graphe complet K n. Exercice Quel est le nombre chromatique d une grille triangulaire T n (voir exercice pour la définition)? Même question pour une grille carrée. Exercice Un musée est constitué de 9 salles notées A, B, C, D, E, F, G, H et S. Le plan du musée est représenté sur la figure 6.1. A B C S D E F G H Figure 6.1 Plan du musée Pour rompre une éventuelle monotonie, le conservateur du musée souhaite différencier chaque salle de sa ou des salles voisines (c est-à-dire accessibles par une porte) par la moquette posée au sol. Quel est le nombre minimum de types de moquettes nécessaires pour répondre à ce souhait? Justifier. Exercice Un aquariophile souhaite acquérir 6 espèces de poissons : A, B, C, D, E, F. Certaines espèces ne peuvent cohabiter dans un même aquarium. La liste des incompatibilités est la suivante : A avec E, F avec D, E avec F, C avec D, B avec C, A avec F, B avec D, B avec F. Il se pose la question de savoir de combien d aquariums il doit disposer au minimum. 1. Dessiner le graphe représentant les incompatibilités entre les poissons 2. Modéliser le problème posé en un problème sur le graphe précédant. 3. Résoudre le problème posé. 41

42 Exercice Un opérateur de télécommunications mobiles veut couvrir une zone géographique à l aide de quelques bornes de téléphonie mobile. Pour éviter les interférences, on utilise différents canaux : deux bornes éloignées de moins de 600 m doivent utiliser des canaux différents. La figure 6.2 montre la position des différentes bornes sur une grille dont les carreaux sont de taille 100 m 100 m. Figure 6.2 Carte représentant la position de bornes de téléphonie Quel est le nombre minimum de canaux que l opérateur de télécommunications devra utiliser pour que son réseau de téléphonie mobile puisse fonctionner sans interférence? Si la borne en bas du bord droit avait été 100 m plus à gauche, est-ce que le résultat serait le même? Justifier. 6.2 Graphes 2-coloriables On dit qu un graphe est 2-coloriable si son nombre chromatique vaut au plus 2, autrement dit s il est possible de le colorier avec deux couleurs. Un tel graphe G est aussi appelé biparti, ce qui signifie que l on peut partitionner les sommets en deux ensembles S 1 et S 2 tels que les arêtes de G relient toujours un sommet de S 1 à un sommet de S 2 on peut donc attribuer la couleur c 1 à tous les sommets de S 1, et la couleur c 2 à tous les sommets de S 2. Un cycle impair est un cycle de longueur impaire (voir chapitre 5), autrement dit un cycle avec un nombre impair d arêtes (et donc un nombre impair de sommets si l on ne compte pas deux fois le sommet de départ qui est aussi le sommet d arrivée) ; le cycle impair le plus trivial est le triangle. Théorème 6.2 Un graphe G est 2-coloriable si et seulement si G ne possède pas de cycle impair. 42

43 Exercice Parmi les graphes suivant : B C A D G E F 1. lesquels sont 2-coloriables? 2. pour le ou les autres, calculer le nombre chromatique. Algorithme Pour tester si un graphe connexe G est coloriable avec deux couleurs données c 1 et c 2, on dispose d un algorithme qui ressemble au test de connexité (voir section 5.3) : 1. choisir un sommet initial s et le colorier avec la couleur c 1 ; 2. tant qu il existe un sommet t non coloré avec un voisin coloré : a) tester si les voisins de t déjà coloriés ont tous la même couleur ; b) si c est le cas, colorier t avec l autre couleur ; c) sinon, arrêter l algorithme. Cet algorithme prouve en même temps le théorème 6.2, c est l objet de l exercice suivant. Exercice Montrer que lorsque cet algorithme colorie tous les sommets du graphe, celui-ci est bien colorié. 2. Montrer que lorsque l exécution de l algorithme se termine prématurément (étape 2.c), un cycle impair a été détecté le graphe n est donc pas 2-coloriable. 3. En déduire le théorème. Exercice Écrire une fonction effacercouleurs(g) qui colorie en blanc tous les sommets de G. 2. Écrire une fonction sommetcoloriable(g) qui renvoie un sommet de G blanc ayant au moins un voisin non blanc et None si un tel sommet n existe pas. 3. Écrire une fonction monocouleurvoisins(s) qui, si les voisins non blancs du sommet s sont tous de la même couleur, renvoie cette couleur et dans le cas contraire (s a deux voisins de couleurs non blanches différentes) renvoie None. 4. Écrire une fonction deuxcoloration(g,c1,c2) qui tente de colorier le graphe G avec les deux couleurs c1 et c2 en utilisant l algorithme détaillé plus haut, et renvoie True en cas de succès, False sinon. 43

44 5. Tester la fonction sur : a) des grilles utiliser la fonction construiregrille(m,n), b) des arbres fonction construirearbre(degre,hauteur), c) des graphes bipartis complets fonction construirebiparticomplet(m,n) ; un graphe G est biparti complet, s il existe une partition de son ensemble de sommets en deux sous-ensembles U et V telle que chaque sommet de U est uniquement relié à chaque sommet de V. Si U est de cardinal m et V est de cardinal n le graphe biparti complet est noté K m,n ; d) le graphe de Petersen, e) le cube, l octaèdre et le dodécaèdre. Après chaque essai dessiner le graphe pour vérifier soit qu il est bien colorié, soit qu un sommet non coloré t possède deux voisins de couleurs distinctes ; dans ce dernier cas vérifier qu un cycle impair relie t et certains des sommets déjà coloriés. Conseils : lorsque la fonction deuxcoloration découvre un sommet t non coloré avec deux voisins de couleurs différentes (cas d un graphe non 2-coloriable), afficher ce sommet en ajoutant simplement une instruction print(t). Les graphes de cette section sont pour la plupart mieux dessinés en spécifiant l algorithme de dessin comme suit : dessiner(g,algo= neato ). Voir pour une description rapide des algorithmes disponibles avec ce logiciel de dessin de graphes : dot, neato, fdp, twopi et circo. Exercice Écrire une fonction areteentre(s1,s2) qui retourne une arête entre les sommets s1 et s2 s il en existe une, None sinon. Comme dans l exercice modifier la fonction sommetcoloriable pour marquer l arête qui relie ce sommet non coloré à son voisin coloré ; ne pas oublier de modifier aussi la fonction effacercouleurs pour démarquer les arêtes en même temps. Tester à nouveau la fonction deuxcoloration comme dans l exercice précédent, et dessiner à chaque fois le graphe : que remarque-t-on à propos du sous-graphe formé par les arêtes marquées (et leurs extrémités)? Lorsque le graphe n est pas 2-coloriable vérifier qu il existe toujours un cycle impair dont toutes les arêtes, sauf une, sont marquées. Exercice Utiliser la fonction melange comme dans l exercice pour modifier la fonction sommetcoloriable afin que le résultat ne dépende plus de l ordre dans lequel sont rangés les sommets du graphe, ni de l ordre des arêtes incidentes à un sommet. Une fois cette modification effectuée, appliquer plusieurs fois la fonction deuxcoloration au dodécaèdre ; après chaque calcul dessiner le graphe et observer quel est le sommet non coloré t avec deux voisins de couleurs différentes qui a stoppé l exécution de l algorithme ; observer que le sommet t est situé sur un cycle impair dont toutes les arêtes, sauf une, sont marquées, et que ce cycle n est pas toujours un pentagone (bonne chance). 44

45 6.3 Heuristique (hors-programme) Heuristique est un terme dérivé d une expression grecque signifiant «discours propre à découvrir», par opposition à «discours propre à convaincre», selon le Trésor de la Langue Française : En sciences on désigne ainsi une méthode ou un principe (souvent simples et astucieux) qui permettent d obtenir une solution approchée d un problème, ici celui de la coloration d un graphe, pour lequel on ne connaît pas de méthode à la fois efficace et rigoureuse. Voici un algorithme qui permet de colorer un graphe G avec peu de couleurs, mais qui ne garantit pas que l on ne pourrait pas faire mieux, c est-à-dire utiliser moins de couleurs ; G est supposé simple (cf. introduction de ce chapitre), ainsi le degré d un sommet est égal à son nombre de voisins : 1. ordonner les couleurs disponibles dans un ordre arbitraire ; 2. choisir un sommet s de degré minimal d ; 3. retirer s (et toutes les arêtes issues s) du graphe G, ce qui fournit un graphe G ; 4. colorier G par la même méthode ; 5. s est alors entouré de d voisins colorés : colorier s avec la première couleur autorisée, c est-à-dire avec la première couleur qui ne fait pas partie de l ensemble des couleurs des voisins de s. Exercice Exécuter l algorithme à la main sur le graphe de l exercice Autres exemples simples : grille rectangulaire 3 3, grille triangulaire T 3 (voir exercices et 3.4.6), octaèdre. Exercice Soit G un graphe connexe 2-coloriable ; montrer par récurrence sur le nombre de sommets que l algorithme ci-dessus colorie G avec deux couleurs, à condition que la suppression répétée de sommets de degrés minimaux ne déconnecte jamais le graphe. Donner un exemple de graphe G connexe 2-coloriable et possédant un sommet s de degré minimal dont la suppression déconnecte G (le graphe G n est plus connexe) ; montrer que dans ce cas l algorithme peut échouer à colorier G avec deux couleurs. Proposer une modification de l algorithme qui corrige ce défaut. Exercice Comme on ne dispose pas de moyen de supprimer un sommet dans un graphe, on va programmer cette heuristique en marquant les sommets, avec la convention qu un sommet marqué sera considéré comme supprimé : 1. écrire une fonction nbvoisinsnonmarques(s) qui retourne le nombre de voisins du sommet s qui ne sont pas marqués ; 2. écrire une fonction sommetnonmarqueminimal(g) qui retourne un sommet non marqué du graphe G ayant un nombre minimal de voisins non marqués ; 3. écrire une fonction couleurlibre(s) qui retourne la première couleur différente des couleurs actuelles des voisins de s ; 4. utiliser les fonctions sommetnonmarqueminimal et couleurlibre pour écrire une fonction degmin(g) qui colorie un graphe G selon l algorithme décrit dans cette section ; 5. terminer en écrivant une fonction coloriergraphe(g) qui efface les couleurs et les marques du graphe G avant de lancer degmin ; 45

46 6. améliorer la fonction précédente pour qu elle retourne le nombre de couleurs employées. Conseils : a) Il est possible qu il n existe pas de sommet non marqué! Ceci signifie que tous les sommets ont été supprimés, et dans ce cas la fonction sommetnonmarqueminimal doit retourner None. b) La fonction degmin supprime le sommet s retourné par sommetnonmarqueminimal, c està-dire qu elle le marque, après quoi elle appelle... degmin pour colorier le graphe privé de s. Une fonction qui s appelle elle-même est dite récursive ; pour toute fonction de ce type il faut spécifier un cas particulier sans appel récursif, sinon on entre dans une boucle sans fin. Ici le plus simple est de tester si s est égal à None : dans ce cas tous les sommets ont été supprimés et il n y a rien à colorier. c) Pour toute liste u constituée des éléments u 0, u 1, u 2... et pour toute fonction f, la liste [f(u 0 ), f(u 1 ), f(u 2 ),...] s écrit très simplement en python : [f(x) for x in u] en remplaçant les crochets par des accolades on obtient un ensemble au lieu d une liste. On pourra utiliser cette construction pour calculer la liste (ou l ensemble) des couleurs des voisins d un sommet. Pour écrire la fonction couleurlibre(s) il reste à parcourir la liste des couleurs disponibles (voir annexe ci-dessous) et à retourner la première qui ne figure pas parmi les couleurs des voisins de s ; si ce n est pas possible (toutes les couleurs sont prises) retourner white. d) Utiliser le conseil précédent pour calculer le nombre de couleurs employées par la fonction coloriergraphe la fonction len(e) compte le nombre d éléments d un ensemble E. Tester la fonction coloriergraphe sur des grilles, sur le graphe de Petersen (voir exercice 6.1.4), et sur les graphes planaires réguliers (tétraèdre, cube, octaèdre, dodécaèdre et icosaèdre). Utiliser la fonction melange comme dans l exercice pour que la fonction sommetnonmarqueminimal retourne un sommet aléatoire parmi ceux de degré minimal, lorsqu il en existe plusieurs : on verra alors que le nombre de couleurs employées pour colorier certains graphes varie suivant l ordre dans lequel on choisit les sommets de degré minimal. Annexe : palettes Du point de vue informatique, une palette de couleurs n est rien d autre qu une liste de couleurs, que l on peut construire manuellement : p = [ red, green, blue,...] voir pour la liste des noms de couleurs reconnues par le programme de dessin de graphes (il y en a plusieurs centaines). Mais construire des palettes harmonieuses est une autre histoire, c est le travail des graphistes, et le même site propose plusieurs dizaines de palettes prédéfinies (avec de nombreuses variantes suivant le nombre de couleurs souhaitées). Le module palettes, à charger par : from palettes import * 46

47 comporte quelques listes de couleurs empruntées à ce site ; la fonction palettenumero(n) retourne l une de ces palettes. Ces couleurs ne portent pas de noms, elles sont définies par leur code RGB : six chiffres hexadécimaux précédés du caractère # et encadrés par des apostrophes doubles (sinon le logiciel de dessin graphviz n est pas content). 47

48

49 Annexe A. Aide-mémoire Environnement de TP Deux environnements de travail sont utilisés. L un, Python Tutor, est disponible depuis le site web du cours Il est utilisable depuis n importe quel navigateur web supportant javascript. L intérêt de Python Tutor est qu il permet d observer l exécution du programme pas à pas. Le défaut est qu il est difficile de sauvegarder ses programmes, et il limite le nombre de pas à seulement. L autre, idle3, contient à la fois un éditeur de texte et un interpréteur interactif, ce qui permet à la fois de facilement enregistrer ses programmes, et d expérimenter avec. Il est disponible sur les postes du CREMI, mais vous pouvez également l installer sur votre propre ordinateur depuis Selon les situations, on préfèrera donc utiliser l un ou l autre. Environnement Python Tutor L environnement Python Tutor est disponible depuis le site web du cours : Il vous demande votre login et mot de passe CREMI. Il suffit alors de taper le code et lancer l exécution. On obtient alors une page avec à gauche le code en cours d exécution ainsi qu une barre de progression et quelques boutons permettant d avancer et reculer dans l exécution, et à droite l état des variables du programme. On peut ainsi observer l évolution des variables pendant l exécution pas à pas. Le lien Éditer le code permet de retourner modifier le programme, avant de l exécuter de nouveau. Environnement de travail Linux Deux systèmes d exploitation peuvent être installés sur les ordinateurs personnels auquels vous avez accès : Linux et Windows. Les travaux pratiques seront entièrement réalisés dans le cadre du système d exploitation Linux. Connexion/Déconnexion Tapez votre nom de login, puis votre mot de passe dans la fenêtre de connexion 1. À la fin du TP, il ne faut pas oublier de se déconnecter (se déloger du système). Terminal On tape les commandes (ls, python3,...) dans une fenêtre particulière appelée terminal. On lance une fenêtre de ce type à partir des menus disponibles. 1. Si le système Linux n est pas déjà chargé, il faut redémarrer l ordinateur et choisir l option Linux au moment opportun. 49

50 Fichiers et répertoires Chaque utilisateur dispose d un répertoire personnel où il peut créer les fichiers et répertoires nécessaires à son travail. On parle aussi de répertoire d accueil car c est le répertoire courant ( celui dans lequel on se trouve ) lorsqu on vient de se connecter. Un fichier contient des données (texte, programme, image,...) Les fichiers que vous allez créer et utiliser dans le cadre de cet enseignement contiendront des programmes écrits en langage Python. Par convention, on choisit pour les fichiers python un nom se terminant par.py, que l on range dans son répertoire personnel. Depuis un terminal, la commande ls permet de faire afficher tous les fichiers se trouvant dans le répertoire. Ecrire et tester un programme python Commencez par ouvrir un terminal. Vous écrirez vos programmes Python avec l environnement de développement IDLE : lancez-le depuis le terminal à l aide de la commande idle3 & Attention : la version 3 du langage Python n est pas compatible avec la version 2, il faut écrire idle3 en un seul mot, sans espace, pour bien choisir la version 3 ; la version du langage apparaît sur la première ligne de la fenêtre qui s ouvre en réponse au lancement de IDLE. Le signe final & est important : il permet de continuer à entrer des commandes dans la fenêtre terminal, que l on peut fermer (ce n est pas conseillé) sans fermer en même temps la fenêtre IDLE. Python Shell Dans cette fenêtre on entre des instructions destinées à l interprète Python ; chaque instruction est exécutée, puis IDLE affiche à nouveau l invite : >>> qui signale qu on peut entrer une nouvelle instruction. Une instruction peut occuper plusieurs lignes et dans ce cas IDLE les indente automatiquement. Voici quelques problèmes courants et leur solution : L invite >>> n apparaît pas : IDLE attend des instructions supplémentaires, appuyer à nouveau sur la touche Entrée pour faire apparaître l invite. Comment modifier une instruction sans tout retaper? Cliquer n importe où dans l instruction et appuyer sur la touche Entrée : l instruction est copiée en face de la dernière invite, et on peut la modifier comme si le texte était en cours de frappe. Autre méthode : la combinaison de touches Alt-p (p = previous) affiche l instruction précédente ; continuer à appuyer sur Alt-p pour faire défiler les instructions déjà entrées ; si nécessaire utiliser Alt-n (n = next) pour inverser l ordre de défilement. L indentation automatique n est pas correcte : cela se produit chaque fois qu il faut revenir en arrière (par exemple pour entrer else: après avoir traité le cas if... :) et il suffit d utiliser la touche effacement arrière (Backspace) située au-dessus de la touche Entrée. 50

51 IDLE propose aussi de compléter automatiquement un mot en cours de frappe (code completion), il suffit d utiliser la touche de tabulation (au-dessus de la touche de verrouillage majuscule) pour activer ce mécanisme. Fenêtre d édition Pour ne pas mélanger développement et tests, il faut ouvrir une fenêtre d édition d un fichier qu on appellera tpx.py en remplaçant x par le numéro du TP. Il y a trois méthodes pour ouvrir cette fenêtre : Lancer IDLE avec la commande : idle3 tp2.py & (s il s agit du TP numéro 2...) ou bien, une fois IDLE lancé, choisir dans le menu : File -> New Window on peut aussi modifier la configuration de IDLE comme suit : menu Options -> Configure IDLE, onglet General, section Startup Preference, cliquer sur Open Edit Windows. La fenêtre qui apparaît sert à entrer les définitions de fonctions Python. Pour tester ces fonctions dans la fenêtre Python Shell appuyer sur la touche F5. Le message : >>> ================ RESTART ================ apparaît alors dans la fenêtre Python Shell, et vous êtes prêt à tester vos fonctions. A chaque appui sur la touche F5 dans la fenêtre d édition, IDLE demande que le contenu de cette fenêtre soit sauvegardé, pour qu il puisse être lu dans l autre fenêtre. Si le fichier n a pas encore reçu de nom, choisir comme nom de fichier tpx.py en remplaçant x par le numéro du TP. Attention : il est impératif que le fichier soit de type.py pour qu IDLE et Python le reconnaissent comme un fichier source, c est-à-dire comportant des instructions écrites en langage Python. Une demande de confirmation de sauvegarde apparaît à chaque appui sur la touche F5. Lorsque la répétition de ce message devient irritante, modifier la configuration IDLE comme suit : Menu Options -> Configure IDLE, onglet General, section Autosave Preference, cliquer sur No prompt. Travail sur les graphes Il faut télécharger depuis le site sur la page «Supports des cours, TD et TP» les deux fichiers bibv3.py et graphv3.py et les sauvegarder dans votre répertoire personnel. Tout fichier de travail tpx.py doit commencer par la ligne magique : from bibv3 import * Bonne chance! 51

52 Touche F5 et RESTART La réinitialisation totale (restart) de l interprète Python à chaque appui sur F5 peut être pénible, car toutes les définitions entrées dans la fenêtre Python Shell sont oubliées. Pour éviter ce désagrément il suffit de lancer IDLE avec l option -n (no subprocess), par exemple : idle3 -n tp5.py & 52

53 Rappel de la syntaxe Affectation : variable = expression Opérateurs mathématiques : opérateurs usuels +,-,*,/,//, modulo % Opérateurs booléens : comparaison <,>,<=,>=, égalité ==,!=, combinaison and,or,not if (condition): instructions exécutées quand condition est vraie Exemple : if age <= age_reduction: prix = prix / 2 if (condition): instructions exécutées quand condition est vraie else: instructions exécutées quand condition est fausse while (condition): instructions exécutées tant que condition est vraie for variable in range: instructions exécutées avec variable contenant successivement les valeurs de range def fonction (parametres,avec,virgules): instructions exécutées quand fonction est appelée Exemple : if age <= age_reduction: prix = 5 else: prix = 10 Exemple : i = 1 while i < n: i = i * 2 Exemple : s = 0 for a in range(1,10): s = s + a Exemple : def f(n,m): if n < m: return n return m Les caractères représentent l indentation obligatoire. Les caractères " " représentent des espaces. La fonction range permet de générer des listes d entiers utilisables par la primitive for : list(range(10)) [0,1,2,3,4,5,6,7,8,9] list(range(3,7)) [3,4,5,6] list(range(1,20,4)) [1,5,9,13,17] 53

54 Utilisation de la bibliothèque de graphes Il faut commencer par importer les graphes définis dans le module bibv3 : from bibv3 import * Cette instruction importe aussi les fonctions suivantes définies dans le module graphv3 attention à respecter la distinction entre minuscules et majuscules : L argument G est un graphe listesommets(g) retourne la liste des sommets de G nbsommets(g) retourne le nombre de sommets de G sommetnom(g,etiquette) retourne le sommet de G désigné par son nom (etiquette). Exemple : sommetnom(europe, Italie ) dessinergraphe(g) ou simplement dessiner(g) demande (très poliment) au logiciel Graphviz de dessiner le graphe G ; voir page suivante pour les détails L argument s est un sommet listevoisins(s) retourne la liste des voisins de s degre(s) retourne le degré de s nomsommet(s) retourne le nom (étiquette) de s coloriersommet(s,c) colorie s avec la couleur c. Exemples de couleurs : red, green, blue, white, cyan, yellow couleursommet(s) retourne la couleur de s marquersommet(s) marque le sommet s demarquersommet(s) démarque le sommet s estmarquesommet(s) retourne True si s est marqué, False sinon listearetesincidentes(s) retourne la liste des arêtes incidentes à s L argument a est une arête nomarete(a) marquerarete(a) demarquerarete(a) estmarqueearete(a) retourne le nom (étiquette) de a marque l arête a démarque l arête a retourne True si a est marquée, False sinon Arguments : un sommet s et une arête a sommetvoisin(s,a) retourne le sommet voisin de s en suivant l arête a 54

55 L argument u est une liste melange(u) elementaleatoireliste(u) retourne une copie mélangée aléatoirement de la liste u. Exemple : melange(listesommets(cube)) retourne un élément choisi aléatoirement dans la liste u si celle-ci est non vide. Si la liste u est vide la fonction retourne une erreur IndexError. Exemple : elementaleatoireliste(listesommets(tgv2005)) La liste graphes contient les graphes tgv2005, fig32, Europe, Koenigsberg, Petersen et hypercubedim3. La liste graphesplanairesreguliers contient les graphes tetraedre, cube, octaedre (huit triangles), dodecaedre (douze pentagones) et icosaedre (vingt triangles). Les fonctions suivantes permettent de construire des graphes de taille variable : construirecomplet(n) construirebiparticomplet(m,n) construirearbre(d,h) construiregrille(m,n) construiretriangle(n) retourne le graphe complet K n Exemple : K5 = construirecomplet(5) retourne K m,n Exemple : K34 = construirebiparticomplet(3,4) retourne l arbre de hauteur h dont chaque sommet possède d fils Exemple : arbre = construirearbre(2,3) retourne la grille rectangulaire avec m lignes et n colonnes Exemple : grille = construiregrille(4,6) retourne la grille triangulaire d ordre n Exemple : t5 = construiretriangle(5) La fonction ouvrirgraphe permet d ouvrir un graphe existant au format.dot. Le format.dot est très standard et utilisé très largement pour sauvegarder des graphes, en fait c est un simple fichier texte, vous pouvez l ouvrir pour voir à quoi il ressemble! ouvrirgraphe(nom) Ouvre le fichier nom et retourne le graphe contenu dedans. (par exemple ouvrirgraphe("fichier.dot"). La fonction dessiner (abréviation de dessinergraphe) comporte des paramètres facultatifs : dessiner(g,true) dessiner(g,algo= neato ) dessiner(g,algo= circo ) dessine le graphe G en affichant les noms (étiquettes) des arêtes dessine le graphe G en utilisant un algorithme où les arêtes sont traitées comme des ressorts dessine le graphe G en utilisant un algorithme de placement des sommets sur un cercle 55

56 Utilisation de la bibliothèque d images Il faut commencer par importer le module Image : from PIL.Image import * Les fonctions suivantes deviennent alors disponibles : open(nom) (ou Image.open dans Python Tutor) Image.save(img, nom) new("rgb",(largeur,hauteur)) (ou Image.new dans Python tutor) Image.show(img) (largeur,hauteur) = img.size Image.putpixel(img, (x,y), (r,g,b)) Image.getpixel(img, (x,y)) Ouvre le fichier nom et retourne l image contenue dedans (par exemple open("teapot.png"). Sauvegarde l image img dans le fichier nom. Retourne une image de taille large haut, initialement noire. Affiche l image img. Récupère la largeur et la hauteur de img. Peint le pixel (x, y) dans l image img de la couleur (r, g, b) Retourne la couleur du pixel (x, y) dans l image img 56

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

TP 1. Prise en main du langage Python

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

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB Ce document, écrit par des animateurs de l IREM de Besançon, a pour objectif de présenter quelques unes des fonctions du logiciel Scilab, celles qui sont spécifiques

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

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.

Plus en détail

MIS 102 Initiation à l Informatique

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

Plus en détail

EXCEL TUTORIEL 2012/2013

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

Plus en détail

Gnuplot. Chapitre 3. 3.1 Lancer Gnuplot. 3.2 Options des graphes

Gnuplot. Chapitre 3. 3.1 Lancer Gnuplot. 3.2 Options des graphes Chapitre 3 Gnuplot Le langage C ne permet pas directement de dessiner des courbes et de tracer des plots. Il faut pour cela stocker résultats dans des fichier, et, dans un deuxième temps utiliser un autre

Plus en détail

Cours 7 : Utilisation de modules sous python

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

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

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 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,

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Algorithmique et Programmation, IMA

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

Plus en détail

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

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé. Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé. L usage d une calculatrice est autorisé Durée : 3heures Deux annexes sont à rendre avec la copie. Exercice 1 5 points 1_ Soit f la

Plus en détail

Troisième projet Scribus

Troisième projet Scribus Sommaire 1. Réponse à la question du deuxième projet... 2 2. Présentation du projet... 2 2.1. Organiser son travail... 2 3. Réalisation... 2 3.1. Préparation du texte... 2 3.1.1. Les styles «Dys»... 3

Plus en détail

Python - introduction à la programmation et calcul scientifique

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

Plus en détail

TP : Gestion d une image au format PGM

TP : Gestion d une image au format PGM TP : Gestion d une image au format PGM Objectif : L objectif du sujet est de créer une classe de manipulation d images au format PGM (Portable GreyMap), et de programmer des opérations relativement simples

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

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

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview. Sciences et Technologies de l Industrie et du Développement Durable Formation des enseignants parcours : ET24 Modèle de

Plus en détail

Initiation à linfographie

Initiation à linfographie Ce support de cours de l Agence universitaire de la Francophonie est distribué sous licence GNU FDL. Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence

Plus en détail

Fête de la science Initiation au traitement des images

Fête de la science Initiation au traitement des images Fête de la science Initiation au traitement des images Détection automatique de plaques minéralogiques à partir d'un téléphone portable et atelier propose de créer un programme informatique pour un téléphone

Plus en détail

Aide - mémoire gnuplot 4.0

Aide - mémoire gnuplot 4.0 Aide - mémoire gnuplot 4.0 Nicolas Kielbasiewicz 20 juin 2008 L objet de cet aide-mémoire est de présenter les commandes de base pour faire rapidement de très jolis graphiques et courbes à l aide du logiciel

Plus en détail

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

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

Plus en détail

Guide de démarrage rapide. (pour la version 5.0.)

Guide de démarrage rapide. (pour la version 5.0.) Guide de démarrage rapide (pour la version 5.0.) 2 Table des matières Introduction Réglages de l application MyTalk Mobile 1. MODIFICATION 2. DEMARRER 3. AFFICHER 4. SYNTHETISEUR VOCAL 5. NOMBRE DE MOTS

Plus en détail

Formats d images. 1 Introduction

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

Plus en détail

Recherche dans un tableau

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

Plus en détail

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7

Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7 Création d une SIGNATURE ANIMÉE avec PHOTOFILTRE 7 L animation est obtenue par défilement des images décomposant le mouvement de traçage de la signature. Les étapes successives seront : 1. Choix de la

Plus en détail

Projet Matlab : un logiciel de cryptage

Projet Matlab : un logiciel de cryptage Projet Matlab : un logiciel de cryptage La stéganographie (du grec steganos : couvert et graphein : écriture) consiste à dissimuler une information au sein d'une autre à caractère anodin, de sorte que

Plus en détail

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 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.........................

Plus en détail

My Custom Design ver.1.0

My Custom Design ver.1.0 My Custom Design ver.1.0 Logiciel de création de données de broderie Mode d emploi Avant d utiliser ce logiciel, veuillez lire attentivement ce mode d emploi pour bien l utiliser correctement. Conservez

Plus en détail

Représentation d un entier en base b

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

Plus en détail

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

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */. Page 1 de 9 MATLAB : COMMANDES DE BASE Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */. Aide help, help nom_de_commande Fenêtre de travail (Command Window) Ligne

Plus en détail

Problèmes de dénombrement.

Problèmes de dénombrement. Problèmes de dénombrement. 1. On se déplace dans le tableau suivant, pour aller de la case D (départ) à la case (arrivée). Les déplacements utilisés sont exclusivement les suivants : ller d une case vers

Plus en détail

Chap17 - CORRECTİON DES EXERCİCES

Chap17 - CORRECTİON DES EXERCİCES Chap17 - CORRECTİON DES EXERCİCES n 3 p528 Le signal a est numérique : il n y a que deux valeurs possibles pour la tension. Le signal b n est pas numérique : il y a alternance entre des signaux divers

Plus en détail

Opérations de base sur ImageJ

Opérations de base sur ImageJ Opérations de base sur ImageJ TPs d hydrodynamique de l ESPCI, J. Bico, M. Reyssat, M. Fermigier ImageJ est un logiciel libre, qui fonctionne aussi bien sous plate-forme Windows, Mac ou Linux. Initialement

Plus en détail

Initiation à LabView : Les exemples d applications :

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

Plus en détail

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B Excel : Réalisation d un classeur Compta Saisir les étiquettes Renommer la première feuille Compta Laisser la première ligne vide et sur la deuxième ligne saisir les étiquettes Se placer sur A2 et saisir

Plus en détail

Codage d information. Codage d information : -Définition-

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

Plus en détail

TP SIN Traitement d image

TP SIN Traitement d image TP SIN Traitement d image Pré requis (l élève doit savoir): - Utiliser un ordinateur Objectif terminale : L élève doit être capable de reconnaître un format d image et d expliquer les différents types

Plus en détail

Tutoriel Mathematica Les graphiques

Tutoriel Mathematica Les graphiques Tutoriel Mathematica Les graphiques Adaptation du tutoriel gratuit sur le Web par Éric Gaul, Dominic Boire et Issa Lizon (voir Médiagraphie). Modifié pour Mathematica 7 par Jean-Philippe Samson. Maintenant

Plus en détail

www.imprimermonlivre.com

www.imprimermonlivre.com 0 www.imprimermonlivre.com Composition d une couverture avec Word L objectif de ce guide est de vous proposer un mode opératoire pour créer une couverture avec Word. Nous vous rappelons toutefois que Word

Plus en détail

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 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

Plus en détail

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Compléments de documentation Scilab : affichage de texte et formatage de nombres Université des Sciences et Technologies de Lille U.F.R. de Mathématiques Pures et Appliquées Agrégation externe Année 2002-2003 Compléments de documentation Scilab : affichage de texte et formatage de

Plus en détail

LES TOUT PREMIERS PAS

LES TOUT PREMIERS PAS DESMODO, un logiciel de gestion d idées http://www.desmodo.net/ LES TOUT PREMIERS PAS Desmodo est un logiciel (libre) qui permet, entre autre, de visualiser et de synthétiser, de manière organisée, sous

Plus en détail

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part Eercices Alternatifs Une fonction continue mais dérivable nulle part c 22 Frédéric Le Rou (copyleft LDL : Licence pour Documents Libres). Sources et figures: applications-continues-non-derivables/. Version

Plus en détail

Initiation à l algorithmique

Initiation à l algorithmique Informatique S1 Initiation à l algorithmique procédures et fonctions 2. Appel d une fonction Jacques TISSEAU Ecole Nationale d Ingénieurs de Brest Technopôle Brest-Iroise CS 73862-29238 Brest cedex 3 -

Plus en détail

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

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

Plus en détail

Utiliser le logiciel Photofiltre Sommaire

Utiliser le logiciel Photofiltre Sommaire Utiliser le logiciel Photofiltre Sommaire 1. Quelques mots sur l image 2. Obtenir des images numériques 3. Le tableau de bord de logiciel PhotoFiltre 4. Acquérir une image 5. Enregistrer une image 6. Redimensionner

Plus en détail

Cours 1 : Qu est-ce que la programmation?

Cours 1 : Qu est-ce que la programmation? 1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas [email protected] Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre

Plus en détail

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe : 1 CONNEXION A LA MESSAGERIE ZIMBRA PAR LE WEBMAIL Ecran de connexion à la messagerie Rendez vous dans un premier temps sur la page correspondant à votre espace webmail : http://webmailn.%votrenomdedomaine%

Plus en détail

Calcul Formel et Numérique, Partie I

Calcul Formel et Numérique, Partie I Calcul Formel et Numérique N.Vandenberghe [email protected] Table des matières 1 Introduction à Matlab 2 1.1 Quelques généralités.......................... 2 2 Où trouver des informations 2 3 Opérations

Plus en détail

GESTION DU LOGO. 1. Comment gérer votre logo? 2. 2.1. Format de l image 7 2.2. Dimensions de l image 8 2.3. Taille de l image 9

GESTION DU LOGO. 1. Comment gérer votre logo? 2. 2.1. Format de l image 7 2.2. Dimensions de l image 8 2.3. Taille de l image 9 GESTION DU LOGO 1. Comment gérer votre logo? 2 1.1. Insérer un logo 3 1.1.1. Insérer un logo dans le bandeau 3 1.1.2. Insérer un logo dans les éditions 4 1.2. Supprimer un logo 6 1.2.1. Supprimer un logo

Plus en détail

Plus petit, plus grand, ranger et comparer

Plus petit, plus grand, ranger et comparer Unité 11 Plus petit, plus grand, ranger et comparer Combien y a-t-il de boules sur la tige A? Sur la tige B? A B Le nombre de boules sur la tige A est plus grand que sur la tige B. On écrit : > 2 On lit

Plus en détail

Initiation à Excel. Frédéric Gava (MCF) [email protected]

Initiation à Excel. Frédéric Gava (MCF) gava@univ-paris12.fr Initiation à Excel 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 Plan de cette année

Plus en détail

SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION)

SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION) Terminale S CHIMIE TP n 2b (correction) 1 SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION) Objectifs : Déterminer l évolution de la vitesse de réaction par une méthode physique. Relier l absorbance

Plus en détail

Programmation Web. Madalina Croitoru IUT Montpellier

Programmation Web. Madalina Croitoru IUT Montpellier Programmation Web Madalina Croitoru IUT Montpellier Organisation du cours 4 semaines 4 ½ h / semaine: 2heures cours 3 ½ heures TP Notation: continue interrogation cours + rendu à la fin de chaque séance

Plus en détail

Access 2007 FF Access FR FR Base

Access 2007 FF Access FR FR Base ACCESS Basic Albertlaan 88 Avenue Albert Brussel B-1190 Bruxelles T +32 2 340 05 70 F +32 2 340 05 75 E-mail [email protected] Website www.keyjob-training.com BTW TVA BE 0425 439 228 Access 2007

Plus en détail

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. 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

Plus en détail

Chapitre 2 Devine mon nombre!

Chapitre 2 Devine mon nombre! Python 3 : objectif jeux Chapitre 2 Chapitre 2 Devine mon nombre! 2.1. Thèmes abordés dans ce chapitre commentaires modules externes, import variables boucle while condition : if... elif... else la fonction

Plus en détail

1 Recherche en table par balayage

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

Plus en détail

1 Lecture de fichiers

1 Lecture de fichiers Programmation 1 Cours n 6 GB3, 2 nd semestre 2014-2015 Cours de Python Gilles Bernot 1 Lecture de fichiers Un fichier est une suite de caractères mémorisés sur le disque dur de la machine dans un endroit

Plus en détail

L import massif introduit plusieurs nouvelles fonctionnalités, selon que l on importe un thésaurus, un ensemble de valeurs contrôlées ou un corpus.

L import massif introduit plusieurs nouvelles fonctionnalités, selon que l on importe un thésaurus, un ensemble de valeurs contrôlées ou un corpus. Import Massif Nouvelles fonctionnalités L import massif introduit plusieurs nouvelles fonctionnalités, selon que l on importe un thésaurus, un ensemble de valeurs contrôlées ou un corpus. Le fonctionnement

Plus en détail

Module 16 : Les fonctions de recherche et de référence

Module 16 : Les fonctions de recherche et de référence Module 16 : Les fonctions de recherche et de référence 16.0 Introduction L une des fonctions les plus importantes d Excel, c est la possibilité de chercher une valeur spécifique dans un grand nombre de

Plus en détail

Premiers Pas avec OneNote 2013

Premiers Pas avec OneNote 2013 Premiers Pas avec OneNote 2 Présentation de OneNote 3 Ouverture du logiciel OneNote 4 Sous Windows 8 4 Sous Windows 7 4 Création de l espace de travail OneNote 5 Introduction 5 Présentation des différentes

Plus en détail

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part Eercices Alternatifs Une fonction continue mais dérivable nulle part c 22 Frédéric Le Rou (copleft LDL : Licence pour Documents Libres). Sources et figures: applications-continues-non-derivables/. Version

Plus en détail

Guide plateforme FOAD ESJ Lille

Guide plateforme FOAD ESJ Lille Guide plateforme FOAD ESJ Lille v. 1.2 «étudiants» septembre 2014 Réalisé par Maxime Duthoit Ingénieur pédagogique multimédia à l ESJ Lille Sommaire Introduction... 1 1. Accueil et connexion... 2 2. Accueil

Plus en détail

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée. ANALYSE 5 points Exercice 1 : Léonie souhaite acheter un lecteur MP3. Le prix affiché (49 ) dépasse largement la somme dont elle dispose. Elle décide donc d économiser régulièrement. Elle a relevé qu elle

Plus en détail

Je découvre le diagramme de Venn

Je découvre le diagramme de Venn Activité 8 Je découvre le diagramme de Venn Au cours de cette activité, l élève découvre le diagramme de Venn et se familiarise avec lui. Pistes d observation L élève : reconnaît les éléments du diagramme

Plus en détail

L informatique en BCPST

L informatique en BCPST L informatique en BCPST Présentation générale Sylvain Pelletier Septembre 2014 Sylvain Pelletier L informatique en BCPST Septembre 2014 1 / 20 Informatique, algorithmique, programmation Utiliser la rapidité

Plus en détail

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons Guide d'utilisation OpenOffice Calc AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons 1 Table des matières Fiche 1 : Présentation de l'interface...3 Fiche 2 : Créer un nouveau classeur...4

Plus en détail

La Clé informatique. Formation Excel XP Aide-mémoire

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

Plus en détail

Créer le schéma relationnel d une base de données ACCESS

Créer le schéma relationnel d une base de données ACCESS Utilisation du SGBD ACCESS Polycopié réalisé par Chihab Hanachi et Jean-Marc Thévenin Créer le schéma relationnel d une base de données ACCESS GENERALITES SUR ACCESS... 1 A PROPOS DE L UTILISATION D ACCESS...

Plus en détail

Créer un tableau avec LibreOffice / Calc

Créer un tableau avec LibreOffice / Calc Créer un tableau avec LibreOffice / Calc Réaliser des tableaux LibreOffice / Calc permet de créer des tableaux facilement en utilisant les cellules. En premier lieu, il faut prévoir le nombre de colonnes

Plus en détail

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un

Plus en détail

Algorithme. Table des matières

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..............

Plus en détail

TD : Codage des images

TD : Codage des images TD : Codage des images Les navigateurs Web (Netscape, IE, Mozilla ) prennent en charge les contenus textuels (au format HTML) ainsi que les images fixes (GIF, JPG, PNG) ou animée (GIF animée). Comment

Plus en détail

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e GUIDE DE DÉMARRAGE SitagriPro Infinite Un service FINANCEAGRI c o r p o r a t e SOMMAIRE ÉTAPE 1 : Installation... p.3 1. Introduction 2. Connexion à SitagriPro Infinite ÉTAPE 2 : Identification... p.5

Plus en détail

Introduction à la présentation graphique avec xmgrace

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...........

Plus en détail

Cours Excel : les bases (bases, texte)

Cours Excel : les bases (bases, texte) Cours Excel : les bases (bases, texte) La leçon 1 est une leçon de base qui vous permettra de débuter avec Excel, elle sera fort utile pour les prochaines leçons. Remarque : à chaque fois qu il est demandé

Plus en détail

Initiation à la Programmation en Logique avec SISCtus Prolog

Initiation à la Programmation en Logique avec SISCtus Prolog Initiation à la Programmation en Logique avec SISCtus Prolog Identificateurs Ils sont représentés par une suite de caractères alphanumériques commençant par une lettre minuscule (les lettres accentuées

Plus en détail

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet.

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet. 1- Optimiser le poids de votre image : Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet. Tous les types d utilisateurs (auteur, publicateur,

Plus en détail

Jean Dubuffet AUTOPORTRAIT II - 1966

Jean Dubuffet AUTOPORTRAIT II - 1966 Jean Dubuffet AUTOPORTRAIT II - 1966 MON VISAGE A LA MANIERE DE JEAN DUBUFFET OBJECTIFS - utiliser son expérience sensorielle visuelle pour produire une œuvre picturale. - réaliser une œuvre s'inspirant

Plus en détail

V- Manipulations de nombres en binaire

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,

Plus en détail

Modes Opératoires WinTrans Mai 13 ~ 1 ~

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.

Plus en détail

Tp_chemins..doc. Dans la barre "arche 2" couleur claire 1/5 21/01/13

Tp_chemins..doc. Dans la barre arche 2 couleur claire 1/5 21/01/13 TP de création : utilisation des chemins vectoriels Finis les mauvais rêves : vous aurez enfin votre dreamcatcher (Indienss des Grands Lacs) 1 ) Créez une nouvelle image de 300 pixels sur 600 pixels en

Plus en détail

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

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

Plus en détail

Pop-Art façon Roy Liechtenstein

Pop-Art façon Roy Liechtenstein 1 sur 6 22/01/2010 22:35 Pop-Art façon Roy Liechtenstein Ce tutoriel peut paraître loin de la photographie, mais il contient des techniques très utiles, voire indispensables en matière de retouche. 1 -

Plus en détail

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran dossier par Clochar SOMMAIRE 1. LES RESOLUTIONS d'ecran... 1 2. RESOLUTION de l écran et choix de la TAILLE DE LA PAGE... 2 3. AGRANDISSEMENT

Plus en détail

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

Plus en détail

Optimisation, traitement d image et éclipse de Soleil

Optimisation, traitement d image et éclipse de Soleil Kléber, PCSI1&3 014-015 I. Introduction 1/8 Optimisation, traitement d image et éclipse de Soleil Partie I Introduction Le 0 mars 015 a eu lieu en France une éclipse partielle de Soleil qu il était particulièrement

Plus en détail

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3 Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4

Plus en détail

COPY. Picture Style Editor Ver. 1.4 MODE D EMPLOI. Logiciel de création de fichiers de style d image. Contenu de ce mode d emploi

COPY. Picture Style Editor Ver. 1.4 MODE D EMPLOI. Logiciel de création de fichiers de style d image. Contenu de ce mode d emploi Logiciel de création de fichiers de style d image Picture Style Editor Ver..4 MODE D EMPLOI Contenu de ce mode d emploi Picture Style Editor est abrégé en PSE. Dans ce mode d emploi, les fenêtres utilisées

Plus en détail

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

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé Baccalauréat ES Pondichéry 7 avril 204 Corrigé EXERCICE 4 points Commun à tous les candidats. Proposition fausse. La tangente T, passant par les points A et B d abscisses distinctes, a pour coefficient

Plus en détail

Items étudiés dans le CHAPITRE N5. 7 et 9 p 129 D14 Déterminer par le calcul l'antécédent d'un nombre par une fonction linéaire

Items étudiés dans le CHAPITRE N5. 7 et 9 p 129 D14 Déterminer par le calcul l'antécédent d'un nombre par une fonction linéaire CHAPITRE N5 FONCTIONS LINEAIRES NOTION DE FONCTION FONCTIONS LINEAIRES NOTION DE FONCTION FONCTIONS LINEAIRES NOTION DE FONCTION Code item D0 D2 N30[S] Items étudiés dans le CHAPITRE N5 Déterminer l'image

Plus en détail

TP1 - Prise en main de l environnement Unix.

TP1 - Prise en main de l environnement Unix. Mise à niveau UNIX Licence Bio-informatique TP1 - Prise en main de l environnement Unix. Les sujets de TP sont disponibles à l adresse http://www.pps.jussieu.fr/~tasson/enseignement/bioinfo/ Les documents

Plus en détail

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

Probabilités. Une urne contient 3 billes vertes et 5 billes rouges toutes indiscernables au toucher.

Probabilités. Une urne contient 3 billes vertes et 5 billes rouges toutes indiscernables au toucher. Lycée Jean Bart PCSI Année 2013-2014 17 février 2014 Probabilités Probabilités basiques Exercice 1. Vous savez bien qu un octet est une suite de huit chiffres pris dans l ensemble {0; 1}. Par exemple 01001110

Plus en détail