5. L Intelligence des Environnements de Programmation - PDF\n5. L Intelligence des Environnements de Programmation\nDownload "5. L Intelligence des Environnements de Programmation"\n1 1 5. L Intelligence des Environnements de Programmation Harald WERTZ Université Paris VIII Département Informatique 2, rue de la Liberté S t -Denis Cedex 02 Résumé Ce chapitre fait un survol des activités de recherche autour des environnements de programmation. Un environnement de programmation est un ensemble d outils d aide à l exécution, à l édition, à la documentation, à la lecture, à l annotation, à la vérification, à l observation et à la maintenance de programmes. Les environnements, ou leurs caractéristiques, que nous examinerons ne concernent que les aspects qui donnent une aide efficace au concepteur et/ou à l implémenteur de programmes. Nous distinguerons les environnements de programmation proprement dits c està-dire les aides directes à la programmation des environnements de génie logiciel, qui ont pour but de fournir des aides tout au long du processus de développement d un projet : de l analyse des demandes, en passant par les spécifications, à l implémentation et la maintenance Historique et Motivation Dans la mesure où tout le développement des langages informatiques et des systèmes opératoires peut être considéré comme un effort pour faciliter les tâches des programmeurs, il peut être considéré comme une amélioration continue des environnements de programmation. Au début, la programmation se faisait au niveau binaire : soit par des contacts physiques à établir, soit par des rudiments de programmation. On déterminait la suite de zéros et de uns dont l interprétation par la machine aboutissait au calcul désiré. Très vite les techniciens et chercheurs utilisant ces machines 1\n2 ont été confrontés au problème de la correction des programmes ainsi écrits. Notons que la correction de programmes suppose qu on ait compris le fonctionnement effectif du programme, son déroulement et les changements des valeurs qui y sont associées, qu on ait compris les lieux exacts où est produit un calcul différent de celui désiré, et qu on sache par quelle modification du programme ce comportement non désiré peut être éliminé. Notons que la lecture même des programmes (à cette époque elle se faisait encore partiellement par la consultation du plan de cablage) ne donnait aucune indication du rapport conceptuel entre le programme et la solution du problème modélisée par ce programme. Cette difficulté à faire correspondre le texte des fragments de programmes avec des concepts faisant partie du problème, a incité, dès le début des années 50, divers chercheurs [Gill51,Wilkes51] à proposer des outils d observation de l exécution des programmes. C est à cette époque également qu on a introduit déjà au niveau matériel, des moyens d exécuter les programmes en pas-à-pas (une manière d exécuter le programme instruction par instruction avec l option de pouvoir examiner le contenu des registres ou des mots mémoires choisis). Quelques unes des premières machines tel que l EDSAC 2 [Wilkes57, Barron63] proposaient même un mécanisme (toujours au niveau matériel) correspondant au concept très moderne de démons 1 : elles disposaient d un mécanisme permettant d observer l exécution des programmes et d interrompre cette exécution continue à l instant où des évènements prédéfinis, relatifs au calcul ou au traitement, ont lieu, pour ensuite examiner, comme dans le pas-à-pas, des registres et des mots mémoires choisis. C est, bien entendu, ce problème de l illisibilité des programmes binaires, ainsi que les problèmes liés au niveau très rudimentaire des instructions, qui a amené les informaticiens à développer des langages de programmation. Au début ce n était qu une représentation mnémonique des instructions de base. Ce langage s appelait le langage assembleur. Bien qu on soit encore loin des instructions sophistiquées des langages actuels, il est clair qu il est plus aisé de lire un texte comme : mov r1, r2 que l instruction binaire correspondante 2 qui est : 2 1. Techniquement, un démon est une procédure lancée automatiquement dès qu un évènement computationnel prédéfini survient. L instant précis de ce lancement dans le déroulement séquentiel du programme ne peut pas être prévu à priori. 2\n3 D une certaine manière, cet exemple capte toute la problématique des environnements de programmation : dans tous les cas il s agit de trouver des moyens pour rendre l écriture, la lecture et la modification des programmes plus aisées, d une part en permettant des représentations conceptuellement plus simples et, d autre part, en mettant à la disposition des programmeurs des outils permettant de limiter la complexité perçue des programmes. Rappelons qu un des problèmes majeurs de la programmation réside dans ce que Terry Winograd [Winograd75] nomme la barrière de complexité. Cette barrière de complexité est, principalement, une limite de nos capacités de mémorisation : au fur et à mesure de la croissance d un programme, le programmeur se construit, incrémentalement, une image mentale de l interaction entre ses différentes parties, de l utilisation et de l utilité des variables, du flux de contrôle et des données. Cette image, qui peut être très détaillée pour des programmes de faible dimension, doit, parallèlement à l agrandissement, se transformer en une image de plus en plus abstraite, ne gardant que des aspects globaux de l interaction et de la relation entre l implémentation et la spécification (qui peut être ou non formelle), et éliminant de plus en plus les détails locaux de l implémentation. Cette modification de la représentation interne que le programmeur possède de son programme, est liée à des limitations inhérentes au fonctionnement cognitif humain (cf. par exemple le papier bien connu de [Miller56]). Afin de parer à ces insuffisances humaines, les chercheurs en informatique proposent différentes solutions : le développement de langages de programmation de haut niveau pour la programmation symbolique (tels que LISP, Prolog, Smalltalk etc). Nous résumerons ce développement dans le paragraphe suivant. le développement de systèmes d aide à la programmation tels que des systèmes permettant la sauvegarde de différentes versions d un programme, des systèmes construisant des descriptions du flux de contrôle ou/et des données, des systèmes permettant une exécution contrôlée des programmes, des outils de traces d exécutions, etc. La description de tels systèmes d outils intégrés constituera la partie centrale de ce chapitre. 2. mov est une mnémonique pour move, synonyme de transfert, r1 pour registre 1 et r2 pour registre 2. Cette instruction copie le contenu du registre 1 dans le registre 2. Le code binaire peut se lire comme 010 pour le code correspondant à l instruction de copie (ou de transfert), 001 désigne l adresse no 1, le 0 suivant indique que c est l adresse d un registre, et la séquence 0100 restante peut être interprétée comme l adresse 2 (binaire 010) d un registre (le dernier 0 est comme préalablement une indication du mode d adressage). 3\n4 4 le développement de systèmes de programmation transformationnelle. Ces systèmes visent à formaliser les phases précédant la programmation proprement dite (principalement les phases de l analyse des demandes et des spécifications) pour ensuite compiler ces formalisations dans des programmes efficaces. En dernier ressort, ces recherches ne sont rien d autre que la reprise des recherches autour des langages de programmation de haut niveau à un niveau encore plus élevé ou plus conceptuel. Nous présenterons ces recherches brièvement dans la dernière partie de ce chapitre Les Langages De Programmation De Haut Niveau Les langages assembleurs, bien qu ils aient apporté un changement significatif dans les techniques de programmation, se sont très vite revélés insuffisants pour le développement de programmes complexes. Ceci pour trois raisons principales : La portabilité : étant donné que l assembleur n est qu une écriture mnémotechnique pour les instructions disponibles sur un ordinateur donné, chaque ordinateur possède son propre langage assembleur. Avec la multiplication des machines et des types différents de machines, il devenait de plus en plus nécessaire de pouvoir transporter un programme d une machine vers une autre. Si le programme est écrit en langage assembleur, un tel transport de logiciel revient quasiment à reécrire complètement le programme : par définition, les programmes assembleurs ne sont pas facilement portables. La complexité des applications : si au début du développement de l informatique, les personnes écrivant des programmes étaient des spécialistes de l informatique, l élargissement des domaines d application de ces machines demandait très tôt des connaissances d autres spécialités. Ecrire un programme de calcul physique nécessite de connaître à la fois la programmation, les mathématiques nécessaires à ce calcul et les particularités du domaine physique modélisé. Il semble plus simple que les informaticiens créent des langages spécialisés pour des applications particulières plutôt que d apprendre chacun des domaines d application possibles. Par exemple, le langage Fortran, le premier langage de haut niveau, a été créé pour permettre à des mathématiciens ou des physiciens de pouvoir eux-mêmes écrire leurs programmes. la complexité des programmes : comme nous l avons dit plus haut, un programme écrit dans un langage informatique devient rapidement très complexe, d une part à cause des interactions entre les différentes parties du programme et, d autre part à cause de la quasi impossibilité de faire 4\n5 5 clairement correspondre les concepts modélisés avec des blocs d instructions. Souvent c est une non-compréhension partielle de ces interactions qui est la source d erreurs de programmation difficiles à détecter. Les voies de solution choisies pour chacun de ces trois problèmes ont été diverses. Les questions de portabilité ont été résolues par le développement de langages compilés. A partir de l instant où une machine disposait d un compilateur pour un certain langage, on pouvait, à moindre frais y porter des logiciels écrits sur d autres machines dans le même langage. Deux des premiers langages compilés, Fortran [FOR54] et Cobol [COB73] ont été pour longtemps les langages disponibles sur la majorités des ordinateurs. 3 Notons que ces deux langages s adressaient à une clientèle très différente : si Fortran (le FORmula TRANslator) s adressait à des personnes ayant besoin de faire des calculs numériques, donc principalement à des mathématiciens et des physiciens, Cobol s adressait de prime abord aux personnes voulant automatiser la gestion. Ainsi, dès les premiers langages compilés, on prenait en compte le deuxième problème évoqué ci-dessous : le problème de la complexité des applications. Bien entendu, avec l élargissement des domaines d application des ordinateurs, le nombre et le type de langages de programmation s agrandissaient à vue d oeil. Ainsi, dès 1967, Graham Birtwistle, Ole Dahl, Bjørn Myhrhaug et Kristen Nygaard développaient le langage Simula [Birtwistle73] qui, comme son nom l indique, est spécialisé dans les logiciels de simulation. A la même époque, les chercheurs en Intelligence Artificielle commençaient à programmer en IPL-V [Newell64], un langage de programmation symbolique qui introduisait le concept de listes, un concept repris, perfectionné et généralisé par l équipe d Intelligence Artificielle du MIT avec le langage LISP [McCarthy65]. Ces langages, initialement basés exclusivement sur des interprètes 4 introduisaient non seulement les concepts de liste et de garbage collecteur, permettant de récupérer dynamiquement et de réutiliser la mémoire préalablement utilisée et dont le contenu n est plus nécessaire, mais ils étaient également les premiers langages permettant à l intérieur même du langage de manipuler les programmes écrits dans ce langage. Cette caractéristique de pouvoir manipuler les programmes par des programmes (pendant l exécution même) posait les premiers jalons de tout un courant de recherches concernant le troisième problème cité ci-dessus : le problème de la complexité des programmes. Ainsi, dès 1967 apparaissaient, en LISP, les premiers pro- 3. Nous faisons volontairement abstraction ici d un autre langage ancien qu est Algol-60 [Naur63] et ses successeurs directs Algol-68 [Wijngaarden69] et Algol-W [Sites71]. Ces langages, qui ont contribué énormément au développement des recherches logicielles (Algol-60 était le premier langage avec une instruction de sélection du style si-alors-sinon) n ont jamais réussi à s imposer à l extérieur de la communauté de recherche informatique. 4. Les interprètes ne traduisent pas les programmes dans un langage plus proche de la machine, comme le font les compilateurs, mais ils les interprètent directement. 5\n6 6 grammes de trace d exécution [Teitelman66], des éditeurs connaissant la structure des programmes [Teitelman65], des programmes permettant d interrompre temporairement l exécution des programmes (des points d arrêt), voire même les premiers évaluateurs partiels [Lombardi64]. Bien entendu, c est en partant de ces programmes que s est formé le champ de recherches autour des environnements de programmation. LISP est le langage le plus utilisé en Intelligence Artificielle, donc destiné à une programmation expérimentale et extrêmement complexe. Cette complexité a induit le développement de tout un ensemble de langages dérivés : Planner [Hewitt72] introduisait un contrôle programmatoire du backtracking 5, Conniver [McDermott74] simplifiait l implémentation de Planner et introduisait la possibilité de contextes multiples 6. A partir de LISP, Planner et Simula, Alan Kay a conçu le langage Smalltalk [Goldberg83], un langage qui non seulement intègrait la totalité des concepts utilisés dans ces langages, mais qui également a contribué énormément à l état de l art des environnements de programmation : par exemple, l interface du MacIntosh est en grande partie une copie de l interface de Smalltalk. Nous reviendrons sur Smalltalk dans le paragraphe sur les environnements de programmation. Alain Colmerauer a, indépendamment de LISP et plutôt à partir des techniques de programmation de la démonstration automatique de théorèmes, conçu le langage Prolog [Colmerauer82]. Ce langage permet d exprimer les programmes comme une suite de théorèmes logiques qu il s agit de démontrer. Ainsi quatre types de programmation et de langages de programmation coexistent aujourd hui : les langages impératifs (Fortran et Pascal, par exemple), les langages fonctionnels (avec LISP en tête), les langages orientés objets (Smalltalk en est l incarnation la plus connue) et les langages logiques (du style Prolog). Les tendances actuelles sont : d intégrer ces différents styles dans des langages uniques ceci pour permettre de choisir (en fonction des problèmes et des sous problèmes à résoudre) des styles de programmation différents à l intérieur d un même langage. Tao [Takeuchi83] et LOGIN [Aït85] sont deux réalisations intéressantes de ces efforts. 5. Le backtracking est une technique de retour vers des situations antérieures au rencontre d une situation de blocage. 6. En programmation IA, un contexte est principalement un espace de recherche. Des contextes multiples sont donc la coexistence de plusieurs espaces de recherche hypothétiques. 6\n7 d intégrer, à l intérieur de ses langages l ensemble des outils nécessaires au développement et à la mise au point de programmes. C est ce point que nous allons traiter dans le paragraphe suivant Les Systèmes d Aide a la Programmation Avant d entrer dans le vif du sujet, c est-à-dire : la description des outils intelligents disponibles à l intérieur des systèmes d aide à la programmation, examinons brièvement les étapes dans la construction d un programme. Ceci nous permettra de distinguer entre les phases de la programmation et celles de sa préparation des demandes à la réalisation de programmes 7 Tout programme débute par la définition d une tâche qu il s agit d automatiser. Souvent, ce n est pas l informaticien qui définit cette tâche, mais la personne qui en est jusqu alors responsable. C est ici que les premiers problèmes surgissent : la personne demandeuse d un service informatique s exprime en des termes propres à sa problématique, qu il s agit pour l informaticien de traduire en des termes programmatoires. Nous appelons cette première phase de traduction d une problématique (ce qu il faut faire) vers une autre (comment le faire) la phase d analyse des demandes ou étude des besoins 7 (cf. la Figure 1 sur la page suivante). Cette analyse des demandes se fait en collaboration étroite entre le demandeur et l informaticien et aboutit à une spécification plus ou moins informelle des diverses tâches informatiques à réaliser. C est à partir de cette spécification informelle que l informaticien va commencer à construire son programme. Dans la Figure 1, nous distinguons deux voies possibles : soit l informaticien procède d abord à la réalisation d un prototype 8 pour commencer à implémenter le programme seulement après validation du prototype, soit il ignore cette étape de prototypage et commence directement à développer son programme final. Bien qu intuitivement il semble évident que la construction d un prototype, qui peut être exécuté et validé en interaction avec le demandeur, est préférable à la construction immédiate du programme final, ce n est que très récemment, avec l avènement de langages de très haut niveau, adaptés au prototypage, que cette voie a pu être 7. Dans la littérature anglo-saxone cette phase s appelle la phase de requirements analysis. 8. Un prototype est un programme qui modélise le comportement du programme voulu. Principalement, c est une implémentation dans un langage de haut niveau qui fait abstraction des détails techniques et des questions d efficacité et qui n essaie de capturer que les activités principales du programme prévu. C est une sorte de programme croquis. 7\n8 8 Figure 1 : Developpement traditionnel de programmes suivie. Antérieurement, les coûts du travail et du temps nécessaires à la construction d un tel prototype étaient trop élevés. Si un prototype a été construit c est-à-dire si l on a programmé une première version au brouillon du projet il s agit ensuite de valider le comportement de ce prototype avec le (ou les) utilisateur(s) final(aux) du programme. Notons que cette phase de validation est extrêmement importante : souvent, la spécification informelle est erronée ou incomplète, ne capturant pas ou seulement partiellement les caractéristiques demandées au programme. La construction d un prototype aide à économiser des efforts de modification fastidieuses du programme définitif. Les aides disponibles au niveau de la construction (du codage) du prototype et au niveau de sa validation sont les mêmes que celles disponibles pour la construction et la validation du programme définitif. Nous y reviendrons par la suite dans le paragraphe sur la programmation transformationnelle. Néanmoins, la plupart du temps, après la spécification débute immédiatement la construction du programme définitif. Ce programme après avoir été testé doit également être validé par rapport à son comportement et son efficacité. Si une divergence entre la demande et le comportement du programme existe, il faut modifier le programme, le tester et le re-valider ensuite. Sur la Figure 1, qui représente les diverses phases dans la vie d un programme, ces activités successives sont représentées 8\n9 9 par les boucles codage programme source validation / test / affinement 9 / maintenance codage. Examinons, à travers un environnement de programmation type, les divers outils d aide qui sont actuellement mis à la disposition du programmeur. Nous y retrouverons les boucles que nous venons de mentionner. bvlisp [Wertz83, Wertz84], l environnement de programmation expérimental à travers lequel nous exposerons les capacités des outils d aide à la programmation, est un environnement intégré dans un interprète VLISP [Greussay77]. Le choix d un langage évolué tel que LISP, comme langage de base pour un environnement de programmation s impose par le fait que LISP possède, dans sa version de base, déjà tout un ensemble de caractéristiques extrêmement puissantes pour la construction d environnements. Notons particulièrement que les programmes LISP sont représentés sous forme de listes qui constituent la structure de données principale de LISP. Ceci permet l accès et la modification de programmes LISP en LISP même, et économise l effort de construction de parseurs 10 et de décompilateurs 11 nécessaires si la représentation des programmes exécutables diverge de leur représentation externe L édition et la documentation de programmes Mais revenons vers l activité de programmation. La première chose à faire est d entrer le programme. Ceci se fait en général avec un éditeur, un programme spécial pour écrire du texte dans un fichier. En bvlisp, l éditeur est intégré dans l interprète : toute interaction avec la machine se fait à travers cet éditeur, sans jamais sortir de LISP. L édition n est pas organisée autour du texte (c est-à-dire autour des caractères, des lignes et des paragraphes) mais autour des structures de base de LISP, donc autour des listes, des atomes et des structures spécifiques des diverses commandes et fonctions disponibles. Pour chaque fonction LISP existe un canevas qu il s agit de remplir. Ainsi, l édition devient principalement une composition et un remplissage de structures ou de canevas. Par exemple, au lieu de taper linéairement le fragment de programme ci-dessous : (DE EXEMPLE (VAR) (CONS VAR (CDR VAR))) le programmeur procède selon le scénario ci-dessous : 9. Dans la littérature inspirée par le vocabulaire anglophone, l affinement s appelle souvent tuning. 10. Un parseur est un programme traduisant la représentation externe (donc sous forme d une chaîne de caractères) en une forme intermédiaire plus facile à trraiter par le compilateur. 11. Un décompilateur est un programme traduisant la représentation interne d un programme en la représentation externe. C est l activité inverse du parseur et du compilateur. 12. Les caractéristiques importantes de LISP sont, entre autres, que la gestion de la mémoire est dynamique, les objets créés par l utilisateur ont le même statut que les objets primitifs, le traitement de conditions exceptionnnelles est programmable et finalement LISP est un langage non-typé. 9\n10 10 ( ) Dès que le programmeur tape une parenthèse ouvrante, l éditeur insère une parenthèse fermante et place le curseur entre les deux. (DE < nom><paramètres><corps>) Après que le programmeur ait tapé DE, l éditeur insère des mnémoniques à l endroit des arguments de cette fonction : ici, c est le canevas de la fonction DE. Le programmeur peut se déplacer d un mnémonique à l autre et les remplacer par ses arguments. Le curseur est placé de telle sorte que la suite de la frappe remplace le mnémonique <nom>. (DE EXEMPLE (< variables >) <corps>) Après avoir donné le nom de la fonction, le programmeur a entré une parenthèse ouvrante à l endroit des paramètres. L éditeur répond par une parenthèse fermante et le mnémonique adéquat. (DE EXEMPLE (<variables>) (CONS < objet> <liste>)) Le programmeur a choisit de ne pas encore remplir le canevas des variables, mais de commencer immédiatement à écrire le corps de la fonction. Pour cela il lui suffisait de pointer vers le mnémonique <corps>, de taper la parenthèse ouvrante (ce qui lui donnait le canevas général d un appel de fonction (<fonction><arguments>)) et de remplacer le mnémonique <fonction> par l appel de la fonction CONS. (DE EXEMPLE (<variables>) (CONS <objet> (CDR < liste>))) et ainsi de suite... Les aides que des éditeurs de ce type communément appelés éditeurs structuraux apportent, sont, premièrement, que l écriture en terme des structures du langage de programmation utilisé excluent toute erreur de syntaxe et, deuxièmement, que les mnémoniques données aux endroits des arguments donnent un rappel permanent du type des arguments attendus. Ce deuxième point, bien que n apportant qu une aide de niveau relativement bas, prévient les erreurs du type oubli d un argument et inversion des arguments, des erreurs très communes, même pour le programmeur confirmé. Les endroits ou les mnémoniques n ont pas encore été remplacés sont mémorisés par l éditeur et celui-ci peut, en réponse à une demande correspondante de l utilisateur, le placer à l endroit suivant non encore instancié. Ceci est un 10\n11 rudiment d aide de l éditeur pour rappeler au programmeur tous les endroits où le programme n est pas encore terminé, une sorte de liste d endroits où le programme nécessite encore des développements 13. Notons également, qu au fur et à mesure des nouvelles définitions entrées par le programmeur, l éditeur construit de nouveaux canevas qui seront montrés au moment voulu. Ainsi, après la frappe de la fonction EXEMPLE ci-dessous, la frappe d un appel de cette fonction livre automatiquement le canevas : qui contient deux informations : (EXEMPLE <liste>) premièrement, la fonction EXEMPLE possède un paramètre, et 11 deuxièmement, ce paramètre doit recevoir un argument qui est du type liste. Cette deuxième information a été dérivée du fait que l argument VAR se trouve comme argument de la fonction CDR qui elle attend toujours une liste en argument. Bien entendu, si à un instant donné l utilisateur appelle une fonction FOO non encore définie, le canevas montré sera : (FOO <argument(s)>) Mais, si l argument est instanciée comme : (FOO (EXEMPLE <liste>)) l éditeur en dérive que la fonction FOO doit avoir un seul argument et que ce seul et unique argument peut être une liste, puisque le résultat d un appel de la fonction EXEMPLE, étant lui-même le résultat d un appel de la fonction CONS, doit être une liste. Ce qui lui fait générer le nouveau canevas : (FOO <liste?>) où le point d interrogation exprime principalement le fait qu avec les informations actuellement disponibles on sait que l argument peut être une liste. Notons que, si la définition ultérieure de la fonction FOO confirme qu elle ne possède qu un seul paramètre et que la valeur de ce paramètre doit être une liste, ce canevas devient définitif. Si, par contre, pendant la définition de cette fonction des 13. Ceci correspond alors à ce que les anglophones appellent une outstanding task list, celle-ci étant néanmoins générée par l éditeur. 11\n12 12 divergences apparaissent, comme par exemple si elle est définie avec deux paramètres, l éditeur ouvre d abord une fenêtre de dialogue demandant à l utilisateur de confirmer cette divergence, et si l utilisateur répond par l affirmative, l éditeur met à jour le canevas et marque les endroits où FOO est appelée pour permettre à l utilisateur de se positionner ensuite sur ces endroits afin de corriger la ou les erreur(s). Ainsi, au fur et à mesure de l écriture d un programme, l éditeur construit une description des différentes fonctions construites, de leurs arguments, leurs résultats et leurs interactions. Il utilise constamment ces descriptions pour vérifier la correction des programmes entrés par l utilisateur, pour lui montrer les endroits non encore complétés, pour mettre à jour les descriptions périmées et pour montrer des endroits qui se trouvent en contradiction avec une nouvelle description. Bien entendu, cette description peut être utilisée de manière explicite par l utilisateur. Elle constitue sa fiche de rappel, le micro-manuel spécialisé de son application, qu il peut interroger interactivement dès qu un problème se présente. Bref, c est le noyau d une documentation du programme, construit automatiquement par l éditeur. La manière de visualiser cette documentation peut varier : soit l utilisateur veut juste voir un graphe du flux de contrôle de son programme, il verra alors un arbre comme à la Figure 2 ci-dessous, soit elle sera donnée sous forme textuelle, soit elle sera utilisée, de manière implicite, par le module de documentation. Figure 2 : Exemple d'arbre de flux de controle L arbre ci-dessus est non seulement une représentation graphique du flux de contrôle, donc de la structure du programme, mais il peut être également utilisé comme moyen de lire le programme : il suffit de pointer vers une des fonctions pour sélectionner, dans un menu, l affichage de la définition de la fonction, l affichage de sa description compactée, l affichage des variables locales et globales qu elle consulte et/ou modifie, pour demander ensuite un arbre du flux de données des valeurs de ces variables. Insistons sur cet aspect documentaire : l éditeur construit une description du programme en cours de développement. Cette description fait partie intégrante de la documentation déjà existante dans le système. L utilisateur peut à tout moment inter- 12\n13 roger la machine sur les sujets traités dans le manuel du langage (qui se trouve en-ligne) et sur les sujets dont la documentation a été construite automatiquement. Ainsi, par exemple, si à un instant donné l utilisateur ne se rappelle plus la définition d une fonction, la simple frappe de la touche? lui ouvre une fenêtre de documentation où il peut voir sa définition et quelques exemples saillants de son utilisation si la fonction est une fonction standard prédéfinie ou en voir une brève description indiquant ses paramètres et leur type, les endroits où cette fonction est appelée et les fonctions qui sont appellées par elle si c est une fonction utilisateur. Si l utilisateur a accompagné sa fonction d un ensemble d exemples d utilisation, ces exemples seront également montrés. 14 Mais avant d entrer plus en détail dans l aspect documentaire, revenons vers le graphique de l arbre du flux de contrôle. Cet arbre peut être également utilisé pour une trace de l exécution du programme. Dans ce dernier cas, parallèlement à l exécution du programme, seront alors montrées dans ce graphique les fonctions actives à chaque instant. Le film de l exécution en cours donne une très bonne visualisation du comportement dynamique du programme. Naturellement, rien n interdit d afficher en même temps, dans des fenêtres séparées, les valeurs que prennent diverses variables choisies ou le contenu de la pile ou d une autre structure complexe choisie. Cette utilisation multiple des outils d un environnement de programmation est une des caractéristiques principales de tout environnement de programmation : toute information, toute représentation développée dans un outil doit pouvoir être exploitée par et dans d autres outils voire même par les programmes utilisateurs. Mais continuons avec la description de notre éditeur intégré dans un langage et revenons vers notre programme exemple : (DE EXEMPLE (VAR) (CONS VAR (CDR VAR))) Supposons que le programmeur ait changé cette définition en celle ci-dessous : (DE EXEMPLE (VAR) (IF VAR (CONS VAR (EXEMPLE (CDR VAR))) NIL)) 13 Ce changement a pu être obtenu en enlevant le sous-arbre correspondant au corps de la fonction, en y insérant un nouveau sous-arbre correspondant à l appel de la fonction de sélection IF, en instanciant ensuite chacun de ses arguments (le deuxième pour l ancien corps) et en modifiant l ancien corps de manière telle qu il contienne l appel récursif de la fonction EXEMPLE. 14. Nous verrons par la suite comment enrichir la définition d une fonction avec des informations éventuellement utilisables par des outils de l environnement de programmation ou par l utilisateur lui-même. 13\n14 14 Pendant toutes ces modifications, l éditeur augmente la documentation et vérifie la consistance du programme. Par exemple, si l utilisateur avait écrit : (IF VAR (CONS (1+ VAR) (EXEMPLE (CDR VAR))) NIL)) à l instant de l insertion de l arbre (1+ VAR), l éditeur aurait donné l indication d une contradiction entre le type de la variable VAR (une liste) et le type attendu de la fonction d incrémentation 1+ (un nombre). Après cette modification, la description de la fonction EXEMPLE contient au moins les informations suivantes : EXEMPLE fonctions appelées : nombre de paramètres : type de résultat : EXEMPLE 1 (VAL) NIL ou liste (L VAL-init ) par accumulation VAL type : liste (L VAL-init ) modifications : raccourcissement par CDR rôles : arrêt de la récursion et source Cette fenêtre dit qu EXEMPLE est une fonction récursive (elle s appelle ellemême), qu elle a un paramètre appelé VAR et qu elle retourne soit NIL, soit une liste possédant le même nombre d éléments que l argument initial (ce qui est exprimé par l expression L VAL-init ). Le paramètre VAL prendra des listes comme valeur, est utilisé pour le test d arrêt de la récursion et se trouve raccourci par les appels récursifs successifs. Toutes ces informations correspondent à des questions que le programmeur ou un autre utilisateur peuvent poser sur ce programme. Elles ont été dérivées par un processus de méta-évaluation 15 se déroulant en arrière plan dès que la définition d une fonction est (temporairement) terminée. Nous n avons pas encore montré que l éditeur garde toutes les versions successives d une fonction (ou d un programme). La deuxième écriture de notre fonction 15. La méta-évaluation est une manière d exécuter des programmes sur des données symboliques construites au fur et à mesure de cette exécution. L information sur l égalité de la longueur initiale de la liste VAL et de la longueur du résultat a été dérivée par un tel processus utilisant une induction sur la liste VAL, les opérations CONS successives et les opérations CDR successives dans l appel récursif. Nous y reviendrons par la suite. 14\n15 15 EXEMPLE en est alors la deuxième version. Nous pouvons toujours revenir vers des versions antérieures, aussi bien pour l édition que pour l exécution. Le développement d un programme peut alors devenir l experimentation simultanée de plusieurs implémentations alternatives, chacune avec ses propres performances, comportements et raisons d existence. La lecture d un programme devient l exploration raisonnée de cet arbre des programmes possibles. Bien entendu, chacune de ces versions partage les portions de code communes avec d autres versions et ne se distingue que localement. En réalité, une version est une lecture (ou un parcours) particulier du programme. Chacune des versions possède naturellement sa propre documentation. Dans la représentation interne, toutes les versions et leur documentation ne sont qu un seul et unique programme possédant des branches multiples. L utilisateur, quand il exécute, lit ou édite un programme, ne voit qu une seule de ces versions. Cette coexistence dans la représentation interne de multiples versions permet une généralisation très puissante : les annotations actives de programmes, fragments de code, fonctions ou variables. Le paragraphe suivant les examinera plus en détail Les annotations actives et la documentation de programmes Étant donné que toutes les versions coexistent dans une unique représentation interne complexe et que la vision d une version n en est qu un parcours particulier, rien n interdit d enrichir cette représentation interne par d autres informations dont l accès ne sera également qu une particularité du parcours. La possibilité de pouvoir adjoindre à la représentation interne du programme d autres informations concernant des aspects particuliers du programme (ou de la version actuelle du programme) est intensivement utilisée dans notre environnement de programmation pour pouvoir adjoindre aux fonctions des exemples de leur utilisation, des commentaires arbitraires qui seront accessibles pendant l exécution du programme, 16 des informations d indexage 17 du programme, des commentaires téléologiques, 18 des assertions sur des états devant toujours être vérifiés à certains endroits du programme, des modules aidant à l observation du déroulement du programme ainsi que des démons lançant des activités particulières à l avènement d évenements bien définis. 16. Normalement, les commentaires n existent que dans le fichier contenant le code source du programme les lecteurs ou parseurs du langage les ignorent pendant l analyse. 17. L indexage est l ensemble des informations dérivées automatiquement par l éditeur. Ce sont ces informations documentaires que nous avons décrites dans le paragraphe précédent. 18. Un commentaire téléologique est un commentaire décrivant le sens d un programme ou d un fragment de programme. 15\n16 16 Avant d entrer dans une description de l utilité de tels mécanismes, ré-examinons la représentation interne actuelle de la fonction EXEMPLE : Figure 3: Representation interne du programme De même que les informations de parcours déterminant la version sont accrochées aux nœuds de l arbre et que les descriptions de la fonction et de la variable sont accrochées aux noms des objets décrits, nous pouvons accrocher d autres informations et nous pouvons leur associer un comportement d évaluation. Les commentaires, par exemple, seront accrochés tels quels aux nœuds qu ils commentent. Le comportement d évaluation qui leur est associé sera de les ignorer pendant l évaluation de la branche correspondante et si une impression de la branche est demandée de les entourer par les signes début et fin de commentaires et de les imprimer en utilisant un jeu de caractères spéciaux. Les commentaires téléologiques seront associés aux éléments décrits en général des fonctions ou des variables. Pendant l évaluation et l impression, ils seront traités comme des commentaires ordinaires, mais nous y associerons une fonction particulière qui permet leur consultation. Une fois acquise la possibilité d associer des commentaires aux fonctions, variables et autres objets du programme, et de les garder accessibles, nous avons envie de généraliser cette possibilité en entrant non seulement des commentaires destinés à des lecteurs humains mais également d y associer des commentaires pour la machine l interprète du langage ou tout autre outil ou package disponible. Ces commentaires seront donc des sortes de descriptions indiquant à la machine quel type d observation, de mesure, de collecte de données, etc, est à effectuer pendant l exécution ou l édition du programme annoté. Historiquement, nous avions commencé à construire un tel outil pour lancer automatiquement un ensemble de tests pour chaque fonction nouvellement éditée. Nous avions alors une base de données contenant pour tout un ensemble de fonctions des exemples d appels et de résultats correspondants, et chaque fois qu on sortait de 16\n17 17 l édition d un fichier contenant du code source LISP, un processus était lancé qui activait chacun des exemples d appels pour les fonctions contenues dans ce fichier. Dans l environnement bvlisp, la même possibilité existe : après chaque modification d une fonction, l éditeur lance les exemples d appels qui lui sont associés (il n y a plus de recherche puisque les exemples sont directement associés à la fonction) et compare les résultats calculés avec ceux donnés dans l exemple. S ils sont identiques l utilisateur ne s aperçoit de rien; par contre, s ils sont différents, l éditeur informe l utilisateur de la différence et si possible lui en indique également les raisons. Ce mécanisme expose deux principes des environnements de programmation intégrés : toute information doit se trouver à l endroit où cette information est utilisée, et une information produite par un outil (ou donnée telle quelle) doit pouvoir être utilisée par plusieurs autres outils de cet environnement. 19 Nous avons déjà vu au paragraphe précédent que les exemples font partie de la documentation d une fonction. Ici, nous voyons qu ils peuvent être utilisés dynamiquement, après chaque édition, afin de vérifier que les intentions exprimées à travers eux ne sont pas violées. L ajout d un ensemble d exemples à notre fonction EXEMPLE se fait soit avec l éditeur, soit en appelant de manière explicite la fonction AJOUTE-EXEMPLE comme ci-dessous : (AJOUTE-EXEMPLE EXEMPLE ( ( (A B C) ((A B C)(B C)(C))) ( ( ) ( ) ) )) où nous avons ajouté deux exemples d entrée/sortie, qui seront alors ajoutés à l ensemble des informations déjà associées à cette fonction. Les exemples sont surement fort utiles, tant pour le lecteur du programme, à qui ils indiquent de manière intuitive ce que la fonction est supposée faire, que pour le programmeur, qui sera averti dès qu une de ses modifications ultérieures changera le comportement décrit dans ces exemples. 19. Nous sommes convaincus qu une excellente heuristique pour l évaluation d un outil d un environnement de programmation est de mesurer l utilisabilité des informations produites pour d autres outils. Si les informations sont trops spécifiques et ne peuvent être utilisées ailleurs, l outil en question n est pas une bonne solution 17\n18 18 Les exemples d appels sont des annotations concernant l éditeur. Nous pouvons également avoir des annotations actives concernant l évaluateur le mécanisme d interprétation du programme. Les assertions en sont un exemple. Ce sont des expressions associées à un programme ou fragment de programme exprimant des conditions qui doivent toujours être satisfaites quand l exécution passe à l endroit auquel l annotation a été associée. A notre fonction EXEMPLE nous pourrions, par exemple, associer une assertion d entrée disant que l argument doit toujours être une liste et une assertion de sortie disant que le résultat doit toujours être de même longueur que l argument. Voici ces deux annotations : assertion-d entrée : (LISTP VAR) assertion-de sortie : (= (LENGTH VAR) (LENGTH résultatfinal 20 )) Comme on peut voir, les assertions sont des expressions LISP ordinaires, pouvant utiliser toute fonction LISP standard ou utilisateur définie. Une assertion d entrée est une expression LISP qui est évaluée avant que le fragment de programme correspondant soit évalué, une assertion de sortie est une expression LISP qui est évaluée après que le fragment de programme correspondant ait été évalué. Bien entendu, il peut y avoir autant d assertions qu on veut et elles sont toujours associées à des versions précises. Ainsi, deux versions différentes d un programme peuvent soit partager des assertions, soit contenir des assertions différentes. Notons la différence entre l annotation par les exemples et celle par les assertions : les exemples sont vérifiés par l éditeur après chaque modification; les assertions sont vérifiées par l évaluateur chaque fois que le contrôle passe à l endroit où ces assertions se trouvent. Ainsi, les assertions expriment des faits dont la vérification dépend des arguments bien précis avec lesquels le programme est exécuté, tandis que les exemples expriment des faits qui peuvent être vérifiés indépendamment des exécutions particulières. Autrement dit en référence à la Figure 1 (page 8 ) les annotations de versions et les exemples sont des outils utilisés pendant le codage du programme, les assertions sont des outils pour le test et l affinement du programme. Si le test d un prédicat n est pas satisfait à un instant donné, la machine affiche dans la fenêtre des assertions le texte de l assertion et les données actuelles pour lesquelles ce test n est pas satisfait. Bien entendu, l utilisateur peut lui-même construire ses propres annotations pour l évaluateur. Dans ce cas, il doit non seulement indiquer le prédicat à tester, mais également l action à entreprendre dans le cas de non-vérification de ce prédicat. Ces annotations s appellent soit des activités d entrée, si le prédicat doit être testé avant l exécution du fragment de programme correspondant, soit des activités de sortie, si le prédicat est testé après l exécution du code correspondant. Un exemple simple de 20. résultatfinal est une variable désignant le résultat de l évaluation de l expression à laquelle l assertion est associée. 18\n19 19 telles activités est l impression des arguments à l entrée de la fonction et l impression du résultat à la sortie de la fonction. Ceci une sorte d outil élémentaire de trace de la fonction peut être obtenu grâce aux deux activités ci-dessous : activité-d entrée activité-de-sortie : (T (PRINT VAR > EXEMPLE)) (T (PRINT EXEMPLE > résultatfinal)) où l expression T est le prédicat à tester (ici, T étant synonyme de true, le prédicat est toujours vrai) et l appel de PRINT est l action à entreprendre si le test est satisfait. Notons que le package standard de trace de bvlisp génère des activités d entrée/sortie similaires à celles-ci. Toutes ces activités supplémentaires, les assertions et les activités d entrée/sortie, font partie intégrante de la représentation interne du programme et sont donc toujours accessibles pour la lecture par l utilisateur ou pour une utilisation par les programmes. Néanmoins, elles peuvent être inhibées sur des portions de programmes considérées comme (temporairement) finies. Ainsi, sans modifier le programme et sans perdre des informations qui peuvent se révéler très utiles ultérieurement, l utilisateur peut focaliser l attention du système sur ces régions qui lui semblent encore critiques ou qui sont encore en cours de développement. Examinons un instant la représentation interne actuelle de notre fonction EXEM- PLE (cf. Figure 4). Dans cette représentation nous faisons apparaître l ensemble des annotations évoquées dans ce paragraphe. Bien que toutes les annotations concernent uniquement la deuxième version du programme, on peut voir que la représentation d un programme peut vite devenir très complexe. C est pourquoi, pour ne pas surcharger l utilisateur, l ensemble de ces descriptions est normalement caché et n est visualisé que pendant des opérations où elles interviennent directement où sur demande de l utilisateur. Sur la Figure 4, nous avons ajouté quelques annotations supplémentaires, principalement pour montrer la généralité de ces mécanismes. Tout d abord nous avons rajouté à la fonction EXEMPLE un commentaire téléologique indiquant la raison (telle que perçue par le programmeur) de cette fonction. Ce commentaire ainsi que le nom et la liste des variables sont montrés si l on procède à une lecture compacte du programme. Nous avons également ajouté une annotation à la constante NIL, indiquant que NIL est élément neutre de la fonction CONS. Ce commentaire n existe ici que pour montrer que, effectivement, tout objet LISP peut être annoté même une constante. Les variables peuvent être annotées au niveau global l annotation sera alors active en permanence, indépendamment de l endroit particulier où l exécution se trouve ou à l intérieur d un lieu particulier par exemple : seulement à l inté- 19\n20 20 rieur d un ensemble de fonctions ou seulement dans une ou plusieurs branches particulières de la représentation interne. Par défaut, la validité d une annotation de variable est considerée globale. Nous utilisons cette caractéristique pour tracer les valeurs Figure 4 Representation interne enrichie du programme de variables. Notons néanmoins que, puisque cette annotation est écrite dans un style identique aux autres annotations, on peut en plus restreindre l activation en correspondance avec la satisfaction d un test arbitraire, comme par exemple : seulement si sa valeur est à l intérieur d un certain intervalle, ou si la dernière modification de sa valeur a été réalisée dans un ensemble de fonctions bien précise, etc. Ainsi, pour toute annotation, on peut fixer le grain d application à une taille quelconque, depuis un grain d application globale jusqu à un grain tellement particulier que l activation n a lieu que dans des cas exceptionnels. L aide apportée à la mise au point de programme par un tel mécanisme d activités supplémentaires, soumis à des conditions de lancement très finement réglables, est inestimable. 21 La généralisation de ce mécanisme d annotation est montrée dans l annotation de la branche gauche (celle qui mène vers l évaluation de la variable VAR) de la fonction 21. Notons également que de tels mécanismes d annotation généralisent le concept de variables actives [Stefik86] à toute structure de données et de programme et ouvrent une possibilité de discipline de programmation inexplorée : avec des tels mécanismes, on peut construire un programme où l algorithme de calcul est indépendant des interfaces utilisateurs nécessaires. 20\n21 CONS. Là, nous avons ajouté une activité d entrée stipulant que si un des éléments de la variable VAR est un nombre, nous voulons un message indiquant ce fait, pour nous trouver ensuite dans une boucle d inspection ce qui sera le résultat d un appel de la fonction BREAK. Nous y reviendrons dans le paragraphe suivant. Pour conclure ce paragraphe, insistons de nouveau sur l importance documentaire que prennent ces annnotations dans notre environnement de programmation. Chacune de ces annotations est à la fois un programmme qui sera activé automatiquement chaque fois que c est nécessaire et une aide cruciale pour le lecteur du programme. Elles lui apprennent les raisons, les limitations et les conditions particulières qui ont amené le programmeur à écrire le programme tel qu il l a réalisé. L ensemble de ces annotations, versions et commmentaires, permet au lecteur ultérieur de comprendre les choix pris et les raisons des diverses particularités d implémentation, ce qui l aide pour des modifications et des opérations de maintenance éventuelles. Insistons également sur le fait que toutes ces annnotations sont accessibles à l environnement et aux programmes utilisateurs : chacune peut devenir une partie active pendant la lecture, l édition et/ou l exécution du programme L évaluation dans un environnement de programmation La programmation, suivant la Figure 1 (page 8), est une boucle infinie du codage vers le test, la validation, l affinement et la maintenance, avec des retours vers le codage. Jusqu à maintenant nous avons principalement vu des outils qui aident pendant les processus de lecture et de codage du programme. Dans ce paragraphe nous examinerons quelques-uns des services qu un environnement de programmation tel que bvlisp offre pendant l exécution d un programme. Bien entendu, comme tout évaluateur, celui de l environnement de programmation doit pouvoir normalement exécuter des programmes de manière aussi efficace et correcte que tout autre évaluateur. C est le minimum absolu! C est également un des rôles de notre évaluateur mais ce n est qu un parmi d autres. Puisque la plupart du temps où l on utilise un tel environnement on se trouve encore dans une phase de développement ou d exploration, le programme contient encore des erreurs, des inconsistances non détectées par l éditeur ou des parties non encore terminées, donc incomplètes et c est à la rencontre de ces situations qu un environnement de programmation doit aider l utilisateur au lieu de le punir avec un message d erreur qui avorte le calcul. L évaluateur de bvlisp distingue entre différents contextes : 21 le contexte syntaxique qui détermine les versions du programme à évaluer et les contextes dynamiques qui déterminent les différents modes d évaluation : l évaluation ordinaire et l évaluation attentive. 21\nCH.4 ENVIRONNEMENTS D EXÉCUTION\nCH.4 ENVIRONNEMENTS D EXÉCUTION 4.1 Les langages procéduraux 4.2 L organisation de l espace mémoire 4.3 Les stratégies d allocation 4.4 L accès aux noms non locaux 4.5 Les tables des symboles 4.6 L allocation\nUtilisation du langage C en programmation de systèmes\nUtilisation du langage C en programmation de systèmes Jacques Mossière 21 septembre 2007 1 Introduction Cette note présente quelques particularités de l utilisation du langage C très utiles pour la programmation\nRapport pour le projet du Compilateur MISC\nRapport pour le projet du Compilateur MISC Nicolas Bonvin, Gilles Diacon, Xavier Perséguers École Polytechnique Fédérale de Lausanne 2 février 2003 1 Optimisations Le code généré par le compilateur n étant\nINTRODUCTION À L'ALGORITHMIQUE ET À LA PROGRAMMATION. Algorithmique et Programmation Unisciel/K.Zampieri\n1 INTRODUCTION À L'ALGORITHMIQUE ET À LA PROGRAMMATION Algorithmique et Programmation Unisciel/K.Zampieri 2 Diapositive de résumé L'activité de programmation La construction de programmes La programmation\nIl est important d avoir VB durant ce chapitre afin de visualiser les écrans décrits. Voici les fenêtres principales de l éditeur.\n2 L INTERFACE DE VISUAL BASIC 6 2.1 Environnement de programmation L éditeur VB se compose d une fenêtre principale qui peut-être SDI ou MDI. Dans le premier cas, la fenêtre n est pas conteneur des autres,\nFormation Algorithmique STS SIO\nFormation Algorithmique STS SIO Alex Esbelin (Alex.Esbelin@math.univ-bpclermont.fr) Malika More (malika.more@u-clermont1.fr) IREM Clermont-Ferrand Stage du 29 Juin 2011 Qu est-ce-qu un algorithme? Un objet\nPlan. Programmation structurée. Objectif. Algorithme. Programme et algorithme. Algorithme\nPlan Programmation structurée Algorithme Principe de base de la programmation structurée Les structures Traduction en Java Université de Nice - Sophia Antipolis Richard Grin Version 1.1.3 1/10/11 Richard\nLa mémoire. Chapitre les mémoires La mémoire centrale\nChapitre 8 La 8..4 les s La d un ordinateur se décompose en plusieurs éléments, dont le prix et le temps d accès sont très variables, cf figure 8.1. Nous développerons dans ce chapitre et le suivant les\nComposition d Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2012\nComposition d Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2012 Sujet proposé par Eric Goubault 12 juillet 2013 Le problème se compose de quatre parties, le tout noté sur\nCours 2. Les structures de contrôle\nCours 2. Les structures de contrôle Dimitri Galayko 1 Les cycles Les cycles sont utilisés pour répéter un code plusieurs fois. La possibilité de faire des cycles, ou des boucles, est la principale force\nCours 4. Pointeurs et tableau\nCours 4. Pointeurs et tableau Dimitri Galayko 1 Pointeurs en langage C Un pointeur est une variable qui contient l adresse d une autre variable, ou plus généralement, d une cellule de mémoire. Un objet\nIntroduction. A qui s adresse cet ouvrage? Les encadrés\nIntroduction I Cet ouvrage propose une approche pédagogique du langage C. Il s appuie sur des exemples et des exercices corrigés. L expérience de l enseignement montre qu un exemple bien choisi est toujours\nAlgorithmique - Techniques fondamentales de programmation Exemples en PHP (nombreux exercices corrigés) - 2ième édition (BTS, DUT Informatique)\nCouche des langages d application. Couche du langage d assemblage. Couche du système d exploitation\nJeu d instructions Niveau 5 Niveau 4 Niveau 3 Niveau 2 Niveau 1 Niveau 0 Couche des langages d application Traduction (compilateur) Couche du langage d assemblage Traduction (assembleur) Couche du système\n1 Introduction : codage ASCII vs codage de Huffman\nRICM3-2010/2011 Langage et Programmation 2, TP2 Code de Huffman Il est fortement conseillé de tester vos fonctions avec des entrées judicieusement choisies. Objectifs : Construire et utiliser des arbres\nCours No 1 : Introduction\nUniversité Montpellier-II UFR des Sciences - Département Informatique - Licence Informatique UE GLIN302 - Programmation Applicative et Récursive Cours No 1 : Introduction Notes de cours - 2007-2012 1 1\nPartie I : Initiation au langage C\nHISTORIQUE Partie I : Initiation au langage C Le langage C a été mis au point au début des années 1970 et normalisé (ANSI) en 1988. Depuis cette date le langage C a conquis le monde des entreprises et\n1 Présentation de l environnement\nDans son répertoire personnel (partage réseau U, cliquer sur Ordinateur pour le faire apparaître), créer un répertoire MPS. Dans ce répertoire créer un répertoire Rurple et dans ce répertoire créer deux\nCours No 2 : Syntaxe des expressions. Types prédéfinis. Bases de l interprétation des expression.\nUniversité Montpellier-II UFR des Sciences - Département Informatique - Licence Informatique UE GLIN302 - Programmation Applicative et Récursive Cours No 2 : Syntaxe des expressions. Types prédéfinis.\nExemple d outil de modélisation\nCHAPITRE 18 Exemple d outil de modélisation Introduction à la programmation orientée objets 145 18.1 A quoi sert l outil? Un outil de modélisation n est, dans sa plus simple expression, qu un éditeur graphique\nIntroduction au langage C Objectif: acquérir les bases d un langage de programmation évolué Les éléments abordés seront: - Organisation d un programme - Les variables - Les opérations sur les variables\nNotions d algorithme\nDERNIÈRE IMPRESSION LE 6 septembre 2014 à 8:53 Notions d algorithme Table des matières 1 Introduction 2 1.1 Algorithme................................. 2 1.2 Conventions pour écrire un algorithme................\nAlgorithmique et programmation TP 1 : Le langage C++, structure d un programme, compilation, types de base, affichage et lecture de données\nBELFORT MONTBÉLIARD Département d Informatique DUT Informatique S1 Année 2011/2012 Algorithmique et programmation Algorithmique et programmation TP 1 : Le langage C++, structure d un programme, compilation,\nChapitre 1. À quoi ça sert?\nChapitre 1 À quoi ça sert? 1.1 Qu est ce que c est?............................... 13 1.2 Les applications de la compilation....................... 14 1.3 Les deux étapes de la phase d analyse.....................\nAMC DACTYLO Rapport préliminaire Aurélien Méré FIIFO1 Page 1 / 11\nAMC DACTYLO Rapport préliminaire Aurélien Méré FIIFO1 Page 1 / 11 SOMMAIRE IIntroductiion généralle 3 A propos du logiciel 3 A propos de ce manuel 3 Premiière partiie : IInterface 4 Lancement 4 Menu principal\nChap. II : Initiation au Langage Machine\nUMR 7030 - Université Paris 13 - Institut Galilée Cours Architecture et Système Dans cette partie du cours, nous allons étudier la programmation en langage machine d un microprocesseur. L étude complète\n1 Instructions pour les Travaux Pratiques en Langage C\nTravaux Pratiques Module UE1 - Maitrise EEEA - 2003/2004 1 Instructions pour les Travaux Pratiques en Langage C LES ENONCES DE TP SONT DISTRIBUES EN TD. L ETUDIANT DOIT ARRIVER EN SEANCES DE TP AVEC L\nIII. COMPRENDRE LA LOGIQUE DE L ANALYSE DE VARIANCE\nA III. COMPRENDRE LA LOGIQUE DE L ANALYSE DE VARIANCE Écarts à la moyenne Comme cela a été montré dans le premier paragraphe de ce chapitre, la statistique F cal de l ANOVA reflète à la fois la variabilité\nP R É S E N T A T I O N A C C E S S\nP R É S E N T A T I O N A C C E S S SGBDR signifie Système de Gestion de Bases de Données Relationnelles (logiciel spécialisé dans la gestion des bases de données). Le logiciel ACCESS est une interface\nAlgorithmique : généralités Terminale S, 2014, L. JAUNATRE\nAlgorithmique : généralités Terminale S, 2014, L. JAUNATRE 1. Introduction 1.1. Algorithme Un algorithme est une succession d instructions ou de commandes permettant la résolution d un problème donné.\nAssembleur ARM: Séquence d exécution et branchements\nAssembleur ARM: Séquence d exécution et branchements xkcd.com GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde Merci à Yves Roy Modification de la séquence d exécution\nJava M2 TTT Valérie Gautard\nJava M2 TTT Valérie Gautard 1. De la programmation séquentielle à la programmation orientée objet Chacun veut que ses programmes soient rapides, fiables, ergonomiques, lisibles Comment faire? La POO tente\nPRESENTATION DU LANGAGE C\nc 1 PRESENTATION DU LANGAGE C e langage C est un langage algorithmique de la famille Algol, plus particulière- évolué à partir des langages orientés programmation système. En fait, il Lment descend en\nAplusixEditor : l'éditeur pour Aplusix 3 Manuel d utilisation\nAplusixEditor : l'éditeur pour Aplusix 3 Manuel d utilisation Septembre 2012 Document rédigé avec epsilonwriter 1. Introduction 1.1. Les exercices 1.2. Les problèmes 1.3. Les listes d exercices 2. Créer\nÀ propos des variables C\n2 À propos des variables C Au sommaire de ce chapitre Mémoire d un programme Objective-C Variables automatiques Variables externes Mots clés de déclaration Portée Allocation dynamique Lorsque vous développez\nProjet d Informatique Résolution et génération de Sudoku\nProjet d Informatique Résolution et génération de Sudoku Contact : pierre.yger@unic.cnrs-gif.fr 10 septembre 2009 1 Principe du Sudoku Le sudoku, défini en 1979 par l Américain Howard Garns, est un jeu\nAlgorithmique / Initiation. Table des matières. Adapté de P. BUNEL / Version 3.0\nDept GEII Année universitaire 2010-2011 II1 J. VILLEMEJANE - julien.villemejane@u-pec.fr Adapté de P. BUNEL / Version 3.0 Table des matières 1 Introduction - Définitions 2 1.1 Qu est-ce qu un algorithme?.........................................\nCOURS INFORMATIQUE : PILES\nCOURS INFORMATIQUE : PILES PC PICON PICON COURS INFORMATIQUE : PILES 1 / 43 1 Structures de données : généralités PICON COURS INFORMATIQUE : PILES 2 / 43 1 Structures de données : généralités 2 Rappels\nCHAPITRE 5. Fonctions. 1. La notion de fonction Définition d une fonction\nCHAPITRE 5 Fonctions Dans ce chapitre, nous allons voir qu il est possible de définir une fonction pour isoler un bloc d instructions qui revient plusieurs fois dans un programme et mutualiser ses ressources\nCHAPITRE II : CHEMINEMENT D UN PROGRAMME DANS UN SYSTEME D EXPLOITATION\n14 CHAPITRE II : CHEMINEMENT D UN PROGRAMME DANS UN SYSTEME D EXPLOITATION 2.1 CHAINE DE PREPARATION D UN PROGRAMME : Le développement d un programme, depuis l analyse du problème jusqu'à sa mise au point,\nProcess Manager. Documentation\nProcess Manager Documentation Edité le 23/07/2003 Page 1/18 Table des matières 1 Généralités 3 1.1 Terminologie 3 1.2 Déroulement 4 1.3 Calendrier 4 1.4 Symboles employés 4 2 Modélisation 5 2.1 Calendrier\nLes processeurs à plusieurs niveaux de langage Eduardo Sanchez Laboratoire de Systèmes Logiques. Ecole Polytechnique Fédérale de Lausanne\nLes processeurs à plusieurs niveaux de langage Laboratoire de Systèmes Logiques Processeurs à plusieurs niveaux de langage Si l on veut avoir un processeur non spécialisé, capable d exécuter plusieurs\nIntroduction aux systèmes informatiques. TRAVAUX PRATIQUES 4 Scripts sous Linux\nTRAVAUX PRATIQUES 4 Scripts sous Linux L objectif de ce TP est d approfondir la réalisation de programmes scripts abordée lors du précédent TP sous les systèmes d exploitation de type UNIX pour l'automatisation\nAlgorithmique P2. Retour au langage Python Renaud Dumont, Ulg\nAlgorithmique P2 Retour au langage Python Renaud Dumont, Ulg 2009-2010 Python et les listes En python, les listes sont des objets "fourretout" Le type des listes est géré par le langage Elles peuvent contenir\nProjet de Programmation C\nProjet de Programmation C BESLAY Cyril 13 Novembre 20009 Règles du Sudoku et Ensembles préemptifs Une grille de Sudoku est une grille de taille n 2 n 2. Cette grille est séparée en n 2 blocs de taille\nÉléments d informatique Cours 8 et 9. Fonctions\nÉléments d informatique Cours 8 et 9. Fonctions Pierre Boudes 24 novembre 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Diapos de cours 8 (rappels)\nINF145 Programmation avancée et langage C MOTS RÉSERVÉS ET INSTRUCTIONS AU PRÉPROCESSEUR\nUniversité du Québec (UQ) École de technologie supérieure Service des enseignements généraux Local B-2500-396-8938 Site Internet : http://www.seg.etsmtl.ca/inf115/ INF145 Programmation avancée et langage\nTS - Rappels d algorithmique. M. Lagrave. Algorithme et programme informatique. Algorithme Programmation. M. Lagrave.\net Lycée Beaussier Sommaire et et Définition et Définition : Un algorithme est une liste d instructions à suivre, qui à partir de données, permettent d obtenir des résultats clairement définis en un nombre\nProgrammation Impérative FLIN202 Vincent BOUDET Janvier 2008 Vincent BOUDET () Programmation Impérative Janvier 2008 1 / 29 Sommaire 1 Tableaux Structure d informations La structure d informations vecteur\nLe jeu de la vie. Sujet proposé par Jean-Christophe Filliâtre. Difficulté : difficile ( )\nLe jeu de la vie Sujet proposé par Jean-Christophe Filliâtre mailto:jean-christophe.filliatre@lri.fr Difficulté : difficile ( ) Version 1 (6 février 2012) URL de suivi : http://www.enseignement.polytechnique.fr/profs/informatique/\nIntroduction au dessin de masque avec L-Edit\nIntroduction au dessin de masque avec L-Edit 1 Introduction L-Edit est un outil de conception de circuits intégrés. Seul le module de dessin est décrit brièvement dans cette introduction. Ces pages d introduction\nCompte Rendu de Calcul Parallèle\nCompte Rendu de Calcul Parallèle Erik Pernod & Rebecca Bonnet Le but de ce TP est d étudier une résolution d équation aux dérivées partielles (EDP) afin de montrer d une part l efficacité et l utilité\nOrganisation du programme objet\nOrganisation du programme objet Paul Feautrier ENS de Lyon Paul.Feautrier@ens-lyon.fr perso.ens-lyon.fr/paul.feautrier 2 février 2009 1 / 33 Introduction Avant de commencer à générer le programme objet,\nProlog. Une introduction à la programmation déclarative. Eric Salvat. IMERIR\nProlog Une introduction à la programmation déclarative Eric Salvat IMERIR salvat@imerir.com 2010-2011 1/ 27 Introduction Objectifs : Utilisation de la logique des prédicats en programmation Etude d un\nLA LITTERATURE AU CYCLE 3 LES DROITS IMPRESCRIPTIBLES DU LECTEUR\nLA LITTERATURE AU CYCLE 3 Lors du stage «littérature» qui s est déroulé les 15/16 janvier avec un premier groupe et les 26/27 janvier avec un second, nous avons réfléchi sur les questions : - que veut\nAlgorithmes Gloutons (greedy algorithms)\nAlgorithmes Gloutons (greedy algorithms) ACT Sophie Tison-Université de Lille-Master1 Informatique Trois paradigmes Programmation Dynamique Diviser Pour Régner Algorithmes gloutons Le principe d une méthode\nAnne Delaby Créer un cours en ligne, 2006 ISBN : 2-7081-3459-0 2 Que recouvre le concept d interactivité? Dans une perspective de cours en ligne, une activité interactive est une combinaison d interactions\nIntroduction au Pseudo-langage pour IF121\nIntroduction au Pseudo-langage pour IF121 Pour pouvoir décrire des programmes sans être trop gênés par des détails syntaxiques (oubli de points virgule, syntaxe horrible comme le!= utilisé en C++ pour\n2. Activité : défi «factorisations»\n. Activité : défi «factorisations» a. Énoncé Défi «factorisations» L objectif est de factoriser les cinq expressions littérales proposées ci-dessous. 3 1 37 5 56 9 3 6 A x x x x B y y y y C 4t 9 1t D 81z\nLe tableur-grapheur. cédérom. Important : Chaque part est indiquée en pourcentage par rapport au prix de vente.\nAvec OpenOffice ACTIVITE 6 Page 1 Objectifs : Créer une feuille de calcul simple, modifier sa présentation, afficher un graphique correspondant à une sélection de cellules, exporter le tableau et le graphique\nL induction mathématique\nL induction mathématique François Lemieux L induction mathématique est une technique de preuve essentielle pour vérifier non seulement certaines équations mathématiques mais aussi pour démontrer l exactitude\nObjectifs: Problème > Pseudocode > Programme. La bonne Méthode. Introduction: la mauvaise méthode. Problème >... > Programme\nObjectifs: Delannoy chap2 (très partiellement) Le Pseudocode d'abord, le programme ensuite savoir décrypter un code source en C Qui fait quoi? Du code source au code exécutable Quelles sont les étapes?\nGénie Logiciel. 1 - Présentation du langage Java. Idir AIT SADOUNE\n1/55 Génie Logiciel 1 - Présentation du langage Idir AIT SADOUNE CentraleSupélec - Département Informatique 3, rue Joliot-Curie, 91192 Gif-sur-Yvette cedex\nThierry Lecroq. Université de Rouen FRANCE. university-logo. Thierry Lecroq (Univ. Rouen) Récursivité et TDA 1 / 48\nRécursivité et TDA Thierry Lecroq Université de Rouen FRANCE Thierry Lecroq (Univ. Rouen) Récursivité et TDA 1 / 48 Plan du cours 1 La récursivité 2 Les listes chaînées 3 Les types de données abstraits\nLe schéma heuristique\nLe schéma heuristique Son origine Les recherches sur le fonctionnement de notre cerveau nous permettent de connaître les caractéristiques fondamentales de la mémoire qui sont les suivantes : nous avons\nVersion Objet Auteur(s) Date\nVersion Objet Auteur(s) Date V1 Création du document Doum², ysengrin, miiiick 21/11/2010-1 - Sommaire 1 GENERALITES 3 2 LES DIFFERENTS TYPES DE MODULES DE JEU 3 2.1 LES CHASSES A ENIGMES SUCCESSIVES 3\nClaude Delannoy. Exercices C++ en langage. 3 e édition. Groupe Eyrolles, 1997, 1999, 2007, ISBN :\nClaude Delannoy Exercices en langage C++ 3 e édition Groupe Eyrolles, 1997, 1999, 2007, ISBN : 978-2-212-12201-5 Chapitre 17 Les patrons de fonctions Rappels Introduite par la version 3, la notion de patron\nProgrammation I : Cours de programmation (C++) Variables et opérateurs\nProgrammation I : Cours de () Variables et opérateurs Laboratoire d Intelligence Artificielle Faculté I&C Programmation I Cours 2 : Variables et opérateurs 1 / 25 Vidéos, Quiz et transparents https://www.coursera.org/learn/init-prog-cpp/home/week/1\nPRM prmc. Un langage de programmation et un compilateur\nPRM, prmc Un langage de programmation et un compilateur LIRMM Informatique Doctiss 06 Journée des doctorants de l I2S 13 avril 2006 1 Introduction 2 Le langage PRM Programmation, Raffinement, Modules 3\nAlgorithmique-Programmation IAP1 Catherine Dubois Catherine Dubois () Algorithmique-Programmation 1 / 32 Bloc Algorithmique-Programmation (IAP) Fondements de la programmation (IAP1) Programmation impérative\nCHIFFREMENT BINAIRE FICHE ENSEIGNANT. L'activité contient : Compétences mathématiques : Domaines du socle : Niveau concerné\nCHIFFREMENT BINAIRE FICHE ENSEIGNANT Niveau concerné Cycle 4 : à partir de la 4è Durée : 2 séances L'activité contient : Affectation Variable Boucle Test Programmation parallèle Compétences mathématiques\nLicence informatique - L3 Année 2012/2013. Conception d algorithmes et applications (LI325) COURS 6\nLicence informatique - L Année 0/0 Conception d algorithmes et applications (LI) COURS Résumé. Dans cette sixième séance, nous continuons l exploration des algorithmes de type Programmation Dynamique.\nFichiers : ouvrir, enregistrer, copier\nFichiers : ouvrir, enregistrer, copier Édition au 26-déc.-15 ATTENTION CETTE VERSION EST EN TRAVAUX!!!!!!!!!!!!!!!!!!!!! Organisation des fichiers Types de fichiers On distingue couramment deux types de\nUNIVERSITÉ DE SHERBROOKE DÉPARTEMENT D INFORMATIQUE. Devoir # 4 IFT 209 Programmation système\nUNIVERSITÉ DE SHERBROOKE DÉPARTEMENT D INFORMATIQUE Devoir # 4 IFT 209 Programmation système Devoir à remettre au plus tard le lundi 20 mars 2017 à 23h59. Les casse-têtes Sudoku Noms : Ce devoir est à\nObjectifs : 1 ) D où viennent les algorithmes?\nObjectifs : J ai compris ce qu est un algorithme. Je sais faire un tableau de déroulement pour tester un algorithme. Je sais repérer dans un algorithme la déclaration des variables, les entrées, le déroulement,\nVersion 1.0. Notice d emploi. TiAxolutedisplay. Logiciel de configuration Axolute Video Display 11/07-01 PC\nVersion 1.0 11/07-01 PC Notice d emploi TiAxolutedisplay Logiciel de configuration Axolute Video Display 3 INDEX 1. Conditions requises Hardware et Software page 4 2. Installation page 4 3. Concepts de\nCompilation. I. Introduction\nUniversité de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 1/17 Compilation I. Introduction Jacques Farré Jacques.Farre@unice.fr http://deptinfo.unice.fr/~jf/compil-l3/ Université de Nice -\nSémantique des langages\nSémantique des langages Logique de Hoare ENSIIE S5 : Sémantique des langages, Logique de Hoare 1 Sémantique axiomatique Comme pour la sémantique opérationnelle, l exécution du programme modifie l état\nLes Macros et la Programmation Open Office Basic Initiation 1 - Introduction\nLes Macros et la Programmation Open Office Basic Initiation 1 - Introduction UCO - IPLV Emmanuel Planas IPLV - E. Planas - Master - Open Office Basic- Initiation - Cours 1 1 Plan La programmation Définition\nLiens Liens : : : : Matériel>Périphériques Matériel>Architecture générale Codage>Fichiers Matériel>Périphériques 1. Définition Un ordinateur est composé d un ensemble de matériels (unité centrale, périphériques,\nChapitre 7: GEMMA. Pierre Duysinx Université de Liège\nChapitre 7: GEMMA Pierre Duysinx Université de Liège 1 Introduction Qu est que le GEMMA? Guide d Etude des Modes de Marche et d Arrêt Le GEMMA est un outil graphique qui permet de mieux définir les modes\nChapitre 14 Accès aux périphériques Nous avons vu, pour l instant, comment le microprocesseur a accès aux registres et à la mémoire vive. Il faut aussi avoir accès aux périphériques (d entrée-sortie) de\nInformatique TP : Découverte de Python CPP A Thierno Barry, Frederic Devernay, Julie Dumas, Matthieu Moy Mars - avril 206 Découverte de l IDE : Spyder Spyder est un environnement de développement (Integrated\nLA PROGRAMMATION EN TURBO PASCAL\nLA PROGRAMMATION EN TURBO PASCAL I INTRODUCTION Le PASCAL est un langage de programmation évolué car sa définition ne dépend pas de l ordinateur sur lequel le programme est écrit Il a été conçu par N WIRTH\nConstruction de graphes contraints\nConstruction de graphes contraints Sujet proposé par Gilles Schaeffer Gilles.Schaeffer@lix.polytechnique.fr URL de suivi : http://www.enseignement.polytechnique.fr/profs/informatique/ Gilles.Schaeffer/INF431/projetX12.html


