Vous êtes sur la page 1sur 14

ALGORITHME

 Algorithme = solution à un problème écrite dans un langage


algorithmique

 Langage algorithmique = langage exprimant les capacités


opérationnelles d’un ordinateur (instructions exécutables par un
processeur)

 Algorithme = séquence d’opérations (instructions) capable d’être


exécutée par un ordinateur

 Structure d’un Algorithme

Algorithme exemple
Bloc Déclarations : variables
début
Bloc Instructions : instructions
fin
DÉCLARATION DE VARIABLE

La déclaration d’une variable est :

✓ l’association d’un nom (identificateur de variable)


à un type (structure & domaine des valeurs)

✓ la réservation d’un emplacement mémoire en MP permettant


la manipulation de la donnée (adresse + taille)

Un type permet de déterminer :


❑ la taille en octets de la donnée
❑ la représentation binaire associée à la donnée

 Un type peut être simple (entier, réel, Booléen,…)


ou composé (composition de plusieurs autres types selon le modèle de
tableau, enregistrement ou fichier)
INSTRUCTIONS
 Affectation : variable  expression

 Opérations arithmétiques : + - : *

 Opérations logiques : ET OU Non < > ==

 Test : instruction conditionelle


Si <condition> Alors <instructions> Sinon <instructions> Fsi

 Boucle: instruction de traitement répétitif → 3 types de boucles


➢ Tant que <condition> faire <instructions> fait

➢ Pour indexe de val_déb à val_fin Faire <instructions> Fait


➢ Faire <instructions> jusqu’à <condition de sortie> fait

 Opérations d’Entrée/Sortie : Saisir/Lire Afficher/Ecrire


BOUCLE
 Structure d’une Boucle « tant que »
Tant que <tête de boucle> ou <condition d’entrée dans la boucle>
Faire
<Corps de Boucle>
Fait

itération : une exécution du corps de boucle

 Quelles différences entres les types de boucles ?

 Nombres d’itérations potentielles ?


FONCTION - PROCÉDURE
 Unité algorithmique (« petit algorithme ») utilisée (appelée)
par un "Algorithme" dit « Appelant »
 Caractérisée par :
 des données en entrée et des données en sortie (comme tout algorithme)

 Un bloc "Déclaration" et un bloc "Instruction" (comme tout algorithme)

 Sert à (Avantages/Intérêt) :
 Réutilisabilité de code
 Traitement paramétré

 Formalisation :
 données en entrée : paramètres
 données en sortie : paramètres et/ou retour
FONCTION- MÉCANISME DE TRANSFERT DES DONNÉES
 Programme "Appelant" vs Programme "Appelé".

 Paramètre formel vs Paramètre réel/d’appel


 Passage de paramètre(s) :
 par valeur (de l’Appelant vers l’Appelé uniquement)
 par variable ou par référence ( de/vers Appelant – Appelé)

 Variables globales :
déclarées chez l’Appelant mais accessibles chez l’Appelé

 Retour : (pour les fonctions)


Donnée transférée de l’Appelé (lors de sa terminaison) vers l’Appelant
RÉCURSIVITÉ
 un algorithme récursif (fonction ou procédure) est un
algorithme qui fait appel à lui-même
 Récursivité engendre un traitement répétitif

 Test d’arrêt pour contrôler le traitement répétitif

 La gestion des appels imbriqués est effectuée par


le système d’exploitation en utilisant une pile pour stocker
les variables locales et les paramètres de passage par valeur
 Tout algorithme récursif peut être transformé en
algorithme itératif
STRUCTURE D’UN PROGRAMME EN M.P
M.P.
0
CPU 1
2
.
Système d’exploitation
U.A. U.L. .
N-1
N
TEXT (instructions en Lang. Machine)

DATA (variables statiques)


U. Cmd
HEAP (tas :variables dynamiques)
Registres
STACK (pile des appels de fcts)
R1 …………. …………. CO (PC) Bus @
Programme Utilisateur (Job)
R2 …………. …………. R.I.

R3 ………….

Bus
…………. …
données
Mm …
Cache …
TABLEAU
 Structure de donnée  type composé
 est une collection ordonnée de données de même type
 peut avoir 1 dimension, 2 dimensions ou plus
 Adapté à l’implémentation de vecteurs, matrices, listes …
 Définition
id_variable : tableau[indice-déb .. indice_fin] de type_élément
ou id_variable : tableau[indice1-déb .. indice1_fin, indice2…] de type_élément

 Usage
id_variable[expression] désigne une variable élément
où l’évaluation de expression donnera la valeur de l’indice de l’élément désigné

Les opérations (arithmétique, affectation, …) ne sont


