Informatique
CPP 1A
(CM 1 et CM 2)
Matthieu Moy et Frédéric Devernay
CPP, Grenoble INP
mars - mai 2017
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <1 / 31 >
Sommaire
1Premiers pas en Python
2Types en Python
3Structures de contrôle en Python
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <2 / 31 >
Expressions §3.1
2 + 2 4
4 - 2 2
2+3*414
(2 + 3) * 4 20
1 / 2 0.5 (nombre flottant = approximation d’un nombre réel)
10 / 3 3.33333
10 // 3 3 (double / = division entière, ou quotient)
10 % 3 1 (reste de la division entière)
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <4 / 31 >
Exercices
Traduire les expressions suivantes en Python :
3+4×(5)
2+3
12
2+3
12
5
(attention aux parenthèses)
422(solution : 42 * 42 ou bien 42 ** 2)
Que renvoient les calculs suivants ?
1/2
1 // 2
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <5 / 31 >
Notion de variable, affectation §3.2
Définir une variable xavec la valeur 42 :
x = 42
On note : 42
x
>>> x = 42
>>> x + 1
43
>>> x = 12
>>> x + 1
13
«=» crée la variable si elle n’existe pas, écrase son contenu sinon.
Maths : x=1« x est égal à 1 ».
Info : x=1« x devient égal à 1 ».
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <6 / 31 >
Exercice : valeur de la dernière instruction ?
x=0
x=x+2
x=x+1
x
x=1
x=x+x
x=x+x
x
x=1
y=x+1
x=y+1
x+y
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <7 / 31 >
Pour la prochaine fois...
Lire les sections 3.1 et 3.2 du livre « Informatique pour tous en
classes préparatoires aux grandes écoles ».
Faire le QCM 1 sur Chamilo.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <8 / 31 >
Nombres en Python §3.1
Deux types de nombres :
int : entiers signés (Z) : 1, 2, 0, -3, ... (aussi grands qu’on veut en
Python, mais souvent limités dans les autres langages)
float : nombres à virgule flottante, ou « nombres flottants »
(approximation de R) : 1.0, 1.5, 3.14159, 2.345e50, -1.3, -3.456e-12,
... (précision limitée, représentation vue plus tard)
Toute expression Python a un type :
>>> type(1.0)
<class ’ float ’ >
>>> type(1)
<class int ’>
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <10 / 31 >
Chaînes de caractères (str) §3.3.2
>>> " Bo nj ou r " # entre guil l emet s
Bonjour
>>> ’ Bonjo ur # ou apostrophes
Bonjour
>>> ’ Bon j o ur ’ + " tout " + " le " + " mon " + " de "
’ Bo nj our tout le m on de
print ( " C om me nt t ’ a ppe lles - tu ? " )
name = input ()
print ( " Bo njour " + nam e ) # ou print (" B onjour " , na me )
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <11 / 31 >
Chaînes de caractères (str)
>>> type( " 12 " )
<clas s ’ str ’>
>>> "12 " + " 3 " # un e ch a î ne n ’ es t pa s un nom b re
’ 123 ’
>>> 12 + 3
15
len(s) : longueur (nombre de caractères) de s
s[i] : chaîne contenant le caractère à la position i. (1er carac. : s[0])
s[i:j] sous-chaîne de la position iincluse à la pos. jexclue.
>>> s = " B o njour "
>>> len (s)
7
>>> s [5]
’ u ’
>>> s [1:4 ]
’ onj ’
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <12 / 31 >
Conversions de type §3.3.4
>>> int ( ’ 12 ’ ) # str vers int
12
>>> str(12) # int vers str
’ 12 ’
>>> floa t (1) # int vers floa t
1.0
i = int(in p ut ()) # lire un e nt ie r ( é ch ou e si non - e nt ie r )
f = f lo at (i nput ()) # lir e un f lo tt an t (é cho ue si . ..)
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <13 / 31 >
Valeur de vérité (vrai/faux) : les booléens §3.1.4
True ou False.
Représentation possible sur un
bit.
int(True) vaut 1,
int(False) vaut 0.
>> > 2 > 1
True
# ne p as co nfo ndr e av ec =
>> > 2 == 3
Fa ls e
# s ’é c ri t d an s l ’ or dr e
# où on le d it
>> > 2 >= 1
True
>> > 2 <= 2
True
>> > 2 < 2
Fa ls e
>> > 2 != 2
Fa ls e
>> > 1 != 2
True
>> > x = 2 == 2 # x est de t yp e bo ol
>> > x
True
>> > x = 42
>> > x > 12 an d x < 10 0 # " et " l o gi qu e
True
>> > x > 12 an d x < 30
Fa ls e
>> > x > 12 o r x < 30 # " ou " l og i qu e
True
>>> no t x > 12 # " no n " lo gi qu e
Fa ls e
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <14 / 31 >
Priorité des opérateurs
Par ordre décroissant :
or (ou logique)
and (et logique)
not x (non logique)
<,<=,>,>=,! =,== (comparaisons)
+,(addition et soustraction)
,/,//,%(multiplication, division, reste)
+x,x(signe positif, negatif)
∗∗ (exponentiation)
Dans le doute, ne pas hésiter à ajouter des parenthèses !
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <15 / 31 >
Expressions et variables (3.2)
Évaluation d’une expression : Python
remplace d’abord le nom des variables par
leur valeur. Erreur si le nom n’est pas défini.
Type d’une variable déterminé à chaque
affectation (une variable peut changer de
type).
>>> x = " 2 "
>>> type(x)
<cla ss str ’>
>>> x = in t (x)
>>> x
2
>>> type(x)
<cla ss int ’>
Échanger deux variables xet y:
x = 42 # x: 42
y=3 # x: 42 , y : 3
x=y # x: 3, y: 3
y=x # x: 3, y: 3
Caramba, encore raté !
x = 42 # x: 42
y=3 # x: 42 , y : 3
tmp = x # x : 42 , y : 3 , tmp : 42
x=y # x: 3, y: 3, tmp : 42
y = tmp # x: 3, y: 42 , tmp : 42
Exercice : échanger deux entiers sans 3e
variable.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <16 / 31 >
Conditionnelle : if ... else §4.2
print( " x v au t " , x )
if x < 0:
x = -x
print( " x v au t m a in t en an t " , x )
if e co le = = " CP P " :
print( " Le C PP " )
print( " C ’ es t P as P ar e il " )
if e co le = = " CP P " :
if v ill e == " Gr en ob le " :
print( " Sup er ! ")
if e co le = = " CP P " a nd v il le == " G ren ob le " :
print( " Sup er ! ")
Syntaxe générale :
if <condition >:
<instruction1 >
<instruction2 >
...
<suite >
mot-clé if, en minuscule
ne pas oublier :
bloc d’instruction indenté
(4 espaces) exécuté si
condition vraie
dans tous les cas,
l’exécution continue après
le bloc indenté.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <18 / 31 >
Conditionnelle : if ... else
Autre syntaxe possible :
print( " ava nt " )
if x > 0:
print( "x es t po si ti f ")
else:
print( "x e st n é g at if ou n ul " )
print( " apr è s ")
On peut imbriquer les if :
if x > 0:
print( "x es t po si ti f ")
else:
if x < 0:
print( "x es t n é ga ti f ")
else:
print( "x e st n ul " )
Plus lisible :
if x > 0:
print (" x est positif " )
elif x < 0:
print (" x e st n é ga ti f ")
else:
print ( "x es t nul ")
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <19 / 31 >
Exercice : afficher les racines de ax 2+bx +c.
Pour calculer xen python, on écrit math.sqrt(x).
On a besoin d’écrire import math en début de programme.
Le programme doit afficher, selon les valeurs de a,b,c:
Aucune solution réelle
Une seule solution: ...
Deux solutions: ... et ...
import math
a=2
b=4
c=2
delta = b ** 2 - 4 * a * c
...
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <20 / 31 >
# ! / us r / bi n / env p yt ho n3
import math
a=2
b=4
c=2
delt a = b ** 2 - 4 * a * c
if d elta < 0:
prin t (" Auc une s ol ut ion ré el le " )
elif delt a == 0:
prin t (" Une seul e solutio n : " , -b / (2 * a ))
else:
sol1 = (- b + math . sqrt ( d elta )) / (2 * a )
sol 2 = (-b - math . s qrt ( delt a )) / (2 * a )
prin t (" Deu x s olutio n s :" , so l1 , " et " , s ol2 )
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <21 / 31 >
Boucle conditionelle : while §4.3
while x >= 0:
print ( "x = " , x )
x = x - 1 # compte à rebo u r s
print ( " Boom " )
while en minuscule, condition, « :», et bloc indenté.
Autre exemple : multiplication de aet bpar additions successives :
result a t = 0
x=a
y=b
while y > 0:
resultat = resultat + x
y = y - 1
print ( "R é s ul tat : " , r e su lt at )
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <22 / 31 >
Correction et terminaison §4.3
Terminaison : Est-ce que l’algorithme donne une réponse ? (en un temps
fini)
Mettre en évidence une quantité qui converge, le convergent, p.ex.
une quantité qui est bornée et diminue à chaque passage.
Correction : Est-ce que l’algorithme donne la bonne réponse ?
Mettre en évidence une assertion vraie :
avant l’entrée dans la boucle
au début d’un passage
à la fin d’un passage (donc en sortie aussi)
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <23 / 31 >
Terminaison §4.3.3
result a t = 0
x=a
y=b
while y > 0:
resultat = resultat + x
y = y - 1
print ( "R é s ul tat : " , r e su lt at )
Terminaison : le programme se termine-t-il ?
la valeur de yest un entier positif
ydécroit strictement (de 1) à chaque itération
Une suite strictement décroissante d’entiers positifs a un nombre fini de
termes.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <24 / 31 >
Correction §4.3.4
result a t = 0
x=a
y=b # a* b == x *y
while y > 0:
resultat = resultat + x
y = y - 1
print ( "R é s ul tat : " , r e su lt at )
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <25 / 31 >
Correction §4.3.4
result a t = 0
x=a
y=b # a* b == x *y
while y > 0:
resultat = resultat + x
y = y - 1 # a* b == resultat + x*y
print ( "R é s ul tat : " , r e su lt at ) # a *b = resultat
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <26 / 31 >
Correction §4.3.4
result a t = 0
x=a
y=b # a* b == x +y
# a * b == r esulta t + x* y
while y > 0:
resultat = resultat + x
y = y - 1 # a* b == resultat + x*y
# a * b == r esulta t + x* y ( et y == 0)
print ( "R é s ul tat : " , r e su lt at ) # a *b == r e sultat
L’algorithme marche grâce à l’invariant ab=resultat +xy, qui est
vrai :
avant l’entrée dans la boucle
au début d’un passage
à la fin d’un passage (donc en sortie aussi)
Utiliser assert(a*b==resultat+x*y) pour vérifier l’assertion à ces
endroits.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <27 / 31 >
Correction §4.3.4
result a t = 0
x=a
y=b # a* b == x +y
assert ( a * b == resultat + x*y ) # inva r iant
while y > 0:
assert ( a * b == resultat + x*y ) # inva r iant
resultat = resultat + x
y = y - 1 # a* b == resultat + x*y
assert ( a * b == resultat + x*y ) # inva r iant
assert ( a * b == resultat + x*y ) # inva r iant
assert ( y == 0) # on v é rifie q ue y vaut ce qu ’on croit
assert ( a * b == resultat ) # on v é ri fi e le cal cu l
print ( "R é s ul tat : " , r e su lt at ) # a *b == r e sultat
Il n’y a jamais trop de assert !
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <28 / 31 >
Boucle inconditionelle (§4.3 et §4.4)
exécuter nfois une suite d’instruction, nconnu avant le début de la boucle.
Solution 1 : un compteur
a=0
b=1
n=0
whi le n < 10:
pri nt (b)
c=a+b
a=b
b=c
n=n+1
Solution 2 : boucle for
a=0
b=1
fo r nin r ang e (10 ):
pri nt (b)
c=a+b
a=b
b=c
range(n) :itérable prenant successivement les valeurs de 0 inclus à nexclu par pas de 1
(donc de 0 à n1).
range(m, n, p) :itérable prenant les valeurs de minclus à nexclu par pas de p(ppeut
être <0)
ran ge (4): 0, 1, 2, 3
ran ge (0 ,4 ,1): 0 , 1 , 2 , 3
ran ge (4 ,0 , -1): 4, 3, 2, 1
ran ge (3 , -1 , - 1) : 3 , 2 , 1 , 0
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <29 / 31 >
Pour la prochaine fois...
Lire le chapitre 4 du livre.
Exercice : calcul de PGCD avec l’algorithme d’Euclide.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <30 / 31 >
Au début du programme, aet b
contiennent deux entiers.
À la fin du programme, bdoit
contenir le PGCD.
Trouver la suite d’instructions
permettant d’arriver au résultat.
Bonus : tenter de prouver la
terminaison et la correction.
Moy & Devernay (CPP) Informatique CPP mars - mai 2017 <31 / 31 >
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !