Sie sind auf Seite 1von 272

Algorithmique & Programmation 1

Pr. Abdlekbir Afraites

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.

◦ Etre capable de mettre en œuvre ces concepts pour analyser des


problèmes simples et écrire les programmes correspondants

 Plan:
I- Généralités (matériel d’un ordinateur, systèmes d’exploitation, langages de
programmation, codage de l’information …)

II- Algorithmique (affectation, instructions conditionnelles, instructions


itératives, tableaux, fonctions ,…)

III- Langage C (un outil de programmation)

3
Plan du cours
 Chapitre 1 : Généralités – codage de l’information

 Chapitre 2 : Algorithmique et Programmation C


« notions de base »
 Chapitre 3 : Les structures Conditionnelles ( If,
Tant que, pour,..) : Algo&C

 Chapitre 4 : Tableaux : Algo&C

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

Traitement automatique de l’information


ORDINATEUR
Machine automatique

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

Schéma de principe du traitement de l’information

Données à l’état brut

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

– Principe de base : John Von Newmann 1946


=véritable naissance de l’informatique
– Sinon les ancêtres et étapes importantes:
• Boulier chinois
• Numération binaire par Francis BACON en 1600
• Machine à calculer de Pascal, 1642 : dépassée par l’apparition de
l’électronique et des semi-conducteurs
• Machine de Falcon, 1728. Première à utiliser un « programme »
sur plaquette de bois perforée
• Mémoire mécanique de Babbage, 1833. Conçoit une mémoire
séparée des organes d’entrée et de sortie
• Algèbre de Boole 1850 (bases de l’automatisme)
• Machine de Hollerith, 1890. Il utilisa le premier la carte perforée,
comme support universel d‘ information , mis en oeuvre dans les
premières générations d‘ ordinateurs.

11
Historique
ENIAC, le 1e ordinateur électronique (1946) : 18 000 lampes env. reliées par un câblage.
Les ancêtres des ordinateurs

Machine de Pascal (1645)

Machine de Babbage (1833)

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

 Permet de stocker et de restituer des


informations
 Correspond à un ensemble fini de cellules
 Une case mémoire (cellule) contient une donnée
ou une instruction
 Chaque cellule est numérotée : adresse
a 1 a 2 a3 a 4 a 5

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:

Edition Compilation Exécution

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

La mémoire centrale a une capacité limitée et est volatile


 Nécessité d’enregistrer les informations sur des supports
de mémoire non volatile (en sortie) pour pouvoir les
réutiliser par la suite (en entrée).

FICHIER : élément de mémoire de stockage (mémoire de


masse) contenant de l’information et repérable.

Le codage de l’information définit le TYPE du fichier et


détermine son utilisation comme donnée pour un
programme ou comme programme exécutable.

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

 RACINE : fichier répertoire crée automatiquement sur le


support au moment du formatage (disque ou disquette) et
portant le nom du volume (label)

 CHEMIN D’ACCES : liste des répertoires permettant


d ’atteindre un fichier à partir de la racine

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

Puce du BIOS CPU

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)

◦ instructions expliquant à l ’ordinateur


comment traiter un problème
◦ algorithmes et représentation informatiques
de ces instructions
◦ programme

32
1.4.1 : Système d’exploitation

 Tout premier logiciel indispensable au bon


fonctionnement de l’ordinateur
 Chargé de la gestion globale de l’ordinateur
notamment :
◦ utilisation de la mémoire vive
◦ utilisation de la mémoire auxiliaire
◦ dialogue avec l’utilisateur (i.e. les entrée/sorties)

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 95-98 pour PC - Mac=perso


 MAC-OS pour Macintosh - Stations de
◦ système multi utilisateurs travail=professionnel

 OS/2 pour PC (IBM) ! compatibilité

 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

mias101 mias120 images info

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

◦ A chaque instruction correspond une action du processeur

 Intérêt : écrire des programmes (suite consécutive


d’instructions) destinés à effectuer une tache donnée

◦ Exemple: un programme de gestion de comptes bancaires

 Contrainte: être compréhensible par la machine

42
L'assembleur
 Problème: le langage machine est difficile à comprendre par l'humain

 Idée: trouver un langage compréhensible par l'homme qui sera


ensuite converti en langage machine
◦ Assembleur (1er langage): exprimer les instructions élémentaires
de façon symbolique

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

 Apparition des langages évolués

43
Langages haut niveau

 Intérêts multiples pour le haut niveau:


◦ Proche du langage humain «anglais» (compréhensible)
◦ Permet une plus grande portabilité (indépendant du matériel)
◦ Manipulation de données et d’expressions complexes (réels,
objets, a*b/c, …)
 Nécessité d’un traducteur (compilateur/interpréteur),
exécution plus ou moins lente selon le traducteur

Code source Compilateur


ou Langage
en langage évolué interpreteur machine

44
Compilateur/interpréteur

 Compilateur: traduire le programme entier une fois pour toutes

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

 Interpréteur: traduire au fur et à mesure les instructions du


programme à chaque exécution
fichier source
exemple.m Interprétation+exécution
◦ + exécution instantanée appréciable pour les débutants
◦ - exécution lente par rapport à la compilation

45
Langages de programmation:

 Deux types de langages:


◦ Langages procéduraux
◦ Langages orientés objets

 Exemples de langages:
◦ Fortran, Cobol, Pascal, C, …
◦ C++, Java, …

 Choix d’un langage?

46
Principaux Langages de programmation:

Blaise PASCAL, Langage compilé et


mathématicien et inventeur structuré, dérivé d'ALGOL.
Pascal de la première machine à c'est un langage de
calculer 1971 développement standard
pour les micro-ordinateurs.

C'est une version Langage de


améliorée du langage de programmation structuré et
C programmation B du Bell compilé, très largement
Laboratory, créé en 1972 employé car ses
programmes peuvent
facilement se transférer
d'un type d'ordinateur à un
autre.

Maple Nasa 1980 de SUN couvrir tous les domaines


D’application formel

Java Microsystems 1990 Ce langage connaît un


