Beruflich Dokumente
Kultur Dokumente
l.afraites@usms.ma
2018/2019
2018/2019 1
Algorithme : exemple
Une description des différentes étapes permettant de
résoudre un problème quelconque
Exemple: résolution d’une équation du 2nd degré
ax 2 bx c 0
1. Connaître les valeurs de a, b et c
2. Calculer le discriminant D b 2 4ac
3. Si D < 0 alors pas de solution réelle
b
4. Si D = 0 alors solution double =
2a
5. Si D > 0 alors deux solutions b D
x1
2a
b D
x2
2a
2
Objectif et plan du cours
Objectif:
◦ Apprendre les concepts de base de l'algorithmique et de la
programmation en c.
Plan:
I- Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages de
programmation, codage de l’information …)
3
Plan du cours
Chapitre 1 : Généralités – codage de l’information
2018/2019 DUT-Info 4
chapitre1-Généralités
chapitre1-
« Introduction à l’informatique »
5
1.1 : L’informatique ?
Computer Science
INFORMATIQUE ? en anglais
INFORMATION AUTOMATIQUE
Art d’entraîner automatiquement des actions
Science de l’information
6
L’ordinateur
Machine qui permet de traiter de l’information :
◦ d’acquérir et de conserver de l’information (acquisition,
stockage)
◦ d’effectuer des traitements (calcul),
◦ de restituer les informations stockées (restitution)
Permet de lier «information» «données» (0 ou
1)
Différents types d’informations : valeurs numériques,
textes, images, sons, …: tout cela avec des 0 ou 1
Traitement de l’information
ENTREE
Données corrigées
TRAITEMENT Résultats
Par ordinateur
SORTIE
8
L’ordinateur / l’homme
Raison du remplacement :
◦ Vitesse (pour des opérations « bas niveau »)
◦ Fiabilité (répétitivité)
◦ Mémoire
◦ Coût
2 types d’ « informaticiens »
◦ les utilisateurs des outils informatiques
◦ les concepteurs de ces outils : votre but
9
Domaines de l’informatique
Domaine du matériel (hardware)
◦ partie physique de l’ordinateur
◦ composants constituant un ordinateur (microprocesseur …)
◦ support du traitement de l’information (disque dur …)
Domaine du logiciel (software)
◦ instructions expliquant à l’ordinateur comment traiter un
problème
◦ Cela nécessite de décrire des : algorithmes
◦ Pour aboutir à un programme
10
1.2 : Matériel
121 Aperçu historique
11
Historique
ENIAC, le 1e ordinateur électronique (1946) : 18 000 lampes env. reliées par un câblage.
Les ancêtres des ordinateurs
13
1.2.2 - Générations d’ordinateurs
Génération 1 (~1945 - 1960)
◦ machines électroniques composées de circuits à lampes
à vide (et non transistors à semi-conducteurs)
◦ place importante (équivalent d’une salle)
◦ performances de l’ordre de 1000 opérations/s
◦ programmation en langage binaire
◦ faible portabilité des programmes
◦ programme et données fournis sous forme de cartes
perforées, résultats sur une imprimante (pas de
stockage)
14
1.2.2 - Générations d’ordinateurs
Génération 2 (1960 - 1965)
◦ découverte des transistors qui remplaceront les
circuits à lampes à vide
◦ Apparition des 1ère mémoires (à tores)
◦ évite l'échauffement, gain de place, fiabilité
◦ performances d’environ 100 000 opérations/s
◦ programmation en langage binaire mais aussi à
l’aide des premiers langages évolués
(Fortran, Cobol, ...)
15
1.2.2 - Générations d’ordinateurs
Génération 3 (1965 - 1975)
◦ invention du circuit intégré permettant de placer des
dizaines de transistors sur une puce de silicium
◦ performances 109 à 1012 opérations/s
◦ généralisation de la programmation en langage évolué
◦ Les Systèmes d'Exploitation (OS) Permettent de gérer
plusieurs programmes différents sous le contrôle d'un
programme central
16
1.2.2 - Générations d’ordinateurs
Génération 4 (1975 - ?)
◦ exploitation du circuit intégré à grande échelle: plusieurs
dizaines de milliers (millions) de circuits peuvent être
intégrés sur une même puce
◦ reproduction sur une seule puce d’une véritable micro
machine : le micro processeur. (En 1971 l'Intel 4004 fut
le premier microprocesseur)
◦ diminution de la place occupé par un ordinateur
◦ développement de l’ordinateur personnel.
◦ La programmation s'oriente vers la programmation
OBJETS (orientés autour des données et non plus des
actions)
17
1.3 - Structure de l’ordinateur
Carte vidéo
Disque
Ecran Mémoire Dur
Centrale
Clavier
Unité de Disquette
Souris traitement
Haut- CDROM
parleurs Unité Centrale
Carte son
Périphériques de communication Unités d’échange
Périphériques de mémorisation Bus (Support de transfert
d'information entre les différents
ensembles d'u ordinateur) .
18
1.3.1 - Périphériques
2 types de périphériques
Une pièce de matériel qui peut effectuer une fonction particulière
◦ périphériques de communication,
◦ périphériques de mémorisation.
Périphériques de communication
◦ Périphériques d’entrées
clavier
souris
◦ Périphériques de sorties
écran
imprimantes
19
Les périphériques
ENTREES
Clavier
Souris
MEMOIRES (entrées/sorties)
Disque dur
Disquette
Disque optique (CD)
SORTIES
Ecran
Imprimante
20
Périphériques de communication
◦ le modem
Permet : interconnexion des ordinateurs pour
communiquer, échanger des informations, partager des
applications
réseau d’ordinateur
utilisation du réseau téléphonique pour communiquer
utilisation d’un MODEM
MODEM MODEM
21
Périphériques de mémorisation
◦ permettent de sauvegarder et de restituer des
informations
◦ quantité d’informations pouvant être
mémorisée se mesure en Octet (8 éléments
binaires)
◦ périphériques usuels de mémorisation:
disque dur
Disquette
CDROM, DVD
22
Schéma d’une configuration informatique
Unité Centrale (cerveau)
Unité de Traitement
Unité de Commande
et de Contrôle
Unité Arithmétique
et Logique
Mémoire
Périphériques Centrale Périphériques
d’Entrées de Sorties
Périphériques d’Entrées/Sorties
Informations Mémoires Auxiliaires
Commandes
23
1.3.2 - La mémoire centrale
24
1.3.2 - La mémoire centrale
Contient le programme en cours d’exécution, ainsi que ses données.
Par exemple, lors de la création d’un programme en langage C:
Zone de
Editeur Compilateur Code
programme
de texte exécutabl
e
Zone de Texte du
Variables
données programm Code du
e en C exécutable programm
e
25
La mémoire auxiliaire
26
La mémoire auxiliaire
Les supports magnétiques à ACCES ALEATOIRE (on
choisit la position que l’on veut) permettent une
hiérarchisation des fichiers :
REPERTOIRE : fichier contenant le nom, l’adresse, … de
plusieurs autres fichiers
27
1.3.3 - L’unité de traitement
Unité Centrale (cerveau)
Unité de commandes
Unité de Traitement
◦ unité de contrôle
Unité de Commande
◦ chef d’orchestre et de Contrôle
◦ conduit le calcul
Unité Arithmétique
(ordre des instructions) et Logique
voulu par le programmeur
Mémoire
Unité Arithmétique et logique Centrale
◦ unité de calcul
◦ exécute les opérations arithmétiques et logiques (+-*/ et ou
…) d’un programme sous le contrôle de l’unité de commande
28
L’unité centrale
CI sur lequel on trouve
Supports de barrettes
Connecteurs de souris et clavier de mémoires
Connecteurs de contrôleur
de disquettes et disque dur
Emplacements de
cartes d ’extensions
Batterie
29
Le processeur (CPU)
Séquenceur d ’instructions
Interface du bus d ’instructions
Décodeur d ’instructions
Unité de traitement
Unité arithmétique et logique
Registres:
Mémorise différents
états binaires (environ 10)
résultant des opérations élémentaires:
Unité de contrôle Unité de détection d’erreurs Overflow
Retenue
Parité
30
1.3.4 - Les bus
Disque
Ecran Mémoire Dur
Centrale
Clavier
Unité de Disquette
Souris traitement
Haut- CDROM
parleurs Unité Centrale
Permettent de faire le lien entre les
différentes unités d’un ordinateur
représente le chemin utilisé par les
informations pour aller d’une unité à
l’autre 31
1.4 : Logiciel
Domaine du logiciel (software)
32
1.4.1 : Système d’exploitation
33
Système d’exploitation
Gestion de la mémoire vive
◦ aller chercher sur la mémoire auxiliaire le code
(exécutable) et les données nécessaires à
l’exécution d’un programme demandé par
l ’utilisateur
Gestion des entrées/sorties
◦ interprétation des frappes de touches au clavier
et des mouvements ou cliques de la souris
◦ visualisation d’informations à l’écran
34
Système d’exploitation
utilisateur
Application 1 Application 2
Système d’exploitation
Matériel
RAM, disque dur, disquette, CD-ROM,
clavier, souris, écran, imprimante
35
Système d’exploitation
Les plus courants : 3 types d’ordinateurs:
◦ système mono utilisateur - PC=perso (plusieurs
MS-DOS pour PC marques compatibles)
Windows NT pour PC
UNIX
Linux sur PC (gratuit) ; Solaris sur SUN ; AIX sur IBM
36
Système d’exploitation
Permet aussi d’organiser (gérer) les informations
sur la mémoire auxiliaire
◦ FICHIER (file): ensemble d’information manipulables
par l’ordinateur ; nom unique dans un répertoire ;
taille en octets
◦ REPERTOIRE : dossier ou directory ; regroupement de
fichiers ; nom unique
◦ RACINE (root): dossier situé au plus haut niveau
◦ CHEMIN D’ACCES (path): liste des répertoires
permettant d’atteindre un fichier à partir de la racine
37
Système d’exploitation
Disque dur
Users
Appli Données divers
personelles
Exercices windows
38
1.4.2 - Algorithmes et programmes
Algorithme :
◦ suite des actions à effectuer pour
réaliser un traitement donné
résoudre un problème donné
39
1.4.2 - Algorithmes et programmes
Informations
en entrée
Algorithme informatique
=
procédure de calcul
Rigueur scientifique
IMPORTANT !
Informations
Sinon, information de sortie en sortie
erronée
40
1.4.2 - Algorithmes et programmes
Programme :
◦ codage d’un algorithme afin que l’ordinateur
puisse exécuter les actions décrites
◦ doit être écrit dans un langage
compréhensible par l’ordinateur
langage de programmation (Assembleur
(micropro), Basic, C, Fortran, Pascal, Cobol …)
Un programme est donc une suite
ordonnée d’instructions élémentaires
codifiées dans un langage de
programmation
41
1.4.3-- Langages informatiques
1.4.3
Un langage informatique est un outil permettant de
donner des ordres (instructions) à la machine
42
L'assembleur
Problème: le langage machine est difficile à comprendre par l'humain
ADD A, 4
LOAD B traducteur
langage machine
MOV A, OUT
◦ +: déjà plus accessible que le langage machine
◦ -: dépend du type de la machine (n’est pas portable
portable)
◦ -: pas assez efficace pour développer des applications complexes
43
Langages haut niveau
44
Compilateur/interpréteur
Compilateur exécution
exemple.c exemple
fichier source fichier exécutable
◦ + plus rapide à l’exécution
◦ + sécurité du code source
◦ - il faut recompiler à chaque modification
45
Langages de programmation:
Exemples de langages:
◦ Fortran, Cobol, Pascal, C, …
◦ C++, Java, …
46
Principaux Langages de programmation:
47
1.5-- Représentation de l’information :
1.5
Langage machine
Langage binaire: l’information est exprimée et manipulée sous forme
d’une suite de bits
◦ Le code ASCII (American Standard Code for Information Interchange) donne les
correspondances entre les caractères alphanumériques et leurs
représentation binaire, Ex. A= 01000001, ?=00111111
48
Codage binaire
Le langage des ordinateurs
49
Système binaire
Un système de numération utilisant la base 2.
Toutes les informations sont codées avec des 0 et
des 1.
1 bits : 2 1 possibilités = 0,1
2 bits : 22 possibilités =00,01,10,11
3 bits : 2 3 possibilités =000,001,010,011,100,101,110,111
n bits : 2n possibilités
Un mot=un ensemble de bits avec un poids
n n 1 1 0
2 ,2 ,..., 2 , 2
50
Principe de codage binaire
Habitude de travailler en base 10 (système décimal)
10 symboles distincts : les chiffres
En base b, on utilise b chiffres.
Octal 8 0,1,2,3,4,5,6,7
Décimal 10 0,1,2,3,4,5,6,7,8,9
Hexadécimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,F
51
Exemple de codage décimal
La forme générale d’un nombre entier en décimal (base 10) est :
n
i
Décimal= dndn1...d1d0 d 10 i
3 0
i
2018= d 3d 2 d1d 0 d i 10
i 0
52
Représentation d’un nombre dans une base b
n
anan1...a1a0 b ai b i
i0
53
Principe de codage binaire
54
Un même nombre peut être représenté
dans plusieurs bases
55
1111011=12^0+1*2^1+0*2^2+1*2^3+1*2^4+2^5+2^6
=1+2+8+16+32+64
=123
(173)_8=3*8^0+7*8^1+1*8^2
=3+56+64
=123
01111011=(7B)_16 = 7*16^1+B*16^0=112+11=123
56
Changement de base (10
(10 à b)
58
Numération et codage – Changements de bases
Pour passer d’un nombre décimal à un nombre exprimé dans
une autre base, on utilise la méthode des divisions
successives.
On divise alors le nombre décimal N(10) par la base B(binaire,
base 2). Le reste de la division est un digit du résultat
Nombre en 92 2 Base
base 46 2
décimale
0 23 2
Reste 0 11 2
1 5 2
Sens de
bit de poids lecture 1 2 2
faible du 1 1 2
résultat 0 0
(1011100)
1
bit de poids fort
Numération et codage – Changements de bases
Donner le nombre 42 (codé en décimal)
en binaire.
Nombre en 42 2 Base
base 21 2
décimale
0 10 2
Reste 1 5 2
0 2 2
1 1 2
Sens de 0 0
lecture
1
du
résultat
(101010)
Numération et codage – Changements de bases
Que vaut le nombre 0101001 (codé en
binaire) en décimal.
0101001(2) = 1.20 + 0.21 + 0.22 + 1.23 + 0.24 + 1.25 + 0.26
0101001(2) = 1 + 0 + 0 + 8 + 0 + 32 + 0
0101001(2) = 41
De la base 2 à la base 10
◦ Il faut additionner la multiplication du nombre
représenté par chaque chiffre avec la
puissance de 2 correspondant au rang du
chiffre:
Les opérations élémentaires en base 10
s’appliquent de la même façon en base 2
◦ Exemple: Addition, soustraction,
multiplication, division
62
Exemple de la somme
63
Transcodage binaire/hexadécimal
Un autre système, l'hexadécimal (base 16),
est très souvent employé en informatique
◦ facilite la représentation des longues
séquences de bits
◦ représentation :
0 1 2 3 4 5 6 7 8 9A B C D E F
101101100010000001100011010011 (binaire)
2d8818d3 (hexadécimale)
64
Numération et codage – Changements de bases
Le code hexadécimal est composé de 16 symboles
{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} et correspond à une
contraction d’un nombre binaire par quartet.
On peut par exemple écrire le nombre précédent :
1011100(2) = 0101 1100(2) = 5C(16)
0101 1100
5C(16)
Numération et codage – Changements de bases
Pour passer d’un nombre décimal à un nombre exprimé dans une autre
base, on utilise la méthode des divisions successives.
On divise alors le nombre décimal N(10) par la base B. Le reste de la
division est un digit du résultat
N(10) B
92 16
5 16
Reste
12 0
5
Sens de
12 en hexadécimal est lecture du
représenté par la résultat
lettre C (10 par A, 11 (5C)
par B, … 15 par F)
Numération et codage – Changements de bases
Donner le nombre 42 (codé en décimal) en
hexadécimal.
Nombre en 42 16 Base
base décimale 2 16
10 0
Reste 2
Sens de lecture du
résultat
(2A)
3C(16) = 12 + 48
3C(2) = 60
Chap2: Algorithmique
69
2.1 - Introduction
Matériel / Logiciel
Domaine du logiciel (software)
◦ instructions expliquant à l’ordinateur
comment traiter un problème
◦ algorithmes : représentation informatiques
de ces instructions
◦ programme
70
Algorithmique
Le terme algorithme vient du nom du mathématicien arabe
Al--Khawarizmi (820 après J.C.)
Al
Un algorithme est une description complète et détaillée des actions à
effectuer et de leur séquencement pour arriver à un résultat donné
71
2.2 - Algorithmes et programmes
Informations
en entrée
Algorithme informatique
=
schéma de calcul
72
1.7. Etapes de réalisation d’un programme
Enoncé du problème
Spécification
Cahier des charges
Analyse
Algorithme
Traduction en langage
Programme source
Compilation
Programme exécutable
Tests et modifications
Version finale et résultats
◦ Le pseudo-
pseudo-code: représentation textuelle avec une série de
conventions ressemblant à un langage de programmation (sans les
problèmes de syntaxe)
plus pratique pour écrire un algorithme
représentation largement utilisée
74
Exemple d’un algorithme : Surface d’un
cercle « pseudo
pseudo--code » « organigramme »
Les instructions de base d’un
programme
Un programme informatique est formé de
quatre types d’instructions considérées
comme des briques de base :
• Les variables et leurs affectations
• Les lectures et/ou les écritures
• Les tests
• Les boucles
Notion de variable
Dans les langages de programmation une variable sert à stocker la valeur
d’une donnée
Règle : Les variables doivent être déclarées avant d’être utilisées, elle
doivent être caractérisées par :
◦ un nom (Identificateur
Identificateur)
◦ un type (entier, réel, caractère, chaîne de caractères, …)
◦ Une valeur
77
Choix des identificateurs (1)
Le choix des noms de variables est soumis à quelques règles qui
varient selon le langage, mais en général:
Un nom doit commencer par une lettre alphabétique
exemple valide: A1 exemple invalide: 1A
78
Choix des identificateurs (2)
Conseil: pour la lisibilité du code choisir des noms significatifs
qui décrivent les données manipulées
exemples:TotalVentes2006, Prix_TTC, Prix_HT
79
Types des variables
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut
prendre, les types offerts par la plus part des langages sont:
Type numérique (entier ou réel)
◦ Byte (codé sur 1octet): de 0 à 255
◦ Entier court (codé sur 2 octets) : -32 768 à 32 767
◦ Entier long (codé sur 4 ou 8 octets)
◦ Réel simple précision (codé sur 4 octets)
◦ Réel double précision (codé sur 8 octets)
Type logique ou booléen:
booléen: deux valeurs VRAI ou FAUX
Type caractère: lettres majuscules, minuscules, chiffres, symboles, …
exemples: ’A’, ’a’, ’1’, ’?’, …
Type chaîne de caractère: toute suite de caractères,
exemples: " Nom, Prénom", "code postale: 1000", …
80
Déclaration des variables
81
L’instruction d’affectation
l’affectation consiste à attribuer une valeur à une variable
(ça consiste en fait à remplir où à modifier le contenu d'une zone mémoire)
82
Quelques remarques
83
Exercices simples sur l'affectation (1)
84
Exercices simples sur l'affectation (2)
Algorithme Test_Permut
Variables A, B : Entier
Début
A ← 1;
B ← 2;
A ← B;
B ← A;
Fin
85
Exercices simples sur l'affectation (3)
86
Expressions et opérateurs
Une expression peut être une valeur, une variable ou une opération
constituée de variables reliées par des opérateurs
exemples: 1, b, a*2, a+ 3*b-
3*b-c, …
L'évaluation de l'expression fournit une valeur unique qui est le résultat de
l'opération
Les opérateurs dépendent du type de l'opération, ils peuvent être :
◦ des opérateurs arithmétiques: +, -, *, /, % (modulo), ^ (puissance)
◦ des opérateurs logiques: NON, OU, ET
◦ des opérateurs relationnels: =, , <, >, <=, >=
◦ des opérateurs sur les chaînes: & (concaténation)
87
Priorité des opérateurs
◦ ^ : (élévation à la puissance)
◦ * , / (multiplication, division)
◦ % (modulo)
◦ + , - (addition, soustraction)
exemple: 2+3*7 vaut 23
88
Les instructions d'entrées-
d'entrées-sorties: lecture et écriture (1)
89
Les instructions d'entrées-
d'entrées-sorties: lecture et écriture (2)
90
Exemple (lecture et écriture)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui
calcule et affiche le double de ce nombre
Algorithme Calcul_double
variables A, B : entier
Début
écrire("entrer le nombre ")
lire(A)
B ← 2*A
écrire("le double de ", A, "est :", B)
Fin
91
Exercice (lecture et écriture)
Ecrire un algorithme qui vous demande de saisir votre nom puis votre
prénom et qui affiche ensuite votre nom complet
Algorithme AffichageNomComplet
variables Nom, Prenom, Nom_Complet : chaîne de caractères
Début
écrire("entrez votre nom")
lire(Nom)
écrire("entrez votre prénom")
lire(Prenom)
Nom_Complet ← Nom & Prenom
écrire("Votre nom complet est : ", Nom_Complet)
Fin
92
Méthode de construction d’un algorithme simple
Exemple :
93
Dut 2018/2019
Méthode de construction d’un algorithme simple
Méthodologie a suivre :
constantes : Pi = 3.14159
Variables : Rayon, Surface
Types : Rayon, Surface : réel
Expressions et affectation : Surface ← Pi * (Rayon)^2 ;
Opérations d’entrée-sortie : Lire (Rayon);
Écrire (Surface);
94
Dut 2018/2019
Méthode de construction d’un algorithme simple
Algorithme Calcul_Aire
Constantes
Pi = 3,14159
Variables
Rayon, Surface : réels
Début
Lire (Rayon);
Surface ← Pi * (Rayon*Rayon) ;
Ecrire (Surface);
Fin
2018/2019 95
Traduction en langage C
Programme C
#include <stdio.h>
#include <math.h>
main ( ){
const float Pi = 3.14159;
float rayon, surface;
printif ( " donner le rayon \n " );
scanf (" %f ", &rayon);
surface = Pi *pow (rayon,2);
printif ( " La surface %f\n ",surface);
}
2018/2019 96
Chap2 : langage de programmation : c
Introduction : objectifs
Introduction
✔ Savoir lire, stocker et afficher des données et résultats
Introduction
Il est l’aboutissement de deux langages :
☞ BPCL développé en 1967 par Martin Richards.
☞ B développé en 1970 chez AT&T par Ken Thompson.
Introduction
De nombreux compilateurs ont été écrits, mais comportant
quelques incompatibilités portant atteinte à l’objectif de
portabilité.
Il s’est ensuivi un travail de normalisation effectué par le comité
de normalisation X3J11 de l’ANSI qui a abouti en 1988 avec la
parution par la suite du manuel :
10
06/12/2018 Programmer en langage C 0
Introduction : intérêt du langage C
Introduction
gestion.
☞ Langage structuré.
☞ Langage évolué qui permet néanmoins d’effectuer des
opérations de bas niveau (« assembleur d’Unix »).
☞ Portabilité (en respectant la norme !) due à l’emploi de
bibliothèques dans lesquelles sont reléguées les fonctionnalités
liées à la machine.
☞ Grande efficacité et puissance.
10
06/12/2018 Programmer en langage C 1
Introduction : Etapes de la réalisation
Introduction
l’ordinateur les tâches que vous voulez lui faire exécuter, il est
créé à l’aide d’un éditeur.
10
06/12/2018 Programmer en langage C 2
Introduction : Etapes de la réalisation
Introduction
du langage machine.
◦ Votre programme C doit être transformé en langage machine pour
pouvoir être exécuté sur votre ordinateur. Cette opération est
réalisée par un compilateur qui transforme votre fichier code source
en un fichier contenant le code objet(les mêmes instructions en
langage machine).
◦ Chaque compilateur possède sa propre commande pour créer le
code objet.
Windows: C Microsoft,Turbo C,Turbo C++, Borland C, Borland C++,Dev-C++.
Unix : utiliser la commande c.
Linux et Unix: la commande gcc.
06/12/2018 Programmer en langage C 103
Introduction : Etapes de la réalisation
Introduction
fonctions contenant du code objet destiné à des fonctions
prédéfinies.
◦ Ces fonctions sont fournies avec votre compilateur. Si votre
programme les utilise, le fichier objet obtenu après compilation doit
être complété par le code objet issu de la bibliothèque de fonctions.
◦ Cette dernière étape, appelée liaison, fournit le programme
exécutable (exécutable signifie que ce programme peut être
exécuté sur votre ordinateur)
Introduction
/*déclaration*/
Main()
{
…..
}
Bibliothèques précompilées
(.lib)
math.lib
Programme executable
(.exe)
105
Introduction : votre premier programme
Introduction
#include<stdio.h>
main()
{ Affichage Bonjour
printf(‘’Bonjour’’);
}
Les mots-clés
Programme principal
printf("donnez un nombre:");
scanf("%f",&x);
if(x<0.0){
Bloc
printf("le nombre %f ne possède pas de racine carrée\n",x);
}
else {
racx=sqrt(x);
printf("le nombre %f a pour racine carrée :%f\n",x,racx);
}
}
printf("travail terminé Au revoir");
system(" pause" );
108
}
Structure d’un
d’un programme en Langage C
Les directives à destination du préprocesseur
◦ L’instruction
printf("je vais vous calculer %d racines carrées\n",NFOIS);
Ressemble à la précédente avec la différence qu’il reçoit un
argument que l’on nomme un format, c’est comme un guide qui
précise comment afficher les informations, dans notre cas le code
format %d précise qu’il s’agit d’un entier.
Chaînes de caractères
◦ Les chaînes de caractères sont vues comme un pointeur sur des
caractères et sont donc de type char *.
◦ Exemple:
char * chaine = "Hello World !";// une chaine de caractère
// noter l’utilisation du double quotte
119
Les types de base : Entiers
12
06/12/2018 Programmer en langage C 3
Les types de base : Les flottants
On distingue trois types de flottants : float
float,
Syntaxe de déclaration:
◦ int x,y;
◦ short compteur;
◦ float prix,salaire;
◦ double m;
◦ char s;
12
06/12/2018 Programmer en langage C 8
Solutions
Quel type de variable convient le mieux pour
stocker les valeurs suivantes:
◦ L’âge d’une personne •unsigned int age;
◦ Le poids •unsigned int poids;
◦ Le rayon d’un cercle •float rayon=3;
◦ Salaire annuel •long salaire_annuel;
•float cout=29,95;
◦ Le prix d’un article
•const int note_max=100;
◦ La note la plus haute d’un test #define note_max 100;
◦ La température •float temperature;
◦ Le gain d’une personne •long gain=30000;
•double distance;
◦ La distance d’une étoile en kilomètre
La syntaxe du langage C
langage C, on écrit une instruction par ligne et elle se termine par un point
virgule( à l’exception de #define et #include). Par exemple:
x=2+3;
est une instruction d’affectation. Elle demande à l’ordinateur
d’ajouter 2 et 3 et d’attribuer le résultat à la variable x.
◦ Les blocs:
Un bloc (ou instructions composées) est un groupe
d’instructions entre accolades:
{
printf("Hello"); {printf("Hello");
printf("world!"
); printf("world!");}
} 06/12/2018 Programmer en langage C 132
Instructions, Expressions et Opérateurs
Les expressions:
Une expression est une combinaison d’opérateurs et d’opérandes
(variables, constantes). Autrement tout ce qui représente une valeur
La syntaxe du langage C
numérique. Une expression génère toujours un résultat d’un type bien
défini qu’on appellera le type de l’expression.
◦ Les expressions Simples
L’expression simple est constituée d’une seule variable, d’une
constante. Par exemple:
PI //constante dont la valeur est définie par #define
Taux //variable
◦ Les expressions complexes
Les expressions complexes sont constituées d’expressions
plus simples avec des opérateurs. Par exemple:
2+8
8+(5*taux)+(taux*taux)/cout
06/12/2018 Programmer en langage C 133
Instructions, Expressions et Opérateurs
Les opérateurs: opérateur d’affectation
d’affectation
◦ L’opérateur d’affectation est le signe(=). Dans le programme C :
La syntaxe du langage C
x=y;
ne signifie pas x égal y. Elle indique à l’ordinateur d’affecter la valeur de la
variable y à x. Cette instruction doit être composée d’une expression à
droite du signe égale, et d’un nom de variable à gauche de ce signe:
variable=expression;
◦ Exemple:
x=6+(y=4+5);
a=b=2;
La syntaxe du langage C
var += exp ; équivalent à var = var + (exp) ;
var -= exp ; var = var - (exp) ;
var *= exp ; var = var * (exp) ;
var /= exp ; var = var / (exp) ;
var %= exp ; var = var % (exp) ;
◦ Attention :
pas d’espace entre l’opérateur op et le égal =,
x *= y+1 est équivalent à x = x*(y+1) et pas
x = x*y+1.
13
06/12/2018 Programmer en langage C 5
Instructions, Expressions et Opérateurs
Opérateurs arithmétiques
La syntaxe du langage C
13
06/12/2018 Programmer en langage C 6
Instructions, Expressions et Opérateurs
Opérateurs arithmétiques
◦ Remarques
La syntaxe du langage C
Les opérateurs unaires opèrent sur une seule variable ou
opérande.
Concernant l’incrémentation pré/postfixe, voici un petit
exemple: Supposons que la valeur de N soit égale à 3 :
Incrémentation postfixe : X = N++ ;
Résultat : N = 4 et X = 3
Incrémentation préfixe : X = ++N ;
Résultat : N = 4 et X = 4
Décrémentation postfixe : X = N-- ;
Résultat : N = 2 et X = 3
Décrémentation préfixe : X = --N ;
Résultat : N = 2 et X = 2
06/12/2018 Programmer en langage C 137
Instructions, Expressions et Opérateurs
Opérateurs arithmétiques
La syntaxe du langage C
◦ Remarques :
Les opérandes de ces opérateurs arithmétiques peuvent
appartenir à tout type arithmétique seul l’opérateur %
requiert des types entiers.
Le résultat d’une division d’entiers est aussi un entier,
Exemple :
6/4 // Resultat: 1
6%4 // Resultat: 2
6.0 / 4.0 // Resultat: 1.5
13
06/12/2018 Programmer en langage C 8
Instructions, Expressions et Opérateurs
Opérateurs de comparaison
La syntaxe du langage C
◦ Toute comparaison est une expression de type int
qui renvoie la valeur 0 (faux) ou 1 (vraie). Il faut que
les opérandes soient du même type arithmétique (ou
des pointeurs sur des objets de même type).
◦ Attention : il ne faut pas confondre l’opérateur
d’égalité (==) avec celui d’affectation (=).
◦ Les différents opérateurs de comparaison sont
détaillés dans le tableau ci-dessous.
La syntaxe du langage C
06/12/2018 Programmer en langage C 140
Instructions, Expressions et Opérateurs
Opérateurs de comparaison
La syntaxe du langage C
#include <stdio.h>
main (){
int x=14,y=1; // x est différent de y
if (x = y) //erreur!!! il faudrait écrire ’if (x == y)’
printf("x est égal à y (%d=%d)\n",x,y);
else
printf("x est différent de y (%d!=%d)\n",x,y);
system(« pause»);
}
06/12/2018 Programmer en langage C 141
Instructions, Expressions et Opérateurs
Opérateurs logiques
Les opérateurs logiques, permettent de combiner le résultat de plusieurs
expressions de comparaison en une seule expression logique. Les
La syntaxe du langage C
opérandes des opérateurs logiques peuvent être n’importe quel scalaire.
Toute valeur différente de 0 est interprétée comme vraie (et 0 correspond
à ’faux’). Comme pour les expressions de comparaisons les expressions
logiques renvoient une valeur entière (0 =faux ; 1=vraie).
Remarque :
les opérateurs && et || évaluent les opérandes de gauche à droite et
le résultat est connu dès l’opérande de gauche. Ainsi, l’opérande de
droite n’est évaluée que si celle de gauche est vraie dans le cas de
L’opérateur && (respectivement fausse dans le cas de l’opérateur ||).
Exemple:
(i < max) && (f(14) == 1), la fonction f n’est appelée que si i < max.
La syntaxe du langage C
Exemples
◦ L’expression : 32 && 40 vaut 1
◦ L’expression : !65.34 vaut 0
◦ L’expression : !!0 vaut 0
La syntaxe du langage C
Exprime des calculs successifs dans une même expression. Le
type et la valeur de l’expression sont ceux du dernier
opérande.
Exemple : x = 5 , x + 6; L’expression a pour valeur 11
◦ Opérateur conditionnel (? :)
<expression> ? <expr1>: <expr2>
La syntaxe du langage C
06/12/2018 Programmer en langage C 145
Les conversions de types
La conversion de type est un outil très puissant, elle doit donc
être utilisée avec prudence. Le compilateur fait de lui-même des
La syntaxe du langage C
conversions lors de l’évaluation des expressions. Pour cela
appliquer des règles de conversion implicite. Ces règles ont pour
but la perte du minimum d’information dans l’évaluation de
l’expression. Ces règles sont les suivantes:
◦ Règle de Conversion Implicite
Convertir les éléments de la partie droite d’une expression
d’affectation dans le type de la variable ou de la constante le
plus riche.
Faire les opérations de calcul dans ce type.
Puis convertir le résultat dans le type de la variable affectée.
La syntaxe du langage C
1. si l’un des deux opérandes est du type long double alors le
calcul doit être fait dans le type long double ;
2. sinon, si l’un des deux opérandes est du type double alors le
calcul doit être fait dans le type double ;
3. sinon, si l’un des deux opérandes est du type float alors le calcul
doit être fait dans le type float ;
4. si l’un des deux opérandes est du type unsigned long int alors le
calcul doit être fait dans ce type ;
5. si l’un des deux opérandes est du type long int alors le calcul
doit être fait dans le type long int ;
La syntaxe du langage C
long double
double
Float
unsigned long long
long long
unsigned long
long
unsigned int
int
La syntaxe du langage C
◦ Il est possible de forcer la conversion d’une variable
(ou d’une expression) dans un autre type avant de
l’utiliser par une conversion explicite. Cette
opération est appelée “cast
cast”. Elle se réalise de la
manière suivante :
(type) expression
◦ Prenons pour exemple l’expression : i = (int) f +
(int) d ;
◦ f et d sont convertis en int, puis additionnés. Le
résultat entier est rangé dans i.
06/12/2018 Programmer en langage C 149
Les conversions de types
Exemple
La syntaxe du langage C
float f ; double d ; int i ; long li ;
li =(long int)(f + i ); i est transformé en float puis additionné à f,
le résultat est transformé en long et rangé dans li.
La syntaxe du langage C
Long q=2;
Float x=1.75;
Donner le type et la valeur de chacune des expressions suivantes
a) n+q
b) n+x
c) n%p+q
d) n<p
e) q+3 *(n>p)
f) x*(q==2)
g) x*(q=2)
h) (q-2)&&(n-10)
La syntaxe du langage C
long q=2;
float x=1.75;
Donner le type et la valeur de chacune des expressions suivantes
a) n+q
a) long 12
b) n+x b) float 11,75
c) n%p+q c) long 4
d) n<p d) int 0
e) q+3 *(n>p) e) long 5
f) x*(q==2) f) float 1,75
g) x*(p==2) g) float 0
h) Int 0
h) (q-2)&&(n-10)
La syntaxe du langage C
-1 si n est négatif
0 si n est nul
1 si n est positif
La syntaxe du langage C
-1 si n est négatif
0 si n est nul
1 si n est positif
n ? (n>0 ? 1: -1) : 0
155
2018/2019
Besoin a des concepts de ruptures de séquence
Algorithme
Rare les algorithmes qui peuvent se
Calcul_Aire décrire uniquement par un
Constantes enchaînement séquentiel d’opération
élémentaire
Pi = 3,14159
Variables
On a besoin a des concept de rupture de
Rayon, Surface : réels séquence comme les test et les boucles
Début Ex :
Lire (Rayon); un algorithme qui résout une équation
Surface ← Pi * (Rayon)^2 ; de deuxième degré
Ecrire (Surface); un algorithme qui calcule une série
Fin numérique
2018/2019 156
Les structures conditionnelles et les boucles
Les tests simples : permet de réaliser un choix parmi deux possibilités (Ex
:Booléen vrais ou faux)
Les instructions conditionnelles : c’est un concept de tests multiples,
permet de comparer un objet à une série de valeurs et exécuter si la condition
est vérifiée(Ex : recherche des nombres premier dans un ensemble)
157
2018/2019
Tests: instructions conditionnelles (1)
Les instructions conditionnelles servent à exécuter une instruction ou une
séquence d'instructions que si une condition est vérifiée
On utilisera la forme suivante:
Si condition alors
instruction ou suite d'instructions1
Sinon
instruction ou suite d'instructions2
Finsi
◦ La condition ne peut être que vraie ou fausse
158
2018/2019
Tests: instructions conditionnelles (2)
La partie sinon n'est pas obligatoire, quand elle n'existe pas et que la condition
est fausse, aucun traitement n'est réalisé
Si condition alors
instruction ou suite d'instructions1
Finsi
159
2018/2019
Exemple (Si…Alors…Sinon)
160
2018/2019
Exemple (Si…Alors…Sinon)
Algorithme AffichageValeurAbsolue (version1)
Variable x : réel
Début
Ecrire (" Entrez un réel : ”);
Lire (x);
Si ( x < 0) alors
Ecrire ("la valeur absolue de ", x, "est:",-x);
Sinon
Ecrire ("la valeur absolue de ", x, "est:",x);
Finsi
Fin
161
2018/2019
Exemple (Si…Alors)
162
2018/2019
Exemple (Si…Alors)
Algorithme AffichageValeurAbsolue (version2)
Variable x,y : réel
Début
Ecrire (" Entrez un réel : ”);
Lire (x);
y← x;
Si x < 0 alors
y ← -x;
Finsi
Ecrire ("la valeur absolue de ", x, "est:",y);
Fin
163
2018/2019
Exercice (tests)
164
2018/2019
Exercice (tests)
Ecrire un algorithme qui demande un nombre entier à l'utilisateur,
puis qui teste et affiche s'il est divisible par 3
Algorithme Divsible_par3
Variable n : entier
Début
Ecrire (" Entrez un entier : ”);
Lire (n);
Si (n%3=0) alors
Ecrire (n," est divisible par 3");
Sinon
Ecrire (n," n'est pas divisible par 3");
Finsi
Fin
165
2018/2019
Conditions composées
Une condition composée est une condition formée de plusieurs
conditions simples reliées par des opérateurs logiques:
ET, OU, OU exclusif (XOR) et NON
Exemples :
◦ x compris entre 2 et 6 : (x > 2) ET (x < 6)
◦ n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
◦ deux valeurs et deux seulement sont identiques parmi a, b et c :
(a=b) XOR (a=c) XOR (b=c)
166
2018/2019
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI VRAI
VRAI FAUX VRAI FAUX
FAUX VRAI FAUX VRAI
FAUX FAUX FAUX FAUX
C1 C2 C1 XOR C2
C1 NON C1
VRAI VRAI
VRAI
VRAI FAUX
FAUX
FAUX VRAI
FAUX FAUX
167
Dut 2018/2019
Tables de vérité
C1 C2 C1 ET C2 C1 C2 C1 OU C2
VRAI VRAI VRAI
VRAI VRAI VRAI
VRAI FAUX FAUX
VRAI FAUX VRAI
FAU VRAI FAUX
X FAUX VRAI VRAI
FAU FAUX FAUX FAUX FAUX FAUX
X
C1 C2 C1 XOR C1 NON C1
C2 VRAI FAUX
VRAI VRAI FAUX FAUX VRAI
VRAI FAUX VRAI
FAUX VRAI VRAI
168 FAUX FAUX FAUX
2018/2019
Tests imbriqués
Les tests peuvent avoir un degré quelconque d'imbrications
Si condition1 alors
Si condition2 alors
instructionsA
Sinon
inon
instructionsB
Finsi
Sinon
Si condition3 alors
instructionsC
Finsi
Finsi
169
2018/2019
Tests imbriqués: exemple (version 1)
Algorithme NegPos
Variables n : entier
Début
Ecrire ("entrez un nombre : ");
Lire (n);
Si (n < 0) alors
Ecrire ("Ce nombre est négatif");
Sinon
Si (n = 0) alors
Ecrire ("Ce nombre est nul");
Sinon
Ecrire ("Ce nombre est positif");
Finsi
Finsi
Fin
170
2018/2019
Tests imbriqués: exemple (version 2)
Algorithme NegPos2
Variables n : entier
Début
Ecrire ("entrez un nombre : ");
Lire (n);
Si (n < 0) alors
Ecrire ("Ce nombre est négatif");
Finsi
Si (n = 0) alors
Ecrire ("Ce nombre est nul");
Finsi
Si (n > 0) alors
Ecrire ("Ce nombre est positif");
Finsi
Fin
Remarque : dans la version 2 on fait trois tests systématiquement alors que dans la
version 1, si le nombre est négatif on ne fait qu'un seul test .
Conseil : utiliser les tests imbriqués pour limiter le nombre de tests et placer d'abord les
conditions les plus probables (minimiser la complexité)
171
2018/2019
Tests imbriqués: exercice
Le prix de photocopies dans une reprographie varie selon le
nombre demandé: 0,5 DH la copie pour un nombre de copies
inférieur à 10, 0,4DH pour un nombre compris entre 10 et 20 et
0,3DH au-delà.
172
2018/2019
Tests imbriqués: corrigé de l'exercice
Algorithme cop
Variables copies : entier
prix : réel
Début
Ecrire ("Nombre de photocopies : ");
Lire (copies);
Si (copies < 10) alors
prix ← copies*0.5;
Sinon
Si (copies < 20) alors
prix ← copies*0.4;
Sinon
prix ← copies*0.3;
Finsi
Finsi
Ecrire (“Le prix à payer est : ”, prix);
Fin
173
2018/2019
Tests imbriqués: Exercice 2
174
2018/2019
Tests imbriqués: corrigé de l'exercice 2
Algorithme Eq
Ecrire (" le trinome possède deux racines réelles : ", sol1, sol2);
Sinon
sol1 ← -B /(2*A);
Ecrire (" le trinome possède une racine réelle : ", sol1);
Finsi
Finsi
Fin
175
2018/2019
Écrire un algorithme qui à partir d’un nombre compris entre 1 et 7
affiche le jour correspondant ?
Algorithme jour_semaine
Variable jour: entier ;
Début
Ecrire ("Saisir un jour : ") ;
Lire(jour) ;
SI jour=1 alors Ecrire("Lundi")
SINON SI jour=2 alors Ecrire("Mardi")
SINON SI jour=3 alors Ecrire("Mercredi")
SINON SI jour=4 alors Ecrire("Jeudi")
SINON SI jour=5 alors Ecrire("Vendredi")
SINON SI jour=6 alors Ecrire("Samedi")
SINON SI jour=7 alors Ecrire("Dimanche")
SINON Ecrire("jour invalide")
FIN SI
Fin
17
6
Structure à choix multiples
Structure SELON
Les boucles
DUT 2018/2019
Les types de boucles:
On distingue 2 types de boucles:
2018/2019 181
Les boucles Tant que
FinTantQue Vrai
condition instructions
Faux
2018/2019 182
Boucle TantQue : exemple
Algorithme Plus_Grand_Element Entrée: n entiers S1,…, Sn
Variables grand, S, i,n: entiers Sortie: grand contenant le
Début plus grand élément
i2; n4;
Ecrire( "donnez un nombre 1: "); Trace de l’algorithme:
Lire(S); n=4; S= -2; S=6; S =5; S=6
grand S;
TantQue (i <=n) Faire grand =-2 i=2
Ecrire(" donnez le nombre ",i, " :");
Lire( S); grand = 6 i=3
Si (S > grand) alors
i=4
grand S;
FinSi i=5
i i+1;
FinTantQue
Ecrire (grand ,i); 6 4
Fin
2018/2019 183
Boucle TantQue : exercice
2018/2019 184
Boucle TantQue : solution
Un algorithme qui détermine le premier nombre entier N tel que la
somme de 1 à N dépasse strictement 100
Algorithme Pnombre
Variables som, i : entier
Debut
i ← 0;
som← 0;
TantQue (som <=100) Faire
i ← i+1;
som ← som+i;
FinTantQue
Ecrire (" La valeur cherchée est N= ", i);
Fin
2018/2019 185
Algorithme d’Euclide
Trouver le plus grand diviseur commun (pgcd) de deux entiers
2018/2019 186
Trouver le PGCD de a et b
Exemple: pgcd(30, 105)
1ère méthode: Trouver tous les diviseurs de a et b, et trouver le
diviseur commun le plus grand
◦ Diviseurs de 30: 1, 2, 3, 5, 6, 10, 15, 30
◦ Diviseurs de 105: 1, 3, 5, 7, 15, 21, 35, 105
pgcd(30, 105) = 15
pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15
2018/2019 187
Méthode d’Euclide : Algorithme
2018/2019 188
Algorithme d’Euclide
Algorithme pgcd_deux nombres
Entrée: a, b deux entiers
variables r,a,b: entiers positifs
Début
Ecrire("donner le premier nombre"); Sortie: pgcd(a,b)
Lire(a);
Ecrire("donner le deuxieme nombre ");
Lire(b);
TantQue b > 0 Faire
Donner la trace de
//diviser a par b: a = b.q+r, 0 ≤ r < b;
l’algorithme lorsque:
ra%b;
a=504 et b=396 ?
ab;
b r;
Ecrire (a,b,r);
FinTantQue
Fin 2018/2019 189
Algorithme d’Euclide
Entrée: a, b deux entiers positifs Trace de l’algorithme pour
a=504 et b=396
Sortie: pgcd(a,b)
504 396 a
108 1
2018/2019 190
b
Les boucles Pour
2018/2019 191
Les boucles Pour
Pour compteur allant de initiale à finale par pas valeur du pas
instructions
FinPour
i ←initiale
Vrai
i n'a pas atteint finale instructions i ← i + pas
Faux
2018/2019 192
Les boucles Pour
Remarques :
Compteur est une variable de type entier (ou caractère). Elle doit
être déclaré
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
2018/2019 193
Déroulement des boucles Pour
1) La valeur initiale est affectée à la variable compteur
b) Si compteur est <= à finale dans le cas d'un pas positif (ou si compteur
est >= à finale pour un pas négatif), instructions seront exécutées
2018/2019 195
Boucle Pour : exemple
Algorithme Plus-Grand-Element
//Réécriture de l’algorithme précédent mais avec une boucle ``Pour’’
Variable grand,i,S,n, :entiers
Debut
grand S;
Ecrire(" donnez un nombre " );
Lire(S);
Pour i allant de 1 à n
Ecrire(" donnez le nombre ",i);
Lire( S);
Si (S > grand) alors //une plus grande valeur a été trouvée
grand S ;
FinSi
FinPour
Ecrire (grand);
Fin
2018/2019 196
Boucle Pour : remarque
Il faut éviter de modifier la valeur du compteur (et de finale) à
l'intérieur de la boucle. En effet, une telle action :
2018/2019 197
Lien entre Pour et TantQue
La boucle Pour est un cas particulier de TantQue (cas où le nombre d'itérations
est connu et fixé) . Tout ce qu'on peut écrire avec Pour peut être remplacé avec
TantQue (la réciproque est fausse)
instructions
FinPour
peut être remplacé par : compteur ← initiale;
(cas d'un pas positif) TantQue compteur <= finale Faire
instructions;
compteur ← compteur+pas;
FinTantQue
2018/2019 198
Lien entre Pour et TantQue: exemple
Calcul de x à la puissance n
avec la boucle Pour et la
boucle TantQue
x : un réel non nul
n : entier positif ou nul
2018/2019 199
Solution avec la boucle Pour
Algorithme TestPour
Variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ");
Lire (x, n);
puiss ← 1;
Pour i allant de 1 à n
puiss← puiss*x ;
FinPour
Ecrire (x, " à la puissance ", n, " est égal à ", puiss);
Fin
2018/2019 200
Solution avec la boucle TantQue
Algorithme TestTantQ
variables x, puiss : réel
n, i : entier
Debut
Ecrire (" Entrez respectivement les valeurs de x et n ");
Lire (x, n);
puiss ← 1; i ← 1;
TantQue (i<=n) Faire
puiss← puiss*x ;
i ← i+1;
FinTantQue
Ecrire (x, " à la puissance ", n, " est égal à ", puiss);
Fin
2018/2019 201
Algorithme de la fonction factorielle : Exemple
2018/2019 202
Algorithme de la fonction factorielle
2018/2019 203
Algorithme de la recherche des nombres premiers :
Exemple
Langage C et Java
test
while (condition) {
Bloc d’instructions; corps_boucle
2018/2019 205
La boucle Pour en langage de
programmation
Langage C et Java
init
incr
2018/2019 206
Détecter l’erreur dans les deux algorithmes
Algorithme Algorithme
Algorithme Essai0 Algorithme Essai1
Variables Variables
n : entier k, N : entier
Début Début
n ← 15; n ← 200;
TantQue (n<0) Faire Pour k Allant de 1 à n
Ecrire (n); Ecrire (k);
n ← n – 2; k ← n – 100;
FinTantQue FinPour
Fin Fin
2018/2019 207
Boucles imbriquées
Les instructions d'une boucle peuvent être des instructions
itératives. Dans ce cas, on aboutit à des boucles imbriquées
Exemple: Exécution?
Pour i allant de 1 à 5
Pour j allant de 1 à i OK
Ecrire("O"); OOK
FinPour OOOK
Ecrire(" K"); OOOOK
OOOOOK
FinPour
2018/2019 208
La boucle Faire…Tant Que
◦ Faire
Instruction(s) Instruction(s) de la
boucle
TantQue (condition)
◦ do
Instruction;
condition
while (condition) Vraie
do{ Fausse
Jusqu'à (condition)
vrai
condition
faux
les instructions entre Répéter et jusqu’à sont exécutées au moins une fois et leur
exécution est répétée jusqu’à ce que la condition soit fausse (tant qu'elle est
vraie)
2018/2019 210
Boucle Répéter jusqu’à : exemple
Un algorithme qui détermine le premier nombre entier N tel que la somme de
1 à N dépasse strictement 100 (version avec répéter jusqu'à)
Algorithme Test
Variables som, i : entier
Debut
som ← 0;
i ← 0;
Répéter
i ← i+1;
som ← som+i;
Jusqu'à ( som <=100)
Ecrire (" La valeur cherchée est N= ", i);
Fin
2018/2019 211
Choix d'un type de boucle
2018/2019 212
Algorithme de la racine carrée : Exercice
2018/2019 213
Algorithme de la racine carrée
Exercice
2018/2019 215
Chap3 : Les structures de contrôles en
Programmation C.
2018/2019 216
Les structures de contrôle
On appelle structure de contrôle toute instruction servant à contrôler le
déroulement de l’enchaînement des instructions à l’intérieur d’un programme,
ces instructions peuvent être des instructions conditionnelles ou itératives.
La syntaxe du langage C
Parmi les structures de contrôle, on distingue :
◦ structures de choix
if….else (choix conditionnel)
switch (choix multiple)
◦ structures répétitives ou itérative ou boucle
for
while
do…while
◦ Branchement inconditionnel
Break, goto, continue
La syntaxe du langage C
logique de base du langage C qui permet d'exécuter
un bloc d'instructions selon qu'une condition est
vraie ou fausse.
◦ Syntaxe
Forme 1
if (expression)
instruction1;
la forme if est ici dans sa forme la plus simple.
La syntaxe du langage C
instruction2;
Si expression est vraie, instruction1 est exécutée, sinon c’est instruction2 qui est
exécutée.
Forme 3
if (expression1)
instruction1;
else if (expression2)
instruction2;
else
instruction3;
Les instructions if sont imbriquées. Si expression1 est vraie, instruction1
est exécutée. Dans le cas contraire expression2 est évaluée si cette dernière est
vraie instruction2 est exécutée. Si les deux expressions sont fausses, c’est
instruction3 qui est exécuté 21
06/12/2018 Programmer en langage C 9
Les structures de contrôle : if
if--else
Exemples:
◦ Exemple 1
La syntaxe du langage C
if (salaire >45.000)
tax=0.30;
else
tax=0.25;
◦ Exemple 2
if (age <18)
printf(‘’mineur’’);
else if (age <65)
printf(‘’adulte’’);
else
printf(‘’personne agée’’); 06/12/2018
Programmer en langage C 220
Les structures de contrôle : if
if--else
#include <stdio.h>
main (){
int i;
printf("Tapez un nombre entier positif ou negatif: ");
scanf("%d", &i);
if (i<0) {
i=-i;
printf("J'ai remis i à une valeur positive.\n");
}
else
printf("Vous avez tapé un nombre positif.\n");
system(« pause»);
22
La syntaxe du langage C
différentes instructions en fonction d’une expression qui
pourra avoir plus de deux valeurs.
22
06/12/2018 Programmer en langage C 2
Les structures de contrôle : Switch
Syntaxe
La syntaxe du langage C
switch (<variable>) {
case <valeur 1> : <action 1>; break;
case <valeur 2> : <action 2>; break;
…
default : <action n>;
}
22
06/12/2018 Programmer en langage C 3
Remarques :
◦ Le fonctionnement de cette instruction est le suivant
expression est évaluée ;
s’il existe un énoncé case avec une constante qui est égale à
La syntaxe du langage C
la valeur de l’expression, le contrôle est transféré à
l’instruction qui suit cet énoncé;
si un tel case n’existe pas, et si énoncé default existe, alors le
contrôle est transféré à l’instruction qui suit l’énoncé default
si la valeur de l’expression ne correspond à aucun énoncé
case et s’il n’y a pas d’énoncé default, alors aucune instruction
n’est exécutée.
◦ Attention.
Lorsqu’il y a branchement réussi à un case, toutes les
instructions qui le suivent sont exécutées, jusqu' à la fin du
bloc ou jusqu’à une instruction de rupture (break).
06/12/2018 Programmer en langage C 224
Les structures de contrôle : Switch
#include<stdio.h>
main() {
int a,b,y;
La syntaxe du langage C
char operateur;
printf(‘’ Entrez un opérateur (+, -,* ou /):’’);
scanf(‘’%c’’,& operateur);
printf(‘’ Entrez deux entiers:’’);
scanf(‘’%d’’,&a); Scanf(‘’ %d’’,&b);
switch(operateur){
case ’-’ : y=a-b; printf(‘’%d’’,y);break;
case ’+’ : y=a+b; printf(‘’%d’’,y); break;
case ’*’ : y=a*b; printf(‘’%d’’,y); break;
case ’/’ : y=a/b; printf(‘’%d’’,y); break;
default : printf(‘’opérateur inconnu\n’’);break;
}
}
06/12/2018 Programmer en langage C 225
Les structures de contrôle : while
L’instruction while permet de répéter des
instructions, tant qu'une condition est vérifiée.
La syntaxe du langage C
Syntaxe
◦ Forme 1
while (condition)
une-instruction;
◦ Forme 2
while (condition) {
des instructions;
}
}
La syntaxe du langage C
2. si cette condition est fausse, l’instruction while se termine,
3. si la condition est vraie les instructions sont exécutées
4. l’exécution reprend à l’étape 1.
Exemple
#include <stdio.h>
main (){
int i=1, N;
printf(” donnez N=\n");
scanf("%d",&N);
while (i <= N) {
printf("%d ", i);
i = i+1;}
system(”pause");}
06/12/2018 Programmer en langage C 227
Les structures de contrôle :while
while imbriqué
#define MAX 4
La syntaxe du langage C
int i=0,j;
while (i < MAX ) {
j=0;
while (j < MAX ) {
printf(" position : %d \t %d\n",i,j);
j++;
}
i++;
}
06/12/2018 Programmer en langage C 228
Les structures de contrôle : do-
do-while
L'instruction do-while, exécute le bloc d'instructions tant qu’une
condition reste vraie. Dans cette boucle le test de la condition
s’effectue à la fin de la boucle.
La syntaxe du langage C
Syntaxe
◦ Forme 1
do
une-instruction;
while (condition);
◦ Forme 2
do {
Des instructions;
} while (condition);
06/12/2018 Programmer en langage C 229
Les structures de contrôle : do-
do-while
Exemple :
#include <stdio.h>
La syntaxe du langage C
#define MAX 4
main() {
int i=MAX;
do {
printf("Valeur de i : %i\n",i);
i++;
} while (i < MAX);
}
La syntaxe du langage C
Syntaxe:
◦ for( [expression1] ; [expression2] ; [expression3 ]) {
liste d’instructions
}
◦ Les crochets [ et ] signifient que leur contenu est facultatif
◦ Dans la construction de for :
expression1 : effectue les initialisations nécessaires avant
l’entrée dans la boucle;
expression2 : est le test de continuation de la boucle ; le
test est évalué avant l’exécution du corps de la boucle;
expression3 : est évaluée à la fin du corps de la boucle.
06/12/2018 Programmer en langage C 231
Les structures de contrôle : for
Remarques
◦ En pratique, expression1 et expression3 contiennent souvent
La syntaxe du langage C
plusieurs initialisations séparées par des virgules.
for(i=0,j=1,k=5;….;…)
◦ Les expressions expression1 et expression3 peuvent être
absente(les points-virgules doivent apparaître.
i=1;
for(;i<=5;) {
printf(‘’%d fois\n’’,i);
i++;}
◦ Lorsque expression2 est absente, l’expression correspondante
est considérée comme vraie. Par conséquent, for(;;) est une
boucle infinie
La syntaxe du langage C
{
liste d’instructions;
}
est équivalente à
expression1;
while(expression2)
{
liste d’instructions;
expression3;
}
La syntaxe du langage C
for(total=0,n=1;n<=100;n++)
total+=n;
Instruction break
La syntaxe du langage C
◦ On a vu le rôle de l’instruction break; au sein d’une
instruction de branchement multiple switch.
◦ L’instruction break peut, plus généralement, être
employée à l’intérieur de n’importe quelle boucle
(for ; while ; do-while). Elle permet l’abandon de la
structure et le passage à la première instruction qui
suit la structure.
◦ En cas de boucles imbriquées, break fait sortir de la
boucle la plus interne.
La syntaxe du langage C
main( ){
int i;
for (i = 1 ; i<=10 ; i++){
printf(’’début tour %d\n’’ ,i) ;
printf(’’ bonjour\n’’);
if (i ==3) break ;
printf(" fin tour %d\n", i) ;
}
printf(" après la boucle \n") ;
}
23
06/12/2018 Programmer en langage C 6
Les structures de contrôle : break, goto et continue
La syntaxe du langage C
#include <stdio.h>
main( ){
int i;
for (i = 1 ; i<=10 ; i++){ Evaluation:
printf(’’début tour %d\n’’ ,i) ; Début tour 1
printf(’’ bonjour\n’’); bonjour
fin tour 1
if (i ==3) break ; Début tour 2
printf(" fin tour %d\n", i) ; bonjour
fin tour 2
}
Début tour 3
printf(" après la boucle \n") ; bonjour
} Après la boucle
06/12/2018 Programmer en langage C 237
Les structures de contrôle : break, goto et continue
Instruction continue
La syntaxe du langage C
◦ L’instruction continue peut être employée à
l’intérieur d’une structure de type boucle (for ; while ;
do-while ).
La syntaxe du langage C
Exemple :
main(){ Evaluation:
int i; Début tour 1
Début tour 2
for(i=1;i<=10;i++){ Début tour 3
Début tour 4
printf(’’début tour %d\n’’ ,i) ; Bonjour
if (i <4) continue ; Début tour 5
Bonjour
printf(’’ bonjour\n’’);
}
}
23
06/12/2018 Programmer en langage C 9
Les structures de contrôle : break, continue et goto
Instruction goto
La syntaxe du langage C
◦ Elle permet le branchement en un emplacement
quelconque du programme.
main(){
int i; Evaluation:
for(i=1;i<=10;i++) { Début tour 1
printf(’’début tour %d\n’’ ,i) ; Bonjour
fin tour 1
printf(’’ bonjour\n’’); Début tour 2
if (i ==3) goto sortie ; bonjour
printf(’’ fin tour%d\n", i); fin tour 2
Début tour 3
}
Bonjour
sortie: printf (" après la boucle\n") ; Après la boucle
} 06/12/2018 Programmer en langage C 240
Principales fonctions d’entrées
d’entrées--sorties standard
La syntaxe du langage C
stdio.h utilisées avec les unités classiques
d’entrées-sorties, qui sont respectivement le
clavier et l’écran.
Ces fonctions sont:
◦ getchar
◦ putchar
◦ puts
◦ printf
◦ scanf
06/12/2018 Programmer en langage C 241
d’entrées
Principales fonctions d’ entrées--sorties standard
La fonction getchar
◦ La fonction getchar permet la récupération d’un
La syntaxe du langage C
seul caractère à partir du clavier. La syntaxe
d’utilisation de getchar est la suivante :
var=getchar();
◦ Notez que var doit être de type char. Exemple :
#include <stdio.h>
main() {
char c;
printf("Entrer un caractère:");
c = getchar();
printf("Le caractère entré est %c\n",c);
} 06/12/2018 Programmer en langage C 242
Principales fonctions d’entrées
d’entrées--sorties standard
La fonction putchar
◦ permet l’affichage d’un seul caractère sur l’écran de
La syntaxe du langage C
l’ordinateur. putchar constitue alors la fonction
complémentaire de getchar. La syntaxe d’utilisation est
la suivante : putchar
putchar(var);
(var);
◦ où var est de type char. Exemple :
#include <stdio.h>
main() {
char c;
printf("Entrer un caractère:");
c = getchar();
putchar(c);
} 06/12/2018 Programmer en langage C 243
d’entrées
Principales fonctions d’ entrées--sorties standard
La fonction puts
La syntaxe du langage C
◦ Syntaxe : puts
puts((ch
ch);
);
◦ Cette fonction affiche, sur stdout, la chaîne de
caractères ch puis positionne le curseur en début de
ligne suivante. puts retourne EOF en cas d’erreur.
◦ Exemple :
#include <stdio.h>
main() {
char * toto = "on est super content!";
puts(toto);
}
06/12/2018 Programmer en langage C 244
d’entrées
Principales fonctions d’ entrées--sorties standard
La fonction d’écriture
d’écriture à l’écran formattée printf
La syntaxe du langage C
◦ La fonction printf est une fonction d’impression formatée, ce
qui signifie que les données sont converties selon le format
particulier choisi. Sa syntaxe est la suivante :
printf("chaîne
printf ("chaîne de contrôle", expression1, . . . , expressionn);
◦ La chaîne de contrôle contient le texte à afficher et les
spécifications de format correspondant à chaque expression
de la liste. Les spécifications de format ont pour but
d’annoncer le format des données à visualiser. Elles sont
introduites par le caractère %. Le i-ème format de la chaîne
de contrôle sera remplacé par la valeur effective de
expressioni.
La fonction d’écriture
d’écriture à l’écran formatée printf
La syntaxe du langage C
◦ Les différents formats de la fonction printf
format Conversion en écriture
%d int décimale signée
%ld long int décimale signée
%u unsigned int décimale non signée
%lu unsigned long décimale non signée
%o unsigned int Octale non signée
%lo unsigned long Octale non signée
%x unsigned int Héxadécimal non signée
%lx unsigned long Héxadécimal non signée
La syntaxe du langage C
◦ Les différents formats de la fonction printf
format Conversion en écriture
%f float décimale virgule fixe
%lf Long float décimale virgule fixe
%e double décimale notation exponentielle
%le long double décimale notation exponentielle
%g double décimale, représentation la plus courte
parmi %f et %e
%lg long double décimale, représentation la plus courte
parmi %lf et %le
%c unsigned char caractère
%s char* Chaîne de caractères
06/12/2018 Programmer en langage C 247
d’entrées
Principales fonctions d’ entrées--sorties standard
La fonction d’écriture
d’écriture à l’écran formatée printf
La syntaxe du langage C
◦ Les différents formats de la fonction printf
◦ Exemple
printf("|% d|\n",14); | 14|
printf("|% d|\n",-14); |-14|
printf("|%x|\n",0x56ab); |56ab|
printf("|%X|\n",0x56ab); |56AB|
printf("|%10d|\n",14); | 14|
printf("|%f|\n",1.234567890123456789e5); |123456.789012|
printf("|%.4f|\n",1.234567890123456789e5); |123456.7890|
La syntaxe du langage C
Exemple
printf("|%e|\n",1.234567890123456789e5); |1.234568e+05|
printf("|%.4e|\n",1.234567890123456789e5); |1.2346e+05||
printf("|%.4g|\n",1.234567890123456789e-5); |1.235e-05|
printf("|%.4g|\n",1.234567890123456789e-3); |0.001235|
printf("|%.8g|\n",1.234567890123456789e5); |123456.79|
24
06/12/2018 Programmer en langage C 9
d’entrées
Principales fonctions d’ entrées--sorties standard
La syntaxe du langage C
◦ La fonction scanf permet de récupérer les données saisies au
clavier, dans le format spécifié. Ces données sont stockées
aux adresses spécifiées par les arguments de la fonction
scanf (on utilise donc l’opérateur d’adressage & pour les
variables scalaires). scanf retourne le nombre de valeurs
effectivement lues et mémorisées .La syntaxe est la suivante :
scanf("chaîne
scanf ("chaîne de contrôle", & arg1, . . . , & argn
argn);
);
◦ La chaîne de contrôle indique le format dans lequel les
données lues sont converties. Comme pour printf, les
conversions de format sont spécifiées par un caractère
précédé du signe %.
La syntaxe du langage C
#include <stdio.h>
main() {
int i ;
printf("entrez un entier sous forme
hexadecimale i = ");
scanf("%x",&i);
printf("i = %d\n",i);
}
Les Tableaux
252
Ensemble de données du même type
Exemple de problème :
Saisir une suite de nombres, puis afficher cette suite après
avoir divisé tous les nombres par la valeur maximale de la
suite.
Nécessité de conserver les nombres en mémoire
TabVal
253
Ensemble de données du même type
254
Exemples d’applications
255
Traitements sur les tableaux
On veut pouvoir :
- Créer des tableaux
- Ranger des valeurs dans un tableau
- Récupérer, consulter des valeurs rangées dans un tableau
- Rechercher si une valeur est dans un tableau
- Mettre à jour des valeurs dans un tableau
- Modifier la façon dont les valeurs sont rangées dans un
tableau (par exemple : les trier de différentes manières)
- Effectuer des opérations entre tableaux : comparaison
de tableaux, multiplication,...
256
Indices : en général, démarrage à 1, mais en C,
démarrage à 0
Nombre d’octets occupés : dépend du type des valeurs
enregistrées
257
Déclaration d'un tableau
◦ En pseudo code :
variable tableau identificateur[[dimension
dimension]] : type
258
Utilisation d’un tableau par les indices
Accès en lecture :
Ecrire(notes[4]); // le contenu du tableau à l’indice
4 et aficher à l’ecran
Accès en écriture :
notes[3] ←18; // la valeur 18 est placée dans le
tableau à l’indice 3
259
Tableaux : exemples (1)
Pour le calcul du nombre d'étudiants ayant une note supérieure à 10 avec les
tableaux, on peut écrire :
Algorithme Mon_Premier_Tab
Variables i ,nbre : entier
tableau notes[30]] : réel
Début
nbre ← 0;
Pour i allant de 0 à 29
Lire(notes[i]
[i] );
Sii (notes[i]
notes[i] >10) alors
nbre ←nbre+1;
FinSi
FinPour
Ecrire ("le nombre de notes supérieures à 10 est : ", nbre);
Fin
Accès en lecture :
- Ecrire(A[1] [7]); // la valeur contenue en ligne 1 colonne 7 est affichée
à l’écran
Accès en écriture :
- A[2] [4] ← 36;
- Lire(points[2][4]); // la valeur fournie est enregistrée en ligne 2,col 4
262
Exemples : somme de deux matrices
Algorithme SommeMatrices
variables n, m,i,j : enties
tableau A[n][m], B[n][m],C[n][m] : réels
Début
263
Tableaux : Exemple d’exercice
Les Tableaux
Les tableaux
Définition
◦ Un tableau représente un ensemble d’emplacements mémoire qui
portent le même nom et contiennent le même type de données.
Chacun de ces emplacements est un éléments du tableau.
◦ On appelle tableau une variable composée de données de même
type, stockée de manière contiguë en mémoire(les uns à la suite des
autres).
◦ Un tableau est une suite des éléments de même taille. Par
conséquent, la taille(en octet) du tableau est : le nombre
d’éléments.
Les tableaux
<type simple> Nom_du_tableau[nombre_elements];
Type simple : définit le type d’élément que contient le tableau
Nom du tableau : est le nom qu’on donne au tableau, ce nom suit
les mêmes règles qu’un nom de variable.
Nombre_elements : est une expression constante entière
positive, qui exprime la taille du tableau.
◦ Exemple:
char caractere[12];
int entier[10];
float reel[8];
Les tableaux
définition :
<type > Nom_du_tableau[nombre_elements]={c1,c2,…cn};
Ou c1, c2,…cn sont des constantes dont le nombre ne doit
pas dépasser le nombre _elements.
◦ Exemple
#define N_mois 12
int tableau[N_mois];
int tab[4] ={100,200,300,400;}\\ initialisation
char voyelles[6]={‘a’,’e,’i’,’o’,’u’,’y’};
06/12/2018 Programmer en langage C 268
Les tableaux
Les tableaux à une dimensions
◦ Accès aux composantes d’un tableau
Pour accéder à un élément du tableau, il suffit de donner le nom du
tableau, suivi de l’indice de l’élément entre crochets :
Nom_du_Tableau [indice]
Les tableaux
Où indice est une expression entière positive ou nulle.
Un indice est toujours positif ou nul ;
L’indice du premier élément du tableau est 0 ;
L’indice du dernier élément du tableau est égal au nombre
d ’éléments – 1.
◦ Exemples :
short A[5] = {12 , 23 , 34 , 45 , 56}; // A[0] = 12 ; A[1] = 23 ; A[2] = 34 ;
// A[3] = 45 ; A[4] = 56 ;
for( i = 0 ; i< 5 ; i++ ) //Affichage des éléments
printf(‘’A[%d] = %d \t‘’,i,A[i]); // du tableau A
Les tableaux
la lire : scanf("%d", &TAB[i] ); // TAB[i] sera initialisé par un
// entier saisi depuis la clavier
L’écrire : printf("TAB[%d] = %d", i , TAB[i] ); //Le contenu de TAB[i]
//sera affiché sur écran
la passer en argument à une fonction : TAB[i] = pow(TAB[i],2);
// = TAB[i] 2
Pour initialiser un tableau (TAB1) par les éléments d ’un autre tableau
(TAB2) : évitez d’écrire TAB1 = TAB2 (incorrect)
On peut par exemple écrire :
for( i = 0 ; i < taille_tableau ; i++ )
TAB1[i] = TAB2[i];
Les tableaux
comme un tableau dont les éléments sont eux même
des tableaux.
Les tableaux
liste de constantes :
#include <stdio.h>
#define L 3 //nombre de lignes
#define C 2 //nombre de colonnes
int tab[L][C] = {{1, 2}, {14, 15}, {100, 200}};
main() {
int i, j;
for (i = 0 ; i < L; i++) {
for (j = 0; j < C; j++)
printf("tab[%d][%d]=%d\n",i,j,tab[i][j]);}}
06/12/2018 Programmer en langage C 272