Match - SFC - National 3 Groupe F 1-0 LUNEVILLE FC - club Football Sarreguemines Football Club - Footeo\n2 172 657 visites 13 visiteurs\nMatch "SFC / LUNEVILLE FC"\n18 avril 2018 19:30\n19:30 - 18 avril 2018\nArbitre(s) assistant(s) NICOLAS SCHWARTZ SEBASTIEN HUBSCH\nLe calendrier de National 3 était mis à jour ce mercredi : Sarreguemines en a profité pour consolider sa bonne forme actuelle aux dépens de Lunéville.\nLe match démarrait par un round d’observation et tout doucement, Sarreguemines s’installait dans le camp adverse. Coup sur coup, Babaya puis Simpara butaient sur le solide Bracigliano suite à de belles séquences de Kowalczyk (23e , 25e ).\nLa bataille du milieu de terrain était intense et Lunéville tentait d’exister en exploitant timidement certains contres. Coté sarregueminois, sur un coup franc excentré de M’Barki, un Bracigliano vigilant enlevait le ballon de la tête de Kowalczyk (42e ). La première mi-temps se terminait sur l’expulsion de Duminy côté lunévillois.\nAu retour des vestiaires, Sarreguemines, en surnombre, voulait en profiter mais Lunéville, bien en place, contenait bien les Faïenciers pendant une bonne demi-heure. La délivrance intervenait sur corner par son capitaine M’Barki qui coupait de la tête et trompait Bracigliano et les défenseurs restés sur leur ligne (1-0, 76e ).\nQuelques minutes plus tard, Wengert ratait le cadre sur un centre en retrait (82e ).\nSarreguemines gérait cet avantage intelligemment sur la fin de rencontre et gagnait une précieuse victoire dans ce championnat incertain.


