Académique Documents
Professionnel Documents
Culture Documents
Niveau : 1
Support de cours
Algorithmique et programmation
ENSEIGNANT
Objectifs du cours
Ce cours vise à introduire l’étudiant à l’univers des langages informatiques & programmation afin de lui permettre de com-
prendre l’impact généré aujourd’hui par le numérique.
L’approche pédagogique est conçue pour impliquer l’étudiant dans la construction et l’utilisation des savoirs.
Ce planning transmis à l’étudiant lui permet de préparer chaque séance de cours. Des travaux à faire lui
sont donnés à la fin de chaque séance de cours afin de lui permettre d’assimiler l’unité d’enseignement.
Diverses stratégies sont utilisées dont : l’enseignement magistral interactif, les exercices pratiques, la mé-
thode des cas, l’apprentissage par problèmes, le réseau de concepts etc.
Déroulement des exercices / cas pratiques et Méthode d’évaluation
Hormis les exercices d’application une liste d’exercices est intégrée à l’annexe du cours.
A chaque séance l’étudiant a droit aux exercices / TP à faire en salle, à la maison ou en équipe.
Le(s) contrôle(s) continu(s) et l’examen final comptent chacun pour 50% de la note finale
Le contrôle continu est constitué de :
➢ La présence et participation en salle ;
➢ L’évaluation en salle ;
➢ Travaux à faire à la maison ;
➢ Les travaux d’équipes.
NB : Les travaux dirigés ou pratiques doivent être remis au début du cours ou envoyés par courrier élec-
tronique.
Planification des activités d’enseignement
§ COURS 1 :
I. Introduction et généralités sur l’algorithmique et la programmation § COURS 5 : Les structures de données en algorithmique
➢ Contextes scientifiques et définitions des concepts : Informatique, ➢ Les tableaux ;
Algorithmique, Programmation, Langage de programmation ; ➢ Les matrices ou tableaux à plusieurs dimensions ;
➢ Etapes de résolution d’un problème en informatique ; Les Enregistrements.
➢ Etape de production d’un algorithme et structure générale d’un al-
gorithme.
II. Matérialisation algorithmique des instructions élémentaires et des § SCEANCE 6 : Travaux Dirigés
instructions de contrôle (Début)
➢ Instructions élémentaires. § COURS 7 : Notions de base de la programmation en langage C
Chapitre 1 :
Introduction et généralités sur l’algorithmique
et la programmation
I. Contextes scientifiques et définitions des concepts
1. Informatique
Le terme informatique est un néologisme proposé en 1962 par Philippe Dreyfus pour caractériser le
traitement automatique de l’information : il est construit sur la contraction de l’expression « infor-
mation automatique ». Ce terme a été accepté par l’Académie française en avril 1966.
Définition 1 : informatique
L’informatique est la science du traitement automatique et rationnel de l’information à l’aide d’un
ordinateur.
Définition 2 : ordinateur
Un ordinateur est une machine de traitement automatique de l’information. Il est capable d’acquérir
de l’information, de la stocker, de la transformer en effectuant des traitements quelconques, puis de
la restituer sous une autre forme.
L’informatique traite de deux aspects complémentaires : les programmes immatériels (logiciel,
software) qui décrivent un traitement à réaliser et les machines (matériel, hardware) qui exécutent
ce traitement.
Définition 3 : matériel informatique
Le matériel informatique est un ensemble de dispositifs physiques utilisés pour traiter automatique-
ment des informations.
Définition 4 : logiciel
Un logiciel est un programme ou ensemble de programme informatique conçu pour la résolution
d’un problème précis à partir d’un ordinateur.
Dans ce cours, nous ne nous intéresserons qu’aux aspects logiciels de l’informatique. Avant
l’écriture d’un programme, il faut avoir mis au point un algorithme de résolution du problème.
2. Algorithmique
Chacun de nous a déjà été confronté un jour à un mode d’emploi pour faire fonctionner un appareil
plus ou moins réticent et donc, consciemment ou non, a déjà exécuté un algorithme.
Définition 5 : algorithme
Un algorithme est une suite finie et ordonnée d’instructions décrivant de façon exhaustive le pro-
cessus de résolution d’un problème donnée dans un intervalle de temps donné. En d’autres termes,
un algorithme est une suite finie d’opérations élémentaires constituant un schéma de calcul ou de
résolution d’un problème.
Définition 6 : algorithmique
L’algorithmique est la science qui a pour objectif la conception des algorithmes. En d’autres termes,
c’est l’ensemble des règles et techniques utilisées pour la définition et la conception des algorithmes.
L’algorithmique s’intéresse à l’art de construire des algorithmes ainsi qu’à caractériser leur
validité, leur robustesse, leur réutilisabilité, leur complexité ou leur efficacité.
Définition 7 : validité d’un algorithme
La validité d’un algorithme est son aptitude à réaliser exactement la tâche pour laquelle il a été
conçu.
Définition 8 : robustesse d’un algorithme
La robustesse d’un algorithme est son aptitude à se protéger de conditions anormales d’utilisation.
Définition 9 : réutilisabilité d’un algorithme
La réutilisabilité d’un algorithme est son aptitude à être réutilisé pour résoudre des tâches équiva-
lentes à celle pour laquelle il a été conçu.
Définition 10 : complexité d’un algorithme
La complexité d’un algorithme est le nombre d’instructions élémentaires à exécuter pour réaliser la
tâche pour laquelle il a été conçu.
Définition 11 : efficacité d’un algorithme
L’efficacité d’un algorithme est son aptitude à utiliser de manière optimale les ressources du maté-
riel qui l’exécute.
Quand on définit un algorithme, celui-ci ne doit contenir que des instructions compréhen-
sibles par celui qui devra l’exécuter. Dans ce cours, nous devrons apprendre à définir des algo-
rithmes pour qu’ils soient compréhensibles et donc exécutables par un ordinateur. La programma-
tion a alors pour rôle de traduire cet algorithme dans un langage « compréhensible » par l’ordinateur
afin qu’il puisse exécuter l’algorithme automatiquement
3. Programmation
Un algorithme exprime la structure logique d’un programme informatique et de ce fait est indépen-
dant du langage de programmation utilisé. Par contre, la traduction de l’algorithme dans un langage
particulier dépend du langage choisi et sa mise en œuvre dépend également de la plateforme d’exé-
cution.
Un programme n’est rien d’autre qu’une suite d’instructions, encodées en respectant de manière très
stricte un ensemble de conventions fixées à l’avance par un langage informatique. Le seul « langage
» que l’ordinateur puisse véritablement « comprendre » est donc très éloigné de ce que nous utilisons
nous-mêmes. C’est une suite de 0 et de 1 (les « bits », binary digit) traités par groupes de 8 (les «
octets », byte), 16, 32, ou même 64. Pour « parler » à un ordinateur, il nous faudra donc utiliser des
systèmes de traduction automatiques, capables de convertir en nombres binaires des suites de ca-
ractères formant des mots-clés qui seront plus significatifs pour nous. Le système de traduction
proprement dit s’appellera interpréteur ou bien compilateur, suivant la méthode utilisée pour effec-
tuer la traduction.
Définition 12 : compilateur
Un compilateur est un programme informatique qui traduit un langage, le langage source, en un
autre, appelé le langage cible.
Définition 13 : interpréteur
Un interpréteur est un outil informatique (logiciel ou matériel) ayant pour tâche d’analyser et d’exé-
cuter un programme écrit dans un langage source.
Définition 14 : langage de programmation
Un langage de programmation est un langage informatique, permettant à un humain d’écrire un code
source qui sera analysé par un ordinateur.
Définition 15 : programmation
La programmation est l’activité de rédaction du code source d’un programme.
II. Résolution d’un problème en informatique
Problèmes Spécification
des besoins
Validation
Codage Programme
Test et
Maintenance
Résultat
La démarche à suivre pour produire un algorithme comporte plusieurs étapes. Avant de voir ces
étapes, nous devons appréhender le concept d’objet.
1. Le concept objet
La matière première manipulée en informatique est l’information. Celle-ci se présente sous forme
de données.
Une donnée est une valeur stockée en mémoire centrale d’un ordinateur dans un objet.
Un objet est un récipient utilisé par le processeur pour stocker les informations ou les données
nécessaire à la résolution d’un problème. Chaque objet est caractérisé par son nom et son type.
i. Le nom d’un objet
Encore appelé identificateur, le nom permet d’identifier un objet dans un algorithme. Il est conseillé
de choisir des noms significatifs pour nos objets.
ii. Le type d’un objet
Le type indique l’ensemble dans lequel un objet prend ses valeurs. Il indique aussi les opérations
qui doivent être réalisées sur cet objet. On distingue plusieurs types :
➢ Le type entier
C’est le type qui prend ses valeurs dans l’ensemble Z. Les opérations possibles ici sont : l’addition,
la soustraction, la multiplication et la division.
➢ Le type réel
C’est le type qui prend ses valeurs dans l’ensemble R. Les opérations possibles ici sont : l’addition,
la soustraction, la multiplication et la division.
➢ Le type caractère
C’est l’ensemble constitué des lettres (’a’, ‘b’ … ’z’, ’A’, ’B’ … ‘Z’), des chiffres (‘0’, ‘1’ … ’9’)
et des caractères spéciaux (’#’, ’*’ … ‘+’). La seule opération possible ici est la concaténation +
(Exemple : ’a’+ ‘b’ = ‘ab’ et ’3’+ ‘4’ = ‘34’).
➢ Le type chaine de caractère
C’est une combinaison des caractères placés entre côtes (’’abc’’, ‘’toto2’’ … ’’Bonjour’’,
’’PAPA’’). La seule opération possible ici est la concaténation + (Exemple : ’’Bonjour’’+
ٮ+’’PAPA’’= ’’Bonjour PAPA’’).
➢ Le type booléen
C’est l’ensemble constitué des valeurs {Vrai, Faux} ou {1, 0}. Les opérations possibles ici sont :
ET, OU, NON.
2. Etapes de production d’un algorithme
PROPOSE PAR DIFFOUO TAZO EVARISTE 10
Cours Algorithmique & programmation
Il faut cependant noter que le fait qu’un algorithme fonctionne correctement avec quelques données
ne suffit pas pour confirmer sa validité.
La démarche de la conception d’un algorithme est généralement résumée dans un dossier
appelé dossier algorithmique.
3. Dossier algorithmique
C’est un document qui résume la démarche utilisée pour produire un algorithme. Il comporte trois
parties :
i. L’énoncé du problème
Il s’agit de dire de clairement en quoi consiste le problème à résoudre.
ii. Le principe de résolution
Il s’agit de dire en utilisant le langage naturel ou des symboles mathématiques comment le problème
sera résolu.
iii. L’environnement
Il est constitué par l’ensemble des objets que l’on utilise pendant le déroulement de l’algorithme.
Les objets contiennent en général des données du problème, les résultats intermédiaires et les résul-
tats finaux.
Pour chaque objet, l’environnement doit indiquer :
- Son nom identificateur ;
- Son type ;
- Sa nature ;
- Son utilisateur ;
- Sa valeur initiale ;
- Sa valeur finale ;
- Son sens.
Tous ces éléments sont rangés dans un tableau de la manière suivante :
Nom Type Nature Utilisateur Valeur initiale Valeur finale Sens
Algorithme Nom_algorithme
Déclarations (constantes; variables ; type ;sous programmes…)
Début
Instruction 1;
…
Instruction n;
Fin
Exemple : Ecrire un algorithme qui va lire deux nombres entiers, calcule leur somme et leur pro-
duit.
Algorithme SommeProduit
Var a,b,s,p : entier ;
Debut
Ecrire("Donnez vos deux nombres") ;
Lire(a, b);
s=a+b;
p=a*b;
Ecrire ("la somme des deux nombres est : ",s);
Ecrire ("le produit des deux nombres est : ",p);
Fin
Chapitre 2 :
Algorithmique : Les instructions élémentaires
et les instructions de contrôle
I. Instructions élémentaires
1. Les variables
Une variable est un objet informatique qui associe un nom à une valeur qui peut éventuellement
varier au cours du temps.
• Le type chaîne de caractère : c’est le type qui sera utilisé pour stocker des chaînes de caractère.
Le nom de la variable à modifier est placé dans le membre de gauche du signe ←, la valeur qu’on
veut lui attribuer dans le membre de droite. Le membre de droite de l’affectation est d’abord évalué
sans être modifié puis la valeur obtenue est affectée à la variable dont le nom est donné dans le
membre de gauche de l’affectation ; ainsi, cette opération ne modifie que le membre de gauche de
l’affectation. Le membre de droite peut être une constante ou une expression évaluable.
➢ La constante
1. Conditions et tests
2. Structures conditionnelles
❖ Structure SI … ALORS
❖ Structure SELON
3. Structures répétitives
Chapitre 3 :
Algorithmique : Les sous programmes et
les structures de données
1. Définition
6. Récursivité
Une fonction ou une procédure est dite récursive si elle s’appelle elle-même : on parle alors d’appel
récursif de la fonction.
1. Les tableaux
Définition :
3. Enregistrements
Exemple :
NOTE :
Chapitre IV :
Notions de base de la programmation en langage en C
Introduction
Avant les années 1950, on programmait directement les ordinateurs en langage machine. Un langage
machine est une suite d’instructions codées sur des mots de 32 bits pour le MIPS (million d’instruc-
tions par seconde mais ici il s’agit d’un microprocesseur). La programmation n’étant pas évidente
en langage machine, on a essayé d’améliorer le travail du programmeur.
En premier lieu on a donné des informations symboliques appelées mnémoniques aux instructions
machines. Ce qui a donné naissance au langage assembleur. Ce langage assembleur contient des
instructions faisant intervenir les registres de l'unité centrale de l'ordinateur ainsi que les données.
Ensuite on a introduit des étiquettes dans le langage d'assemblage dans le but de faciliter les bran-
chements conditionnels (boucles, sauts), cela a donné des instructions de la forme BRANCH. Enfin
on a exprimé directement des emplacements mémoires en leur donnant un nom symbolique à la
place de l’adresse en hexadécimal.
Or ces langages de haut niveau et à objets ne sont pas compris par l’ordinateur. Il a fallu donc
construire des programmes qui traduisent des énoncés exprimés dans ces langages utilisés par les
programmeurs en instructions pour la machine cible. De tels programmes s’appellent des compila-
teurs ou des interpréteurs, suivant la méthode utilisée pour effectuer la traduction.
o L’interpréteur traduit les programmes instruction par instruction dans le cadre d’une interac-
tion continue avec l’utilisateur. Ainsi, le programme est traduit à chaque exécution.
o Le compilateur traduit les programmes dans leur ensemble : tout le programme doit être
fourni en bloc au compilateur pour la traduction. Il est traduit une seule fois dans l’optique de pro-
duire un exécutable.
Ci-dessous une liste non exhaustive des langages de programmation existants avec leur pourcentage
d’utilisation actuel.
Suite à l'extraordinaire succès d’Unix au milieu des années 1980, le langage C structuré et très
proche du langage machine était devenu très populaire. De nombreux compilateurs sont apparu mais
présentant des incompatibilités. Face à ce désordre des fournisseurs de compilateurs il devint néces-
saire de mettre de l'ordre et donc de normaliser le langage. Pour accomplir cette tâche, l’organisme
de normalisation américain, ANSI (American National Standards Institute) avait publié en 1988 le
manuel de référence du langage C.
i. L'édition du programme
L'édition du programme consiste à créer, à partir d'un clavier et dans un éditeur de texte quelconque
le texte d'un programme: on parle alors de "programme source". En général, ce texte sera conservé
dans un fichier que l'on nommera avec l’extension ‘’.c’’.
ii. La compilation
Elle consiste à traduire le programme source (le contenu d'un fichier source) en langage machine,
en faisant appel à un programme nommé compilateur. Les compilateurs C font subir deux transfor-
mations aux programmes :
➢ un préprocesseur qui réalise des transformations d'ordre purement textuel, pour rendre des
services du type inclusion de source, compilation conditionnelle, et traitement de macros ;
➢ le compilateur proprement dit qui prend le texte généré par le préprocesseur et le traduit
en instructions machine. La compilation crée automatiquement d’autres fichiers ayant le
même nom que le fichier source mais qui diffèrent avec l’extension.
iii. L'édition de liens
Le module objet créé par le compilateur n'est pas directement exécutable. Il lui manque, au moins,
les différents modules objet correspondant aux fonctions prédéfinies (on dit aussi "fonctions stan-
dard") utilisées par votre programme (comme printf, scanf, sqrt). C'est effectivement le rôle de l'édi-
teur de liens que d'aller rechercher dans la "bibliothèque standard" les modules objet nécessaires.
Le résultat de l'édition de liens est ce que l'on nomme un "programme exécutable", c'est-à-dire un
ensemble autonome d'instructions en langage machine. Si ce programme exécutable est rangé dans
un fichier, il pourra ultérieurement être exécuté sans qu'il soit nécessaire de faire appel à un quel-
conque composant de l'environnement de programmation en C.
La compilation conditionnelle a pour but d’incorporer ou d’exclure des parties du code source dans
le texte qui sera généré par le préprocesseur, le choix étant basé sur un test exécuté à la compilation.
Elle permet d’adapter le programme au matériel ou à l’environnement sur lequel il s’exécute, ou
d’introduire dans le programme des instructions de débuggage.
Ci-dessous, une liste non exhaustive des fonctions de la bibliothèque standard (Les fichiers d’en -
tête de la librairie ANSI), accompagnées de leurs prototypes.
-
Les Fonctions exponentielles et logarithmiques
-
Les Fonctions diverses
- Manipulation de fichiers
iii.
Utilitaires divers <stdlib.h>
➢ Allocation dynamique
Le langage C comprend 6 types d'unités lexicales : les mots-clés, les identificateurs, les constantes,
les chaînes, les opérateurs et les caractères spéciaux (signes de ponctuation).
i. Les mots-clés
Le langage C est un langage à mots-clés, ce qui signifie qu'un certain nombre de mots sont réservés
pour le langage lui-même et ne peuvent donc pas être utilisés comme identificateurs. La liste ex-
haustive des mots-clés est la suivante :
Exemple
v. Les opérateurs
Ex.3
octets et de format d'affichage : %u et unsigned long int ou unsigned long : entier long positif
avec pour format d'affichage : %lu. Le tableau suivant détaille les informations pour chaque type
entier.
Les formats d'affichage sont respectivement: %f, %lf, %l. Les constantes numériques sont
par défaut de type double. Ci-dessous les informations pour chaque type flottant.
Le
format d'affichage est %c pour les caractères et %s pour les chaînes de caractères. Le tableau
suivant détaille les informations pour chaque type caractère.
3. Les variables
Une variable est un objet informatique qui associe un nom à une valeur qui peut éventuelle-
ment varier au cours du temps.
Des données qui ne changent plus dans le programme, une fois initialisées sont appelées des
constantes.
4. Les constantes
i. Les #define
1. Structures conditionnelles
i. Structure IF
if (condition) {
/* si la condition est vraie */
if (condition) instruction1 1
...
/* si la condition est vraie */ ou instruction1 n
instruction1 ; } else {
else
/* si la condition est fausse */ /* si la condition est fausse */
instruction2 ; instruction2 1
...
instruction2 n
}
2. Structures répétitives
v. Structure « do…while »
Do
{
Do instruction 1 ;
ou
instruction ; ...
instruction n ;
while (expression ); }
while (expression );