succès qu'aucun autre
langage n'avait encore
connu.

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

 Un bit (binary digit) = 0 ou 1 (2 états électriques)

 Une combinaison de 8 bits= 1 Octet 


28  256
possibilités qui permettent de coder tous les caractères alphabétiques, numériques, et
symboles tels que ?,*,&, …

◦ 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

 Les opérations logiques et arithmétiques de base (addition,


multiplication, … ) sont effectuées en binaire

48
Codage binaire
 Le langage des ordinateurs

 Toutes communications à l'intérieur de


l'ordinateur sont faites avec des signaux
électriques
◦ 0: éteint (absence de signal électrique)
◦ 1: allumé (présence de signal électrique)

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.

Nom de base b chiffres


Binaire 2 0,1

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= dndn1...d1d0  d 10 i
3 0
i
 2018= d 3d 2 d1d 0   d i  10
i 0

 8  100  1 101  0  10 2  2  103

52
Représentation d’un nombre dans une base b

n
anan1...a1a0 b  ai b i

i0

53
Principe de codage binaire

 La représentation d’un nombre est un codage

 Ne pas confondre un nombre avec sa


représentation

 La quantité dix peut être représentée par :


 Dix, 10, 1010, A, X, etc……

54
 Un même nombre peut être représenté
dans plusieurs bases

◦ 123 en base 10 (décimal)


◦ 1111011 en base 2 (binaire)
◦ 173 en base 8 (octale)
◦ 7B en base 16 (hexadécimale)

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)

 Soit un nombre a écrit en base 10


 Divisions successives de a par b
 Chacun des restes ainsi obtenus, du
chiffre de poids faible au chiffre de poids
fort, forme a converti en base b

2018/2019 DUT-Info 57


 De la base 10 à la base 2
◦ Il faut diviser le nombre par 2 puis réitérer l'opération
en considérant que le nouveau numérateur est l'ancien
quotient jusqu'à ce que ce dernier soit nul. La suite
inverse des restes représente le nombre binaire

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

 01+01=10 équivalent 1+1=2

 111+011=1010 équivalent 7+3=10

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)

10 en hexadécimal est représenté par


la lettre A (11 par B, 12 par C, … 15
par F)
Numération et codage – Changements de bases
 Que vaut le nombre 3C (codé en
hexadécimal) en décimal.
3C(16) = 12.160 + 3.161

3C(16) = 12 + 48

3C(2) = 60
Chap2: Algorithmique

Notions et instructions de base

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é

◦ Intérêt: séparation analyse/codage (pas de préoccupation de syntaxe)


◦ Qualités: exact (fournit le résultat souhaité), efficace (temps d’exécution, mémoire
occupée), clair (compréhensible), général (traite le plus grand nombre de cas
possibles), …

 L’algorithmique désigne aussi la discipline qui étudie les algorithmes et


leurs applications en Informatique
 Une bonne connaissance de l’algorithmique permet d’écrire des algorithmes
exacts et efficaces

71
2.2 - Algorithmes et programmes
Informations
en entrée

Algorithme informatique
=
schéma de calcul

Un algorithme est une suite finie de règles à


appliquer dans un ordre déterminé à un nombre fini
de données, pour arriver en un nombre fini d’étapes, Informations
à un certain résultat, et cela indépendamment des en sortie
données.

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

La réalisation de programmes passe par l’écriture d’algorithmes


D’où l’intérêt de l’Algorithmique

73
Représentation d’un algorithme

Historiquement, deux façons pour représenter un algorithme:

◦ L’Organigramme: représentation graphique avec des symboles


(carrés, losanges, etc.)
 offre une vue d’ensemble de l’algorithme
 représentation quasiment abandonnée aujourd’hui

◦ 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

 Une variable désigne en fait un emplacement mémoire dont


le contenu peut changer au cours d’un programme (d’où le nom variable)

 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

 Doit être constitué uniquement de lettres, de chiffres et du


soulignement _ (Eviter les caractères de ponctuation et les espaces)
valides: SMI2007, SMI_2007 invalides: SMI 2007, SMI-
SMI-2007,
SMI;2007

 doit être différent des mots réservés du langage (par exemple en C:


int,, float
int float,, else switch,, case, default, for, main, return, …)
else,, switch

 La longueur du nom doit être inférieure à la taille maximale spécifiée


par le langage utilisé

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

Remarque: en pseudo-code algorithmique, on va respecter


les règles citées, même si on est libre dans la
syntaxe

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

 Rappel: toute variable utilisée dans un programme doit avoir fait


l’objet d’une déclaration préalable
 En pseudo-code, on va adopter la forme suivante pour la déclaration
de variables
variables liste d'identificateurs : type
 Exemple:
Variables i, j,k : entier
x, y : réel
OK: booléen
ch1, ch2 : chaîne de caractères

 Remarque: pour le type numérique on va se limiter aux entiers et


réels sans considérer les sous types

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)

 En pseudo-code, l'affectation se note avec le signe ←


← e : attribue la valeur de e à la variable Var
Var←
Var
- e peut être une valeur, une autre variable ou une expression
- Var et e doivent être de même type ou de types compatibles
- l’affectation ne modifie que ce qui est à gauche de la flèche
 Ex valides: i ←1; j ←i; k ←i+j;
x ←10.3 ; OK ←FAUX; ch1 ←"SMI";
ch2 ←ch1 ; x ←4; x ←j;
(voir la déclaration des variables dans le transparent précédent)

 non valides: i ←10.3; OK ←"SMI"; j ←x;

82
Quelques remarques

 Beaucoup de langages de programmation (C/C++, Java, …) utilisent le


signe égal = pour l’affectation ←. Attention aux confusions:

◦ L'affectation n'est pas commutative : A←B est différente de B←A


◦ L’ affectation est différente d'une équation mathématique :

 A←A+1 a un sens en langages de programmation


 A+1←2 n'est pas possible en langages de programmation et n'est pas
équivalente à A←1

 Certains langages donnent des valeurs par défaut aux variables


déclarées. Pour éviter tout problème il est préférable d'initialiser les
variables déclarées

83
Exercices simples sur l'affectation (1)

Donnez les valeurs des variables A, B et C après exécution des


