Briques de base

Le pseudo-code est constitué d'instructions dont le but est soit de manipuler des objets (création, affectation ou lecture) ou de contrôler le flux d'instructions (test et boucles).

Commençons par décrire les objets que l'on peut manipuler en pseudo-code et les moyens d'y accéder.

TBD définir les opérations et donner les variantes ($\leftarrow$, $:=$) TBD fonction = algorithme TBD dire que $=$ est un devient. TBD parler des portée des variables : l'algorithme c'est à dire la fonction.

Objets et variables

Objets basiques

Les objets que nous aurons directement à notre disposition sans avoir besoin de les définir sont appelés objets basiques et sont au nombre de cinq :

Tous les autres types d'objets que l'on peut créer seront des compositions de ces 5 types d'objets (un point en 3D par exemple est constitué de 3 réels).

Les instructions liées à ces objets sont de deux ordres. On doit pouvoir :

Notez que tous les objets basiques à part les entiers sont de taille fixe :

On peut très bien sans perte de généralité se restreindre aux entiers entree 0 et $2^{64}$, et c'est d'ailleurs ce que beaucoup de langages de programmation font, puisque qu'un entier quelconque peut être représenté en base $2^{64}$ et ainsi être représenté par un tableau d'entiers codé sur 64bits. C'est d'ailleurs ce qui se passe en python pr exemple où un entier, qui n'est pas borné, est composé d'un tableau d'entiers codés sur 64bits. Ceci est cependant transparent pour l'utilisateur (et c'est tant mieux).

À retenir

On considérera toujours qu'un objet basique est de taille connue et donnée au début du programme.

Variables

Les objets que l'on manipule doivent pouvoir être conservés pour que l'on puisse les réutiliser tout au long du programme. Cet espace espace de stockage, que l'on nomme une mémoire, est identifié d'un point de vue algorithmique, à une gigantesque suite de cases adjacentes à laquelle l'algorithme peut accéder en 1 instruction et pouvant contenir un objet basique.

Une variables est alors associé à la première case de la mémoire contenant l'objet. D'un point de vue algorithmique, cela revient à référencer un objet, à le nommer :

Définition

Une variable est un nom auquel est associé un objet.

Les instructions autorisées sur les variables sont :

Une variable est un nom, elle ne copie ni ne modifie un objet dans le pseudo-code suivant, les deux variables a et b référencent le même objet entier.

a = 3
b = a

Dans la seconde instruction, on commence par retrouver l'objet nommé par a et on le nomme b : la case où est stocké l'entier dans la mémoire est donné à a et à b

Structures

Les objets basiques sont les briques élémentaires permettant de créer tout ce dont un algorithme à besoin. Un nombre complexe est composé de 2 approximations de réels ou une phrases d'une suite de caractères par exemples. Gérer ces objets complexes, appelés structures, se fait aux tableaux. Comme une structure est toujours in fine composée d'objet basiques :

À retenir

On considérera toujours que la taille d'une structure est proportionnelle à la taille des objets qui la compose et est connue à sa création.

Tableaux

Définition

Un tableau est un conteneur nommé pouvant contenir $n$ variables. $n$ est la longueur ou la taille du tableau. La taille d'un tableau est déterminée à sa création et ne peut être modifiée.

Chaque variable du tableau peut être accédée via son indice, qui est un entier entre $0$ et $n-1$. Si le tableau est nommé $t$ :

  • $t[i]$ est sa variable d'indice $i$ si $0 \leq i < n$
  • $t[-i]$ vaut $t[n-i]$ si si $0 < i \leq n$

Les différentes variables du tableaux sont stockées de façon contiguë en mémoire pour pouvoir y accéder rapidement pour y être lu ou modifiée.

Les tableaux peuvent être simples comme une suite finie d'entiers ou des types plus complexes comme une matrice à 2 dimensions où chaque élément du tableau est un autre tableau.

On considérera que :

On considère que créer un tableau prend 1 instruction car celui-ce est de taille fixée. On justifiera ceci proprement plus tard.

Les opérations sur les tableaux sont faites graces aux opérations des objets basiques qui les composent. Il n'y a pas d'opérations spécifiques à ceux-ci :

À retenir

Les opérations sur les tableaux seront toujours des opérations composées d'une suite d'opérations effectuées sur les objets basiques les constituants.

Chaînes de caractères

Les chaines de caractères sont un tableau uniquement composés de caractères. Cette structure est utilisée lorsque l'on veut écrire ou représenter plus qu'un caractère, c'est à dire quasi tout le temps.

Une chaîne de caractères est un tableau constitué uniquement de caractères.

On peut les manipuler essentiellement comme un tableau. On peut :

Les chaines étant très utilisées, des langages comme python les considèrent comme un type de base et considèrent les caractères comme étant des chaîne de langueur 1. Les chaines de caractères héritent donc de certains comportements spécifiques aux objets basiques :

Chacune des quatre opérations précédentes (création, affectation, accès et concaténation) prend 1 instruction. On justifiera ceci proprement plus tard (les chaînes crées sont des constantes).

Instructions de contrôle

Si un des deux buts d'une instruction est de créer des objets à partir d'autres (ce que l'on vient de voir), le second but est de contrôler le flux d'instructions à exécuter. Ces instructions sont de deux types :

Ces formes d'instruction nécessitent de grouper les instructions en blocs.

Blocs

Lier les instructions en blocs. On va utiliser ici le formalisme de python pour définir un bloc :

type de bloc:
    instruction 1
    instruction 2
    ...
    instruction n

On décale les instructions du bloc de sa définition. C'est un truc clair qui permet de voir du premier coup d'œil les instructions d'un bloc.

Exécution conditionnelle d’instructions

On veut pouvoir exécuter un bloc de code si une condition logique est VRAIE :

si (condition logique):
    instruction 1

    ...
    instruction n

Cette instruction basique peut avoir plein de variantes comme :

si (condition logique):
    instruction 1
    ...
    instruction n
sinon:
    instruction 1
    ...
    instruction n'

ou encore :

si (condition logique):
    instruction 1
    ...
    instruction n
sinon si (autre condition logique):
    instruction 1
    ...
    instruction n'

Ou tout mix de tout ça, du moment que c'est clair !

On peut dériver toutes les variantes de la forme initiale.

Répétition

TBD : dire que l'on en a de deux types : for et while. Que l'on peut tout faire en while mais les boucles for sont plus lisible, en particulier leur condition d'arrêt est claire.

On doit pouvoir répéter un bloc tant qu'une condition logique est vérifiée (boucle while):

tant que (condition logique):
    instruction 1
    ...
    instruction n

Il existe une variation de ce bloc très utile (boucle for):

pour chaque élément x d'un tableau:
    instruction 1
    ...
    instruction n

On exécutera alors le bloc autant de fois qu'il y a d'éléments dans le tableau et à chaque itération du bloc, la variable x vaudra un autre élément du tableau. On prendra les éléments du tableau par indice croissant.

On peut dériver la variante pour chaque de la forme initiale tant que.