Chapitre 5 : Un langage algorithmique

Le langage mis en place servira à manipuler des données numériques
- Demande une valeur à l'utilisateur
- Ranger une valeur en mémoire
- Chercher une valeur en mémoire
- Evaluer une expression à partir de valeurs stockées en mémoire
- Afficher une valeur se trouvant en mémoire
- Comparer des valeurs

5.1 Structure générale d'un algorithme

Lorsqu'on écrit un algorithme, il faut respecter 2 contraintes qui sont :
- La syntaxe : Règles qui permettent de faire des phrases correctes
- La sémantique : Sens des phrases

Syntaxe :
Algorithme Nom_de_l_algorithme
Déclaration 
 liste_de_variables	type_de_variable
Début 
	instructions...
Fin

5.2 Notions de variables

Une variable sert à stocker l'information traitée par un algorithme

5.2.1 Attributs d'une variable :

	- Identificateur  nom qui sert à repérer la variable
	- Type : format des données qu'elle contient
	- Valeur
	- (Adresse : dans le cas d'un langage de programmation spécial)

5.2.2 Types d'une variables

5 types de base :
	- Les entiers
	- Les réels
	- Les booléens (2 valeurs : Vrai ou Faux)
	- Le caractère
	- Les chaînes de caractères

Exemple :
Algorithme patate			P = Nombre de patates à éplucher
Déclaration				N = Nombre de patates à éplucher
	P,N des entiers

5.2.3 : Déclaration des variables

Nécessité de déclarer des variables :
	- Dans un langage algorithmique : 
		- Assurer la cohérence du type des variables
	- Dans un langage de programmation : 
		- Assurer la cohérence du type des variables
		- Stocker les variables en mémoire

5.2.4 Valeur d'une variable

Dans la partie déclaration, les variables n'ont pas de valeur. Attribuer une valeur à une variable est une instruction. Initialiser une variable, c'est lui donner une première valeur

5.2.5 Rôle d'une variable

Une variable peut être :
	- Donnée : variable nécessaire pour faire fonctionner un algorithme
				ex : P = nombre de patates
	- Résultat : résultat d'un calcul
	- Auxiliaire : qui sert à stocker des informations temporaires, à faire des calculs ou à faire fonctionner des structures de contrôle

5.3 Opérations élémentaires et expressions

5.3.1 Expressions arithmétiques

- Opérations binaires
	- entiers ou rées : + , - , * , /
	- entiers div, mod :
		a div b : quotient euclidien de a par b
		a mod b : reste de la division euclidienne de a par b
Une expression arithmétique est soit :
- Une constante numérique
- Une variable numéri	que
- Une combinaison des précédentes avec des opérateurs et des parenthèses
	ex : (a+b)*c

5.3.2 Expressions booléennes

- Opérateurs relationnels
	=
	<>
	>
	<
	>=
	<=
- Opérateurs booléens
	Et, Ou, Non

Une expression booléenne est :
	- une constante booléenne : (vrai ou faux)
	- une variable booléenne
	- des expressions arithmétiques combinées à des opérateurs relationnels
	- des expressions booléennes combinées à des opérateurs booléens
exemples : 
a, b des entiers
c, d des booléens
- a=b : expression booléenne dont la valeur est vraie si a=b et faux si a<>b
- p et q 
- p et non q
- (a=b) ou q

5.4 Affectation

C'est l'instruction qui permet de donner une valeur à une variable
2 façons :
- de manière externe : c'est par exemple un utilisateur qui donne la valeur
	syntaxe : demander_la_valeur_pour  variable
- de manière interne : on évalue une expression et on donn cette valeur à la variable
	syntaxe : affecter_la_valeur_de expression à variable

Exemple :

	Algorithme Patate1
	Déclaration
		P, N des entiers
	Début
		demander_une_valeur_pour P
		affecter_la_valeur_de 0 à N
		...
		affecter_la_valeur_de N+1 à N
		affecter_la_valeur_de P-1 à P
		...
	Fin

	Algorithme estpair
	Déclaration
		a, b des entiers
		pair un booléen
	Début
		Demander_une_valeur_pour a
		Affecter_la_valeur_de ( a mod 2 ) à b
		Affecter_la_valeur_de  (b=0) à pair
	Fin	

5.5 Edition

L'édition d'une expression c'est l'affichage de la valeur de cette expression.
Syntaxe : montrer_la_valeur_de expression

Algorithme Somme
Déclaration
	a, b, c des entiers
Début
	demander_une_valeur_pour a
	demander_une_valeur_pour b
	affecter_la_valeur_de a+b à c
	montrer_la_valeur_de c
Fin

5.6 Déroulement d'un algorithme

3 instructions de base
- affectation externe
- affectation interne
- édition
3 structures de contrôle
- séquence d'instruction
- sélection
- itération

5.7 Séquence d'instructions

Suite d'instructions, les instructions sont exécutées dans l'ordre l'une après l'autre

5.8 Sélection

2 formes
	1) Complète

Si (expression booléenne) alors
	séquence d'instructions 1
sinon
	séquence d'instructions 2
finsi

	2) Incomplète

Si (expression booléenne) alors
	séquence d'instructions
Finsi

Exemples :
Algorithme maximum_de_2_nombres
Déclaration
	x, y, max des entiers
	Début
		Demander_une_valeur_pour x
		Demander_une_valeur_pour y
	Si (x>=y) alors
		affecter_la_valeur_de x à max
	sinon
		affecter_la valeur_de y à max
	finsi
	montrer_la_valeur_de max
fin

Algorithme équation_du_premier_degré ( ax+b=0 )
Déclaration
	a, b, x des réels
Début
	demander_une_valeur_pour a
	demander_une_valeur_pour b
	Si (a=0) alors
		Si (b=0) alors
			montrer_la_valeur_de "tout réel est solution"
		sinon
			montrer_la_valeur_de "Pas de solution"
		finsi
	sinon
		affecter_la_valeur_de -b/a à x
		montrer_la_valeur_de x
	finsi
fin

5.9 l'itération

Syntaxe : 
tant que (expression booléenne) faire
	séquence d'instrucions
fintq

- Quelques points importants
- Pour commencer cette boucle il faut pouvoir évaluer l'expression booléenne si l'évaluation donné est fausse on n'entre pas dans la boucle
- il est nécessaire que la séquence d'instructions modifie la valeur de l'expressio booléenne sinon boucle infinie

Exemples d'iérations
1) Faire l'algorithme qui calcule la somme de 2 nombres choisis par l'utilisateur
Test d'arrêt : les deux nombres choisis sont 0

Algorithme somme
Déclaration
	a, b des entiers
Début
	demander_une_valeur_pour a
	demander_une_valeur_pour b
	tant que ((a<>0) ou (b<>0)) faire
		montrer_la_valeur_de a+b
		demander_une_valeur_pour a
		demander_une_valeur_pour b
	fintq
Fin

2) Algorithme qui affiche les nombres pairs inférieurs à 50

Algorithme nombres_pairs_inférieur_à_50
Déclaration
	e un entier
Début
	affecter_la_valeur_de 0 à e
	tant que (e<50) faire
		(
		montrer_la_valeur_de e
		affecter_la_valeur de e+2 à e
		)
		ou
		(		
		Si (e mod 2 = 0) alors
			montrer_la_valeur_de e
		finsi
		affecter_la_valeur_de e+1 à e
		)
	finqt
Fin
Tables des valeurs :
C'est une table qui suit la valeur de toutes les variables contenues dans un algorithme

ex : table des valeurs pour algorithme précédent (50 remplacer par 2)