a = b

publicité
Programmation Impérative
2006-2007
Licence Physique
Université Jean Monnet
Ruggero G. PENSA
Eléments d’algorithmique

Introduction

Variables

Opérateurs et expressions

Actions

Entrée/Sortie
Définitions




Algorithme
description d’un ensemble d’étapes (instructions) à effectuer
dans un ordre donné pour parvenir à un résultat
Langage de programmation
langage dans lequel un algorithme peut être traduit pour être
compris par l’ordinateur
Programme
description d’un algorithme dans un langage de programmation
Exemples


Guide de montage d’un meuble IKEA/Conforama…
Recette de cuisine
Types de langage

Pour vos algorithmes



Pour vos programmes




Langages évolués : C, Pascal, Visual Basic, Delphi, Java…
Utile à savoir


Langage naturel : français, anglais, italien…
Langages formels : pseudo-code
Langages assembleurs : mnémoniques
Langages machines : ensemble de bits
Langages interprétés : Visual Basic, Matlab, Pearl…
Langages compilés : C, Pascal, Cobol, ADA
Langage de programmation



Un langage de programmation est un langage formel
avec une syntaxe bien définie, qui sert à coder des
algorithmes et des structures de données dans une
forme compréhensible par l’ordinateur
Un programme informatique est constitué d’une
suite d’instructions (ou ordres) exécutées par
l’ordinateur pour accomplir une tâche particulière
Dans un langage il est important à la fois


Le contenu (le sens)
La forme (la syntaxe, la grammaire)
Méthodologie de programmation
Problème
TD
Analyse
Algorithme
Conception
Programme
(langage évolué)
Révision
Débogage
Traduction
(Compilation)
Programme
(langage machine)
Débogage
Exécution
Résultats
TP
Qualités d’un algorithme

Correct
bien faire ce qui est prévu

Complet
faire tout ce qui est prévu

Efficace
exécution rapide
avec peu d’occupation mémoire

Clair
doit être facilement lisible et évolutif
Introduction au formalisme


Un algorithme doit être compréhensible par plusieurs
personnes
Exemple
Entête
Nom : addDeuxEntiers
Rôle : Additionner deux entiers
Entrée : a, b : entier
Sortie : entier
Déclaration :
début
retourner (a + b)
fin
Corps
Variable

Entité qui contient une information

Possède un nom (identifiant)

Possède une valeur

Possède un type (qui caractérise l’ensemble des
valeurs que peut prendre la variable)

Est stockée dans la mémoire centrale de l’ordinateur
Variable

Analogie avec une armoire d’archive qui contiendrait
des tiroirs étiquetés

Armoire  Mémoire de l’ordinateur
Tiroirs  Variables
Etiquettes  Identifiants
Contenu  Valeur
Couleur  Type





Exemple : bleu pour les factures, rouge pour les bons de
commande…
Type d’une variable

Caractérise



L’ensemble des valeurs que peut prendre la variable
L’ensemble des actions que l’on peut effectuer sur une variable
Toute variable doit être déclarée avant son utilisation (partie
Déclaration) en lui associant un Type
Identifiant : Type

Exemples






age : Naturel
nom : Chaîne de Caractères
sexe : Caractère
moyenne : Réel
Une fois qu’un type est associé à une variable, on peut pas le
changer
Une fois qu’un type est associé à une variable le contenu de
cette variable doit être obligatoirement du même type
Types de données

Types simples



Dénombrables (nombre d’éléments fini)
Indénombrables (nombre d’éléments infini)
Types complexes

Exemples
- nombre complexe (partie réelle + partie
imaginaire)
- etudiant (nom + prénom + moyenne)
Types de données simples

Dénombrables

Booléen : { VRAI, FAUX }
les variables ne peuvent prendre que ces deux valeurs

Intervalle, ex, : [1..10]
les variables ne peuvent prendre que les valeurs entières
définies dans cet intervalle

Énuméré, ex : {rouge, vert, jaune}
les variables ne peuvent prendre que les valeurs explicitées

Caractères : table ASCII
Dénombrables

Exemples
célibataire : booléen
 mois : 1..12
 minuscules : ‘a’..‘z’
 jour : JoursDeLaSemaine
