• Aucun résultat trouvé

TP 2

N/A
N/A
Protected

Academic year: 2022

Partager "TP 2"

Copied!
4
0
0

Texte intégral

(1)

1BCPST1 Novembre 2017

Mathématiques TP d’informatique n

o

2 II – Éléments de programmation

1o) Répétition de tâches

a) Boucles for

Elles sont adaptées lorsqu’on connaît à l’avance le nombre de répétitions. Rappelons leur schéma : Pourivariant de 1 (ou 0 ou autres...) ànfairesuite d’instructionsfin

Exemple 1 : Essayons deux premières boucles toute simples, dans l’éditeur : for i in range(5) :

print(’lorsque i vaut ’,i)

print(’2i2+1 vaut ’,2∗i∗ ∗2+1) print(’Terminé. Voilà ce que vaut i : ’,i)

animaux=[’girafe’,’singe’,’crocodile’,’souris’,’chat’]

for i in animaux :

print(i,’:’,len(i)," lettres")

Remarque : Lorsqu’on écrit une boucle, on peut constater que l’éditeur ajoute une indentation automatique- ment : outre que ceci rend le texte du programme beaucoup plus lisible, cela est indispensable en Python. Une indentation est nécessaire (peu importe le nombre d’espaces en réalité), et toutes les lignes devant être répétées dans la boucle doivent être indentées de la même façon : observer ce que donne le script de gauche si la ligne 3 est alignée sur lefor. Notons également les deux points « : » qui terminent impérativement la ligne contenantfor.

Avant de poursuivre, modifier la boucle de gauche de l’exemple 1 de telle sorte quei varie de 3 à 7 (bien vérifier...).

EXERCICE1:Suite définie par une somme

Écrire un script qui calcule à l’aide d’une boucle len-ième terme (oùnest fourni par l’utilisateur) de la suite (un) définie parun=

n

X

k=1

k2(notez que vous disposez d’un moyen de vérification).

EXERCICE2:Factorielle

Écrire un script qui calcule à l’aide d’une boucle la factorielle d’un entier fourni par l’utilisateur. Contrôler votre script : en cherchant bien vous pourrez dénicher une fonction du modulemathqui calcule toute seule la factorielle.

EXERCICE3:Suite géométrique

Écrire un script qui calcule la somme Sn =

n

X

k=1

qk, où n etq sont fournis par l’utilisateur (notez que vous disposez d’un moyen de vérification...).

b) Boucles while

Elles sont adaptées lorsqu’on ne connaît pas à l’avance le nombre de répétitions, mais qu’une série d’instructions doit être répétée tant qu’une condition est réalisée. Leur schéma est le suivant :

Tant queconditionfairesuite d’instructionsfin

Exemple 2 : Essayons sur un exemple lié aux suites : il est bien connu (ou pas) que la suite définie paru0=2 et un+1=un

2 + 1 un

converge versp

2 (vous devrez être capable de le démontrer d’ici peu). Profitons-en pour obtenir une valeur approchée dep

2 (voir script page suivante).

Page 1/??

(2)

1BCPST1 Novembre 2017 u,v=2, 0

while abs(v−u)>0.00001 : v,u=u,u/2+1/u

print(’Une valeur approchée de la racine carrée de 2 est :’,u," et l’erreur commise vaut :",abs(u−sqrt(2))) Assurez-vous d’avoir bien compris ce que fait cet exemple.

Rappelons deux risques d’erreur classique inhérent à ce type de boucle : celui de faire une boucle vide (si la condition spécifiée n’est jamais vérifiée) ou (pire !) celui de faire une boucle infinie (si la condition est toujours réalisée).

EXERCICE4:Factorielle

Écrire un script qui calcule à l’aide d’une bouclewhilela factorielle d’un entier fourni par l’utilisateur.

La condition inclut des tests de comparaisons entre variables, et il est possible d’utiliser des connecteurs logiques. Résumons tout ceci dans des tableaux :

Symboles de comparaison

== égal

!= différent

< inférieur strict

<= inférieur ou égal

> supérieur strict

>= supérieur ou égal

Connecteurs logiques

and et

or ou

not non

Remarque : Vous noterez donc que le signe ’=’ en Python est différent du signe ’=’ mathématique (non commu- tativité notamment), il correspond à une affectation de variables. Lorsqu’on veut tester une égalité, il faut bien employer le double égal ’==’ (ceci est une source inépuisable d’erreurs de syntaxe, à ne pas oublier...).

c) Exercices