C'est pour quand l'arrivée des cartes KiWhi ???? - Nissan LEAF 1 - Forum Automobile Propre\nPar Brian, juin 10, 2015 dans Nissan LEAF 1\nCa fait 6 semaines que nous avons notre Nissan Leaf....assez content à vrai dire....\nMais ou sont les cartes kiWhi pass promises à l'achat !!!!!!!!!! ?????????\nIl semble qu'il y a au moins 40 propriétaires qui attendent en France pour avoir une autonomie utile !!!!!!!!!!\nBonjour Brian, et bienvenue sur le forum.\nVoyez avec le concessionnaire qui vous a vendu la Leaf, les miennes m'ont été remises par le commercial qui a géré les ventes.\nA ma charge, ensuite, de m'inscrire sur Kiwhi et d'enregistrer la carte.\nLa carte ZE charge pass n'est pas envoyée directement par Nissan France et aurait-dû vous être remise lors de la livraison de la voiture.\nEffectivement c'est au concessionnaire de donner la carte physique. A charge de l'utilisateur de se créer un compte Kiwhi et d'y rattacher la carte.\nRâle auprès du concessionnaire. Mais effectivement il n'en a peut être pas reçues, voir pas demandées....\nPas demandée par ton vendeur.c'est à chaque vendeur de la faire venir.compte tenu du nombre de vente réalisée par les vendeurs (peu) la procédure ne semble pas bien enregistrée par certains\nTanne ton vendeur.!\nLe plus simple, c'est de la demander soit-même : aller sur le site Kiwhi et inscrivez-vous. Cela m'a pris quelques secondes et j'ai eu ma carte assez rapidement. Vous aurez plus vite satisfaction en le faisant vous-même qu'en le demandant à un commercial, qui, une fois la voiture vendue, n'a plus d'intérêt à s'occuper de vous : la prochaine fois qui vous achèterez une voiture, il aura changé de métier ou de concession...Ce n'est plus comme auparavant où vous retrouviez le même vendeur pendant 30 ans!\nMais à priori alors tu payes la carte 24EUR par an, alors que la Nissan ZE PAss (ou celle de Renault) est gratuite pendant 3 ans.\net il n y a pas que ça ,\nla ZECP ( kiwhipass de Nissan ) as dans sa conf les ikea auchan nissan .\nle jour ou la charge passe payante, elle seront encore gratuites en ZECP et plus forcement en Kiwhipass\n(je suppose qu en ZE renault ce sera pareil )


