Cours algorithme classe II

 

Algorithme

1 Introduction

1 Qu’est-ce qu’un algorithme ?

Définition 1 : Un algorithme est une suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné.

Pour fonctionner, un algorithme doit donc contenir uniquement des instructions compréhensibles par celui qui devra l’exécuter.

Définition 2 : Un algorithme est une suite finie d’opérations élémentaires, à appliquer dans un ordre déterminé, à des données. Sa réalisation permet de résoudre un problème donné.

La maîtrise de l’algorithmique requiert deux qualités :

il faut avoir une certaine intuition, car aucune recette ne permet de savoir à priori quelles instructions permettront d’obtenir le résultat voulu.

il faut être méthodique et rigoureux. En effet, chaque fois qu’on écrit une série

d’instructions qu’on croit justes, il faut systématiquement se mettre à la place de la machine qui va les exécuter, pour vérifier si le résultat obtenu est bien celui que l’on voulait.

 

 Remarques :

1. Un algorithme doit être lisible de tous. Son intérêt, c’est d’être codé dans un langage informatique afin qu’une machine (ordinateur, calculatrice, etc.) puisse l’exécuter rapidement et efficacement.

2. Les trois phases d’un algorithme sont, dans l’ordre :

(a) l’entrée des données

(b) le traitement des données

(c) la sortie des résultats

 

3.Les ordinateurs, quels qu’ils soient, sont fondamentalement capables de comprendre quatre catégories d’ordres seulement (en programmation, on n’emploiera pas le terme d’ordre, mais plutôt celui d’instructions). Ces quatre familles d’instructions sont

l’affectation de variables   "Déclaration de variable"

la lecture / écriture

les tests

les boucles

 

 

Un algorithme exprime les instructions résolvant un problème donné indépendamment des particularités de tel ou tel langage de programmation.

Apprendre un algorithme, c’est apprendre àmanier la structure logique d’un programme informatique.

« Un langage de programmation est une convention pour donner des ordres à un

ordinateur.» (Pascal, Fortran, C++, PHP, Mathematica etc.)

2 Conventions pour écrire un algorithme

Historiquement, plusieurs types de notations ont représenté des algorithmes.

Il y a eu notamment une représentation graphique, avec des carrés, des losanges, etc. qu’on appelait des organigrammes. Cependant dès que l’algorithme commence à grossir un peu, ce n’est plus pratique.

On utilise généralement une série de conventions appelée « pseudo-code », qui

ressemble à un langage de programmation authentique dont on aurait évacuén la plupart des problèmes de syntaxe. Ce pseudo-code est susceptible de varier légèrement d’un livre (ou d’un enseignant) à un autre. C’est bien normal : le pseudo-code, encore une fois, est purement conventionnel ; aucune machine n’est censée le reconnaître.

 

I Les variables

1 Définition

Définition : Dès que l’on a besoin de stocker une information au cours d’un programme, on utilise une variable.

Pour employer une image, une variable est une boîte, que le programme (l’ordinateur) va repérer par une étiquette. Pour avoir accès au contenu de la boîte, il suffit de la désigner par son étiquette.

2 Déclaration des variables

La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et de lui coller une étiquette. C’est ce qu’on appelle la déclaration des variables.

Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon les langages. Toutefois, une règle absolue est qu’un nom de variable peut comporter des lettres et des chiffres, mais qu’il exclut la plupart des signes de ponctuation, en particulier les espaces. Un nom de variable correct commence également impérativement par une lettre. Quant au nombre maximal de signes

pour un nom de variable, il dépend du langage utilisé.

Une fois le nom choisi, il faut déterminer le type de la variable.On peut distinguer

3 types de variable (il y en a d’autres !) :

Type alphanumérique : du texte.

Type numérique : un nombre (entier, décimal, réel).

Type liste : ensemble de nombres ordonné.

 

Déclarer nouvelle variable (instruction AlgoBox)

Variables

