République Tunisienne Université de Carthage
Ministère de l’Enseignement Supérieur et Ecole Nationale d’Ingénieurs de Bizerte
de la Recherche Scientifique
Algorithmique et Programmation
GI1, GM1 et GC1
(Semestre 1)
Safa Hachani & Islam ELLEUCH
[Link]@[Link] / elleuchislam@[Link]
2023-2024
Plan du
cours
Plan du cours
C1 Rappel algorithmique
C2 Syntaxe du langage C
C3 Les chaines de caractères
C4 Les fonctions - procédures
C5 Les tableaux en C
C6 Les enregistrements
C7 Les pointeurs
C8 Les listes doublement chaînées
3
CHAPITRE 1
Rappel Algorithmique
C’est quoi un algorithmique?
▪ Définition
Un algorithme est une suite finie d'opérations élémentaires, à appliquer dans un ordre
déterminé à un ensemble de données. Sa réalisation permet de résoudre un problème
▪ Caractéristiques
➢ Clarté : Pas d’ambiguîtés.
➢ Déterminisme : Avec un ensemble de données, il faut qu'il fournisse le même résultat
quelle que soit la machine.
➢ Fini : il doit se terminer quelle que soit la machine, le temps et la date d’exécution.
➢ Efficacité : l’algorithme doit effectuer le travail demandé avec le minimum de
ressources.
5
C’est quoi un algorithmique?
▪ Squelette d'un algorithme
➢ Exemple :
Algorithme nom_algorithme
Constantes Algorithme PremierAlgoT
… Variables
Types
… ch : chaine de caractère
Variable
Début
…
Début ch = "intéressant"
Instr 1
Ecrire ("Bonjour tout le monde, ce cours est ", ch)
Instr 2
… Fin
Fin
6
Notion de variable
Les instructions fondamentales
Les ordinateurs ne comprennent que quatre catégories d'instructions :
➢ l'affectation de variables ;
➢ la lecture/écriture ;
➢ les tests (les structures conditionnelles) ;
➢ les boucles (les structures itératives).
Important !!
Un algorithme informatique se ramène toujours à la combinaison de ces
quatre types d'instructions.
7
Notion de variable
▪ Définition
Une variable est une entité qui contient une information.
▪ Caractérisée par :
➢ un nom, on parle d'identifiant (unique)
➢ une valeur : information associée à une variable à un instant donné
➢ un type, qui caractérise l'ensemble des valeurs que peut prendre la variable
8
Déclaration d’une variable
▪ Le type d’une variable caractérise
➢ L'espace des valeurs que peut prendre une variable donnée
➢ L'ensemble des actions que l’on peut effectuer sur une variable
➢ Apparaît dans l’entête de l'algorithme avec la déclaration des variables
▪ Déclaration
Identifiant de la variable : son type
9
Types de données
TD simple ou élémentaire ou primitif :
- Entier, booléen, etc.
→Chaque variable de ce type peut prendre une seule valeur du domaine à la
fois
TD composé ou structuré :
- Tableau, enregistrement, etc.
→Permet le stockage sous un même nom de variable plusieurs valeurs de
même type (exemple: tableau d’entiers) ou non (exemple: type enregistrement)
TD simples TD composés
TD individuels TD collectifs = SD
Exemple: Enregistrements Exemple: liste, tableau, pile, file, arbres …
10
Types de données simple
Les types de variables les plus courants en algorithmique :
▪ Type numérique
➢ Entier
➢ Réel
▪ Type alphanumérique : Chaîne de caractère
➢ Chaîne
▪ Type booléen (ou logique) qui stocke les valeurs logiques VRAI et FAUX
▪ Booléen
▪ Exemple :
Var : PrixHT : réel ; NombreMois : entier ; Fournisseur : Chaine
11
L’instruction d'affectation
Qu'est ce qu'on peut faire avec une variable ?
Réponse
La seule chose qu’on peut faire avec une variable, c’est l'affecter,
c'est-à-dire lui attribuer une valeur
Convention
En pseudo-code, l'instruction d'affectation se note avec le signe <—
12
L’instruction d'affectation
Qu'est ce qu'on peut faire avec une variable ?
Réponse
On peut affecter à une variable le résultat d’une opération
en fonction d’autres variables
Exemple :
T 24.5
U T+5.5
- La valeur de U est maintenant celle de T+ 5.5. U contient donc la valeur 30
- La valeur de T n’est pas modifiée. Elle vaut toujours 24.5
13
L’instruction d'affectation
Une instruction d'affectation doit respecter trois conditions:
1- à gauche de l’affectation, on doit trouver un nom de variable, et
uniquement cela. Dans le cas contraire, il s’agit certainement d’une
erreur!
2- à droite de l'affectation, on doit trouver une expression;
3- l’expression (située à droite de l’affectation) doit être du même type
que la variable (située à gauche de l’affectation).
A Expression
Définition d’une expression
Une expression est un ensemble de valeurs, reliées par des opérateurs,
et équivalent à une seule valeur.
14
Expressions et opérateurs
▪ Un opérateur est un symbole d'opération qui permet d'agir sur des
variables pour obtenir un résultat
▪ Une opérande est une entité (variable, constante ou expression) utilisée
par un opérateur.
▪ Une expression
• est une combinaison d’opérateur(s) et d’opérande(s)
• est évaluée durant l'exécution de l'algorithme
• possède une valeur (son interprétation) et un type
Exemple : a+b
- a et b sont les opérandes
- + est l'opérateur
- a+b est appelée une expression
15
Expressions et opérateurs
- Un opérateur peut être Unaire ou Binaire:
• Unaire s’il n’admet qu’une seule opérande, par exemple l'opérateur
NON
• Binaire s’il admet deux opérandes, par exemple l’opérateur +
- Un opérateur est associé à un type de données et ne peut être utilisé
qu'avec des variables, des constantes ou des expressions de ce type.
Exemple:
l’opérateur + ne peut être utilisé qu'avec les types arithmétiques (naturel, entier
et réel) ou le type chaîne de caractères
16
Expressions et opérateurs
▪ Opérateurs Booléens: Non, Et, Ou, Ou Exclusif
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI VRAI VRAI
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2 C1 NON C1
VRAI VRAI FAUX VRAI FAUX
VRAI FAUX VRAI FAUX VRAI
FAUX VRAI VRAI
FAUX FAUX FAUX
17
Expressions et opérateurs
▪ Opérateurs sur les numériques
➢ On retrouve tout naturellement : +, -, *, /, *
➢ Pour les entiers : div et mod, permettent respectivement de calculer
une division entière et le reste de cette division
➢ L'opérateur d’égalité permet de savoir si les deux opérandes sont
égales. Le résultat d'une expression contenant cet opérateur est un
booléen.
➢ On a aussi l'opérateur d’inégalité : <>
➢ Et pour les types possédant un ordre les opérateurs de comparaison
<, ≤, >, ≥
18
Expressions et opérateurs
▪ Opérateurs sur les numériques
➢ Pour les opérateurs arithmétique, l’ordre de priorité est le suivant (du
plusprioritaire au moins prioritaire) :
^ : (élévation à la puissance),
* , / : (multiplication, division)
% : (modulo)
+ , - : (addition, soustraction)
Exemple: 2 + 3 * 7 vaut 23
➢ En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer
les opérations à effectuer en priorité
Exemple: (2+3) * 7 vaut 35 19
Expressions et opérateurs
▪ Opérateurs alphanumérique
➢ & : la concaténation
Cet opérateur permet de concaténer deux chaînes de caractères
Exemple :
A " Bonjour "
B " tout le monde "
C A & B, C vaut " Bonjour tout le monde "
20
Lecture et écriture
Instruction de lecture
Une instruction de lecture permet à l'utilisateur de rentrer des
valeurs au clavier pour qu’elles soient utilisées par le programme
Exemple :
pour que l'utilisateur entre une nouvelle valeur d’une variable A:
Lire (A)
Remarque
Dès que le programme rencontre une instruction Lire, l’exécution
s'interrompe et attend la frappe d'une valeur au clavier.
21
Lecture et écriture
Instruction d’écriture
Une instruction d’écriture permet au programme de communiquer
des valeurs à l’utilisateur en les affichant à l’écran.
Exemple :
pour que le programme affiche à l’utilisateur la valeur d’une variable B:
Ecrire (" La valeur de B est :" , B)
22
Exercices d’application
Exercice 1 :
Ecrire un algorithme qui permet de lire les valeurs de deux variables
entiers puis affiche leur somme et leur produit.
Algorithme somme produit
Variables
a, b: entier
Début
Ecrire ("donner un entier a:")
lire(a)
Ecrire ("donner un entier b:")
lire(b)
Ecrire ("la somme =",a+b, "et le produit =",a*b)
Fin
23
Tests: instructions conditionnelles
▪ Définition
La résolution de certains problèmes nécessite la mise en place d'un test
pour savoir si l’on doit effectuer une tâche.
Si la condition est remplie alors on effectue la tâche, sinon on
effectue(éventuellement) une autre tâche. Dans un algorithme, on code
la structure du « Si.. Alors.. Sinon »
Exemple :
Si (salaire ≤ 5000) alors
Si condition impot 0.01
Alors Tâche 1 Tâche 2 … Sinon
Sinon Tâche 1b1s Tâche 2bis … Si (salaire > 5000) ET (salaire ≤ 15000) alors
Finsi impot 0.03
Sinon
impot 0.05
FinSi
FinSi
Remarques
1. Il est important (pas obligatoire) de respecter les espaces laissés au début de
chaque ligne, car ils permettent une meilleure lisibilité de l'algorithme.
2. Le « Sinon » n'est pas obligatoire. S'il n'est pas présent, aucune tâche ne sera
effectué si la condition n'est pas remplie.
24
Application: instructions conditionnelles
Exercice 1 :
Ecrire un algorithme qui permet de résoudre dans R l’équation a X +b = 0,
tels que a et b deux réels saisis au clavier.
Solution:
/** En algorithmique*/
Algorithme Equation
Variables
a, b : réel
Début
Ecrire ("donner la valeur de a:")
Lire (a)
Ecrire ("donner la valeur de b:")
Lire (b)
Si (a ≠ 0) alors
Ecrire (" la solution est ", (-b/a))
FinSi
Fin
25
Test : Structure de choix
Cette forme est utilisée lorsque l’on a plusieurs conditions qui expriment une
égalité stricte (pas de notion d’intervalles). Dans ce cas, on a recours à une
structure qui traite les conditions une par une.
Syntaxe : Exemple :
Selon <sélecteur> faire Selon (mois) Faire
<vall>: liste 1 d'instructions 1 : Ecrire ("Janvier")
<val2>: liste 2 d'instructions 2 : Ecrire ("Février")
<val3>: liste 3 d'instructions ...
Sinon Autre liste d'instructions 12 : Ecrire("Décembre")
FinSelon Sinon
Ecrire ("numéro de mois erroné. ")
FinSelon
Remarques
On aurait pu faire cet exemple avec la forme imbriquée mais le code aurait été
plus long et surtout plus compliqué, on se serait perdu dans les imbrications.
26
Application : Structure de choix
Exercice :
Ecrire un algorithme permettant de saisir le numéro de mois et d’afficher le
nombre de jours correspondant.
Solution:
/** En algorithmique*/
Algorithme NombreJours
Variables
mois : entier
Début
Ecrire ("Entrer le numéro du mois : ")
Lire (mois)
Selon (mois) Faire
1, 3, 5, 7, 8, 10, 12 : Ecrire("31 jours")
2 : Ecrire (”28 ou 29 jours”)
4, 6, 9, 11 : Ecrire ("30 jours")
Sinon
Ecrire ("numéro de mois erroné")
FinSelon
Fin
27
Instructions itératives: les boucles Tant que
TantQue (condition)
instructions
FinTantque
Exemple :
somme 0
Tantque(somme<100) faire
Ecrire ("Entrer un entier positif")
Lire (n)
somme somme + n
Fin Tantque
▪ La condition (dite condition de contrôle de la boucle) est évaluée avant chaque
itération
▪ si la condition est vraie, on exécute instructions (corps de la boucle), puis, on
retourne tester la condition. Si elle est encore vraie, on répète l’exécution, …
▪ si la condition est fausse, on sort de la boucle et on exécute l'instruction qui est
après FinTantQue
28
Instructions itératives: les boucles Tant que
Remarque :
▪ Le nombre d'itérations dans une boucle TantQue n'est pas connu au moment
d'entrée dans la boucle. Il dépend de l'évolution de la valeur de condition.
▪ Une des instructions du corps de la boucle doit absolument changer la valeur
de condition de vrai à faux (après un certain nombre d'itérations), sinon le
programme tourne indéfiniment.
→ Attention aux boucles infinies
Exemple de boucle infinie :
p 2
TantQue (i>0)
i i+1 (attention aux erreurs de frappe : + au lieu de -)
FinTantQue
29
Instructions itératives: les boucles Pour
Pour compteur allant de initiale à finale par pas valeur du pas
instructions
FinPour
Exemple :
/*En algorithmique*/
Pour i de 1 à 5 faire
Ecrire (1*10)
FinPour
30
Instructions itératives: les boucles Pour
▪ Remarque : le nombre d'itérations dans une boucle Pour est connu avant le
début de la boucle.
▪ Compteur est une variable de type entier (ou caractère). Elle doit être
déclarée.
▪ Pas est un entier qui peut être positif ou négatif. Pas peut ne pas être
mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le nombre
d’itérations est Égal à finale - initiale+ 1
▪ Initiale et finale peuvent être des valeurs, des variables définies avant le début
de la boucle ou des expressions de même type que compteur.
31
Instructions itératives: les boucles Répéter… jusqu’à
Répéter
instructions
Jusqu’à condition
Exemple :
/*En algorithmique*/
Répéter
Ecrire ("Entrer un entier positif")
Lire (n)
Jusqu’à (n>0)
▪ Condition est évaluée après chaque itération
▪ Les instructions entre Répéter et jusqu'a sont exécutées au moins une fois et
leur exécution est répétée jusqu’à ce que condition soit vrai (tant qu'elle est
fausse, on répète).
32
Instructions itératives: les boucles Répéter… jusqu’à
▪ Cette structure peut être utilisée avec un compteur comme dans la boucle pour.
Dans ce cas, il faut faire attention au nombre d'itérations et faire les bons choix
concernant la valeur d’initialisation, la condition d'arrêt(choisir entre supérieur,
supérieur ou égale, ou égale) et la position de l'incrémentation du compteur.
Exemple : On reprend l’exemple précédent
/*En algorithmique*/
i 1
Répéter
Ecrire (1*10)
i i+l
Jusqu'à (i >5)
Remarque :
▪ Si l’on met "Jusqu'à (i=5)", on aura 4 itérations car le cas où i =5 n'est pas
inclus, et l'affichage s’arrêtera à 40.
33
Application
Exercice :
Ecrire un programme qui lit un entier positif n puis calcule et affiche sa factorielle
en utilisant une boucle «Tant que.… faire», sachant que n!=1x2x3x4,...x(n-1) * n
Solution:
/*En algorithmique*/
Algorithme Factoriel1
Variables
n, f, i : Entier
Début
Répéter
Ecrire ("Entrer un entier positif : ")
Lire(n) Les boucles Tant que
Jusqu’à (n>=0)
f 1
i 2
TantQue (i <= n) Faire
f f*1
i i +1
FinTQ
Ecrire (n,"! = ", f)
Fin
34
Application : les boucles Pour
Exercice :
Ecrire un programme qui lit un entier n puis calcule et affiche sa factorielle
n!=1x2x3x4,...x(n-1) * n en utilisant une boucle Pour.
Solution:
/*En algorithmique*/
Algorithme Factoriel2
Variables
n, f, i : Entier
Début Les boucles Pour
Ecrire ("Entrer un entier positif : ")
Lire(n)
f 1
Pour i de 2 à n Faire
f f * i
FinPour
Ecrire (n,"! = ", f)
Fin
35
Application : les boucles Répéter… jusqu’a…
Exercice :
Ecrire un algorithme (et le programme C) qui lit un entier n puis calcule et affiche
sa factorielle en utilisant la boucle répéter… jusqu’à sachant que
n!=1x2x3x4,.x(n-1) * n
Solution:
/*En algorithmique*/
Algorithme Factoriel3
Variables
n, f, i : Entier
Début
Répéter
Ecrire ("Entrer un entier positif : ")
Lire(n)
Jusqu’à (n>=0) Les boucles Répéter… jusqu’a…
f 1
i 1
Répéter
f f * i
i i + 1
Jusqu’à (i > n)
Ecrire (n,"! = ", f)
Fin
36