Artisan Plombier Bois-Colombes - 92270 Bois-Colombes | Tél : 01 85 15 54 02 | Dépannage Bois-Colombes\nNotre entreprise est situé au 213 Avenue d’Argenteuil, 92270 Bois-Colombes, France, Tél : 01 85 15 54 02, Nos plombiers Depannage Bois-Colombes interviennent en urgence, 24H/24 et 7j/7, sur tous les modèles de sanitaires et ses alentours. L’intervention d’un plombier agréé par la marque est important afin de garantir la pérennité de vos équipements . Nos artisans plombiers Depannage Bois-Colombes disposent des derniers outillages de la profession. Nos experts en plomberie effectuent tous types de débouchages d’éviers, Artisan Plombier Bois-Colombes , de remplacement de robinetterie , de changement de cuvette WC ou Artisan Plombier Bois-Colombes. Avant d’engager des travaux en plomberie, contactez au numéro 01 85 15 54 02un plombier Depannage Bois-Colombes qui vous exposera les meilleures solutions à votre problème de plomberie . Notre spécialiste vous proposera une estimation téléphonique préalable de la réparation ou de l’installation que vous comptez faire.\nDepannage Bois-Colombes propose une prestation de dépannage plomberie immédiate et au meilleur prix à Allée André-Breton Bois-Colombes. Nos clients à Allée André-Breton Bois-Colombes sont toujours très satisfaits de nos services de dépannage plomberie. Nous sommes aussi très réactifs dès la réception de votre appel téléphonique au numéro 01 85 15 54 02ou de votre demande de devis express. Nos équipes de plombiers Depannage Bois-Colombes dépannent tous types et tous modèles d’équipements %RPIMARY%. Un plombier Depannage Bois-Colombes se rendra chez vous et procèdera à un remplacement ou une installation rapide de votre sanitaire Artisan Plombier Bois-Colombes . Notre expert en plomberie fera attention à laisser tout propre derrière lui après avoir effectué les travaux.\nNotre entreprise de plomberie BOIS-COLOMBES Dépannages, d’excellente réputation dans le domaine du dépannage plomberie, vous assure une intervention de réparation plomberie rapide, efficace et au meilleur prix. Nos devis – obligatoires si le montant des réparations est estimé supérieur à 150 euros – sont clairs, précis et gratuits si nous réalisons le dépannage plomberie. Nos tarifs – majorés la nuit, week-end et jours fériés – sont sans surprise : le professionnel vous informe du taux horaires et des différentes prestations proposées. Artisan Plombier Bois-Colombes Attention : Un tarif plombier Bois-Colombes trop bas relève souvent de l’arnaque.