Maintenant que vous connaissez les deux grands types de boucles, entraînez-vous à en écrire quelques-unes, en essayant de choisir à chaque fois la méthode la plus adaptée.

EXERCICE5:Fibonacci

Écrire un script qui calcule len-ième terme de la suite de Fibonacci, où n est fourni par l’utilisateur (on essayera autant que possible de minimiser la taille du script et l’utilisation mémoire en se servant judicieusement de la virgule permettant les affectations multiples) : cette suite est définie paru0=u1=1 et pour tout entiern, un+2=un+1+un.

EXERCICE6:Exercice 1 feuille 6

(un)n≥0est la suite définie paru0=0 et∀n∈N,un+1=5un−2

un+2 , et (vn)n≥0est définie parvn=un−2 un−1. Écrire un script permettant de vérifier que la suite (vn) est géométrique.

2o) Instructions conditionnelles

Les instructions conditionnelles permettent de tester une condition et de modifier en conséquence le comporte- ment de l’algorithme. Il est ainsi possible d’effectuer des instructions variables par disjonction de cas. Leur schéma est le suivant :

Siconditionalorssuite d’instructionsfin ou Siconditionalorssuite d’instructionssinonsuite d’instructionsfin Testez l’exemple suivant :

Page 2/??

(3)

1BCPST1 Novembre 2017 Exemple 3 :

a=eval(input(’Entrez la valeur de a : ’)) b=eval(input(’Entrez la valeur de b : ’))

if a>b : mi n=b else :

mi n=a

print(’Le minimum deaetbest : ’,mi n)

Notez à nouveau l’importance des deux points en fin de ligne contenantifouelse, et rappelez vous la signi- fication deelsequi fait qu’aucune condition n’est à préciser après ceelse.

Remarquez également l’indentation automatique dans l’éditeur de script, qui permet de délimiter les blocs d’instructions qui seront exécutées si la condition est réalisée. Cette indentation est indispensable à l’interprétation correcte du script par Python : pour en être convaincu, refaites un test en insérant une tabulation en début de dernière ligne (la ligneprint) et en exécutant le script aveca=5 etb=2, puisa=2 etb=5 par exemple... Cette présentation n’a pas qu’un intérêt visuel, elle fait partie intégrante de la syntaxe de Python, pour que l’interpréteur puisse savoir quelles instructions font partie de tel ou tel bloc. Il est ainsi possible d’imbriquer les blocs les uns dans les autres (plusieursifenchaînés, desifmélangés à desforet/ou deswhile, etc...).

EXERCICE7:Reconnaissance d’animal

embranchement=input(’Indiquez à quel embranchement appartient votre animal : ’) classe=input(’Indiquez à quelle classe appartient votre animal : ’)

ordre=input(’Indiquez à quel ordre appartient votre animal : ’) famille=input(’Indiquez à quelle famille appartient votre animal : ’) ifembranchement==’vertébrés’:

ifclasse==’mammifères’:

ifordre==’carnivores’:

iffamille==’félins’:

print("c’est peut-être un chat") print("c’est en tout cas un mammifère") elifclasse==’oiseaux’:

print("c’est peut-être un canari")

print("Il semble que nous n’ayons pas beaucoup avancé")

Sans taper l’algorithme ci-dessus, uniquement en l’analysant, répondre aux questions suivantes :

1o) Que produit l’algorithme si l’utilisateur entre embranchement=’vertébrés’, classe=’mammifères’, ordre=’primates’, famille=’hominidés’ ?

2o) Que produit-il si l’utilisateur entre embranchement=’invertébrés’, classe=’arthropodes’, ordre=’arachnides’, famille=’félins’ ?

3o) Que produit-il si l’utilisateur entre embranchement=’vertébrés’, classe=’oiseaux’, ordre=’ansériformes’, famille=’anatidae’ ?

L’instructionelifsignifieelse if, et permet donc de distinguer davantage de cas. Voyons cela sur un jeu amusant à tester (pour éviter de vous arracher les cheveux et de sombrer dans le désespoir suite à des échecs répétés à ce jeu passionnant, il sera peut-être utile de corriger une erreur qui s’y est subrepticement glissée) :

Exemple 4 :

a=input(’Entrez un nombre entier entre 1 et 10 :’) ifa==7:

print(’Vous avez gagné !’) elifa==8 ora==6:

print(’Vous avez presque gagné !’) else:

print(’Vous avez complètement perdu !’)

Page 3/??

(4)

1BCPST1 Novembre 2017 Remarque : On retient le principe suivant lors d’une disjonction de cas :

