Informatique TP2 : Structures de contrôles, algorithmes CPP 1A

Documents pareils
L informatique en BCPST

STAGE IREM 0- Premiers pas en Python

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

Cours d algorithmique pour la classe de 2nde

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

Introduction à l informatique en BCPST

Introduction à MATLAB R

Initiation à la programmation en Python

Algorithmique et Programmation, IMA

Le langage C. Séance n 4

Découverte de Python

Licence Sciences et Technologies Examen janvier 2010

Création d un site Internet

Guide d installation CLX.PayMaker Office (3PC)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 7 : Utilisation de modules sous python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Initiation à l algorithmique

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction à Eclipse

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

1 Lecture de fichiers

Programmation C++ (débutant)/instructions for, while et do...while

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

Présentation du langage et premières fonctions

TP 1. Prise en main du langage Python

Guide de l utilisateur. Faites connaissance avec la nouvelle plateforme interactive de

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

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

Calcul Formel et Numérique, Partie I

Initiation à LabView : Les exemples d applications :

Les structures de données. Rajae El Ouazzani

GUIDE DE PAIEMENT. Pour Bien Effectuer votre Paiement, veuillez suivre les instructions suivantes :

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP Protocoles SMTP et POP3 avec Pratiquer l algorithmique

Le portfolio numérique Tutoriel de prise en main

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

MODE D EMPLOI DU LOGICIEL LIGNES DE TEMPS A partir du film La Mort aux trousses d Alfred Hitchcock

Java Licence Professionnelle CISII,

Installation-Lancement

Certificats de signature de code (CodeSigning)

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

Guide d installation de MySQL

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Réglages du module de sauvegarde de Biblionet (Monoposte)

Placez vous au préalable à l endroit voulu dans l arborescence avant de cliquer sur l icône Nouveau Répertoire

Installation et utilisation de Cobian Backup 8

Compression Compression par dictionnaires

Bases de données. Table des matières. Introduction. (ReferencePlus.ca)

Cours Informatique Master STEP

AWS avancé. Surveiller votre utilisation d EC2

L accès à distance du serveur

Réglages du portail de P&WC

KM2 W1 EVC1 M3~ Manuel AUTOMSIM API 24V. BP Dcy 1MINI 1MAXI.

pas à pas prise en main du logiciel Le Cloud d Orange - Transfert de fichiers sur PC et MAC Le Cloud

Eclipse atelier Java

Il est courant de souhaiter conserver à

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Présentation du PL/SQL

Menu Fédérateur. Procédure de réinstallation du logiciel EIC Menu Fédérateur d un ancien poste vers un nouveau poste

Programmation avec Xcas ou Python

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Programmation Classique en langage C

Corrigé des TD 1 à 5

1 Recherche en table par balayage

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

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Bases Java - Eclipse / Netbeans

Tp 1 correction. Structures de données (IF2)

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Rapports d activités et financiers par Internet. Manuel Utilisateur

1 Démarrage de Marionnet

Outils pour la pratique

I. Introduction aux fonctions : les fonctions standards

Open-Sankoré. Mise en route. Guide utilisateur Février 2013 NTICE (E. S.)

CAPTURE DES PROFESSIONNELS

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Édu-groupe - Version 4.3

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

Cours d Algorithmique et de Langage C v 3.0

KWISATZ MODULE PRESTASHOP

Algorithmique I. Algorithmique I p.1/??

Utilisez Toucan portable pour vos sauvegardes

Vue d ensemble de Windows PowerShell

Sauvegarder et restaurer les données PMB

Saisie sur un ordinateur OS/390 Ici sur jedi.informatik.uni-leipzig.de ou

Groupes et utilisateurs locaux avec Windows XP


Algorithmes récursifs

Guide d utilisateurs Plesk 11 WEBPACK. Guide d utilisateurs

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

INSTALLATION DE CEGID BUSINESS VERSION 2008 Edition 4 (CD-Rom du 16/07/2009) SUR UN POSTE AUTONOME SOMMAIRE

A-EAK (1) Network Camera

INSTALLATION ET CONFIGURATION D'UN SERVEUR WEB SUR MAC OS X

Guide Utilisateur Transnet

Transcription:

Informatique TP2 : Structures de contrôles, algorithmes CPP 1A Thierno Barry, Frederic Devernay, Julie Dumas, Matthieu Moy Mars 2016 Modifications La partie 2 a été modifiée depuis la semaine dernière. L exercice 9 comporte des questions supplémentaires. Les autres exercices de cette partie ont été ajouté. Les autres parties n ont pas été modifiées. 1 Boucles while Nous avons vu en cours comment écrire une multiplication en utilisant des additions successives. L algorithme est rappelé ici : x = 4 y = 5 print (" Avant multiplication : x =", x, "et y =", y) resultat = 0 print ("Ré sultat :", resultat ) Exercice 1 (Exécution du programme) Télécharger ce programme depuis la page du cours (fichier multiplication.py) et ouvrez-le dans Spyder (depuis Spyder, menu «Fichier», «Ouvrir»). Exécutez le programme (bouton «Exécuter le fichier» dans la barre d outils). Essayez avec d autres valeurs pour x et y et vérifier que l algorithme fait bien une multiplication. La sortie du programme devrait ressembler à ceci : Avant multiplication : x = 4 et y = 5 Dans la boucle, resultat = 4 Dans la boucle, resultat = 8 Dans la boucle, resultat = 12 1