n1, taux, x22 : nombre ; 3 variables de type nombre

prenom, nom : chaîne ; 2 variables de type chaîne de caractères

tab : liste ; 1 variable de type liste (tableau à une seule ligne)

 

Remarque : Chaque ligne se termine par un point-virgule.

Les variables d'un même type sont séparées par des virgules.

Le nom d'une variable commence par une lettre et ne contient ni espace, ni caractère accentué.

II – Le corps de l'algorithme : instructions basiques

Lecture et écriture d’une variable

Définition : Lire ou Entrer une variable signifie que l’utilisateur doit rentrer une valeur pour que le programme la lise.

Ecrire ou Afficher une variable signifie que le programme renvoie la valeur de la variable que le programme a trouvée.

1 – Lire une variable

Exemple: Ajouter LIRE variable (instruction AlgoBox)

...

Lire nom ; affiche une boîte de dialogue invitant l'utilisateur à taper la valeur de la variable nom.

Lire age ; affiche une boîte de dialogue invitant l'utilisateur à taper la valeur de la variable age.

...

Exemple: Ajouter LIRE variable (instruction AlgoBox)

Variables

age : nombre ;

nom : chaîne ;

Debut

Lire nom ; affiche une boîte de dialogue invitant l'utilisateur à taper la valeur de la variable nom.

Lire age ; affiche une boîte de dialogue invitant l'utilisateur à taper la valeur de la variable age.

Fin

Ecriture Cette  opération  permet de visualiser les informations placées en mémoire.

Lecture est une instruction qui permet de placer en mémoire les informations fournies par l'utilisateur.

 

2 Affectation d’une variable numérique

La seule chose qu’on puisse faire avec une variable, c’est l’affecter, c’est-à-dire lui attribuer une valeur.

 a ← 24

 Attribue la valeur 24 à la variable a

  24 → a

 

 a ← b

 Attribue la valeur de b à la variable a

  b → a

 

On peut aussi affecter une variable à l’aide d’une opération :

 

c ← a + 4

Attribue la valeur a + 4 à la variable c

a + 4 → a

 

On peut changer la valeur d’une variable avec elle-même :

 

b ← b +1

Incrémente (augmente) de 1 la variable b

b + 1 →b

2 – Affectation d'une valeur à une variable

Exemple: AFFECTER valeur à variable (instruction AlgoBox)

...

somme ← a + b ; L'algorithme affecte la valeur a + b à la variable somme

...

 

Exemple: AFFECTER valeur à variable (instruction AlgoBox)

Variables

a, b, somme : nombre ;

Debut

Lire a ;

Lire b ;

somme ← a + b ; L'algorithme affecte la valeur a + b à la variable somme

Fin

3 – Afficher à l'écran la valeur d'une variable

Exemple: Ajouter AFFICHER variable (instruction AlgoBox)

...

Afficher somme ; L'algorithme affiche à l'écran le contenu de la variable somme

...

Exemple: Ajouter AFFICHER variable (instruction AlgoBox)

Variables

a, b, somme : nombre ;

Debut

Lire a ;

Lire b ;

somme ← a + b ;

Afficher somme ; L'algorithme affiche à l'écran le contenu de la variable somme

Fin

 

4 – Afficher une chaîne de caractères

Exemple: Ajouter AFFICHER Message (instruction AlgoBox)

...

Afficher "La somme est : " ; L'algorithme affiche à l'écran la chaîne de caractères La somme est :

...

 

Exemple: Ajouter AFFICHER Message (instruction AlgoBox)

Variables

a, b, somme : nombre ;

Debut

Lire a ;

Lire b ;

somme ← a + b ;

Afficher"La somme est : " ; L'algorithme affiche à l'écran la chaîne de caractères La somme est :

Afficher somme ;

Fin

5 – Afficher un commentaire

Exemple: Commentaire (instruction AlgoBox)

...

// Voici un programme qui ne sert à rien !

