3 - Langage

Pseudo langage

Notions de pseudo langage

  • langage formel minimal pour décrire un algorithme

  • un langage de programmation (Python, java, C) est trop contraignant

  • dans les livres les algos. sont écrits en pseudo langage.

Éléments communs

Tous recouvrent les mêmes concepts :

  • variables, affectations

  • structure de contrôle : séquence, condition, itération

  • découpage de l’algo. en sous-programmes (fonctions)

  • structures de données (tableaux, dictionnaires etc.)

Variables, affectations

  • Les variables sont indiquées avec leur type : booléen b, entier n etc.

  • on affecte avec $=$ ou $\leftarrow$ $\leftarrow$ illustre bien l’affectation : “mettre dedans.”

Structures de données

  • Les tableaux sont utilisés. Si $A$ est un tableau, $A[i]$ est le $i^{eme}$ élément de ce tableau.

  • Les structures sont utilisées. Si $P$ est une structure modélisant un point et $x$ un champ modélisant l’abscisse alors $P.x$ est l’abscisse de ce point.

Séquencement des instructions

  • si nécessaire, on termine une instruction avec $;$

  • Les blocs d’instructions sont entourés de

    • ${…}$
    • début … fin
  • En Python, ce n’est nécessaire que sur un même ligne.

a = 3; print(a)

Conditionnelle

La conditionnelle est donnée par :

si (condition){
  instruction1;
}sinon{
  instruction2;
}

Python et l’indentation

Indenter :

Mettre des espaces en début de ligne

  • Pseudo code, langage avec syntaxe inspirée du C :

    La structure est indiquée par les { }

    indentation optionnelle, pour éclairer le lecteur

  • Python :

    Dans Python la structure est donnée par l’indentation

    Elle est OBLIGATOIRE

Conditionnelle en Python

a = 5
if a > 4: # apres : on indente
  print("plus grand que 4") # dans le bloc if
else:
  print("inférieur ou égal à 4") # dans le bloc else
print("le if est terminé") # sera executé

qui affiche :

plus grand que 4
le if est terminé

Python : if, elif, else

a % 3 le reste dans la division par 3 de a

% se lit “modulo”

a = 16
if a % 3 == 0: # si a est divisible par 3
  print("divisible par 3, le reste vaut 0")
elif a % 3 == 1:
  print("le reste vaut 1")
else:
  print("le reste vaut 2")

Itérations

Nous utiliserons plusieurs types de boucles :

Les boucles while


tant que (condition){ faire ceci... }

En Python :


n = 0
while n < 5:
  print(2 * n + 1)
  n += 1

1, 3, 5, 7

Contexte d’utilisation : while

On emploie principalement les boucles while quand on ne sait pas combien d’étapes seront nécessaires.

Itérations

Les boucles for


pour i allant de min à max { faire ceci }

Et en Python :


for i in range(5):
  print( 2 * i + 1)

Itérer dans une liste en Python.

for mot in ["une", "liste"]:
  print(mot)

une
liste

Rq : Il est possible d’itérer sur de nombreux objets dans Python :

liste, tuples, dictionnaires, set, fichiers, générateurs etc.

Ici on itère sur la liste,

i référence successivement ses éléments.

Contexte d’utilisation : for

  • Quand on sait combien d’étapes seront nécessaires
  • Quand on veut parcourir tous les éléments d’un “paquet” (liste, tableau, dictionnaire etc.).

Fonctions

  • Une fonction est un “petit” programme qui renvoie une valeur.

  • Elles permettent

    • un découpage qui facilite la compréhension.

    • de factoriser : on évite ainsi d’écrire plusieurs fois la même série d’instruction.

Fonctions en Python

Elles sont définies avec def En sortie, elles revoient des variables avec return

def carre(x):
  return x ** 2

a = carre(9) # 81

Fonction sans sortie

def direBonjour(texte):
  print("Bonjour je m'appelle {}".format(texte) )

direBonjour("Henri")

Bonjour je m'appelle Henri

Rq : .format(...) est une méthode de la classe str

Intérêt des fonctions :

Les fonctions facilitent le développement :

Il est plus facile de trouver une erreur parmi 10 fonctions de 3 lignes que dans un bloc de 30 lignes.

Portée des variables

On distingue les variables locales et globales

a = 5 # variable globale
def maFonction():
  a = 3 # variable locale à la fontion
  print(a)
maFonction()
print(a) # a vaut 5 !!!
3
5

En dehors des fonctions : variables globales

Dans les fonctions : variables locales

Attention aux arnaques : Python Tutor - portée des variables

Python : utiliser une variable globale

a = 5 # variable globale
def maFonction():
  global a # on rend la variable globale
  a = 3
maFonction()
print(a)
3

Cette fois, on a spécifié global a !!

En pseudo code

On évite cette difficulté en précisant les paramètres (entrées et sorties) de la fonction.

  • maFonction(e int i, s int j, es int k)

  • en entrée : avec e on passe à la fonction la valeur i mais elle ne la changera pas globalement

  • en sortie : la fonction écrit dans j mais elle n’en connait pas la valeur extérieure

  • en entrée/sortie : on lui passe la valeur de k et elle écrit dedans.

  • Sans précision, on suppose que c’est en entrée.

  • passage par entrée/sortie = passage par référence ou passage par variable

Exemple

  • code appelant :

    i $\leftarrow 3$

    j $\leftarrow 5$

    k $\leftarrow 8$

    maFonction(e int i, s int j, es int k);

    Afficher(i, j, k);

  • maFonction(e int i, s int j, es int k){

    i $\leftarrow$ i +1

    j $\leftarrow$ 6

    k $\leftarrow$ k + 2 }

  • résultat de Afficher(i, j, k) : ? ? ?

Exemple - solution

  • code appelant :

    i $\leftarrow 3$

    j $\leftarrow 5$

    k $\leftarrow 8$

    maFonction(e int i, s int j, es int k);

    Afficher(i, j, k);

  • maFonction(e int i, s int j, es int k){

    i $\leftarrow$ i +1

    j $\leftarrow$ 6

    k $\leftarrow$ k + 2

    }

  • résultat de Afficher(i, j, k) : 3 6 10

fonctions : différentes implémentations

  • En Java certains objets n’ont de paramètres qu’en entrée (int, float etc.)

Python : prudence !

  • En Python il faut faire attention, à nouveau…
def f(x):
  x = 5
a = 0
print(a) # 0
f(a)
print(a) # 0

a été passé en entrée

Tandis que…

def f(liste):
  liste[0] = 5
a = [0, 1, 2]
print(a[0]) # 0
f(a)
print(a[0]) # 5

Cette fois on modifie l’élément 0 de la liste a !