Dans la boucle, resultat = 16 Dans la boucle, resultat = 20 Résultat : 20 Pour pouvoir observer chaque pas de l exécution, nous avons utilisé l instruction dans le corps de la boucle. Exercice 2 (Mise en commentaire) Mettez cette ligne en commentaire (i.e. ajoutez un caractère # en début de ligne) et ré-exécutez le programme. L affichage disparait. Décommentez cette ligne (i.e. revenez au point de départ) et vérifiez que l affichage revient. Pour l instant, l instruction print("dans la boucle, resultat =", resultat) fait partie du corps de la boucle, car il fait partie du bloc indenté. Exercice 3 (Boucle while et indentation) Essayez de désindenter cette ligne, c est à dire de supprimer les 4 espaces en début de ligne comme ceci : Exécutez le programme. La sortie devrait ressembler à ceci : Avant multiplication : x = 4 et y = 5 Dans la boucle, resultat = 20 Résultat : 20 L affichage est maintenant fait une seule fois, après la sortie de boucle. Exercice 4 (Erreurs avec l indentation) Essayez maintenant d indenter cette ligne print avec seulement 3 espaces, comme ceci : while y >= 0: Python considère maintenant ce programme comme incorrect et refuse de l exécuter. Revenez à la version d origine (indentation, avec 4 espaces). Exercice 5 (Minimisation du nombre d additions) Si y est plus grand que x, calculer x + x + + x (y fois) est inefficace, et il vaut mieux calculer y + y + + y (x fois). Optimisez votre programme en ajoutant avant la boucle while quelques lignes signifiant «si y est plus grand que x, alors échanger x et y». 2

1.1 Déboguage avec Spyder Dans la section précédente, nous avons utilisé l instruction print pour observer l exécution du programme. Une autre méthode, plus propre, est d utiliser un débogueur, qui permet d observer une exécution du programme sans le modifier. Pour activer le débogueur, choisissez menu «Déboguer», «Déboguer», ou bien cliquez sur le bouton correspondant dans la barre de boutons («Déboguer le script» en forme de bouton «play/pause», ou Control+F5). L exécution est prête, mais rien n a encore été exécuté : à nous d exécuter les instructions une par une. La barre de boutons du haut contient entre autres les actions : «Exécuter la ligne en cours» pour exécuter jusqu à la ligne suivante du programme pour continuer l exécution sans déboguer «Avancer dans la fonction...» pour exécuter l instruction suivante. Si l instruction courante est un appel de fonction, le débogueur «entre» dans la fonction «Exécuter jusqu au retour de la fonction ou méthode» pour exécuter jusqu à sortir de la fonction courante (très utile si on est entré par erreur dans une fonction) En choisissant l onglet «Explorateur de variables» du panneau en haut à droite de la fenêtre Spyder, on peut voir les variables du programme, leur type et leur valeur. Exercice 6 (Déboguage) Exécutez pas à pas le programme avec «Exécuter la ligne en cours», jusqu à sa fin, et observez les changements des valeurs x, y et resultat. Exercice 7 Une alternative intéressante : Python Tutor. Ouvrez la page http: // pythontutor. com/, cliquez sur «Start writing and visualizing code now!» selectionnez Python 3, et entrez un programme dans le champ texte. Le bouton «Visualize execution» permet d exécuter le programme pas à pas avec une visualisation graphique des valeurs de variables. 1.2 Modification de l algorithme Exercice 8 (Puissance par multiplication successives) En partant de cet algorithme, écrivez un algorithme qui calcule la valeur x y par multiplications successives 1. Testez cet algorithme en affichant son résultat avec print. Retestez en utilisant le débogueur pour voir les valeurs successives des variables. 2 Définition et utilisations de fonctions Une portion de code utilisée à plusieurs endroits du programme peut être écrite une fois dans une fonction, puis utilisée à plusieurs endroits en appelant la fonction. Par exemple : annoncer_train (d, h): print ("Le train à destination de", d, " partira a", h) annoncer_train (" Grenoble ", "9h") annoncer_train (" Paris ", "10 h15 ") Comme en mathématique, une fonction peut renvoyer une valeur. Par exemple, la fonction qui calcule la longueur de l hypoténuse d un triangle rectangle en fonction de la longueur des deux autres côtés peut s écrire : 1. On pourrait bien sûr utiliser l opérateur **, mais ce n est pas le but de l exercice 3

return (x ** 2 + y ** 2) ** 0.5 L instruction return a deux effets : Elle arrête l exécution de la fonction Elle renvoie la valeur à l instruction qui a appelé la fonction (par exemple : resultat = hypotenuse(x, y)). Exercice 9 (Utilisation d une fonction avec return) Écrivez un programme qui définit la fonction hypotenuse ci-dessus. Utilisez cette fonction pour calculer : 3 2 + 4 2 2.5 2 + 3.5 2 Vérifiez que le résultat est correct. Utilisez cette fonction pour calculer la demi-hypoténuse. Pour cela entrer dans l interpréteur hypotenuse(2.5, 3.5)/2. Exercice 10 (Utilisation d une fonction sans return) Remplacez la fonction hypotenuse par : print ((x ** 2 + y ** 2) ** 0.5) Essayez de calculer à nouveau l hypoténuse et la demi-hypoténuse. Que remarquez-vous? Exercice 11 (Fonction maximum de deux nombres ) Écrivez une fonction max2(a, b) qui calcul le maximum de deux nombres. Votre programme doit ressemble à ceci : max2 (a, b): #... D é termine le maximum entre a et b, et le renvoie... print ("Le maximum est :", max2 (10, 12)) Vous aurez sans doute besoin de deux instructions return. Vérifiez que votre programme fonctionne dans tous les cas (a < b, a = b et a > b). Exercice 12 (Fonction maximum de trois nombres ) Ajoutez dans le programme précédant la fonction max3(a, b) : max3 (a, b, c): return max2 (a, max2 (b, c)) Vérifiez que cette fonction renvoit bien le maximum de trois nombres. 3 Programmes multi-fichiers Quand on écrit des fonctions qui sont destinées à être utilisées dans plusieurs programmes, ou lorsqu on veut séparer les parties d un programme (par exemple la partie qui fait le calcul, la partie qui fait l affichage, et la partie qui fait le test), on peut séparer le programme en plusieurs fichiers.py : les modules qui ne contiennent que des fonctions, et les programmes qui utilisent les modules. En fait, Python est fourni avec un ensemble de modules standard, qui contiennent déjà beaucoup de fonctions. Par exemple, le module math contient une fonction sqrt (square root) que l on peut utiliser au lieu de ** 0.5 pour calculer une racine carrée. Pour l utiliser, il faut d abord écrire (en début de programme) import math, puis appeler la fonction math.sqrt comme ceci : 4

import math return math. sqrt ( x ** 2 + y ** 2) Le principe est le même pour les fonctions définies par l utilisateur. Supposons qu on ait mis la fonction hypotenuse ci-dessus dans un fichier mesmaths.py, on peut alors écrire un programme nommé par exemple mesmaths_tests.py (dans le même répertoire) contenant : import mesmaths print (" mesmaths. hypotenuse (3, 4) =", mesmaths. hypotenuse (3, 4)) On exécute le fichier avec F5 dans Spyder (attention, il faut sauvegarder tous les fichiers du programme et sélectionner la fenêtre contenant mesmaths_tests.py). mesmaths.hypotenuse fait référence à la fonction hypotenuse du module mesmaths (comme pour math.sqrt). À noter qu on peut également écrire la documentation de chaque fonction en mettant une chaîne de caractères au début de la fonction : """ Retourne l' hypotenuse d' un triangle rectangle de côtés x et y """ return math. sqrt ( x ** 2 + y ** 2) La documentation d une fonction f peut être affichée avec help(f) (essayez avec math.sqrt). Pensez toujours à utiliser des noms de fonctions explicites et à les documenter. Exercice 13 (Multi-fichiers) Que se passe-t-il si on met des instructions qui ne sont pas des définitions de fonctions dans le module (par exemple un print)? Définissez dans mesmaths_tests.py une autre fonction nommée aussi hypotenuse renvoyant un résultat incorrect. Vérifiez que mesmaths.hypotenuse fait toujours référence à la version écrite dans mesmaths.py. Complétez mesmaths.py en y ajoutant les fonctions (documentées) multiplication et puissance, et écrivez les tests correspondants. Bien sûr, on peut aussi utiliser import pour appeler des fonctions dans des modules fournis avec Python (qu on appelle la bibliothèque standard). Exercice 14 (Bibliothèque standard) Modifiez la fonction hypotenuse pour remplacer ** 0.5 par un appel à la fonction math.sqrt. Vous aurez besoin d utiliser import math en début de fichier, puis d appeler math.sqrt(...). 4 Si le temps le permet... Le programme multiplication.py que nous avons utilisé au début du TP n est pas très bien structuré : Les valeurs de x et y sont codées en dur au début du programme (x = 4 et y = 5). On ne peut pas utiliser notre algorithme pour calculer autre chose que 4 5 sans modifier le fichier. L algorithme à proprement parler est mélangé avec l affichage du résultat. Il serait beaucoup plus propre d avoir une fonction multiplication, prenant deux paramètres x et y et renvoyant le résultat. Exercice 15 (Structuration en fonction) Reprenez le programme de la multiplication écrit au début du TP, placez l algorithme de multiplication à proprement parler dans une fonction et appelez cette fonction. Le programme obtenu doit faire exactement la même chose que le 5

programme d origine. La fonction multiplication ne doit s occuper que du calcul, et pas des affichages. Vous pouvez supprimer l instruction print qui se trouve à l intérieur de la boucle et qui ne sert qu a observer l exécution du programme. Il reste un problème : la fonction est déclarée dans le même fichier que le code qui l utilise. Il n est pas (encore) possible pour un autre programme d utiliser notre fonction en utilisant import. Exercice 16 (Découpage en plusieurs fichiers) Découpez votre programme en deux fichiers : l un doit uniquement contenir la définition de la fonction multiplication, et l autre doit s occuper des affichages, puis appeler la fonction (il est nécessaire d utiliser import pour avoir le droit d utiliser la fonction). Exercice 17 (Multiplication dans l Égypte antique) L algorithme de produit proposé multiplie x par y en additionnant x y fois. Les Égyptiens, qui ne connaissaient pas la multiplication, avaient un algorithme beaucoup plus économique : à chaque pas un des opérandes (y) est doublé, l autre (x) divisé par deux. Avant cette opération, si x n est pas pas pair, alors on ajoute y au résultat. Par exemple : 25 7 = 12 14 + 7 = 6 28 + 7 = 3 56 + 7 = 1 112 + 56 + 7 = 175 Écrire une fonction qui calcule le produit de deux entiers selon la méthode des égyptiens, en n utilisant que la multiplication par deux et la division par deux. Comparer le nombre d itérations de cet algorithme avec celui du premier algorithme. De quoi dépend ce nombre d itérations? Sauriez-vous l exprimer comme une fonction de x et y? 5 Solution des exercices x = 4 y = 5 Exercice 5 : print (" Avant multiplication : x =", x, " et y =", y) # Echange des variables x et y si né cessaire if y > x: tmp = x x = y y = tmp resultat = 0 print ("Ré sultat :", resultat ) x = 4 y = 5 Exercice 8 : Il suffit de remplacer le + par un *, et d initialiser le résultat au neutre de la multiplication (1) au lieu de 0. print (" Avant multiplication : x =", x, " et y =", y) resultat = 1 resultat = resultat * x 6

print ("Ré sultat :", resultat ) Exercice 9 : """ calcul de l' hypotenuse d' un triangle rectangle """ return (x ** 2 + y ** 2) ** 0.5 print ( hypotenuse (3, 4)) print ( hypotenuse (2.5, 3.5)) Exercice 10 : """ affiche l' hypotenuse d' un triangle rectangle """ print ((x ** 2 + y ** 2) ** 0.5) hypotenuse (3, 4) hypotenuse (2.5, 3.5) Cette fonction ne renvoit pas la valeur de l hypoténuse et donc elle ne permet pas de faire des calculs cette valeur. Exercice 11 et 12 : max2 (a, b): if a > b: return a else : return b max3 (a, b, c): return max2 (a, max2 (b, c)) print ("Le maximum est :", max2 (10, 12)) print ("Le maximum est :", max3 (101, 12, 14)) Exercice 13 : Contenu du fichier mesmath.py : import math """ calcul de l' hypotenuse d' un triangle rectangle """ return math. sqrt ( x ** 2 + y ** 2) print (" mesmaths.py a ete lu") Contenu du fichier mesmath_test.py : import mesmaths return x ** 2 + y ** 2 print (" mesmaths. hypotenuse (3, 4) =", mesmaths. hypotenuse (3, 4)) print (" hypotenuse (3, 4) =", hypotenuse (3, 4)) help ( mesmaths. hypotenuse ) Le code en dehors des fonctions est exécuté lors de l importation du module. hypotenuse et math.hypotenuse sont bien deux fonctions distinctes. Exercice 14 : import math """ calcul de l' hypotenuse d' un triangle rectangle """ return math. sqrt ( x ** 2 + y ** 2) print ( hypotenuse (3, 4)) Exercice 16 : Contenu du fichier fichier module_multiplication.py : multiplication (x, y): resultat = 0 # print (" Dans la boucle, resultat = ", resultat ) return resultat 7

Contenu du fichier test_multiplication.py : import module_multiplication x = 4 y = 5 print (" Avant multiplication : x = ", x, " et y = ", y) print ("Ré sultat :", module_multiplication. multiplication (x, y)) 8