instructions suivantes ?
Algorithme Test_Var
Variables A, B, C: Entiers
Début
A ← 3;
B ← 7;
A ← B;
B ← A+5;
C ← A + B;
C ← B – A;
Fin

84
Exercices simples sur l'affectation (2)

Donnez les valeurs des variables A et B après exécution des instructions


suivantes ?

Algorithme Test_Permut
Variables A, B : Entier
Début
A ← 1;
B ← 2;
A ← B;
B ← A;
Fin

Les deux dernières instructions permettent-elles d’échanger les


valeurs de A et B ?

85
Exercices simples sur l'affectation (3)

Ecrire un algorithme permettant d’échanger les valeurs


de deux variables A et B?

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)

 Une expression est évaluée de gauche à droite mais en tenant compte de


priorités

87
Priorité des opérateurs

 Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité


est le suivant (du plus prioritaire 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

88
Les instructions d'entrées-
d'entrées-sorties: lecture et écriture (1)

 Les instructions de lecture et d'écriture permettent à la machine de


communiquer avec l'utilisateur

 La lecture permet d'entrer des données à partir du clavier

◦ En pseudo-code, on note: Lire (var)


la machine met la valeur entrée au clavier dans la zone mémoire
nommée var

◦ Remarque: Le programme s'arrête lorsqu'il rencontre une instruction


Lire et ne se poursuit qu'après la frappe d’une valeur au clavier et de
la touche Entrée

89
Les instructions d'entrées-
d'entrées-sorties: lecture et écriture (2)

 L'écriture permet d'afficher des résultats à l'écran (ou de les écrire


dans un fichier)

◦ En pseudo-code, on note: Ecrire (var)


la machine affiche le contenu de la zone mémoire var

◦ Conseil:Avant de lire une variable, il est fortement conseillé d’écrire


des messages à l’écran, afin de prévenir l’utilisateur de ce qu’il doit
frapper

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 :

Écrire un algorithme qui consiste a calculer l’air S


d’un cercle selon la formule S = Pi * R* R;

Rappel : Pi = 3.14159 et R le rayon du cercle

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

✔Concevoir, écrire et exécuter des programmes en langage C

Introduction
✔ Savoir lire, stocker et afficher des données et résultats

✔ Savoir utiliser des structures de contrôle (conditions, tests,


boucles,…)

✔ Savoir définir et utiliser les tableaux

06/12/2018 Programmer en langage C 98


Introduction : historique
 Langage de programmation développé en 1970 par
Dennie Ritchie aux Laboratoires Bell d’AT&T.

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.

Il fut limité à l’usage interne de Bell jusqu’en 1978


date à laquelle Brian Kernighan et Dennie Ritchie
publièrent les spécifications définitives du langage :
« The C programming Language ».

06/12/2018 Programmer en langage C 99


Introduction : historique

 Au milieu des années 1980 la popularité du langage était


établie.

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 :

« The C programming Language – 2 ème édition ».

10
06/12/2018 Programmer en langage C 0
Introduction : intérêt du langage C

☞ Langage polyvalent permettant le développement de systèmes


d’exploitation, de programmes applicatifs scientifiques et de

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

1) Création d’un code source en utilisant un éditeur


◦ Le code source est une série de commandes qui indiquent à

Introduction
l’ordinateur les tâches que vous voulez lui faire exécuter, il est
créé à l’aide d’un éditeur.

◦ La plupart des systèmes d’exploitation contiennent un éditeur.


Sous Unix vous pouvez utiliser, ed, ex, edit emacs ou vi.
Microsoft Windows vous offre le bloc-notes, Dev-C++

10
06/12/2018 Programmer en langage C 2
Introduction : Etapes de la réalisation

2) Compilation du code source


◦ Votre ordinateur ne peut pas comprendre le code source. Il ne peut
comprendre que des instructions binaires dans ce que l’on appelle

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

3) Création du fichier exécutable

◦ Une partie du langage C est constituée d’une bibliothèque de

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)

06/12/2018 Programmer en langage C 104


Introduction : Etapes de la réalisation

Fichier en-tête (.h) Programme source (.c)


……………….. #include…
#include <math.h>
math .h
…..

Introduction
/*déclaration*/
Main()
{
…..
}

Bibliothèques précompilées
(.lib)

Programme objet (.obj)


…………………..

math.lib
Programme executable
(.exe)
105
Introduction : votre premier programme

Introduction
#include<stdio.h>
main()
{ Affichage Bonjour
printf(‘’Bonjour’’);
}

06/12/2018 Programmer en langage C 106


ELÉMENTS DE BASE DU LANGAGE C

Exemple de programme en langage C

Structure d’un programme en Langage C

Les mots-clés

Les types de base

Déclarations des variables simples

06/12/2018 Programmer en langage C 107


Exemple de programme en langage C
#include <stdio.h>//standard input/output
#include <math.h>

Eléments de base du langage C


#define NFOIS 5
main (){
int i;
float x, racx;
printf("Bonjour\n");
printf("je vais vous calculer %d racines carrées\n",NFOIS);
for(i=0;i<NFOIS;i++){

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

Eléments de base du langage C


#include <math.h> Programme exécuté automatiquement avant
#include <stdio.h> la compilation, il transforme le fichier source
#define NFOIS 5 à partir d’un certain nombre de directive
◦ Il s’agit de directive qui seront prises en compte avant la
traduction (compilation) du programme. Ces directives doivent
être écrites une par ligne, et il est préférable de les placer au
début. Les deux premières directives demandent
d’introduire(avant compilation) des instructions(en langage C)
situées dans les fichier stdio.h et math.h. On les appelles fichiers
en-têtes.
◦ La troisième directive définie une constante. Elle demande de
remplacer systématiquement, dans toute la suite du programme,
le symbole NFOIS par 5

06/12/2018 Programmer en langage C 109


Structure d’un
d’un programme en Langage C
 La fonction main()

Eléments de base du langage C


◦ est un bloc obligatoire d’un programme C. Sa forme la plus simple
consiste à saisir son nom, main, suivi de parenthèse () vide et d’une paire
d’accolades {}. L’exécution du programme débute à la première
instruction de main() et se termine avec la dernière instruction de cette
fonction.
 La définition des variables
◦ Une variable est un nom donné à une zone mémoire pour stocker les
données en cours d’exécution. En C une variable doit être définie avant
son utilisation. Sa définition indique son nom au compilateur et le type de
données que l’on pourra y stocker.
◦ Sa déclarations est de la forme
type nom_variable [=<valeur>];
◦ Elle peut être déclarée à l’extérieur ou à l’intérieur de la fonction main

06/12/2018 Programmer en langage C 110


Structure d’un
d’un programme en Langage C
 Notion d’identificateur

Eléments de base du langage C


◦ Un identificateur, comme son nom l’indique, permet de
donner un nom à une entité du programme (qu’il s’agisse
d’une variable ou d’une fonction). Ils sont sujets aux règles
suivantes :
1. Ils sont formés d’une suite de lettres (’a’ à ’z’ et ’A’ à
’Z’), de chiffres (0 à 9) et du signe ’_’. En particulier, les
lettres accentuées sont interdites ;
2. le premier caractère de cette suite ne peut pas être un
chiffre ;
3. les identificateurs sont cases-sensitives.
◦ Ainsi, les noms var1, S_i, et InitDB sont des identificateurs
valides, tandis que i:j ou 1i ne le sont pas.
06/12/2018 Programmer en langage C 111
 Pour écrire des informations: la fonction printf
◦ L’instruction printf("Bonjour\n"); appelle une fonction
prédéfinie (printf) qui reçoit un argument "Bonjour\n" délimiter

Eléments de base du langage C


par des guillemets pour dire que c’est une chaîne de caractères. La
notation \n est conventionnelle : elle représente un caractère de fin
de ligne, lorsqu'il est envoyé à l’écran, elle provoque le passage à la
ligne suivante.

◦ 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.

06/12/2018 Programmer en langage C 112


Structure d’un
d’un programme en Langage C
 Pour faire une répétition: l’instruction for

Eléments de base du langage C


◦ En langage C, il existe plusieurs façon de réaliser une répétition,
comme par exemple : for(i=0;i<NFOIS;i++), son rôle est de
répéter le bloc délimiter par les accolades, en respectant les
consignes suivantes :
 Avant de commencer cette répétition réaliser : i=0
 Avant chaque nouvelle exécution du bloc, examiner la
condition: i<NFOIS, si elle est satisfaite, exécuter le bloc
indiqué à sa fin réaliser i++ qui n’est que i=i+1
 Pour lire les informations: la fonction scanf
◦ scanf("%f",&x): cette instruction n’est qu’appel de la fonction
prédéfinie scanf dont le rôle est de lire une information au clavier
 %f: le format de la variable
 &x: son adresse

06/12/2018 Programmer en langage C 113


 Pour faire le choix: l’instruction if

Eléments de base du langage C


◦ Les lignes
if(x<0.0)
1 printf("le nombre %f ne possède pas de racine carrée\n",x);
else {
racx=sqrt(x);
2 printf("le nombre %f a pour racine carrée :%f\n",x,racx);
}

Constituent une instruction de choix basée sur la


condition x<0.0, si cette condition est vrai, on
exécute l’instruction 1, si elle est fausse on exécute
l’instruction 2.

06/12/2018 Programmer en langage C 114


 Les commentaires
◦ /* un commentaire d’une ligne*/

Eléments de base du langage C


◦ int a, b, c; /* commentaire sur une partie d’une ligne*/
◦ /* un commentaire
Qui s’étend sur plusieurs ligne*/
◦ //cette ligne est en commentaire
 Conseils:
◦ Ajouter de nombreux commentaires dans le code
source de votre programme, surtout s’il contient
des instructions ou fonctions qui pourraient être
difficile à comprendre. Vous gagner un temps
précieux quand vous aurez à le modifier.
06/12/2018 Programmer en langage C 115
Les mots-
mots-clés
 Un certains nombres de mots sont réservés pour le langage C, il

Eléments de base du langage C


faut les éviter comme identificateurs, la liste exhaustive est la
suivante:

06/12/2018 Programmer en langage C 116


Les types de base : Les caractères

Eléments de base du langage C


 On utilise le mot-clé char pour désigner une
variable de type char
char. Il s’agit en fait d’un entier
codé sur 8 bits interprété comme un caractère
utilisé sur la machine (il s’agit en général du
code ASCII de ce caractère).
 Exemple :
◦ char c1 = ’a’; // Déclaration d’une variable c1 de type char
// a laquelle on affecte la valeur ’a’
// A noter l’utilisation du simple quotte

06/12/2018 Programmer en langage C 117


Les types de base : Les caractères
 Le tableau suivant donne la liste des principaux codes ASCII en

Eléments de base du langage C


décimal

06/12/2018 Programmer en langage C 118


Les types de base : Les caractères
 Caractères particuliers

Eléments de base du langage C


◦ Il existe un certain nombre de caractères particuliers dont les
principaux sont résumés dans le tableau suivant :

 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

Eléments de base du langage C


 Le type int peut être précisé par des attributs :
◦ De longeur :
 short pour des entiers courts(généralement de 8 ou 16 bits)
 int La longueur par défaut est généralement de 16 ou 32bits
 long pour des entiers longs(généralement de 32 ou 64bits)
◦ De domaine
 signed pour les entiers relatifs
 unsigned pour les entiers naturels positifs ou nuls

Par défaut : les int sont signed.

06/12/2018 Programmer en langage C 120


Les types de base : Entiers
 On utilise le mot-clé int
int.

Eléments de base du langage C


 Exemple :
◦ /* déclaration la plus courante d’une variable de type int */
 int a = 14; // la variable a est initialisée à la valeur 14
◦ /* Utilisation des précisions (cas le plus général)*/
 short int b; // b est codé sur 16 bits
 int c; // c est codé sur 16 ou 32 bits
 long int d; // d est codé sur 32 bits
◦ // la possibilité de l’écriture suivante dépend du compilateur
 long long int e; // e est codé sur 64 bits.
◦ /* Précision du signe */
 unsigned long int n; //n est un entier non signé sur 32 bits
06/12/2018 Programmer en langage C 121
Les types de base : Entiers
 Le tableau suivant regroupe les types entiers standards avec

Eléments de base du langage C


quelques informations supplémentaires :

06/12/2018 Programmer en langage C 122


Les types de base : Entiers

Eléments de base du langage C


 Constante entière: donnée inchangée qui ne peut
varier pendant l’exécution d’un programme
◦ Déclaration : #define Max 100
 Elle se présente sous forme décimale, octale ou hexadécimal
◦ décimale (écriture en base 10) : c’est l’écriture usuelle.
Ex : 372 ;
◦ octale (base 8) : on commence par un 0 suivi de chiffres
octaux. Ex : 0477 ;
◦ hexadécimale (base 16) : on commence par 0x (ou 0X) suivis
de chiffres héxadécimaux (0-9, a-f). Ex : 0x5a2b, 0X5a2b,
0x5A2b.

12
06/12/2018 Programmer en langage C 3
Les types de base : Les flottants
On distingue trois types de flottants : float
float,

Eléments de base du langage C


double et long double.
double
 Exemple : double Pi = 3,14159;
 Le tableau suivant donne des informations pour chaque
type flottant.

06/12/2018 Programmer en langage C 124


Les types de base : Les flottants
 Une valeur réelle représente un nombre à

Eléments de base du langage C


virgule flottante(de type float ou double) sous
forme décimale ou exponentielle.
 Exemple :

06/12/2018 Programmer en langage C 125


Déclarations des variables simples

Eléments de base du langage C


 Les variables et les constantes sont les données principales
manipulées par un programme.
 Les déclarations introduisent les variables, fixent leur type et
parfois aussi leur valeur de départ(initialisation);

Syntaxe de déclaration:
◦ int x,y;
◦ short compteur;
◦ float prix,salaire;
◦ double m;
◦ char s;

06/12/2018 Programmer en langage C 126


Déclarations des variables simples
 Initialisation des variables

Eléments de base du langage C


◦ En C, il est possible d’initialiser les variables à la
déclaration
◦ Exemples:
 int max=123;
 char tab=‘c’;
◦ En utilisant l’attribut const, la valeur d’une
variable ne change pas au cours du programme:
c’est une constante.
◦ Exemple:
 const int max=765;
 const char ch1=‘a’;
12
06/12/2018 Programmer en langage C 7
Exercices
 Quel type de variable convient le mieux pour
stocker les valeurs suivantes?
◦ L’âge d’une personne
◦ Le poids
◦ Le rayon d’un cercle
◦ Salaire annuel
◦ Le prix d’un article
◦ La note la plus haute d’un test
◦ La température
◦ Le gain d’une personne
◦ La distance d’une étoile en kilomètre

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

06/12/2018 Programmer en langage C 129


Exercices
 Quels sont les noms de variables correctes :
a) 123variable
b) X
c) Score_totale
d) Poids_en_#s
e) One_0
f) Grand-cout
g) RAYON
h) rayon
i) Cela_est_une_variable_pour_stocker_la_large
ur
06/12/2018 Programmer en langage C 130
Exercices
 Quels sont les noms de variables correctes :
a) 123variable
b) X
c) Score_totale
d) Poids_en_#s
e) One_0
f) Grand-cout
g) RAYON
h) rayon
i) Cela_est_une_variable_pour_stocker_la_largeur

06/12/2018 Programmer en langage C 131


Instructions, Expressions et Opérateurs
 Les instructions :
◦ Une instruction représente une tâche à accomplir par l’ordinateur. En

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;

06/12/2018 Programmer en langage C 134


Instructions, Expressions et Opérateurs
 Les opérateurs: opérateur d’affectation
d’affectation
◦ Opération et affectation combinées op=

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.

06/12/2018 Programmer en langage C 139


Instructions, Expressions et Opérateurs
 Opérateurs de comparaison

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.

06/12/2018 Programmer en langage C 142


Instructions, Expressions et Opérateurs
 Opérateurs logiques

La syntaxe du langage C
 Exemples
◦ L’expression : 32 && 40 vaut 1
◦ L’expression : !65.34 vaut 0
◦ L’expression : !!0 vaut 0

06/12/2018 Programmer en langage C 143


Instructions, Expressions et Opérateurs
 Autres opérateurs
◦ Opérateur séquentiel ( , )
 <expr1> , <expr2>,., <exprN>

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>

 <expression> est évaluée. Si sa valeur est non nulle, alors la


valeur de <expr1> est retournée. Sinon, c’est la valeur de
<expr2> qui est renvoyée.
 Exemple : max = a > b ? a : b
 si a est le plus grand, alors affectation à max du contenu de a
sinon affectation du contenu de b 144
06/12/2018 Programmer en langage C
Instructions, Expressions et Opérateurs
 Autres opérateurs

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.

06/12/2018 Programmer en langage C 146


Les conversions de types
 La notion de richesse d’un type est précisée dans la norme
[ISO89]. Le type dans lequel le calcul d’une expression à deux
opérandes doit se faire est donné par les règles suivantes :

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 ;

06/12/2018 Programmer en langage C 147


Les conversions de types
 Hiérarchie des conversions arithmétiques
habituelles est la suivante:

La syntaxe du langage C
long double
double
Float
unsigned long long
long long
unsigned long
long
unsigned int
int

06/12/2018 Programmer en langage C 148


Les conversions de types
 Conversion explicite

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.

d = li + i ; i est transformé en long puis additionné à li,


le résultat est transformé en double et rangé dans
d.

i =(int)(f + d) ; f est transformé en double, additionné à d,


le résultat est transformé en int et rangé dans i.

06/12/2018 Programmer en langage C 150


Exercices
1) Soit les déclarations suivantes :
int n=10, p=4;

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)

06/12/2018 Programmer en langage C 151


Exercices
1) Soit les déclarations suivantes :
int n=10, p=4;

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)

06/12/2018 Programmer en langage C 152


Exercices
2. n étant de type int, écrire une expression qui
prend la valeur :

La syntaxe du langage C
-1 si n est négatif
0 si n est nul
1 si n est positif

06/12/2018 Programmer en langage C 153


Exercices
2. n étant de type int, écrire une expression qui
prend la valeur :

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

06/12/2018 Programmer en langage C 154


Chap3: Algorithmique

II- Les structures Conditionnelles

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)

 Les itérations : consiste à exécuter un bloc d’instructions un certain nombre


de fois (Ex : calcul d’une suite numérique)

 Les boucles conditionnelles : consiste à exécuter un bloc d’instructions un


certain nombre de fois si la condition est vérifiée (Ex : On veut afficher les 100
premiers nombres :. Tant que i est plus petit que 100, afficher la valeur de i).

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

◦ Si la condition est vraie, se sont les instructions1 qui seront exécutées

◦ Si la condition est fausse, se sont les instructions2 qui seront exécutées

◦ La condition peut être une condition simple ou une condition composée de


plusieurs conditions

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é

◦ On utilisera dans ce cas la forme simplifiée suivante:

Si condition alors
instruction ou suite d'instructions1
Finsi

159

2018/2019
Exemple (Si…Alors…Sinon)

Écrire un algorithme qui consiste a afficher la


valeur absolue d’un nombre réel?

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)

Écrire un algorithme qui consiste a afficher la


valeur absolue d’un nombre réel?

Cette fois vous ne devrez pas utilisez


l’instruction(Sinon).

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)

Ecrire un algorithme qui demande un nombre


entier à l'utilisateur, puis qui teste et affiche s'il
est divisible par 3?

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)

 L'évaluation d'une condition composée se fait selon des règles


présentées généralement dans ce qu'on appelle tables de vérité

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à.

Ecrivez un algorithme qui demande à


l’utilisateur le nombre de photocopies
effectuées, qui calcule et affiche le prix à payer ?

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

Écrire l’algorithme du traitement qui calcule le discriminant DELTA


du trinôme du second degré AX2 + BX + C=0 et qui, en fonction de
son signe, calcule la ou les racines réelles du trinôme ou affiche, si
besoin est qu’il n’ya pas de racine réelle.

Les trois coefficients A, B et C seront saisis au clavier avant


traitement.

174

2018/2019
Tests imbriqués: corrigé de l'exercice 2
Algorithme Eq

Variables A, B, C, Delta, sol1, sol2 : réels


Début
Lire (A, B, C);
Delta ← B*B – 4*A*C;

Si (Delta < 0) alors


Ecrire ( "le trinome n’a pas de racine réelle ");
Sinon
Si (Delta > 0) alors
sol1 ← (-B + racine(Delta)) / (2*A);
sol2 ← (-B – racine(Delta)) / (2*A);

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

 La structure SELON permet d'effectuer tel ou tel traitement en


fonction de la valeur du sélecteur(variable ou donnée) .
 Syntaxe:
Selon sélecteur faire
valeur 1 : <Traitement1>
valeur 2 : <Traitement2>
…………
valeur N : <Traitement N>
SINON <Traitement R>
Fin selon
17
2018/2019 7
Algorithme : pour afficher jour avec selon
Algorithme jours_semaine :
Variable jour : entier ;
Début
Ecrire ("Saisir une valeur : ") ;
Lire(jour) ;
SELON jour faire
1 : Ecrire("Lundi")
2 : Ecrire("Mardi")
3 : Ecrire("Mercredi")
4 : Ecrire("Jeudi")
5 : Ecrire("Vendredi")
6 : Ecrire("Samedi")
7 : Ecrire("Dimanche")
SINON : Ecrire("Jour invalide")
Fin SELON
17
Fin 2018/2019 8
17
9

Les Instructions répétitives:

Les boucles

DUT 2018/2019
Les types de boucles:
 On distingue 2 types de boucles:

◦ Les boucles à événement ou indéfinie


 On ne sait pas à l’avance le nombre de fois que la boucle sera
exécutée.
 Ça peut dépendre du nombre de données à traiter.
 Ça peut dépendre du nombre d’essais que l’usager a effectués.
 Ex : la boucle TantQue et la boucle jusqu’à (Faire
TantQue)

◦ Les boucles à compteur ou définie


 On sait à l’avance combien de fois la boucle devra tourner et une
variable (le compteur ) compte les répétitions
 Choisir 10 nombres au hasard. On fera dix fois l’opération
choisir un nombre au hasard.
 Ex : la boucle Pour
2018/2019 180
Les boucles Tant que

2018/2019 181
Les boucles Tant que

TantQue (condition) Faire


instructions

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
i2; n4;
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

Ecrire un algorithme qui détermine le premier


nombre entier N tel que la somme de 1 à N
dépasse strictement 100, 1000?

Généralisez cet Algorithme?

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

Définition: q est un diviseur commun de m et n si q divise à la fois m


et n (c-a-d le reste de la division entière est 0)

Le pgdc de m et n est le plus grand entier q divisant à la fois m et n.

Exemple: pgcd(4, 6) = 2; pgcd(3,8) = 1;


pgcd(9, 12) = 3;

Utile pour la simplification de fractions:


9/12 = 3*3/4*3 = 3/4

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

• 2ème méthode: la méthode d’Euclide


◦ 105 = 30*3 + 15. Donc pgcd(105, 30) = pgcd(30,15)
◦ 30 = 15*2 + 0. Donc pgcd(30, 15) = pgcd(15,0)
◦ pgcd(15,0)=15

pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15

2018/2019 187
Méthode d’Euclide : Algorithme

Soient r0, r1 deux entiers strictement


positifs, tels que r0=r1.q+r2 avec 0≤r2<r1

 Si r2 = 0, pgcd (r0, r1) = r1


 Sinon, rediviser ri par ri+1 tant que ri+1 est
différent de 0
 Si rn est le premier reste nul, alors
pgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1

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:
ra%b;
a=504 et b=396 ?
ab;
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

TantQue b > 0 Faire


b 396 108 a
//diviser a par b: a = b.q+r, 0 ≤ r < b;
72 3
ra%b;
ab; b a
108 72
b r;
36 1
FinTantQue
72 36 a
b 0 2

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

2) On compare la valeur du compteur et la valeur de finale :