...

 Exemple: Commentaire (instruction AlgoBox)

Variables

nom : chaîne ;

Debut

// Voici un programme qui ne sert à rien !

Lire nom ;

Fin

Les opérateurs numériques sont :

L’addition +

La soustraction −

La multiplication ∗

La division /

La puissance ˆ

Les opérateurs logiques sont :

ET intersection de deux ensembles

OU (non exclusif) union de deux ensembles

NON complémentaire d’un ensemble

 

 

 

Remarque : :

En informatique une variable ne peut prendre à un moment donné qu’une valeur et une seule, contrairement à une équation qui peut éventuellement avoir plusieurs solutions.

Souvent l’affectation d’une variable se note : B = A ou B := A qui veut dire que B prend la valeur A, qui est alors différent de A = B ou A := B où A prend la valeur de B.

 

III Les tests

Il y a deux formes pour un test : soit la forme complète, soit la forme simplifiée :

 

Forme complète

Forme simplifiée

Si condition alors

Instructions 1

Sinon

Instructions 2

FinSi

Si condition alors

Instructions Instructions

FinSi

Si la condition n’est pas vérifiée le programme ne fait rien.

La condition portant sur une variable peut être :

Une valeur à atteindre.

Une comparaison avec une autre variable (égalité, inégalité, non égalité).

 

 On peut aussi mettre un test qui se décompose en plusieurs conditions reliées par un opérateur logique :

condition 1 ET condition 2 : les deux conditions doivent être vérifiées en même temps.

condition 1 OU condition 2 : au moins l’une des deux conditions doit être vérifiée.

 

On peut aussi imbriquer un ou plusieurs autres tests à l’intérieur d’un test. On a alors le schéma suivant :

  Exemples d’algorithme

 Si condition 1 alors

Instructions 1

Sinon           Si condition 2 alors

 Instructions 2

Sinon

 Instructions 3

FinSi

FinSi

 

C’est par exemple le cas lorsque l’on

cherche les solutions de :

           Ax² + Bx + C = 0

On peut écrire le programme ci-contre.

On peut observer que l’on a d’abord

un "Si" simplifié pour tester si l’équationest du premier degré ou non.


Si cette condition est vérifiée alors le programme est terminé. On lui demande d’aller à la fin sans poursuivre le programme.


Ensuite, on a deux "Si" imbriqués pour tester les trois cas du signe de Δ.


On peut remarquer que lorsque l’on

veut afficher du texte, il faut mettre

celui-ci entre guillemets.

 

Variables : A, B, C, X, Y, D réels

Entrées et initialisation

Lire A, B, C

B² − 4AC → D

Traitement et sorties

si A = 0 alors

−C/B → X

Afficher X

Aller à fin du programme

fin

si Δ > 0 alors

(−B + √Δ)/2A → X

(−B − √Δ)/2A → Y

Afficher X, Y

sinon

si Δ = 0 alors

−B/2A → X

Afficher X

sinon

Afficher "Pas de Solution"

fin

Si … Alors …Sinon

Si condition Alors

Debut_Si

instructions

Fin_Si

Sinon

Debut_Sinon

instructions

Fin_Sinon

 

Les opérateurs de comparaison sont  =,  ,< ,> ,  ,  .

En langage Algobox, les opérateurs de comparaison s'écrivent ==, !=, <, >, <=, >=.

La condition peut comporter plusieurs tests.

Les opérateurs logiques reliant ces tests sont ET , OU , NON.

 ( condition1 ) ET ( condition2 ) vraie, signifie que condition1 est vraie et que condition2 est vraie.

 ( condition1 ) OU ( condition2 ) vraie, signifie que condition1 est vraie ou que condition2 est vraie ou que les 2 conditions sont vraies.

 NON ( condition1 ) vraie, signifie que condition1 est fausse.

 

IV Les boucles

1 Définition

Définition 8 : Une boucle est une structure répétitive ou itérative, c’est à dire que la boucle effectue n fois un calcul sous le contrôle d’une condition d’arrêt.