autorisées que sur les éléments simples d’un tableau
même si certains langages autorisent les opérations sur des tableaux
ENREGISTREMENT
 Structure de donnée  type composé
 est une collection ordonnée de données pas forcément de
même type
 Les éléments d’un enregistrement sont appelés champs
 Adapté à l’implémentation des données de gestion (fichiers
employés, articles commerciaux, gestion de stock, …)
 Définition
id_variable : enregistrement
id_champ1 : type_champ1 ;
id_champ2: type_champ2 ;
id_champ3, id_champ4: type_champ3_et_4 ;
fin enregistrement
 Usage
id_variable.id_champ désigne la variable champ de l’enregistrement

Les opérations (arithmétique, affectation, …) ne sont


autorisées que sur les champs simples d’un enregistrement
même si certains langages autorisent les opérations sur les enregistrements
FICHIER
 Structure de donnée : collection ordonnée de données de
même type (similaire au tableau) caractérisée par :
 taille indéfinie (non spécifiée initialement)
 durée de vie au-delà de l’exécution d’un programme

t_déb t_fin temps


exécution
variables classiques

données des fichiers

 données mémorisées dans des périphériques de stockage


permanents (Disque dur, flash disque, CD, DVD, etc.)
 Accès nativement séquentiel en parcourant à partir du début de fichier
 Manipulation/Gestion en collaboration avec le système
d’exploitation : uniquement à travers des primitives de la biblio-
thèque système : ouvrir ; lire / écrire / positionner / testEndOfFile ; fermeture
 Analogie avec un ruban
Ceci est le contenu d’un fichier de caractères (ou texte)

EOF
offset
FICHIER- MANIPULATION
 Définition / déclaration : id_variable : fichier de type_élément ;
id_variable est le nom logique ou descripteur du fichier

Exemple: fd: fichier de caractere ;


 Usage
étape 1: ouverture du fichier -> primitive ouvrir(…)
fd ouvrir("nom système du fichier", mode_ouverture) ;
mode_ouverture= "r" / "w" / "a"
permet d’associer un nom de fichier reconnue par le système à un descripteur de fichier et
de l’ouvrir selon le mode d’ouverture spécifié. Retourne une valeur ≤0 si pb.
étape 2: accès au fichier -> primitives lire(), écrire(), positionner(), testEoF()
lire(fd, id-var) : lecture de données et mémorisation dans id_var
écrire(fd, expression) : écriture de données (résultant de l’évaluation de expression)
lire() et écrire() font avancer automatiquement le curseur offset après les données lues/écrites
positionner(fd, n) : positionne le curseur offset à n positions
testEoF(fd) : primitive booléenne qui retourne VRAI si fin de fichier atteinte

étape 3: fermeture du fichier -> primitive fermer(…)


fermer(fd) : le descripteur fd ne peut plus être utilisé
ALLOCATION DYNAMIQUE DE MÉMOIRE & POINTEURS
permet de réserver et utiliser des zones mémoires (variables
dynamiques) en MP durant l’exécution d’un programme.
 variable dynamique : caractérisée par :
▪ allouée et libérée en cours d’exécution → 2 primitives systèmes
▪ Type de la variable attribuée au moment de l’allocation
▪ durée de vie= sous période de la durée d’exécution du programme
▪ Localisée au niveau du segment « HEAP »
t_déb Exécution du pgm t_fin temps

variables statiques

variable dynamique

allouer(type) libérer(pointeur)
 Terminologie :
▪ adresse : valeur numérique entière positive indiquant un emplacement en MP
→ « vision » hardware
▪ pointeur : adresse qui « pointe » sur une structure de donnée d’un certain type
→ « vision » algorithmique (i.e. logicielle)
▪ par convention, une valeur d’adresse invalide est désignée par nil
VARIABLES DE POINTEURS
 Définition / déclaration :
nouveau type : pointeur ou pointeur sur type_structure_pointée
format déclaration : pointeur sur type_structure_pointée
ou : type_structure_pointée (en C *type_structure_pointée)
Exemples : VAR
p: entier; pp: Temploye; ppp: pointeur sur réel;
 Usage
▪ primitives systèmes :
✓ allouer(type) crée une variable dynamique et retourne son adresse;
si échec d’allocation retourne une valeur d’erreur (0)
✓ libérer(pointeur) libère une structure allouée désignée par pointeur

▪ Désignation des variables :


Soit id_p une variable pointeur définie comme suit
VAR id_p : Type_pointé;
✓ l’affectation de id_p pourrait être id_p  allouer(type);
✓ la désignation de l’objet pointé par id_p est (*id_p)
✓ dans le cas particulier où id_p est de type enregistrement,
désigner le champs id_champ1 de id_p pourrait être :
(*id_p).id_champ1 ou id_p→id_champ1