a) Si la valeur du compteur est > à la valeur finale dans le cas d'un pas positif
(ou si compteur est < à finale pour un pas négatif), on sort de la boucle
et on continue avec l'instruction qui suit FinPour

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

i. Ensuite, la valeur de compteur est incrémentée de la valeur du pas si


pas est positif (ou décrémenté si pas est négatif)

ii. On recommence l'étape 2 : La comparaison entre compteur et finale


est de nouveau effectuée, et ainsi de suite …
2018/2019 194
Boucle Pour : Exercice

Algorithme Plus-Grand-Element: Réécrire l’algorithme


précédent mais avec une boucle « Pour »

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 :

◦ Perturbation de nombre d'itérations prévu par la boucle


◦ Difficulté de lecture de l'algorithme
◦ Risque d'aboutir à une boucle infinie

Exepmle : Pour i allant de 1 à 5


i  i -1;
Ecrire(" i = ", i) ;
FinPour

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)

Pour compteur allant de initiale à finale par pas valeur du pas

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

 Écrire deux algorithmes qui calculent


pour un entier positif donné n la valeur
n!, un de ces algorithmes doit utilisé la
boucle Pour et l’autre la boucle Tanque

Entrée : n de type naturel


Sortie : factoriel (n) = 1*2*3*…..*(n-1)*n

2018/2019 202
Algorithme de la fonction factorielle

Algorithme / TantQue Algorithme / Pour


Algorithme Calcul_factorielle_1 Algorithme Calcul_factorielle_2
Variables Variables
i, fact1, n : Entier i, fact2, n : Entier
Début Début
Lire(n); Lire(n);
i ← 1; f ← 1;
f ← 1;
TantQue (i < n) Faire Pour i Allant de 2 à n
i ← i+1; f ← f * i;
f ← f * i; FinPour
FinTantQue Ecrire (f);
Ecrire (f); Fin
Fin

2018/2019 203
Algorithme de la recherche des nombres premiers :
Exemple

 Problème: Écrire l’algorithme estPremier, qui


a partir d’un entier strictement positif
donné, retourne le résultat booléen VRAI ou
FAUX selon le nombre est premier ou non.
 Procédure : pour déterminer si un entier m
est un nombre premier. Il suffit de tester si
m est divisible par un entier entre 2 et m/2
◦ Ex : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
47. (listes des nombres premier <=50)
2018/2019 204
La boucle TantQue en langage de
programmation

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

for (i=valeur_initiale; i<= valeur_finale; i++)


test
{
Bloc d’instructions;
corps_boucle
}

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

f ←n; La boucle s’exécute tant que la


condition est vraie. La boucle
n--;
cesse lorque la condition est
} while (n>1); fausse. À utiliser si l’on veut que la
boucle soit exécutée au moins une
fois
209
2018/2019
Les boucles Répéter … jusqu’à …
Répéter
instructions instructions

Jusqu'à (condition)
vrai
condition

faux

 Condition est évaluée après chaque itération

 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

 Si on peut déterminer le nombre d'itérations avant l'exécution de la


boucle, il est plus naturel d'utiliser la boucle Pour

 S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution


de la boucle, on fera appel à l'une des boucles TantQue ou répéter jusqu'à

 Pour le choix entre TantQue et jusqu'à :

◦ Si on doit tester la condition de contrôle avant de commencer les instructions


de la boucle, on utilisera TantQue

◦ Si la valeur de la condition de contrôle dépend d'une première exécution des


instructions de la boucle, on utilisera répéter jusqu'à ou faire tanque

2018/2019 212
Algorithme de la racine carrée : Exercice

 Problème: Écrire l’algorithme qui calcul la racine carrée d’un


nombre sans avoir recours a la fonction mathématique Racine
Carrée prédéfinie.
 Procédure : si n est le nombre dont on souhaite extraire la
racine carrée. On construit une suite de nombres Xi dont le
premier vaut 1 et dont le terme générale a pour expression :
Xi = (n/xi-1 + xi-1) / 2
Rq : Cette suite converge systématiquement vers racinecarree (n)

2018/2019 213
Algorithme de la racine carrée

Algorithme Racine Carrée (RC)


Algorithme Racine
Variables
n, x : réels
i, max : entier
Début
Lire (n);
Lire (max);
x ← 1;
Pour i allant de 1 à max
y ← ((n/x) + x) / 2;
x←y;
FinPour
Ecrire (x),
2018/2019 214
Fin
Algorithme de la racine carrée

Exercice

Tester l’algorithme précédent avec des valeurs:


Exemples: 1, 2, 3 , 4, 9.

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

06/12/2018 Programmer en langage C 217


Les structures de contrôle : if
if--else

◦ La construction if-else (si-sinon) est la construction

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.

Si expression est vraie, instruction1 est exécutée.


Si expression est fausse, instruction1 est ignorée.

06/12/2018 Programmer en langage C 218


Les structures de contrôle : if
if--else
◦ Syntaxe: Forme 2
 if (expression)
instruction1;
else

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

} 06/12/2018 Programmer en langage C 1


Les structures de contrôle : Switch
 L’instruction switch est l’instruction de contrôle la plus souple
du langage C. Elle permet à votre programme d’exécuter

La syntaxe du langage C
différentes instructions en fonction d’une expression qui
pourra avoir plus de deux valeurs.

 On l’appelle aussi l’instruction d’aiguillage. Elle


teste si une expression prend une valeur parmi
une suite de constantes, et effectue le
branchement correspondant si c’est le cas.

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;
}
}

06/12/2018 Programmer en langage C 226


Les structures de contrôle :while
 La boucle while fonctionne de la façon suivante:
1. La condition est évaluée,

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);
}

06/12/2018 Programmer en langage C 230


Les structures de contrôle : for
 A l’instar des instructions while et do-while l’instruction for permet
d’exécuter un certain nombre de fois un bloc d’une ou plusieurs
instructions.

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

06/12/2018 Programmer en langage C 232


Les structures de contrôle : for
 Remarques :par définition l’instruction de for
for ( expression1 ; expression2 ; expression3 )

La syntaxe du langage C
{
liste d’instructions;
}
est équivalente à
expression1;
while(expression2)
{
liste d’instructions;
expression3;
}