2 La boucle conditionnelle

La boucle conditionnelle obéit au schéma suivant :

Tant que condition

Instructions

FinTantque

 

 Avec ce type de boucle, on répète l'exécution d'un bloc d'instruction tant qu'une condition préalablement définie est satisfaite. Le test s'effectue en début de boucle, à chaque passage. Dans ce cas, l’expression utilisée est :

Tant que condition faire

Debut_Tant_que

instructions

Fin_Tant_que

  Exemples d’algorithme

   Dans le cas où la condition est toujours vérifiée, l’ordinateur tourne alors dans la boucle et n’en sort plus.
La « boucle infinie » est l’une des hantises les plus redoutées des programmeurs.

Cette faute de programmation est courante chez tout apprenti programmeur.

Exemple :

On veut trouver l’entier N pour que :

1 + 2 + · · · + N > 10P

On fait une boucle contrôlée par la

condition < 10P pour trouver la somme

des N premiers naturels en incrémentant

N pour compter le nombre de

boucles effectuées.

Si P = 3, on trouve N = 45

Si P = 6, on trouve N = 1414

 

Variables : N, P entiers

U réel

Entrées et initialisation

Lire P

0 → N

0 → U

Traitement

tant que U 6 10P faire

N + 1 → N

U + N → U

fin

Sorties : Afficher N

3 Boucler en comptant

Si l’on connaît à l’avance le nombre d’incrémentation (+1) ou décrémenté (–1) selon le cas, on a alors la structure suivante

:

Pour compteur = initial à final par valeur du pas

Instructions

FinPour

 

Pour var allant de valeur1 à valeur2 faire

Debut_Pour

instructions

Fin_Pour

 

Exemple :

On veut programmer K! "factorielle K" :

N = K! = 1 × 2 × 3 × · · · × K

On incrémente alors un compteur I (par

défaut le pas est égal à 1) allant de 2 à K

On obtient alors N = K!

Si K = 8, on trouve N = 40 320

Si K = 12, on trouve :

N = 479 001 600

 

Variables : K, I, N entiers

Entrées et initialisation

Lire K

1 → N

Traitement

pour I de 1 à K faire

N × I → N

fin

Sorties : Afficher N

 

4  Boucles itératives

Une boucle permet de répéter un ensemble d’instructions un nombre fixé de fois

 

Pour variable de d´ebut `a Fin

instructions 1

instructions 2

. . .

Fin Pour

 

Définition : Lorsque l’on doit répéter un nombre de fois connu à l’avance la même tâche, on utilise une boucle itérative de la forme « Pour.. allant de... à ».

Dans un algorithme, cette structure est codée de la façon suivante :

Pour variable allant de valeur_depart à valeur_fin faire

tâche 1

tâche 2

...

Fin pour

La variable utilisée dans la boucle est appelée compteur. À chaque passage dans la boucle, sa valeur est automatiquement augmentée de 1.

 

un algorithme ne dépend pas


    -du langagedans lequel il est implanté,
    -ni de la machinequi exécutera le programme correspondant.

 

 

.Algorithme en français

Codage dans un langage de programmation

Traduction automatique en langage machine (compilation)

Exécution

 

Les problèmes fondamentaux en algorithmique

Complexité

    -En combien de temps un algorithme va -t-il atteindre le résultat escompté?

    -De quel espace a-t-il besoin?

Calculabilité:

    -Existe-t-il des tâches pour lesquelles il n'existe aucun algorithme ?

    -Etantdonnée une tâche, peut-on dire s'il existe un algorithme qui la résolve ?

Correction

    -Peut-on être sûr qu'un algorithme réponde au problème pour lequel il a été conçu?

 Exemples d’algorithme

Exercices Algorithmes

Cours algorithme classe I

Cours algorithme classe II

Cours algorithme classe III

Cours algorithme classe IV

Cours algorithme classe S