Академический Документы
Профессиональный Документы
Культура Документы
Universit Mohammed Premier Ecole nationale des sciences appliques dAl Hoceima (ENSAH)
Algorithmique et programmation
Prpar et prsent par Mr. Ouazzani Chahdi
08/03/2014
08/03/2014
1.1-Les constantes
Une constante est une donne fixe qui ne varie pas durant lexcution dun algorithme. Elle se caractrise par son nom et sa valeur (fixe).
1.2-Les variables
Une variable est un objet dont le contenu peut tre modifi par une action durant lexcution de lalgorithme. Elle se caractrise par son nom et son type.
3 08/03/2014
Exemple :
On considre un algorithme qui permet de calculer la surface dun disque en utilisant la relation suivante : S = r, on a alors :
Les variables sont : S qui reprsente la surface et r qui reprsente le
08/03/2014
lensemble .
Rel : une variable de ce type prend ses valeurs dans
lensemble . Remarque : pour les nombres Rels, la virgule est reprsente par un point(exemple : 3.14, 0.875, 17.5).
5 08/03/2014
Remarque :
En algorithmique un caractre est dlimit par un double quottes , et une chane de caractres est note entre guillemets " ".
6 08/03/2014
08/03/2014
Exemples :
Caractre : a, 0, ?, (, %. Chane : "Ahmed", "0678980945", "37aR0sF",
"100$ - 20%".
08/03/2014
08/03/2014
08/03/2014
2.1- Len-tte
Constitu du mot Algorithme suivi dun nom identifiant lalgorithme.
Syntaxe : Algorithme Nom_Algorithme
Exemples :
Variable x : Rel Variable c : Caractre Variable test: Logique
10 08/03/2014
08/03/2014
Remarque:
On peut dclarer plusieurs constantes et plusieurs variables en utilisant les syntaxes suivantes : Constante Nom_Constante1 = Valeur1 Nom_Constante2 = Valeur2
Variable
En-tte
Constante Variable
DEBUT FIN
Bloc de dclaration
Corps de lalgorithme
Remarque:
Dans le cas o lalgorithme nutilise ni variables ni constantes, alors on peut omettre le bloc de dclaration.
12 08/03/2014
08/03/2014
gnralement, un algorithme reoit des donnes en entre et fourni des rsultats en sortie.
Celui-ci est destin tre implanter dans un ordinateur
en tant que programme. Donc utilisera les units dentre/sortie qui sont gnralement le clavier et lcran.
Alors il doit disposer des instructions qui lui permettent de
13
08/03/2014
Algorithme
Implmentation
Programme
14
08/03/2014
08/03/2014
lordinateur va lire deux chanes de caractres et les enregistrer respectivement dans les variables nom et prenom, et va lire aussi une valeur numrique qui lenregistre dans la variable age.
15 08/03/2014
Les chanes de caractres sont dlimites par des guillemets . Et les autres expressions scrivent comme telles. Les objets sont spars par une virgule.
08/03/2014
08/03/2014
Exemples :
Ecrire("Bonjour
tout
le
monde"):
lordinateur
ge
est
",
age,
"ans"):
affiche lcran le message La somme est 7 (avec a et b deux variables numriques dont les valeurs sont respectivement 3 et
17
4).
08/03/2014
Exercice :
Ecrire un algorithme qui demande lutilisateur son ge et ensuite laffiche lcran en utilisant un message appropri. Solution : Algorithme Demande_Age Variable age : Entier Dbut Ecrire("Donner votre age : ") Lire(age) Ecrire("votre ge est ", age, "ans") Fin
Simulation d'excution
18 08/03/2014
08/03/2014
Ahmed
Y A + X : La variable Y reoit le rsultat de lexpression A+X.
19 08/03/2014
excute. Il peut tre une valeur, une constante, une fonction, etc.
Un oprateur est un signe qui relie deux oprandes, pour produire
un rsultat.
Les types doprateurs et des oprandes dpendent de la nature de
10
08/03/2014
3.3.1- Les expressions arithmtiques Une expression arithmtique est quivalente une valeur de type numrique, et on a :
Les oprandes sont des valeurs numriques, des variables de type
numrique ou des constantes numriques. Et les oprateurs sont les oprateurs arithmtiques et unaires :
+ : addition - : soustraction * : multiplication / : division relle ^ : puissance Mod : modulo Div : division entire Unaire : + et -
entiers.
Les oprateurs unaires servent designer le signe dun oprande.
Exemples:
21
3.3.2- Les expressions logiques Une expression logique est quivalente une valeur de type Logique, et on a :
Les oprandes sont des valeurs, des variables ou des
constantes.
Pour les oprateurs, il existe deux types :
Les oprateurs de comparaison sont utiliss dans les expressions logiques simples, et les oprateurs logiques sont utiliss dans les expressions logiques composes.
Quest ce quune expression logique simple et quest ce quune expression logique compose ?
22 08/03/2014
11
08/03/2014
Une expression logique simple est une comparaison entre deux oprandes, deux expressions ou entre oprande et expression en utilisant les oprateurs de comparaison suivants :
= : gal < : infrieur > : suprieur <= : infrieur ou gal >= : suprieur ou gal <> : diffrent (A + B) <> C/2 c <= Z
Exemples:
A < 3 B >= (A * 7)
Remarques:
Les objets dune comparaison doivent tres du mme type. La comparaison entre les objets de type alphanumrique seffectue en
fonction de lordre alphabtique des caractres, cet ordre est tabli selon le code ASCII.
23 08/03/2014
Une expression logique compose est la compose dexpressions logiques simples en utilisant les oprateurs logique ET, OU et NON et ventuellement des parenthses :
Exp1 ET Exp2 : le rsultat est vrai si Exp1 et Exp2 sont
vraies. Exp1 OU Exp2 : le rsultat est vrai si lune des Exp1 ou Exp2 est vraie. NON Exp : le rsultat est vrai si lexpression Exp est fausse. Exemples :
(A < 3) ET (B > 7)
12
08/03/2014
utilise un seul oprateur, cest loprateur de concatnation &, il permet de concatner (ou fusionner) deux caractres, deux chanes de caractre, ou caractre et chane de caractres.
Exemples :
ch1 "07ABL" ch2 "XXY" ch3 ch1 & ch2 : la variable ch3 reoit la chane de
caractres "07ABLXXY"
25 08/03/2014
priorit
1 2 3 4 5 6 7
OU
8
9
13
08/03/2014
Exemple : On considre lalgorithme suivant : Algorithme Affectation Constante n = 1 Variable X, Y : Rel; T1, T2 : Logique Dbut X -8/2* 3+n Y -8/2*(3+n) T1 n<7 OU X = 2 ET NON(Y >= 10) T2 (n<7 OU X = 2) ET NON(Y >= 10) Fin Question : Evaluez ces expressions et dterminez les valeurs des variables X, Y, T1, T2.
27 08/03/2014
Y -8/2*(3 + n) -8 -4 * -16 4
14
08/03/2014
Type dargument
Entier Entier
Description
Quotient de la division euclidienne. Reste de la division euclidienne.
Abs(x)
Ent(x) Exp(x) Racine(x) Ln(x), Log(x) Sin(x), Cos(x), Tan(x) Arrondi(x)
29
Rel
Rel Rel Rel Rel Rel Rel Rel
Valeur absolue.
Partie entire. Exponentielle. Racine carre. Logarithme. Sinus, Cosinus et tangente. Arrondi l'entier le plus proche. Entier pseudo-alatoire dans08/03/2014 [0, x[.
Alatoire(x)
Exercice : Ecrire un algorithme qui permet de calculer la surface dun disque en utilisant la relation suivante : S = r. Solution : Algorithme Surface_Disque Constante Pi = 3.14 Variable S, r : Rel Dbut Ecrire("Donnez le rayon : ") Lire(r) S Pi*r^2 Ecrire("La surface est : ", S) Fin
Simulation d'excution
30
08/03/2014
15
08/03/2014
16
08/03/2014
Rle
Spare un identifient de son type dans une liste Encadrent des expressions Symboles du composant tableau Accs un composant agrgat Spare les lments dune liste Spare les lments de dclaration Encadrent les caractres Encadrent les chanes de caractres Spare deux mots en labsence dautre sparateurs.
08/03/2014
et
17
08/03/2014
machines. Par exemple, sur PC on a: Type entier Plage des valeurs Nombre doctets short -32768 -32768 2 int -32768 -32768 2 long -2147483648 2147483648 4
35 08/03/2014
d'un type de variable entire permet de dclarer des variables de type entier naturel (non sign), les plages des variables sont dplaces comme suit (sur PC) : Type entier Plage des valeurs Nombre doctets unsigned short 0 65535 2 unsigned int 0 65535 2 unsigned long 0 4294967295 4
36
08/03/2014
18
08/03/2014
Type entier Plage des valeurs float 3.4 10-38 3.4 1038 double 1.7 10-308 1.7 10308 Long double 3.4 10-4932 3.4 104932
37
Nombre doctets 4 8 10
08/03/2014
un espace mmoire dun seul octet. Une variable de type char contient une valeur entire qui correspond au code ASCII dun caractre unique. Ce caractre est dtermin par le compilateur en interprtant ce code ASCII. En fait, la norme prvoit deux types char : signed char et unsigned char : Type entier signed char Plage des valeurs -128 128 Nombre doctets 1
unsigned char
0 255
Remarque : le type char correspond soit lun soit lautre, suivant le compilateur utilis.
38 08/03/2014
19
08/03/2014
pour cela C se contente de reprsenter la valeur FAUX par 0 et la valeur VRAI par une valeur non nulle.
Pour une variable logique en C, le plus naturel cest dutiliser une
variable de type entier int. Remarque : Les oprations logiques en C retournent toujours la valeur 0 pour FAUX et la valeur 1 pour VRAI.
39
08/03/2014
}
40 08/03/2014
20
08/03/2014
{
short n; float x; printf("La taille de la variable n est %d et celle de x est %d \n", sizeof(n), sizeof(x)); printf("La taille du type int est %d et celle de float est %d \n", sizeof(short), sizeof(float)); }
41 08/03/2014
Bloc de dclaration
[Etapes et Instructions]
Corps du programme
}
42
Fin du programme
08/03/2014
21
08/03/2014
La deuxime dclaration permet de donner des valeurs initiales aux variables dclares.
Syntaxe de dclaration des constantes :
une constante et d'utiliser ce nom tout au long du programme. Syntaxe : #define SYMBOLE valeur Exemple
#define PI 3.14 Lusage est de mettre les noms des symboles en #define VRAI 1 majuscule #define FAUX 0 void main() { typedef int booleen; booleen test1 = VRAI; VRAI et FAUX seront remplacs par leurs valeurs booleen test2 = FAUX; avant la compilation }
44 08/03/2014
22
08/03/2014
break
case char const continue
do
double else enum extern
for
goto if int long
return
short signed sizeof static
switch
typedef union unsigned void
while
Rle
Encadrent des expressions
Symboles du composant tableau Dlimiter un bloc dinstructions, initialiser un tableau. Accs un composant agrgat Spare les lments dune liste Spare les instructions Encadrent les caractres
"" guillemets
espace
46
23
08/03/2014
du programme et qui nont aucune incidence sur sa compilation. Il existe deux types de commentaires :
Les commentaires dans une seule ligne introduit par //. Les commentaires sur plusieurs lignes introduit par /* et */.
Exemple:
void main() { int n; // commentaire sur une seule ligne /* commentaire sur plusieurs lignes */ printf("Commentaires"); }
47 08/03/2014
ligne peut comporter plusieurs instructions et quune instruction peut stendre sur plusieurs lignes.
Mais il est prfrable dacqurir les bonnes habitudes de mise en
partie algorithmique doivent tre respectes dans le langage C. Les constantes et les identificateurs ne doivent pas tre spares par un espace ou crites sur deux lignes. Toutes les instructions du langage C se terminent par un point-virgule.
48 08/03/2014
24
08/03/2014
En Langage C == != ! && || =
* / + Nexiste pas
%
Nexiste pas
Remarques:
Loprateur Div na pas dquivalence en C, mais la division
euclidienne existe. En effet, en C le quotient de deux entier fourni un entier. Par exemple si n et m sont de type entier de valeurs respectivement 7 et 2, alors n/m vaut 3.
Pour calculer la puissance dun nombre en C on utilise la
fonction mathmatique pow(x, n), cette fonction prend en paramtre deux valeurs relles x et la puissance n et retourne une valeur relle.
Loprateur modulo % nest dfini que sur les types entiers.
50 08/03/2014
25
08/03/2014
dincrmentation
et
de
En
C ces instructions peuvent tre raliser par les oprateurs(unaires) dincrmentation ++ et de dcrmentation --. Ces oprateurs sont utiliss de deux manires :
Placs gauche de loprande (++i, --i) : la valeur de i sera
incrmente (ou dcrmente) puis utilise(dans une expression). Placs gauche de loprande (i++, i--) : la valeur de i sera utilise(dans une expression) puis incrmente (ou dcrmente).
oprateurs
binaires
+=, -=, *=, /=, %=, |=, ^=, &=, <<= et >>=.
52
08/03/2014
26
08/03/2014
traiter tous la fois. Au fur et mesure nous allons en dcouvrir dautres (, ,cast, conditionnel, rfrence, etc.).
Le tableau ci-aprs fourni une liste complte des oprateurs du
53
08/03/2014
Catgories Rfrence Unaire () [] + + << >> < <= == != & ^ | && > >= -> . ++ --
Associativit
Arithmtique
Arithmtique Dcalage Relationnels Relationnels Manip. De bits Manip. De bits Manip. De bits Logique
* / %
Logique
Conditionnel Affectation Squentiel
54
||
? : = += >>= , -= *= /= %= &= ^= |= <<=
08/03/2014
27
08/03/2014
Description th(x)
Partie entire
55
08/03/2014
Remarques : Toutes ces fonctions renvoient une valeur de type double. La constante prdfinie M_PI reprsente la valeur . Pour utiliser les fonctions mathmatiques et la constante M_PI on doit ajouter la linge #include<math.h> au dbut du fichier source de notre programme. Exemple:
#include<math.h> void main() {
int n = -12; float x = -atan2(2, M_PI); n = fabs(n); printf("n = %d, x = %f \n", n, x);
}
56 08/03/2014
28
08/03/2014
Les codes de format prcisent le type dinformation afficher. Les principaux codes de format de la fonction printf son les suivant :
Code %c %u %ld %lu %f char unsigned int, unsigned char, unsigned short long unsigned long float, double %d ou %i int Type afficher
%e
%s
58
08/03/2014
29
08/03/2014
Les caractres non imprimables sont des caractres qui nont pas de graphisme, comme la tabulation, le retour la ligne, saut de page, etc. Le tableau suivant montre ces caractres avec leur rle.
Caractre \a \b \f \n Rle cloche ou bip Retour arrire Saut de page Saut de ligne Caractre \r \t \v Rle Retour chariot Tabulation horizontale Tabulation verticale
Remarques :
Si on veut afficher un caractre qui joue le rle dun dlimiteur comme par exemple " ou \, on doit le prcder par \. pour utiliser la fonction printf (ou scanf) on doit ajouter la ligne #include<stdio.h> au dbut de notre fichier source.
59 08/03/2014
Exemple :
#include<stdio.h> void main() { int n = 10; float x = 3.8; double d = 2.9875; char c = 'A'; printf("\a Exemple d'excution avec la fonction printf \n"); printf("\t n = %d, x = %f, d = %f, c = %c \n ", n, x, d, c);
30
08/03/2014
des donnes, en utilisant les codes de format reprs par %. liste_adresses : suite dadresses des variables spares par des virgules, dun type en accord avec le code de format correspondant.
Type unsigned long float double chane de caractres dont on fournit ladresse
08/03/2014
Remarque :
Ladresse dune variable est dtermine laide de loprateur & (voir plus loin). Exemple :
#include<stdio.h> void main() { int n; float x; double l; printf("Donnez trois valeurs respectivement de type int, float et double : "); scanf("%d %f %lf", &n, &x, &l); printf("n = %d, x = %f, l = %f \n", n, x, l); }
62 08/03/2014
31