06/12/2018 Programmer en langage C 233


Les structures de contrôle :for
 Exemples
◦ Programme pour calculer la somme de 1 à 100
int n, total;

La syntaxe du langage C
for(total=0,n=1;n<=100;n++)
total+=n;

printf(’’la sommes des nombres de 1 à 100 est %d \n’’,total);


◦ Programme pour calculer la factorielle d’un entier n:
int n, i,fact;
Printf(’’donner un nombre entier ’’\n);
Scanf(’’%d ’’,&n);
for(fact=1,i=1;i<=n;i++)
fact*=i;
printf(’’%d!= %d \n’’,n,fact);

06/12/2018 Programmer en langage


C 234
Les structures de contrôle : break, goto et continue

 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.

06/12/2018 Programmer en langage C 235


Les structures de contrôle : break, goto et continue
 Instruction break : exemple
#include <stdio.h>

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

 Instruction break : exemple

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 ).

◦ Elle produit l’abandon de l’itération courante et fait


passer directement à l’itération suivante d’une boucle.

◦ L’instruction continue concerne la boucle la plus


proche.

06/12/2018 Programmer en langage C 238


Les structures de contrôle : break, goto
et continue
 Instruction continue

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

 Il s’agit des fonctions de la librairie 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.

06/12/2018 Programmer en langage C 245


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
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

06/12/2018 Programmer en langage C 246


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
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|

06/12/2018 Programmer en langage C 248


d’entrées
Principales fonctions d’ entrées--sorties standard
 La fonction d’écriture
d’écriture à l’écran formatée printf
◦ Les différents formats de la fonction printf

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 fonction de saisie scanf

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 %.

06/12/2018 Programmer en langage C 250


d’entrées
Principales fonctions d’ entrées--sorties standard
La fonction de saisie scanf
 Exemple

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);
}

06/12/2018 Programmer en langage C 251


chap4 : Algorithmique

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

variable contenant une valeur: Val

variable contenant une collection de valeurs du même type:

TabVal

253
Ensemble de données du même type

 Structure de données permettant d'effectuer un


même traitement sur des données de même
nature

 Tableau à une Dimension

 Tableau à deux dimensions

254
Exemples d’applications

 Ensemble de valeurs entières, réelles,


booléennes,....

 Ensemble de noms (type chaîne)

 Ensemble de caractères (type caractère)

 Ensemble d'adresses (type Adresse : nom, adresse,


num téléphone)

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

 La déclaration d'un tableau s'effectue en précisant le type de ses


éléments et sa dimension (le nombre de ses éléments)

◦ En pseudo code :
variable tableau identificateur[[dimension
dimension]] : type

◦ Exemple : déclaration d'un tableau pouvant contenir jusqu'à 30 réels


variable tableau notes[[30
30]] : réel

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

 Lire(notes[5]); // la valeur entrée par l’utilisateur est


enregistrée dans le tableau à l’indice 5

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

2011/2012 1ère 260


année DUT
Tableaux à deux dimensions
 Les langages de programmation permettent de déclarer des tableaux
dans lesquels les valeurs sont repérées par deux indices.
indices Ceci est
utile par exemple pour représenter des matrices

 En pseudo code, un tableau à deux dimensions se déclare ainsi :

variable tableau identificateur[[dimension1


dimension1]] [dimension2
[dimension2]] : type

◦ Exemple : une matrice A de 3 lignes et 4 colonnes dont les éléments sont


réels
variable tableau A[3][4]
[3][4] : réel

 A[i][j] permet d'accéder à l’élément de la matrice qui se trouve à


l’intersection de la ligne i et de la colonne j

2011/2012 1ère 261


année DUT
Tableaux à deux dimensions (exemple)

 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

 Procédure qui calcule la 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

Pour i allant de 0 à n-1


Pour j allant de 0 à m-1
C[i][j] ← A[i][j]+B[i][j];
FinPour
FinPour
Fin

263
Tableaux : Exemple d’exercice

Écrire l’algorithme du traitement qui


permet
- de saisir 10 nombres entiers dans un
tableau à une dimension, puis qui –
- recherche et affiche la valeur minimale
entrée dans un tableau.

L’affichage mentionnera également


l’indice auquel se trouve ce minimum.
264
Les tableaux
Chap4 : C

Les Tableaux

06/12/2018 Programmer en langage C 265


2- Les tableaux
 Il est souvent nécessaire de mémoriser un grand nombre
d’éléments identiques. Il serait par exemple fastidieux de
déclarer 1000 variables réelles représentant 1000 valeurs.
Pour cela on utilise des 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.

06/12/2018 Programmer en langage C 266


Les tableaux
 Les tableaux à une dimensions
◦ Un tableau à une dimension ne possède qu’un index. Un index est
le nombre entre crochets qui suit le nom du tableau. Il indique le
nombre d’éléments du tableau.
◦ Déclarations

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];

06/12/2018 Programmer en langage C 267


Les tableaux
 Les tableaux à une dimensions
◦ Initialisation à la déclaration
Il est possible d’initialiser le tableau à la

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

06/12/2018 Programmer en langage C 269


Les tableaux
 Les tableaux à une dimensions
◦ Remarque
 Chaque élément ( TAB[i] ) d’un tableau ( int TAB[20] ) est manipulé
comme une simple variable, on peut :

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];

06/12/2018 Programmer en langage C 270


Les tableaux 2D
 Les tableaux à deux dimensions

◦ En C, un tableau multidimensionnel est considéré

Les tableaux
comme un tableau dont les éléments sont eux même
des tableaux.

◦ Un tableau à deux dimensions se déclare donc de la


manière suivante :
int mat[10][20];
◦ En faisant le rapprochement avec les mathématiques,
on peut dire que mat est une matrice de 10 lignes et
de 20 colonnes.
06/12/2018 Programmer en langage C 271
Les tableaux 2D
 Les tableaux à deux dimensions
◦ On accède à un élément du tableau par l’expression mat[i][j].
◦ Pour initialiser un tableau à plusieurs dimensions à la
compilation, on utilise une liste dont chaque élément est une

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

Das könnte Ihnen auch gefallen