Gwendolyn - Clamart,Hauts-de-Seine : Jeune auteure de Bandes dessinées je propose des cours de dessin adapté en fonction du niveau et des besoins de l'élève. De la base à la préparation de dossier pour écoles d'art. S'inscrire\nJeune auteure de Bandes dessinées je propose des cours de dessin adapté en fonction du niveau et des besoins de l'élève. De la base à la préparation de dossier pour écoles d'art. Les cours proposés seront adapté à l'envie, aux besoins et au niveau des l’élèves. Mon but sera de vous accompagner étape par étape à la réalisation de vos images pour qu'elles racontent le plus de choses possibles avec votre personnalité et votre sensibilité. Des bases du dessin et de la couleur jusqu’à la préparation de dossier au grande écoles d'arts.\nJe suis spécialisée dans la bande dessiner ( scénario , découpage , story-board , crayonné encrage , couleur, création d'univers et de personnages, perspective) et l'illustration (aquarelle, encre, acrylique, crayon , pastel). J'ai aussi de bonnes bases photoshop pour la colorisation numérique (avec palette graphique).\nCe sera un plaisir pour moi de partager mon savoir et mon expérience. Je vous attend.\nSi vous souhaiter voir mon travail : Zibidulle sur blogspot\nMON EMPLOIS DU TEMPS ETANT COMPLET CETTE ANNÉE SCOLAIRE 2016/2017 JE NE POURRAIS PAS ASSURER DE NOUVEAUX COURS MERCI A TOUS\nLes 2 dernieres recommandations sur Gwendolyn\nANous sommes un couple d'une cinquantaine d'année et nous cherchions à apprendre à dessiner et à peindre.\nGwendolyn a été superbe elle a une méthode d'enseignement qui correspond très bien au débutant (nous n'avions pas énormément d'expérience) et elle a su s'adapter et nous faire évolution. A chaque fin de cours nous avions acquis/appris une nouvelle méthode... Je vous la recommande car c'est une personne très motivée et passionnée. Je compte la recontacter la prochaine fois que nous ferons escale à Paris.\nAudreyBonjour à tous, Je vous recommande Gwendolyn car elle sait transmettre sa passion pour le dessin et son sens du travail bien fait à autrui. En cours, elle n'hésitait pas à prodiguer des conseils très pertinents aux autres élèves et à moi même, je ne peut que vous dire de prendre des cours avec elle en toute confiance.\nInfos pratiques sur GwendolynJ'enseigne le dessin, l'illustration. Pour les niveaux débutant, intermédiaire, avancé.\nExpériences de GwendolynDepuis septembre 2015 je donne des cours de dessin collectif à des enfants dans un atelier à paris et des cours particulier de peinture pour adultes. Je suis sortie de mes études il y a 4 ans j'ai à mon actif plusieurs publication d'album BD en format franco belge. J'ai été l'assistante d'un auteur professionnel pendant un an pour parfaire mon apprentissage. Et je suis actuellement en train de préparer des dossiers pour l'édition.\nJ'ai une bonne expériences et connaissance des écoles d'arts suite à mes 7 années d'études et aux nombreux concours que j'ai passé. J'ai vraiment touché à presque tout. céramique, tapisserie, design d'espace (BTS) Bandes dessinées (Bac+2).\nCurriculum Vitae de GwendolynExpériences professionnel:\n2015 : -Cours de dessin enfants à l'atelier de la petite Muse Paris\n-Cours de Dessin particulier et de peinture Acrylique adulte.\n2014 à 2015:\n-Album 46 pages format franco belge pour l'association des amis de Van\n-2 planche BD sur le parcours clients pour Leroy Merlin - Animation de groupe\n-4 planches collectif BD Contes et légendes Normandes – édition l’Eure du terroir\n2012 à 2014:\n-Stage dans un studio de BD: assistante de Guy Michel (Surcouf chez Glénât)\n-3 planches collectif BD Contes et légendes Normandes-édition l'Eure du terroir\n-animations d'atelier «marque page» et «création de personnages» lors des festivals d’Angoulême 2012 et 2013:\n-4 planches BD pour GDF suez. Mise en avant des innovations interne de l'entreprise.\nPremier prix marque page librairie 2011\nPremier prix concours BD claude 2011\nPremier prix concours d'affiche pour le festival de l'artisanat de 2011\nDiplômes: Diplôme de niveau 3 – Auteur Bandes dessinés/illustrations 2011\nBTS design d'espace (école ESAA Durerré ) 2009\nBT Arts Appliqués (lycée de sèvres) 2007\nRéservez un cours avec Gwendolyn\nLes 4 recommandations sur Gwendolyn\nAnastasieCGwendolyn est une personne sérieuse, extrêmement talentueuse et pédagogue.\nCaroMEtant une amie de longue date de Gwendolyn, je vous la recommande chaleureusement pour vos cours de dessins. Le plus de Gwendolyn c’est qu’elle sait à peu près tous faire, que se soit la bande-dessiné, des illustrations, etc, avec des techniques différentes aquarelles, acrylique, pastels, crayons…\nElle souhaite aujourd’hui accès une partie de son travail sur le partage de sa passion, en donnant des cours de dessins. Elle sera à l’écoute de vos attentes et s’adaptera à votre niveau pour que ses cours soient toujours au top. Pour vous donnez envie, allez faire un tour sur son blog ! http://zibidulle.blogspot.fr/\nComme c’est mon amie, je peux vous le dire, elle déchire comme prof ! Mathilde\nEleve en dernière année à l'école des Gobelins. Je suis passionné par le dessin et l'animation. Je vous propose de vous...\n25€/hTimothy depuis Massy\nI am an artist and illustrator specialising in human biology. I hold a Ph.D. in Biological Sciences and I am a former Oxford...\nJeune Créatrice Couture, je donne des cours de dessin tous niveaux.\nSpécialisée dans le Portrait et le Corps humain,...\nJ'enseigne l'anatomie, la construction de personnages, la bande-dessinée, les proportions , forme sur Photoshop ou...\nPrécédent12345Suivant Loading...Les tarifs de Gwendolyn


Taekwondo – International Taekwondo Festival à Los Angeles : 28 Tahitiens en lice | La Dépêche de TAHITI\nTaekwondo – International Taekwondo Festival à Los Angeles : 28 Tahitiens en lice\nLa Fédération tahitienne de taekwondo a participé le week-end dernier et pour la quatrième année consécutive, à l’ International Taekwondo Festival organisé au Grand Arena expo Center de Los Angeles. L’événement a réuni 1227 compétiteurs dont 28 Tahitiens qui décroché au total 28 médailles dont 14 en or, 10 en argent et 4 en bronze.\nLes benjamins et minimes de la délégation tahitienne étaient en lice le samedi. Face à des adversaires de très bon niveau, les jeunes athlètes du fenua faisaient plus que d’être à la hauteur puisqu’ils obtenaient la première place au tableau des médailles. Tahiti décrochait onze médailles d’or, sept médailles d’argent et trois médailles de bronze.\nL’événement gagnait en prestige le lendemain avec une compétition réservée aux athlètes ceintures noires et faisant partie du top 4 aux championnats américains, et mettant aussi en scène des concurrents ayant participé à plusieurs compétitions internationales comme l’US open ou l’Open de Corée. Les cadets et cadettes de la sélection tahitienne réussissait tous à passer le stade des quarts de finales ce qui leur assurait un podium à chacun. Chez les cadettes, Tevainui Mairau (-41kgs) et Teaotea Hana (– 44kgs) s’imposaient dans leur catégorie et se paraient donc d’une médaille d’or. Battues en finale, Teaotea Haurani (– 51 Kgs) et Teriipaia Tikeilani (– 55 Kgs) décrochaient néanmoins une belle médaille d’argent. En cadets, Mihinoa Snow perdait en finale en – 41 Kgs tandis qu’Ariimana Lehartel, inscrit dans la même catégorie, avait été battu en demi-finale. Tous deux décrochaient respectivement de l’argent et du bronze. Enfin, Peter Babka, présélectionné pour les Jeux du Pacifique et qui voulait se tester avant le rendez-vous papou, a réalisé une grosse performance en – 80 kgs, catégorie olympique. Après avoir battu successivement trois américains, Peter décrochait une médaille d’or, mais également son billet pour le prochain Open de Corée. La délégation tahitienne a réalisé une belle performance d’ensemble à Los Angeles.


Collection insolite - Prêt-à-porter français\nUne collection dessus-dessous sensuelle\nX Collection : insolite\nUne lingerie dessus-dessous sensuelle\nSurprenez avec les tops de la collection insolite ! indiscrète propose une belle collection de lingerie baptisée insolite. Ces produits, à mi-chemin entre prêt-à-porter et lingerie, vous démarquent des enseignes traditionnelles...Cette collection propose des composantes universelles et inhérentes à nos valeurs, belles finitions, style à la fois moderne et sensuel, qualité et confort pour la femme indiscrète.\nTrès variée, la gamme de lingerie sensuelle insolite est notamment composée de tops, débardeurs et autres caracos qui peuvent se porter durant la journée, agrémenté d'une petite veste, d'un gilet, d'une étolle, pour une soirée si vous souhaitez arborer un look glamour ou plus sexy.\nVous découvrirez des top, caraco, débardeur souvent en microfibre. Au choix vous pouvez les porter en dessus ou dessous... Certaines pièces peuvent être associées à d'autres collections de lingerie ou de bain.


Il y a en Méditerranée de véritables petits joyaux qui méritent qu'on prenne la peine de les chercher. On les appelle communément nudibranches ou limaces. Ils comptent parmi les organismes marins les plus colorés et les plus bizarres. Durant tout l'été je vais vous en présenter un panel assez large.\nCommençons par des espèces très connues\nTout d'abord des flabellines. Elles sont répandues dans toute la Méditerranée. La plus connue est la Flabelline mauve bien qu'on ne la rencontre guère que pendant quelques mois.\nLa Flabelline mauve (les deux photos ci-dessus) peut être facilement confondue avec la Coryphelle mauve (qui est aussi une Flabelline.)\nCi dessus, la photo d'une flabelline blanche. Comparée aux livrées voyantes de ses cousins, la couleur de ce nudibranche semble bien pâle. Mais elle est idéale pour disparaître en pleine eau.\nPassons maintenant à un doris qui possède une coloration très caractéristique: Le Doris dalmatien (encore appelé doris léopard). Cette espèce perçoit très bien les ondes de pression et réagit instantanément en rétractant son panache et ses "antennes".\nContrairement à ce que son nom pourrait laisser penser, le doris dalmatien fait partit des Discodoris (Qui sont au nombre de 18 en Méditerranée) et non des Doris (Qui sont au nombre de 8). Ils se caractérisent en général par un panache branchial disposé autour de l'anus. (Voir photo ci dessus) .\nLe mois prochain je vous présenterai d'autres Doris. Par ailleurs je tiens à signaler que, vu leur grand nombre, certains exemplaires sont difficiles à identifier. Si vous remarquez une erreur les remarques seront les bienvenues.


Chronique du conseil - Ecolo Ohey\nLors du Conseil communal du 17 janvier 2019, nous votions un avis sur le SDT (Schéma de développement du Territoire pour les intimes). Le SDT est un document rédigé par le Gouvernement Wallon. Il n'est pas contraignant mais est censé fixer les grandes orientations du...\nIl n'est pas toujours aisé de prendre ses marques lorsqu'on devient pour la première fois conseiller communal. A Ohey, la collaboration entre les différents groupes est de mise, cela facilite déjà un peu les choses. Nicolas GOFFIN, notre jeune conseiller...\nVoilà , j’ai prêté serment en tant que conseillère CPAS ce mardi 8 janvier 2019. Tout simplement, devant le bourgmestre, le directeur général, et les autres conseillers. « Je jure de m’acquitter fidèlement des devoirs de ma charge ». Quel programme ! J’ai...\nNous tenions d'abord à vous réitérer nos remerciements pour cette année 2018 riche en rencontres et en encouragements. Tant de vive voix que dans les urnes. Sans surprise, 2019 s'annonce serré comme le pull de la majorité. L'année sera chaude tant pour les défis...\nJe ne sais pas si vous avez déjà eu la blague : vous achetez un pull (de Noël) et vous avez présumé de votre sveltitude... Il est trop petit. Beaucoup trop petit et vous tirez pour cacher la "boutroule qui stitche". C'est un peu ce que notre Echevin des...\nQuestion Ecrite n°1 Monsieur N. GOFFIN - 8 décembre 2018 Battue organisée dans le bois d’Haillot de ce 1er Décembre : demande d’informations complémentaires Ce mercredi 28 novembre, une communication sur les réseaux sociaux via la page de l’Administration...\nA Ohey comme partout en Wallonie, ce 3 décembre était un jour important pour tous ceux qui s’intéressent à la vie de leur commune et particulièrement pour les conseillers communaux qui prêtaient serment pour la première fois. Ce fut le cas de notre conseiller...


Dossiers complets sur les animaux | Do you link me ?\nDossiers complets sur les animaux\nLien ajouté le 14/08/2018 dans la catégorie Jeux / Loisirs\nSouhaitez-vous adopter un animal de compagnie ou vous informer sur un animal sauvage particulier ? Choisissez un site internet pouvant vous fournir des informations complètes et fiables. Pour cela, vous pouvez visiter lemagdesanimaux.com.\nLe site idéal pour les amoureux des animaux\nCette plateforme s'avère être une véritable mine d'informations sur les animaux. Elle vous fera découvrir les différentes races d'ânes, l'araignée la plus dangereuse au monde ou encore le mode de vie des renards de sable.\nLe Mag des Animaux peut également vous aider à choisir l'animal de compagnie qui vous convient le mieux à travers ses nombreux articles enrichissants et intéressants. Son équipe vous répondra volontiers si vous avez des questions. Il vous suffit de remplir correctement et de soumettre le formulaire de contact conçu à effet.\nVoir le lien Dossiers complets sur les animaux\nDes créations Print à gagner\nMarché des créateurs est le nouveau portail consacré à toute l'actualité des arts créatifs.En...\nAvant d'envoyer votre candidature en tant qu'auxiliaire de vie ou avant d'entreprendre une...\nSenior : conseils et services\nLorsqu’on atteint le troisième âge, les conditions de vie ne sont plus les mêmes. Tout est en...\nLes adhérents de l'association des lobbyistes de France\nL'association française des conseils en lobbying également connue sous AFCL est une organisation...\nCommunication à Annecy avec l'agence Pure Illusion\nPure Illusion c'est une agence de communication qui vous accompagne dans la définition de votre...


Même les hommes font de la réduction des seins : Dr Nizar Mahjoub\nChez les hommes, l’apparition de la poitrine notamment en période d’adolescence est souvent mal vécue et pose de nombreux problèmes physique et psychologique au moment où il commence à construire son image d’un homme ce qui entraîne un repli sur lui-même voire migré en un véritable complexe.\nQuand apparaît la gynécomastie?\nLes causes responsables d’apparition de la gynécomastie, sont très diverses, à savoir:\nUn déséquilibre dans le rapport œstrogène/testostérone dés la puberté ou de l’andropause,\nUne baisse naturelle de la production de testostérone responsable de l’apparition de petits seins,\nLe développent d’une sensibilité accrue de la glande mammaire à cause d’une sécrétion plus forte d’œstrogènes par rapport à un niveau de testostérone encore bas chez un adolescent.\nSi aucune cause responsable de la gynécomastie n’est déterminée et lorsqu’un homme soit gêné, la chirurgie esthétique offre une solution radicale pour mettre fin à ce phénomène esthétique, à savoir, la «cure de gynécomastie».\nLa chirurgie résout-elle ce problème?\nEn fait, la chirurgie de «cure de gynécomastie», consiste en une correction de l’hypertrophie mammaire chez un homme liée à un excessif développement des glandes mammaires associé à un excès de graisse.\nLa chirurgie de la poitrine masculine, est indiquée à un homme qui présente une asymétrie des seins et ayant essayé tous les formes de traitements et exercices physiques pour régresser l’hypertrophie de sa poitrine, sans résultat.\nCette procédure, permet une amélioration à la fois nette et immédiate.\nAu bout de 3 mois, le temps nécessaire à l’œdème pour se résorber et à l’excès cutané pour se rétracter, la poitrine épouse le muscle pectoral de façon harmonieuse ce qui permet au patient de retrouver une poitrine plus virile.\nLa diminution du volume mammaire, permet également un confort physique surtout pour s’habiller.\nComment se déroule la cure de gynécomastie?\nAvant la chirurgie, Un bilan préopératoire permet au chirurgien esthétique de déterminer la cause responsable de l’hypertrophie mammaire et de fixé le projet opératoire.\nPour un patient obèse ou en surpoids, un régime alimentaire associé à des exercices physiques sont instaurés, en effet, la perte de poids peut régresser voire éliminer la gynécomastie.\nEn pratique, l’opération de la cure de gynécomastie comprend trois étapes bien distinctes.\nLa liposuccion des seins, consiste à insérer une fine canule via deux courtes incisions sous l’aisselle et sur le pli sous-mammaire pour aspirer les amas de graisse en excès.\nLa réduction de la glande mammaire, nécessite une incision autour de la moitié inférieure de chaque aréole pour éliminer la glande mammaire.\nUne remise en tension de la peau relâchée pour traiter un important excès cutané important sur une peau de mauvaise qualité avec un faible potentiel de rétractation.\nEnfin, les incisions sont suturées et un drain est mis en place pour évacuer les résidus sanguins et lymphatiques qui peuvent s’accumuler sur les seins.\nL’opération de gynécomastie, dure entre quelques minutes à 2 heures sous anesthésie générale ou parfois locale lors d’une hospitalisation de 1 à 2 jours.