Académique Documents
Professionnel Documents
Culture Documents
Support de cours
Algorithmique et programmation 1
Année universitaire
2020/2021
TABLE DES MATIÈRES
1.1 Introduction
1
1.2. LES SYSTÈMES DE NUMÉRATION
-2-
1.2. LES SYSTÈMES DE NUMÉRATION
La méthode de division est la plus utilisée ; elle consiste en des divisions successives
du nombre (N )10 par 2, jusqu’à obtenir un quotient nul. Les restes des divisions suc-
cessives, écrits dans l’ordre inverse, constituent le nombre N dans la base 2 (N )2 .
Exemple :
(230)10 = (?)2
Autre méthode :
Cette deuxième méthode consiste à décomposer le nombre en puissances de 2, C’est le
même principe que la décomposition en puissances de dix, sauf que l’on ne décompose
pas en milliers, centaines et dizaines, mais en puissances de deux ; qui sont : 1, 2, 4, 8,
16, 32, 64 . . . , 512, 1024, etc
... 210 29 28 27 26 25 24 23 22 21 20
... 1024 512 256 128 64 32 16 8 4 2 1
-3-
1.2. LES SYSTÈMES DE NUMÉRATION
... 210 29 28 27 26 25 24 23 22 21 20
... 1024 512 256 128 64 32 16 8 4 2 1
... 0 0 0 1 1 1 0 0 1 1 0
(127)8 = 1 ∗ 82 + 2 ∗ 81 + 7 ∗ 80 = (87)10
(127, 65)8 = 1 ∗ 82 + 2 ∗ 81 + 7 ∗ 80 + 6 ∗ 8−1 + 5 ∗ 8−2
En octal chaque, symbole de la base s’écrit sur 3 bits en binaire. L’idée de base est
de remplacer chaque symbole dans la base octal par sa valeur en binaire sur 3 bits (
faire des éclatement sur 3 bits ).
Exemple :
Octale Binaire
6 110
7 111
Remarque :
le remplacement se fait de droit à gauche pour la partie entière et de gauche à droite
pour la partie fractionnelle
-4-
1.2. LES SYSTÈMES DE NUMÉRATION
L’idée de base est de faire des regroupements de 3 bits à partir du poids faible. Par
la suite remplacer chaque regroupement par la valeur octal correspondante .
Exemples :
Remarques :
• Le regroupement se fait de droit à gauche pour la partie entière et de gauche à droite
pour la partie fractionnelle.
• Il faut ajoutez des 0 sur la gauche de la partie entière (et à droite de la partie
fractionnelle )après le dernier chiffre si vous n’en avez pas assez pour finir le
regroupement à trois.
Exemple :
-5-
1.2. LES SYSTÈMES DE NUMÉRATION
Exemples :
En Hexa chaque symbole de la base s’écrit sur 4 bits. L’idée de base est de remplacer
chaque symbole par sa valeur en binaire sur 4 bits ( faire des éclatement sur 4 bits ).
Exemple :
(3)16 = (0011)2
(4) = (0100)
16 2
(345B)16 = | {z } 0100
= (0011 | {z } 0101
| {z } 1011
| {z })2 = (0011010001011011)2
(5)16 = (0101)2
(B)16 = (1011)2
-6-
1.3. CODAGE DE L’INFORMATION BINAIRE :
(A)16 = (1010)2
(B)16 = (1011)2
(3)16 = (0011)2
(AB3, 4F 6)16 = | {z } 1011
= (1010 | {z } 0011
| {z }, 0100
| {z } 1111
| {z } 0110
| {z })2
(4)16 = (0100)2
(F )16 = (1111)2
(6)16 = (0110)2
L’idée de base est de faire des regroupements de 4 bits à partir du poids faible. Par
la suite remplacer chaque regroupement par la valeur Héxa correspondante.
Exemples :
(11001010100110)2 = (0011
| {z } 0010
| {z } 1010
| {z } 0110
| {z })2 = (32A6)16
| {z } 1001
(110010100, 10101)2 = (0001 | {z } 0100
| {z }, 1010
| {z } 1000
| {z })2 = (194, A8)16
-7-
1.3. CODAGE DE L’INFORMATION BINAIRE :
-8-
1.3. CODAGE DE L’INFORMATION BINAIRE :
Exemple 2 :
(10010001100001100010)BCD = (?)10
= (91862)10
-9-
1.3. CODAGE DE L’INFORMATION BINAIRE :
1.3.5 Unicode
Le code Unicode est un système de codage des caractères sur 16 bits. Le système
Unicode permet de représenter n’importe quel caractère par un code sur 16 bits, indé-
pendamment de tout système d’exploitation ou langage de programmation. Il regroupe
ainsi la quasi-totalité des alphabets existants (arabe, arménien, latin, ...)
-10-
1.4. NOTIONS D’ARITHMETIQUE BINAIRE :
Des circuits logiques simples réalisent ces opérations ; de plus une soustraction est
facilement ramenée à une addition grâce à une représentation adéquate des nombres.
-11-
1.5. REPRÉSENTATION DES NOMBRES :
A + A = 2n − 1
On déduit de cette relation que : −A = A + 1 − 2n
Comme le (2n ) ne rentre pas dans le format défini (An−1 An−2 . . . A1 A0 ), il sera ignoré.
On a alors −A = A + 1
A10 A A (A + 1) −A10
0 0000 1111 0000 0
1 0001 1110 1111 -1
2 0010 1101 1110 -2
3 0011 1100 1101 -3
4 0100 1011 1100 -4
5 0101 1010 1011 -5
6 0110 1001 1010 -6
7 0111 1000 1001 -7
On remarque que :
• Le MSB représente le signe avec 0 (+) et 1 (-).
• Le zéro n’a qu’une seule représentation ;
• Alors pour effectuer une soustraction, il suffit de faire une addition avec le complément
à 2. Le résultat se lit directement en complément à 2 :
• Si le signe est + la lecture est directe ;
-12-
1.6. COMPOSANTS D’UN ORDINATEUR
-13-
1.6. COMPOSANTS D’UN ORDINATEUR
-14-
1.6. COMPOSANTS D’UN ORDINATEUR
-15-
1.6. COMPOSANTS D’UN ORDINATEUR
-16-
1.6. COMPOSANTS D’UN ORDINATEUR
I Processeur
Le processeur ou microprocesseur est aussi appelé CPU Central Processing (Unit
l’unité centrale de traitement). C’est le "cerveau " de l’ordinateur. Son rôle est le trai-
tement de l’information numérique et il ne communique qu’en chiffres binaires ou Bits.
Il fait ainsi les calculs nécessaires à l’exécution des programmes et instructions à une
vitesse en partie déterminée par sa fréquence exprimée en Hertz ou plutôt, dans le cas
des processeurs actuels, en Giga Hertz (GHz).
-17-
1.6. COMPOSANTS D’UN ORDINATEUR
I Mémoire RAM
La mémoire de type RAM (Random Access Memory ) est utilisée par le processeur
qui y place les données le temps de leur traitement. L’un des avantages de la mémoire
équipant les ordinateurs est justement sa rapidité d’accès.
Une autre particularité de la mémoire RAM est d’être temporaire, une fois l’opération
terminée, les données ne sont pas conservées et sont de toute façon définitivement
perdues une fois l’ordinateur éteint
I Mémoire ROM
La ROM (Read-Only Memory), appelée aussi mémoire morte est la mémoire interne
d’un ordinateur, contenant des données qui, en principe, peuvent être lues mais pas
modifiées. La mémoire morte renferme le programme qui permet de démarrer ou "
initialiser" l’ordinateur chaque fois que vous le mettez sous tension. Contrairement aux
-18-
1.6. COMPOSANTS D’UN ORDINATEUR
données contenues en mémoire vive (RAM), celles de la mémoire morte ne sont pas
perdues lorsque l’ordinateur est éteint. La mémoire morte est alimentée par une petite
batterie de longue durée.
Il existe plusieurs types de ROM qui possèdent des caractéristiques distinctes :PROM,
EPROM ,UVPROM, etc.
I Le disque dur
Le disque dur est l’un des principaux composants d’un ordinateur. Le disque dur
contient le système d’exploitation (Windows par exemple), vos programmes installés
ainsi que vos données personnelles.
Il est relié à la carte mère grâce à une nappe (câble plat) de type IDE ou grâce aux
interfaces SATA (Serial ATA) ou SCSI. Les disques durs aujourd’hui, peuvent contenir
des centaines de Giga-octets de données.
-19-
1.6. COMPOSANTS D’UN ORDINATEUR
Plus récemment, les disques SSD (Solid State Drive) se sont démocratisés, sans
pièce mécanique, et capable de lire et écrire des données beaucoup plus rapidement.
Ces derniers sont bien évidemment plus chers.
I Le bus
Les bus, systèmes de communication entre les composants d’un ordinateur. Ils per-
mettent de connecter les différentes parties fonctionnelles de cet ordinateur entre elles.
I Carte graphique
Une carte graphique permet de produire une image affichable sur un écran d’ordina-
teur. La carte graphique peut être intégrée à la carte mère ou dédiée, c’est-à-dire qu’elle
est séparée et qu’elle dispose de sa propre mémoire vive. Une carte graphique dédiée
est plus puissante, mais coute plus cher. Elle permet de faire fonctionner correctement
des jeux en 3D, des logiciels de retouche vidéo/photo par exemple.
-20-
1.6. COMPOSANTS D’UN ORDINATEUR
I Les connecteurs
Les connecteurs permettent de relier l’unité centrale, aux différentes périphériques
externe (clavier, souris, . . . )
-21-
CHAPITRE 2
22
2.1. ALGORITHME : GÉNÉRALITÉS
-23-
2.1. ALGORITHME : GÉNÉRALITÉS
I Forme littérale
Algorithme 1 : moyenne
I Forme graphique
-24-
2.1. ALGORITHME : GÉNÉRALITÉS
-25-
2.1. ALGORITHME : GÉNÉRALITÉS
I Phase 3 : Exécution
Exemple :
2.1.4 Le langage C
Le langage C a été con¸cu en 1972 par Dennis Richie et Ken Thompson, chercheurs
aux Bell Labs, afin de développer un sysème d’exploitation UNIX . En 1978, Brian
Kernighan et Dennis Richie publient la définition classique du C dans le livre The C
Programming language 1 .Le C devenant de plus en plus populaire dans les années 80,
plusieurs groupes mirent sur le marché des compilateurs comportant des extensions
particulières. Actuellement, de nombreux langages plus modernes comme C++, C],
Java et PHP ou Javascript ont repris une syntaxe similaire au C et reprennent en partie
sa logique. C offre au développeur une marge de contrôle importante sur la machine
(notamment sur la gestion de la mémoire).
1. Kernighan (B.W.) et Richie (D.M.). – The C programming language. – Prentice Hall, 1988,
seconde edition.
-26-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
Exemple :
Constante Pi ←3,14 ;
Constante B ← 6 ;
Constante Mois ← ’Mars’ ;
• Une variable est un objet dont le contenu peut être modifié par une action
durant l’exécution d’un algorithme. Une variable est caractérisée par son nom,
sa valeur et son type.
I Syntaxe de déclaration d’une variable :
Exemple :
Variable nbr_élèves : entier ;
Variable note : réel ;
Variable Prénom : chaines de caractères ;
Variable A : logique ;
Variable Opérateur : caractère ;
I Types des données :
• Entier : sert à manipuler les nombres entiers positifs ou négatifs.
(Ex : Variables a, b, c : entier ;)
• Réel : sert à manipuler les nombres à virgule.
(Ex : Variables r, s : réel ;)
-27-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
Numérique Alphanumérique
Types des données Logique
Entier Réel
Caractère Chaine de caractère
(Sans virgule) (avec et sans virgule)
-13.5 ’A’
-26 ’Bonjour’
1568 ’@’ Vrai
Exemples 15 ’154’
16.69 ’5’ Faux
12 ’Hello World !’
14 ’ ?’
• ’32’ est différent de 32 parce que 32 est trente deux par contre ’32’ représente la
suite des caractères 3 et 2.
• Une variable de type numérique ne peut pas recevoir une chaine de caractères
ou logique.
Exercice : Donnez le type correspondant aux données suivantes :
Données Types
Bienvenue dans le monde de la programmation
-300
’8’
260.58
’@’
faux
’Maroc’
I L’affectation est une opération qui consiste à attribuer une valeur à une va-
riable. Elle est représentée par une flèche orientée à gauche.
I Syntaxe d’affectation :
-28-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
Exemple :
←2 ; (la variable A reçoit la valeur 2) ;
A←
B ←A+2 ;(la variable B reçoit le contenu de A plus 2.)
←’Ali’ ;( la variable Nom reçoit la valeur Ali. )
Nom←
Exercice :
Soient trois variables A, B et C tels que :
• A est de type entier.
• B est de type chaine de caractères.
• C est type logique.
1. Déclarer les variables A, B et C dans ce cas ?
2. Cocher une bonne réponse :
A ← 1; B ←’Management’
A ← ’Al hoceima’ ; C ← 10 ;
B ←3 ; C ← 2<5 ;
B ←A ; C ← 2<-1 ;
Exercice :
Compléter le tableau suivant
Variables
Instructions
A B C D
B ←2 ;
C←←B+10 ;
← 4;
A←
D ←A ;
B ← B*D ;
C ←B+5 ;
A ←10+4+C ;
C ←A+B+D ;
-29-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
• La lecture est une instruction qui permet de lire des données tapées au clavier.
I Syntaxe :
Lire (variable1) ;
Lire (variable1, variable2,. . . ) ;
Exemple :
• Lire (nombre) ;
• Lire (nom, prénom, âge) ;
• L’écriture est une instruction qui permet d’afficher le contenu d’une variable ou/et
un message sur l’écran.
I Syntaxe :
Ecrire(variable) ;
Ecrire(’Message’) ;
Ecrire(’Message’, variable) ;
Exemple :
-30-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
ˆ : puissance.
Div : Division entière.
Mod ou % (modulo) : Reste de la division entière.
• Une opérande peut être :
Un nom d’une variable ou une constante de type numérique : Pi * R *
R
Une valeur numérique : 5 + 12.3
• Une expression logique simple est une comparaison entre deux expressions arith-
métiques.
• Les opérateurs de comparaison usuels sont : > ,= , <, >= ,<=, 6=
Exemple :
-31-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
• Opérateurs logiques :
A B A ET B A OU B NON A
Faux Faux Faux Faux Vrai
Faux Vrai Faux Vrai Vrai
Vrai Faux Faux Vrai Faux
Vrai Vrai Vrai Vrai Faux
Exercice :
Soit le tableau suivant :
• Lorsqu’un algorithme devient long, il est conseillé d’ajouter des lignes de com-
mentaires dans l’algorithme, c’est-à-dire des lignes qui ont pour but de donner
des descriptions sur les instructions effectuées.
• On a deux manières de définir les commentaires :
// commentaire sur une seule ligne.
/* commentaire sur une ou plusieurs lignes */
• Un commentaire n’est jamais exécutable et ne perturbe plus l’exécution du pro-
gramme !
-32-
2.2. LES COMPOSANTS ELEMENTAIRES D’UN ALGORITHME ET D’UN PROGRAMME EN C
• Donnée en entrées : x et y
• Données en sorties : x et y échangées
2. Chemin de résolution
• Donner une valeur à x ;
• Donner une valeur à y ;
• Échanger les valeurs de x et y ;
• Afficher x et y.
3. Traduire le chemin en algorithme
-33-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
Algorithme proposé :
Algorithme 2 : Permutation
Algorithme 3 : Somme_Produit
-34-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
• Elle ne change jamais de valeur pendant l’exécution d’un programme. Elle est géné-
ralement stockée dans la mémoire morte d’une machine.
• Il n’y a pas d’allocation mémoire, mais on peut affecter à un identificateur (Nom)
une valeur constante par l’instruction ] define
I Syntaxe :
Exemple :
I La variable :
• Les variables contiennent les valeurs utilisées pendant l’exécution du programme
• Déclarer une variable, c’est prévenir le compilateur qu’un nom va être utilisé pour
designer un emplacement de la mémoire.
• Les noms des variables sont des identificateurs.
• Toute variable doit être déclarée avant les instructions et son type spécifié dès la
déclaration.
I Syntaxe :
Exemple :
-35-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
• Le type
• Détermine la taille de la variable et les opérations pouvant être effectuées
• L’identificateur
• C’est le nom affecté à la variable, le nombre de caractères peut être limité, cela
dépend du compilateur utilisé.
• L’identificateur d’une variable doit toujours être écrit de la même façon :
Mon_Identificateur 6= mon_identificateur6= MON_IDENTIFICATEUR.
• Les seuls caractères autorisés pour les noms (identificateur) de variables sont :
Exemple :
float rayon ; /*Déclaration de réel*/
int i,j ; /*Déclaration d’entier*/
char t ; /*Déclaration de caractère*/
double pi ; /*Déclaration de réel double*/
-36-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
<identificateur> = <expression> ;
Exemple :
1 #i n c l u d e <s t d i o . h>
2 v o i d main ( )
3 {
4 int V ;
5 V = 5;
6
7 }
I Le format :
• indique comment vont être affiché les valeurs des variables. Il est composé de
texte et de codes d’affichage suivant le type de variable.
Exemple :
-37-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
I Codes d’affichage :
I Important :
Au début d’un programme utilisant les fonctions d’affichage et de saisie il est nécessaire
d’écrire ]include <stdio.h>, car toutes les fonctions sont déclarées dans ce fichier
d’en-tête.
I Exemple :
1 #i n c l u d e <s t d i o . h>
2 v o i d main ( )
3 {
4 int a ,b , c ;
5 a =1;
6 b=2;
7 c =3;
8 p r i n t f ( " La v a l e u r de a e s t %d , c e l l e de b e s t %d , e t c e l l e de c e s t
%d " , a , b , c ) ;
9 }
Le programme affiche :
La valeur de a est 1, celle de b est 2, et celle de c est 3.
I On peut aussi mettre des codes de contrôles :
-38-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
Exemple :
1 i n c l u d e <s t d i o . h>
2 v o i d main ( )
3 {
4 p r i n t f ( " S a l u t j e s u i s : \ n\ t e t u d i a n t a l a FSTH \n\ t \ t A b i e n t o t " ) ;
5 }
Le programme affiche :
Salut je suis
etudiant a la FSTH
A bientot
-39-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
Exemple :
1 #i n c l u d e <s t d i o . h>
2 v o i d main ( )
3 {
4 char car ;
5 p r i n t f ( " \n e n t r e z un c a r a c t e r e " ) ;
6 s c a n f ( "%c " ,& c a r ) ;
7 p r i n t f ( " \n l e c a r a c t e r e t a p e e s t : %c " , c a r ) ;
8 }
I Remarques :
• Le symbole & est obligatoire devant les identificateurs car scanf() attend des
adresses et non des valeurs, sauf devant un identificateur de chaîne de carac-
tères.
• Les codes d’affichage pour printf deviennent les codes d’entrée pour scanf().
• Pour l’utilisation de scanf() il faut inclure le fichier stdio.h au début du pro-
gramme.
Exemple :
1 #i n c l u d e <s t d i o . h>
2 float a , b , c , det ; /∗ d e c l a r a t i o n d e s v a r i a b l e s r e e l l e s ∗/
3 v o i d main ( )
4 {
5 p r i n t f ( " Donne l e s v a l e u r s de a , b e t c ? " ) ; /∗ A f f i c h a g e de " Donne l e s
v a l e u r s de a , b e t c ? " ∗/
6 s c a n f ( "%f %f %f " ,&a ,&b,& c ) ; /∗ S a i s i e de a , b , c ∗/
7 d e t =(b∗b ) −(4∗a∗ c ) ; /∗ C a l c u l du d e t e r m i n a n t ∗/
8 p r i n t f ( " \n\n " ) ; /∗ Deux s a u t s de l i g n e ∗/
9 p r i n t f ( " Le d e t e r m i n a n t = %f " , d e t ) ; /∗ A f f i c h a g e du d e t e r m i n a n t ∗/
10 }
putchar(identificateur1) ;
Exemple :
1 #i n c l u d e <s t d i o . h>
2 c h a r car1 , c a r 2 ;
3 v o i d main ( )
-40-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
4 {
5 c a r 1= ’F ’ ;
6 c a r 2= ’ S ’ ;
7 p u t c h a r ( c a r 1 ) ; /∗ A f f i c h a g e du c a r a c t e r e 1 −−> donne un F∗/
8 p u t c h a r ( c a r 2 ) ; /∗ A f f i c h a g e du c a r a c t e r e 2 −−> donne un S∗/
9 p u t c h a r ( ’T ’ ) ; /∗ A f f i c h a g e du c a r a c t e r e T ∗/
10 p u t c h a r ( ’ \n ’ ) ; /∗ Retour de l i g n e ∗/
11 }
identificateur1 = getchar() ;
Exemple :
1 #i n c l u d e <s t d i o . h>
2 char car1 ;
3 v o i d main ( )
4 {
5 p r i n t f ( " Tapez un c a r a c t e r e ? " ) ; /∗ A f f i c h a g e de " Tapez un c a r a c t e r e ? " ∗/
6 c a r 1=g e t c h a r ( ) ; /∗ S a i s i e d ’ un c a r a c t e r e ∗/
7 p u t c h a r ( ’ \n ’ ) ; /∗ Changement de l i g n e ∗/
8 p r i n t f ( " Le c a r a c t e r e s a i s i = %c " , c a r 1 ) ; /∗ A f f i c h a g e du c a r a c t e r e s a i s i
∗/
9 }
-41-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
• Ces opérateurs permettent de simplifier des opérations telles que "ajouter une valeur
dans une variable et stocker le résultat dans la variable".
• Avec les opérateurs d’assignation il est possible d’écrire x = x+2 sous la forme suivante
x+=2
Opérateur Effet
= Affecter une valeur ( à droite ) à une variable (à gauche)
+= Additionne deux valeurs et stocke la somme dans la variable
-= Soustrait deux valeurs et stocke la différence dans la variable
*= Multiplie deux valeurs et stocke le produit dans la variable
/= Divise deux valeurs et stocke le quotient dans la variable
%= Divise deux valeurs et stocke le reste dans la variable
-42-
2.3. COMPOSANTS ÉLÉMENTAIRES D’UN PROGRAMME C
I Les priorités :
• Lorsque l’on associe plusieurs opérateurs, il faut que le navigateur sache dans quel
ordre les traiter, voici donc dans l’ordre décroissant les priorités de tous les
opérateurs :
-43-