– si seuls 2 cas sont à distinguer : on utiliseifetelse(la partie contenant leelseest facultative, il peut très bien arriver que dans un cas l’algorithme fasse quelque chose, et que dans le cas contraire l’algorithme ne fasse rien du tout) ;

– si 3 cas ou plus sont à distinguer : on utiliseifcondition 1suivi de plusieurselifcondition i, et on termine parelse. Ceci est nettement préférable à l’imbrication de plusieursif.

Après avoir réussi à vous extraire de ce jeu passionnant, attaquez-vous aux exercices suivants.

EXERCICE8:Entier ou pas ? Pair ou impair ?

Écrire un script qui permette de déterminer si un nombre saisi par l’utilisateur est bien un entier (on ne se préoccupera pas du type de variables, uniquement de savoir si ce nombre appartient àNou non), puis modifiez votre script pour qu’il précise si l’entier saisi (dans le cas où c’en est bien un) est pair ou impair.

EXERCICE9:Coefficients du binôme

Écrire un script qui permette de calculer µ n

k

,k etnétant des entiers (à vérifier...) fournis par l’utilisateur (penser à tous les cas de figure).

EXERCICE10:Encore un jeu

Programmez un jeu tout simple consistant à faire deviner un nombre entier compris entre 1 et 50 au joueur. À chaque proposition faite par le joueur, le programme doit préciser si le nombre fourni est trop grand ou trop petit.

Le jeu s’arrête lorsque le joueur a trouvé le bon nombre.

Le nombre à trouver doit être généré aléatoirement par l’ordinateur (il varie donc à chaque jeu), utilisez pour cela la fonctionrandintdu modulerandom.

Petit raffinement possible : indiquez le nombre de tentatives qui ont été nécessaires pour que le joueur trouve la solution, et adaptez le message que vous affichez alors au joueur (félicitations chaleureuses, encouragements embarrassés, insultes moyenâgeuses,...).

3o) Compléments

Les exercices suivants sont destinés uniquement à ceux qui seraient en avance et s’ennuieraient, dans le but de continuer à se perfectionner.

EXERCICE11:Bissextile ou non ?

Écrire un script qui permette de déterminer si une année fournie par l’utilisateur (contrôler la saisie...) est bis- sextile. Pour connaître les conditions pour qu’une année soit bissextile, un petit détour par le navigateur Internet pourra vous apporter des éléments de réponse.

EXERCICE12:Nature de triangles

Écrire un script qui attend qu’un utilisateur entre trois valeurs, détermine si ces 3 valeurs peuvent correspon- dre aux longueurs des côtés d’un triangle, puis détermine la nature du triangle (rectangle, isocèle, équilatéral, quelconque). On testera (entre autres) le cas où les valeurs entrées sont 1, 1 etp

2.

On rappelle que 3 longueurs peuvent être celles d’un triangle si la somme des deux plus petites dépasse la plus grande.

EXERCICE13:Somme de multiples

Écrire un script qui calcule la somme des multiples de 3 et de 5 compris entre deux bornesaetbfournies par l’utilisateur.

Page 4/??

Références

Documents relatifs

Soient p un nombre premier et q un nombre rationnel

Mettre en évidence en basse tension que lorsqu'on augmente le nombre de récepteurs, l'intensité traversant le circuit principal augmente.. Copyright © Cours de Physique et de Chimie

Il nous faut donc partir de 4 nombres cogéniques ayant le même nombre de chiffres et, pour ce faire, en rechercher tout d'abord car nous n'en avons pas trouvé. Voici une méthode,

Un nombre entier n est dit « puissant » si pour chaque facteur premier p de cet entier, p² est aussi un diviseur de n.. Un nombre d’Achille (1) est un entier puissant sans être

Un nombre est puissant si « pour chaque facteur premier p de cet entier, p² est aussi un diviseur de n », ce qui implique que chacune des exposants de sa décomposition soit

Un nombre d’Achille est un entier dont tous les exposants du développement en facteurs premiers sont &gt; 1 et premiers entre eux dans leur ensemble.. Un nombre d’Achille doit

A194085 Strong Achilles numbers: Achilles numbers m such that phi(m) is also an Achilles number, where phi(m) denotes Euler's totient function of m.. Avec quatre facteurs

→ En 1949, Erdös montra le joli résultat suivant : pour tout entier k &gt;1 donné, il existe une infinité de nombres 2-pseudo-premiers qui sont chacun produit de k facteurs