Déclaration :
type JourDeLaSemaine = énuméré
{lundi, mardi, mercredi, jeudi,
vendredi, samedi, dimanche}

Types de données simples

Indénombrables

Entier (positifs et négatifs)

Naturel (entiers positifs)

Réel

Chaîne de caractéres
Exemple ’’cours’’ ou ’’TD d’algorithmique’’
Indénombrables

Exemples

age : naturel

taille : réel

nom : chaîne de caractères
Constante

Variable dont la valeur est fixée tout au début de
l’algorithme et ne change pas lors de l’exécution de
l’algorithme

Possède




Un nom
Un type
Une valeur (fixe)
Exemples



Pi : Réel  3.14159
Euro : Réel  6.55957
Répétitions : Entier  10
Opérateurs, opérande et expression

Opérateur : symbole d’opération qui permet d’agir sur
des variables ou de faire des calculs

Opérande : entité (variable, constante ou expression)
utilisée par un opérateur

Expression : combinaisons d’opérateur(s) et
d’opérande(s), evaluée durant l’exécution de
l’algorithme.
Possède


une valeur (son interprétation)
un type
Opérateur, opérande et expression

Exemple : a + b

a : opérande gauche
+ : opérateur
b : opérande droite
a + b : expression





Si a vaut 2 et b vaut 3, l’expression a + b vaut 5
Si a et b sont des entiers, l’expression a + b est de
type entier
Type d’opérateurs

Unaire : un seul opérande
(Exemple : non)

Binaire : deux opérandes
(Exemple : +)

L’expression possède un seul type
 dans une expression chaque opérateur doit être
associé au type de l’expression
(Exemple : "J’ai" + 2 + "chats")

Seule exception tolérée : types arithmétiques
(Exemple : 2 + 3.5)
Signification des opérateurs

Peut changer en fonction du type des opérandes

Par exemple

opérateur + avec des entiers aura pour sens l'addition
2 + 3 vaut 5

Opérateur + avec des chaînes de caractères aura pour sens
la concaténation
"bonjour" + " tout le monde" vaut
"bonjour tout le monde"
Opérateurs sur les booléens

Quatre opérateurs
a
non a
vrai
faux
faux
vrai
a
b
a et b
vrai
vrai
vrai
faux
vrai
faux
vrai
faux
faux
faux
faux
faux
a
b
a ou b
a
b
a ouExclusif b
vrai
vrai
vrai
vrai
vrai
faux
faux
vrai
vrai
faux
vrai
vrai
vrai
faux
vrai
vrai
faux
vrai
faux
faux
faux
faux
faux
faux
Opérateurs sur les énumérés

Trois opérateurs




succ : permet d'obtenir le successeur
pred : permet d'obtenir le prédecesseur
ord : permet d'obtenir le naturel de correspondant à la
position de l'élément dans la liste de l'énuméré
Exemples
type JoursDeLaSemaine



succ Lundi vaut Mardi
succ Dimanche vaut Lundi
pred Mardi vaut Lundi
pred Lundi vaut Dimanche
ord Lundi vaut 0
ord Dimanche vaut 6
Opérateurs sur les caractères

Quatre opérateurs (les trois des énumérés + car)

On considère la position dans la table ASCII

Exemples





ord 'A' vaut 65
car 65 vaut 'A'
pred 'A' vaut '@'
succ 'b' vaut 'c'
Cf. man ascii
Opérateurs arithmetiques

Pour les entiers : +, -, *, /
Pour les réels : +, -, *, /
Pour les naturels et les entières :
div : division entière
mod : reste de la division

Exemples




11 div 2 vaut 5
11 mod 2 vaut 1
Opérateurs sur les chaînes de
caractères

Concatenation : +

Exemple :
"bonjour" + " tout le monde" vaut "bonjour
tout le monde"
Opérateurs de comparaison

= : opérateur d'égalité
on le retrouve chez tous les types simples et permet
de savoir si deux opérandes sont égales

≠ : opérateur d'inégalité

<, >, ≤, ≥ : opérateurs de comparaisons pour les types
possédant un ordre

Une expression de comparaison contenant un
opérateur de comparaisons est de type booléen
Exemples


