Vous êtes sur la page 1sur 18

09/03/20

{C} Eléments de base d’algorithmique

EL Moukhtar ZEMMOURI
L a ng u age ENSAM – Meknès
Version – 2020 / 2021

Sommaire

I. Algorithme, c’est quoi ?

II. No6ons de base


1. La no(on de type

2. La no(on de variable

3. Les entrées sor(es

III. Structures de contrôle


1. La sélec(on

2. La répé((on

2 E. Zemmouri
09/03/20

Algorithme, c’est quoi ?


• Défini6on:
• Un algorithme est une suite finie d’instruc-ons (opéra(ons) élémentaires,
organisées, détaillées, et réalisables dans une durée limitée dans le temps.
• Un algorithme est conçu pour résoudre un problème.
• Un algorithme est généralement codé dans un langage de programma(on afin qu’il
soit exécuté rapidement et efficacement sur une machine (ordinateur, …).
• Exemples:
• Calculer la PGCD de deux en(ers (algorithme d’Euclide)
• Résoudre une équa(on a𝑥 ! + 𝑏𝑥 + 𝑐 = 0
• Trouver le chemin minimal sur une carte (algorithme de Dijkstra)
• Résoudre une grille de Sudoku
• …

3 E. Zemmouri

I - Notions de bases

4 E. Zemmouri
09/03/20

1 - La notion de type
• Défini6on :
• Un type de données est un ensemble caractérisé par :
• Un nom
• Ensemble de valeurs
• Opérateurs
• En algorithmique, on dis6ngue 4 types de base :
• Les en(ers
• Les réels
• Les caractères
• Les booléens
• A par6r de ces 4 types on peux définir des types composés :
• Tableaux, matrices, listes, graphes, …

5 E. Zemmouri

Le type entier - int


• Le type int représente d’ensemble des en1ers rela1fs ℤ muni des
opérateurs suivants : + , - , *, / et %
• Rappel : division euclidienne
• ∀ (𝑎, 𝑏) ∈ ℤ×ℤ∗
• ∃ 𝑞, 𝑟 𝑡𝑞 𝑎 = 𝑞𝑏 + 𝑟 𝑒𝑡 0≤𝑟< 𝑏
• q est appelé quo,ent de la division, on le note : q = a / b ou q = a div b
• r est appelé reste de le division, on le note : r = a % b ou r = a mod b
• Exemple :
• a = 26 et b = 7 alors a / b = 3 et a%b = 5
• a = 2 et b = 4 alors a / b = 0 et a%b = 2

6 E. Zemmouri
09/03/20

Le type entiers - int


• Remarques :
• Soient a et b deux en,ers :
• b divise a ssi a%b = 0
• a est pair ssi a%2 = 0
• a est impair ssi a%b = 1

7 E. Zemmouri

Le type réels - float


• Le type float représente l’ensemble des nombres réels ℝ (en fait, c’est
l’ensemble des nombres à virgule flottante) muni des opérateurs :
+ , - , * et /
• Attention: division entière et division réelle
• En langage C (et d’autre langage), on utilise le même symbole / pour la division.
• Le résultat de a/b est de type :
• int si les deux termes a et b sont de type int
• float si l’un des deux termes a ou b est de type float
• Exemples :
• 11/2 = 5 11.0/2 = 5.5 11/2.0 = 5.5 11.0/2.0 = 5.5
• 1/2 = 0 1.0/2 = 0.5

8 E. Zemmouri
09/03/20

Le type caractères - char


• Représente l’ensemble des caractères imprimables et non imprimables
• Alphabé(ques : 'a', …, 'z' 'A', …, 'Z' espace, (ret bas (underscore)
• Numériques : '0', …, '9'
• Symboles mathéma(ques et ponctua(on
• Retour à la ligne
• Tabula(on
• …
• Un caractère est noté entre ' et '
• Exemple : 'A' '1' '@' '\n' '\t'
• Une chaine de caractères est notée entre " et "
• Exemples : "hello" "bonjour tout le monde"

9 E. Zemmouri

Le type booléens
• Le type booléen représente l’ensemble {vrai, faux} muni des
opérateurs logiques suivants: ET, OU, NON
• Opérateurs de comparaison :
• Les opérateurs : < , > , <= , >= , == et != s’appliquent sur les 4 types de bases.
• Le résultat d’une opéra,on de comparaison est toujours booléen

10 E. Zemmouri
09/03/20

Valeurs constantes et types


• N. B. la manière avec laquelle on écrit une constante indique
implicitement son type.
• Exemple :
• '1' est de type caractère (char),
• 1 est de type int
• 1.0 est de type float
• "1" est une chaine de caractères
• è Ces valeurs ne sont pas codées de la même manière sur la
mémoire de l’ordinateur

11 E. Zemmouri

2- La notion de variable
• Défini1on :
• Une variable est un emplacement mémoire caractérisé par :
• Un nom (idenAficateur)
• Un type
• Un contenu (une valeur).

valeur nom

12 E. Zemmouri
09/03/20

Déclaration d’une variable


• La déclara1on est l’opéra1on qui permet de réserver un espace
mémoire et lui associer un iden1ficateur, un type et éventuellement
une valeur ini1ale.
• Syntaxe :
nomVar
• type nomVar ;
• type nomVar = valeur ; valeur nomVar

• Exemples :
• int n,i ;
• float a,b,c ;

13 E. Zemmouri

L’affectation
• L’affecta(on est l’opéra(on qui permet d’adribuer une valeur à une variable.
• è L’affectaAon permet d’écrire une valeur dans une variable.
• è Modifier le contenu de la variable.
• Syntaxe :
• nomVar = valeur ;
• On dis(ngue trois types d’affecta(ons :
• variable = constante ;
• variable = variable ;
• variable = expression ;
• Exemples :
• int a = 26, b = 15 ;
• r=a%b;
• a=b;
• b=r;

14 E. Zemmouri
09/03/20

3- Les entrées / sorties


• Lecture / Ecriture :
• Les deux opéra,ons lire et écrire permePent à un algorithme de
communiquer avec l’extérieur (l’u,lisateur) via des périphériques d’entrées et
de sor,es.

lire écrire
Algorithme

15 E. Zemmouri

Les entrées / sorties


• Lecture :
• L’opération lire permet d’affecter une valeur de l’extérieur à une variable (à
travers un périphérique d’entrée : clavier…).
• Syntaxe :
• lire (nomVar) ;
• Exemples :
• lire (n) ;
• lire (a, b) ;

16 E. Zemmouri
09/03/20

Les entrées / sorties


• Ecriture :
• L’opéra,on écrire permet d’afficher un message (chaîne de caractères) ou la
valeur d’une variable (sur un périphérique de sor,e : écran …).
• Syntaxe :
• Ecrire ("message") ;
• Ecrire (nomVar) ;
• Exemples :
• Ecrire ("donner la valeur de n") ;
• Lire (n) ;
• …
• Ecrire (n, "est premier") ;

17 E. Zemmouri

4- Structure d’un algorithme


• Exemple :
Début
• Algorithme qui permet de lire deux
int a, b, s;
en,ers a et b, puis calculer et float moy ;
afficher la somme et la moyenne. écrire ("donner a et b ") ;
lire (a, b) ;
s = a + b ;
moy = s / 2.0 ;
écrire("la somme est ", s) ;
écrire("la moyenne est", moy) ;
Fin

18 E. Zemmouri
09/03/20

Exercices
• Exercice 1
• Ecrire un algorithme qui lit un temps en secondes
puis l’affiche en heures, minutes et secondes.
• Exercice 2
• Algorithme pour lire le rayon d’une sphère puis
calculer et afficher sa surface et son volume.
• Exercice 3
• Ecrire un algorithme qui permet de transformer la
valeur d’un angle donnée du (degrés, minutes et
secondes) en radian.
• Exemple : 6° 50’ 10" = 0.119 rand
• Transforma(on inverse ?
19 E. Zemmouri

II – Structures de contrôle
09/03/20

Les structures de contrôle


• On appelle structure de contrôle toute instruction qui permet de
contrôler l’ordre d’exécution des instructions dans un algorithme.
• En algorithmique, on distingue trois structures de contrôle qui
permettent de construire des algorithmes :
• La séquence
• La sélection (structure conditionnelle)
• La répétition (boucles)
• La séquence :
• Une séquence est un bloc d’instructions qui s’exécutent dans un ordre
séquentiel.

21 E. Zemmouri

1- La sélection
• La structure de sélec1on permet de choisir les instruc1ons à exécuter
en fonc1on d’une condi1on.
• è Elle est u,lisé pour l’exécu,on condi,onnelle.
• N.B.
• Une condi,on est une expression booléenne.
• è expression dont le résultat est vrai ou faux.

22 E. Zemmouri
09/03/20

La sélection

Si (condition) Si (condition)
Bloc d’Instructions 1 Bloc d’Instructions
Sinon Finsi
Bloc d’Instructions 2
Finsi

Faux
Cond Cond
Faux Vrai
Vrai

Instructions 2 Instructions 1
Instructions

23 E. Zemmouri

La sélection
• Exemple :
• Tester si un nombre est pair ou impair
#include <stdio.h>

int main()
Début {
int n;
int n; printf("donnez un entier :\n");
écrire ("Donnez un entier "); scanf("%d", &n);
lire (n);
if (n%2 == 0){
si (n%2 == 0)
printf("%d est pair\n", n);
ecrire(n, "est pair"); }
sinon else{
printf("%d est impair\n", n);
ecrire(n, "est impair");
}
finsi return 0;
Fin }

24 E. Zemmouri
09/03/20

Exercices
• Exercice 1
• Ecrire un algorithme pour résoudre dans ℂ une équation de second ordre
a𝑥 " + 𝑏𝑥 + 𝑐 = 0 avec a, b et c des réels donnés.
• Exercice 3
• Ecrire un algorithme qui permet de lire une année A puis afficher si elle est
bissextile ou non (nombre de jours 365 ou 366). On note que : Si A n'est pas
divisible par 4, l'année n'est pas bissextile. Si A est divisible par 4, l'année est
bissextile sauf si A est divisible par 100 et pas par 400.
• Exercice 2
• Ecrire un algorithme pour transformer des coordonnées cartésiens (𝑥, 𝑦)
données par l’utilisateur en coordonnées polaires 𝑟, 𝜃 .

25 E. Zemmouri

2- La répétition
• Une structure de répé11on, ou boucle, est une instruc1on qui permet
de répéter (ré-exécuter) un bloc d’instruc1ons un certain nombre de
fois (en fonc1on d’une condi1on).
• On dis1ngue 3 formes de boucles :
• La boucle tantque
• La boucle pour
• La boucle répéter

26 E. Zemmouri
09/03/20

La boucle Tantque - while

Faux
Cond
Tantque (condition)
Vrai
Instruction 1
...
Instructions 1
Instruction N ...
FinTanque Instruction N

• Tant que la condi6on est vraie exécuter le bloc d’instruc6ons.


• N. B.
• Le nombre de répé((ons n’est pas connu à l’avance.
• Le bloc d'instruc(on peut ne pas être exécuté, si la condi(on est fausse au début.

27 E. Zemmouri

La boucle Tantque - while

• Exemple :
• Algorithme d’Euclide pour calculer le PGCD de 2 en,ers
• Input : deux enAers a et b
• Output : le PGCD(a, b)
• Le PGCD de a et b est égal à b si ce dernier divise a, sinon le PGCD de a
et b est égal au PGCD de b et de r (reste de la division de a par b).

28 E. Zemmouri
09/03/20

La boucle Tantque - while


• Exemple : PGCD
#include <stdio.h>
Début
int main()
int a,b, r;
{
ecrire ("donnez a et b"); int a, b, r;
lire(a,b); printf("donnez deux entiers :\n");
scanf("%d%d", &a, &b);
r = a%b;
tantque (r != 0) r = a%b;
a=b ; while(r != 0){
b=r ; a = b;
b = r;
r=a%b ; r = a%b;
fintantque }
ecrire ("le PGCD est ", b) ; printf("Le PGCD est : %d\n", b);
return 0;
Fin }

29 E. Zemmouri

La boucle pour - for

Pour compteur = init à fin faire


compteur = init
Instruction 1
...
Instruction N Compteur Faux
<= fin
FinPour
Vrai

Instructions 1
• Permet de répéter un bloc d'instruc,ons un ...
nombre prédéfini de fois. Instruction N

• N. B.
compteur ++
• Le nombre de répéAAons est connu :
• fin - init +1
• Le bloc d'instrucAons peut ne pas être exécuté, si
fin est inférieur à init.

30 E. Zemmouri
09/03/20

La boucle pour - for


• Exemple :
• Algorithme qui permet de calculer la
somme : 𝑠 = ∑&#$% 𝑖 = 1 + 2 + ⋯ + 𝑛
• Input : un enAer n
• Output : la somme S

31 E. Zemmouri

La boucle pour - for


• Exemple : somme

Début #include <stdio.h>


int n, i, s;
int main(){
ecrire("donner la valeur de n"); int n, i, s;
lire(n); printf("donnez un entier :\n");
scanf("%d", &n);
s = 0;
s = 0;
pour i=1 à n faire for (i= 1; i<=n; i++){
s = s + i; s = s + i;
finpour }
printf("la somme est %d\n", s);
ecrire ("la somme est : ", s); return 0;
Fin }

32 E. Zemmouri
09/03/20

La boucle pour - for


• Exemple 2 :
• Algorithme qui permet de calculer le
nième terme de la suite de Fibonacci
définie par récurrence comme suit :
𝑈' = 1, 𝑈% = 1
A
𝑈& = 𝑈&(% + 𝑈&(" , 𝑛 ≥ 2
• Input : un entier n
• Output : la valeur de 𝑈!

33 E. Zemmouri

La boucle pour - for


Début
#include <stdio.h>
int n, i;
int a, b, c; int main()
ecrire("donnez la valeur de n : "); {
int n, i;
lire(n);
int a, b, c;
si (n==0 OU n==1) printf("donnez la valeur de n : \n");
ecrire("U", n, " = 1"); scanf("%d", &n);
sinon if (n==0 || n==1) printf("U%d = 1\n", n);
else{
a = 1; a = 1;
b = 1; b = 1;
pour i=2 à n faire for (i=2; i<= n; i++){
c = b + a;
c = b + a; a = b;
a = b; b = c;
b = c; }
printf("U%d = %d\n", n, c);
finpour }
ecrire("U", n, " = ", c); return 0;
finsi }

34 Fin E. Zemmouri
09/03/20

La boucle répéter jusqu’à

Répéter Instructions 1
Instruction 1 ...
... Instruction N
Instruction N
Jusqu’à (condition); Faux
Cond
Vrai

• Exécuter le bloc d’instruc6ons jusqu’à ce que la condi6on soit vraie.


• N. B.
• Le nombre de répé((ons n’est pas connu à l’avance.
• Le bloc d'instruc(on est exécuté au moins une fois.

35 E. Zemmouri

La boucle répéter jusqu’à


• Exemple :
• Lire au clavier un note entre 0 et 20 Début
float x;
répéter
#include <stdio.h> ecrire("donner une note : ");
lire(x);
int main() jusqu’à (x>=0 and x<=20);
{
float note; .
do{ .
printf("donnez une notre entre 0 et 20 : \n"); .
scanf("%f", &note);
}while (note < 0 || note > 20);
Fin
...

return 0;
}

36 E. Zemmouri

Vous aimerez peut-être aussi