12 < 14 vaut VRAI
"marco" = "zizou" vaut FAUX
Priorité des opérateurs

Tout comme en arithmétique, les opérateurs ont des
priorités
Exemple : * / + - (du plus prioritaire au moins
prioritaire)

Pour les booléen :
non, et, ouExclusif, ou

En cas de doute : utiliser les parenthèses
Actions sur les variables

Lecture d'une variable  obtenir son contenu


Il suffit de nommer la variable
Exemple : écrire(a)
Écriture d'une variable  affecter un (nouveau)
contenu à la variable


en utilisant la procédure lire (a)
en utilisant l'opérateur d'affectation ""
Syntaxe : identifiant  expression
l'expression ne contient pas d'opérateur d'affectation
Opérateur d'affectation

Qu'est-ce que ça veut dire c  a + b ?






On prend la valeur contenue dans la variable a
On prend la valeur contenue dans la variable b
On additionne ces deux valeurs
On met ce résultat dans la variable c
Si c avait auparavant une valeur, cette dernière est perdue
Exemple :
-x  1
-x  x + 1
(on affecte la valeur 1 à la variable x)
(on ajoute 1 à la valeur contenue dans x, on
stocke le résultat dans x)
- Résultat : incrémentation de la variable x d'une unité (x vaut 2)
Les entrées/sorties

Un algorithme a souvent des interactions avec l'utilisateur. Il peut



Affichage



Afficher un résultat (texte ou contenu d'une variable)
Demander à l'utilisateur de saisir une information afin de la stocker
dans une variable
Commande écrire suivie entre parenthèses de la chaîne de
caractères entre guillemets et/ou des variables de type simple à
afficher (séparées par des virgules)
Exemple :
écrire("La valeur de la variable prix est ", prix,
" Euros")
Saisie


Commande lire suivie entre parenthèses de la variable de type
simple qui va recevoir la valeur saisie par l'utilisateur
Exemple : lire(b)
Exemple d'algorithme
Nom : euroVersFranc
Rôle : Convertisseur des sommes en euros vers le franc, avec sisie de la
somme en euro et affichage de la somme en franc.
Entrée : Sortie : Déclaration :
constante tauxConversion : Réel  6.55957
variable valeurEnEuro, valeurEnFranc : Réel
début
écrire("Entrer votre valeur en euro : ")
lire(valeurEnEuro)
valeurEnFranc  valeurEnEuro * tauxConversion
écrire(valeurEnEuro, "euros = ", valeurEnFranc, " Fra")
fin
Langage C

Introduction

Variables

Opérateurs et expressions

Instructions

Entrée/Sortie
Histoire

Développé en 1971 par Dennis Ritchie au sein des
laboratoires Bell pour écrire le système UNIX

Spécifications publiées en 1978 dans l'ouvrage de
Kerninghan et Ritchie : "The C Programming
Language" (K&R C)

Norme AINSI C publiée en 1989 (ANSI C)
Compilation
compilateur
éditeur de liens
.c
.s
fichier.c
.h
.o
fichier.o
assembleur
fichier exécutable
gcc –o exécutable source.c
Compilation 2
compilateur
vert.c
vert.o
.c
.s
éditeur de liens
.o
common.h
.h
assembleur
.s
.o
bleu.c
bleu.o
.c
fichier exécutable
Séparateurs et commentaires







Espace, tab et retour à la ligne sont ignorées (mais
utiles pour la mise en forme du fichier .c)
/* */ : commentaires (ignorés)
/* ceci est un commentaire
sur plusieurs lignes */
; termine une déclaration ou une instruction simple
, sépare deux éléments dans une liste
(…) liste d'arguments
{…} bloc ou liste d'initialisations
[…] dimension/sélection d'élements de tableaux
Structure d'un programme C
#include <stdio.h>
prépocesseur
… ;
variables
… ;
fonctions
int main(int argc, char*argv[])
fonction principale
{
début du bloc
… ;
variables
… ;
corps du programme
}
fin du bloc
Directives du procésseur
Commencent toujours par #
Exemples : #include
#define

Quatre utilisations principales

1.
2.
3.
4.
Inclusion de fichiers
Constantes symboliques
Macros
Compilation conditionnelle
#ifdef
Variables

En C les variables sont caractérisées par

un identifiant

une portée

un type

une valeur
Identifiants

L'identifiant d'une variable est son nom

En C il est composé d'une suite de caractères parmi




les lettres minuscules
les lettres majuscules
les chiffres
"_" (underscore)

Le premier caractère est toujours "_" ou une lettre

Exemples (nom corrects)
x
x2
_x
LePoint

Exemples (non incorrects)
2x non' le.point
c_est_bon
hara-kiri
Identifiants 2


Distinction entre majuscules et minuscules
toto ≠ Toto ≠ TOTO
Les mots réservés du langage C ne sont pas
redéfinissables par le programmeur
int
char
float
double
asm
void
long
short
signed
default
unsigned enum
struct
union
typedef
sizeof
const
auto
extern
register
static
volatile
goto
return
break
continue
if
else
for
do
while
switch
case
Déclaration

On prévient le compilateur en début de bloc que l'on
va utiliser une variable et le type d'éléments qui y
seront stockés

Forme : <type> <identifiant>
Exemple : int ma_variable

Affectation

On stocke une valeur dans la variable

Forme : <identifiant> = <contenu> ;
Exemple : a = 3 ; (si a est une variable entière)

Initialisation

Déclaration + Affectation

Forme : <type> <identifiant> = <contenu> ;
Exemple : int a = 3 ; (si a est une variable
èntiere)

Utilisation

On récupère la valeur qui est stockée dans la variable

Forme : <identifiant>
Exemple : a + 2.5 (si a est une variable réelle)
Portée

La portée d'une variable définit où la variable peut être
utilisée

En C une variable peut être utilisée à partir du moment
où elle a été définie et jusqu'à la fin du bloc de
déclaration
Portée Exemple

Variable a
#include…
int a ;
… ;
void test(int b)
{
if (a > b)
{
int c = b ;
b = a ;
a = b ;
}
ecrire(b) ;
}
void test2…
Portée Exemple

Variable b
#include…
int a ;
… ;
void test(int b)
{
if (a > b)
{
int c = b ;
b = a ;
a = b ;
}
ecrire(b) ;
}
void test2…
Portée Exemple

Variable c
#include…
int a ;
… ;
void test(int b)
{
if (a > b)
{
int c = b ;
b = a ;
a = b ;
}
ecrire(b) ;
}
void test2…
Types de base








void : type vide
char : 'a' … 'b' … 'B' … '\n' … '\t' … '\014'
int : 120 … -10 … 0123 … 0xfc … 0xFC
float : 1.23 … -1.23 … 1.2345e+12 … 1.
double : 1.23 … -1.23 … 1.23456789012345e+12
pas de type booléen en C  Utiliser les entier
FAUX : 0, VRAI : tous les autres valeurs
pas de type intervalle
Le type int possède 3 sous-types
short, long et unsigned
Constantes

Les constantes sont des variables dont la valeur ne
peut pas changer

Elles se déclarent comme des variables et sont
affectées définitivement à ce moment là

Elles sont précédées du mot-clef const
Exemples




const double
Pi = 3.141592654 ;
const int BufSize = 1024 ;
const int VRAI = 1, FAUX = 0 ;
Elles ne peuvent pas être modifiées
Expressions



Une expression est un ensemble d'une ou de
plusieurs opérations
Une expression a une valeur
Types d'opérations :







arithmétiques
logiques
affectation et in/de-crémentation
relations
conversion de type
L'ordre d'évaluation dans une expression est
déterminé par des règles de priorité et d'associativité
Le type de donné du résultat est déterminé par le type
des opérandes
Opérateurs arithmétiques

Pour les entiers et les réels
Opérateur
Fonction
Usage
+
addition (binaire)
expr + expr + …
-
soustraction (unaire)
-expr
-
soustraction (binaire) expr – expr
*
multiplication
(binaire)
expr * expr
/
division (binaire)
expr / expr
%
modulo (binaire)
expr % expr
Opérateur d'affectation

Permettent de donner une valeur à une variable
int i, j ;
i = 0 ;
j=1;

Attention : retourne la valeur affectée
int x, y ;
x = y = -1 ; /* se lit : x = (y = -1) ; */

Combinaison possible avec un opérateur arithmétique
a = a + 2 ;

a += 2 ;
y = y / 4 ;

y /= 4 ;
x = x * (y + z) 
x *= y + z ;
Opérateurs d'in/de-crémentation

L'opérateur ++ et l'opérateur – fournissent un
moyen efficace pour compacter les écritures





x++ ;
x-- ;
++x ;
--x ;
post-incrémentation
post-décrémentation
pré-incrémentation
pré-décrémentation
Signification
x++ ;
équivaut à x = x + 1 ;
x-- ;
équivaut à x = x – 1 ;
Opérateurs relationnels


Opérateur
Fonction
Usage
==
égalité
expr == expr
!=
inégalité
expr != expr
>
supérieur
expr > expr
>=
supérieur ou égal
expr >= expr
<
inférieur
expr < expr
<=
inférieur ou égal
expr <= expr
!
non logique
!expr
&&
et logique
expr && expr
||
ou logique
expr || expr
Le résultat est une expression booléenne vraie ou fausse
Lors de l'évaluation : arrêt de l'évaluation dès que la première
opérande est fausse, dans le cas de &&, ou vraie, dans le cas de ||
Instruction

Il existe deux types d'instruction

Instructions simples terminées par un ';'
Exemple : a = 4 ; b++ ;

Instructions composées utilisant un bloc {…}
Instructions conditionnelles
 Instructions d'itération

Instruction conditionnelle (exemple)
if (a < b)
{
c = b – a ;
ecrire("Négatif") ;
}
else
{
c = a – b ;
ecrire("Positif ou zéro") ;
}
Instructions d'itération
while (a < b)
{
a++ ;
b-- ;
}
for (i=1 ; i <= 10 ; i++)
{
somme += i ;
produit *= i;
}
Entrées

!!!
Entrées : scanf()
Variable
instruction
int i ;
scanf("%i", &i) ;
double d ;
scanf("%lf", &d) ;
float f ;
scanf("%f", &f) ;
char c ;
scanf("%c", &c) ;
Sorties

Entrées : printf()
Variable
instruction
int i ;
printf("%i", i) ;
printf("%d", i) ;
printf("%x", i) ; héxadecimal
double d ;
float f ;
printf("%lf", d) ;
printf("%f", f) ;
printf("%e", f) ; exponentielle
char c ;
printf("%c", c) ;
Exemple d'algorithme
Nom : euroVersFranc
Rôle : Convertisseur des sommes en euros vers le franc, avec sisie de la
somme en euro et affichage de la somme en franc.
Entrée : Sortie : Déclaration :
constante tauxConversion : Réel  6.55957
variable valeurEnEuro, valeurEnFranc : Réel
début
écrire("Entrer votre valeur en euro : ")
lire(valeurEnEuro)
valeurEnFranc  valeurEnEuro * tauxConversion
écrire(valeurEnEuro, "euros = ", valeurEnFranc, " Fra")
fin
Traduction en Langage C
#include <stdio.h>
const float tauxDeConversion = 6.55957 ;
int main(int argc, char *argv[])
{
float valeurEnEuro, valeurEnFranc;
printf("Entrer votre valeur en euros :") ;
scanf("%f", &valeurEnEuros) ;
valeurEnFranc = valeurEnEuro * tauxDeConversion ;
printf("%f euros = %f Fra\n", valeurEnEuros,
valeurEnFranc) ;
return 0 ;
}
Récapitulatif
Langage algorithmique
Pseudo-code
Langage de programmation
Langage C
vide
booléen
intervalle
entier
réel
caractère
Booléen
[1..10]
Entier
Réel
Caractère
void
int
float / double
char
Variables Opérateurs
déclaration
affectation
utilisation
portée
a : Entier
a  3
a
int a ;
a = 3 ;
a
incrémentation
décrémentation
arithmétique
logique
relation
a  a + 1
a  a – 1
+ - / * mod et +. -. *. /.
non et ou
= ≠ < > ≤ ≥
a++ ;
a-- ;
+ - / * %
! && ||
== != < > <= >=
E/S
Entrée
Sortie
lire
écrire
scanf
printf
Types
Instruction
Depuis la déclaration jusqu'à la fin du bloc de déclaration
Téléchargement