Vous êtes sur la page 1sur 40

Ordinateur et Informatique

Algorithme Et Programme Objectifs thématiques 2


Le langage C

UE INFO111 : Algorithme et Programmation I -


Éléments de base Initiation à l’Algorithmique

Initiation à la programmation en langage C


Pr. David C. FAYE/UFR SAT-UGB Mise en oeuvre
structures de données et structures algorithmiques
conception de programmes informatiques via une analyse
UFR SAT/UGB
descendante
david-celestin.faye@ugb.edu.sn
Réalisation de projets informatiques
29 mars 2022

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale

Objectifs pédagogiques 3 Objectifs comportementaux 4


Trois « qualités » comportementales chez l’informaticien débutant :

la rigueur
Un ordinateur est une machine qui exécute vite et bien les
Connaissance : mémorisation et restitution d’informations instructions qu’on lui a « apprises ».
dans les mêmes termes. Mais elle ne sait pas interpréter autre chose : même mineure,
une erreur provoque le dysfonctionnement de la machine.
Compréhension : restitution du sens des informations dans la persévérance
d’autres termes. Face à l’intransigeance de la machine, le débutant est
confronté à ses nombreuses erreurs (les siennes, pas celles de la
Application : utilisation de règles, principes ou algorithmes machine !) et sa tendance naturelle est de passer à autre chose.
pour résoudre un problème, les règles n’étant pas fournies Le zapping est une très mauvaise stratégie en informatique :
dans l’énoncé. pour s’exécuter correctement, un programme doit être finalisé.
.
l’autonomie.
Programmer soi-même les algorithmes qu’on a définis pour
mieux assimiler les principales structures algorithmiques et
pour mieux comprendre ses erreurs en se confrontant à
l’intransigeante impartialité de l’ordinateur
Modalités 5 Modalités 6

Répartition du volume horaire


Maîtriser l’algorithmique requiert deux qualités : Cours Magistral : 24H
Travaux Dirigés (TD) : 20H
L’intuition : savoir décomposer le problème en une série Travaux Pratiques (TP) : 16H
d’instructions.
Contrôle des connaissances
La rigueur : vérifier que la série d’instructions aboutit bien au
1 note de Contrôle Continu(CC)
résultat attendu.
1 note de Travaux Pratiques (comprenant TP+Projet)
Les deux qualités s’acquièrent par l’expérience ! 1 note d’examen
P +CC
Note finale 2∗Examen+T
4 1iere session ou
4∗Examen+T P +CC
6 en 2ieme session

Ordinateur et Informatique
Modalités Pédagogiques 7 Algorithme Et Programme
Généralités
Architecture d’un ordinateur
Le langage C

Plan 8
Intervenants aux TD/TP
Oumar SY, J. M. DEMBELE, D. C. FAYE
Mouhamadou Lamine BALDE, Mahamadou TRAORE,
1 Ordinateur et Informatique
Oumar DIOP, El Hadji Serigne Mamour DIOP
Fatou Kamara SANGARE, Cheikh Tidiane DIENG Généralités
Architecture d’un ordinateur
Polycopiés
Polycopié cours à reproduire par l’étudiant 2 Algorithme Et Programme
Notions d’algorithme et de programme
Rappels pour les TP
Objets simples, types et actions élémentaires
Présence TP et TD obligatoire( cf. livret de l’étudiant)
Absence non-excusée au TP implique 0
Fraude en TP : 0 a la note de TP 3 Le langage C
Remise de Projet après la date limite : 0 a la note de Projet

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale


L’informatique 9 L’informatique 10

Que serait le monde sans l’informatique ?


* Quand l’utiliser ?
Transports
Quels sont les problèmes informatisables ?
Avions
Qu’est-ce qui est possible / difficile / impossible
Voitures (des ordinateurs sur roues)
Communications * Pourquoi l’utiliser ?
Réseaux (communications par paquets) Quel intérêt de recourir à l’informatique ?
Satellites
Modes de pensée * Comment l’utiliser ?
Quelles sont les étapes d’un traitement ?
Calculs complexes / Simulations Quelles technologies faut-il maîtriser ?
Connaissances toujours à portée de clics

Quelques Définitions 11 Quelques Définitions 12


Information Informatique
Elément de la connaissance humaine dans les domaines Informatique (Information+automatique)
techniques, économiques et sociaux représenté à l’aide
Science du traitement automatique de l’information,
de conventions(codage) en vue d’être conservé, traité et
c’est-à-dire, l’exécution du traitement par des machines
communiqué
néologisme proposé en 1962 par Philippe Dreyfus et
Tout ce qui est numérisable, différentes formes : son,
accepté par l’Académie française en avril 1966.
image, texte, vidéo, signal, ADN, etc.
Le mot sans équivalent aux Etats-Unis où l’on parle de
Traitement Computing Science (science du calcul) alors que
Informatics est admis par les Britanniques.
Passer d’informations appelées données à d’autres
L’informatique concerne les abstractions, comme les
informations dites résultats
maths.
Exemples : addition, robot, traduction...
L’informatique traite de deux aspects complémentaires :
Donnée les programmes immatériels (logiciel, software) qui décrivent
Représentation d’une information sous une forme convention- un traitement à réaliser et
nelle (codée) destinée à faciliter son traitement. les machines (matériel, hardware) qui exécutent ce
traitement.
Quelques Définitions 13 Différents points de vue 14
Ordinateur
Equipement informatique permettant de traiter des L’informatique peut être vue comme un outil :
informations selon des séquences d’instructions (les
programmes) qui constituent le logiciel.
Machine bête et rapide qui saisit(périphériques
d’entrée), stocke (mémoire), traite (programmes) et
restitue (périphériques de sortie) des informations
proposé par le philologue Jacques Perret en avril 1955
en réponse à une demande d’IBM France qui estimait le
mot « calculateur » (computer ) bien trop restrictif en L’informatique est aussi une science (comme les
regard des possibilités de ces machines. mathématiques ou la physique) :
Maîtrise des méthodes de traitement (développement)
TRAITEMENT Réalisation de nouvelles méthodes de traitement (recherche)
DE
l'INFORMATION
Science : un côté théorique (mathématique) + un côté
Données
expérimental (e.g. simulations (jeux), multi-tâches, ...)
Résultats

L’informatique Aujourdhui 15 L’informatique et VOUS 16


Classes d’abstractions et de concepts
Notion de calcul : entrée ; sortie ; spécification
Actuellement l’informatique intervient dans tous les secteurs
d’activité de la vie quotidienne Notion d’algorithme : organisation des calculs ;
approximation ; heuristiques ; ...
démontrer un théorème (mathématique)
Complexité : calculabilité ; performance
faire jouer aux échecs (intelligence artificielle)
Structures de données
dépouiller un sondage (économie)
Raisonnement : correction ; logique ; heuristiques ;
gérer un robot industriel (atelier) raisonnement imprécis ;
facturation de produits (entreprise) Contrôle du calcul : récursion ; itération ; non-déterminisme ;
traduire un texte (linguistique) parallélisme ; distribution
imagerie médicale (médecine) Communication
formation à distance (éducation) information ; code ; synchrone/asynchrone ; P2P ;
Internet (grand public), etc. client-serveur ; ...
Contraintes du monde physique : tolérance aux fautes ;
imprécisions ; coûts ; ...
etc.
L’informatique et VOUS 17 L’Ordinateur 18

Des aspects multiples :


Informatique théorique : algorithmique, automates, logique,
calculabilité, complexité, théorie des graphes, . . . Composants matériels (Hardware)
Programmation : plusieurs paradigmes (impératif, Tout ce qui compose l’ordinateur et ses accessoires
fonctionnel, logique, orienté objet, ...) Ne sait rien faire à part ce qu’on lui a appris à faire
Réseau : transmission de l’information (protocoles, routage, Incapables de traiter les informations sans un ensemble de
règles (partie logicielle) pour les guider
serveurs, ...)
Sécurité : cryptologie, vérification de programme, ... Chaque composant possède une fonction particulière
Architecture de systèmes : code assembleur, gestion de la calcul
stockage des données
mémoire, ...
affichage vidéo
Intelligence artificielle : raisonnement, apprentissage, gestion du clavier...
représentation des connaissances, ...
Et beaucoup d’autres : bases de données, bio-informatique,
optimisation, .

L’Ordinateur/L’homme 19 Informatique 20

L’utilisateur fournit des données à l’ordinateur (entrées ou


Input), qui traite ces informations, puis renvoie les résultats
Raison du remplacement : ou réponses à l’utilisateurs (sorties ou Output).
Vitesse (pour des opérations « bas niveau ») Le but de l’informatique est donc de faire accomplir par
Fiabilité (répétitivité) l’ordinateur ce que fait l’homme, avec des gains de :
Mémoire
Coût rapidité
précision
Un ordinateur n’est pas un objet "magique"... Il est juste efficacité
beaucoup plus rapide que l’homme pour exécuter une série de
tâches basiques Avec l’informatique, la machine utilisée (l’ordinateur)
nécessite l’utilisation d’un programme (ou logiciel).
2 types d’« informaticiens »
les utilisateurs des outils informatiques En revanche, il est possible d’utiliser plusieurs logiciels très
Les concepteurs de ces outils : votre but différents, avec le même ordinateur (calculs, gestion, jeux,
Bureautique...).
l’ordinateur est capable d’effectuer des fonctions aussi diverses
que puissantes, grâce à ces fameux logiciels.
Architecture d’un ordinateur 21 Architecture d’un ordinateur(John Von Neumann) 22
Le noyau central d’un ordinateur peut être schématisé comme suit

Un ordinateur est une machine de traitement de l’information UNITE CENTRALE


capable :

ENTREES
d’acquérir et de stocker des informations

SORTIES
Unite Unite arithmetique
de et
d’effectuer des traitements et de restituer des informations. Contrôle Logique
L’architecture générale d’un ordinateur est la suivante :
une unité centrale appelée CPU (contenant le processeur), REGISTRES

des composants matériels autour (mémoires, cartes diverses),


des organes périphériques (écran, clavier, imprimante...)
MEMOIRE MEMOIRES
une couche logicielle basse, appelée système d’exploitation CENTRALE SECONDAIRE

les logiciels d’applications (Bureautique, jeux, calcul,


gestion...)

Architecture d’un ordinateur 23 Architecture d’un ordinateur 24

Le CPU (Central Process Unit ou Unité Centrale) est le cœur


Il existe deux types de mémoire centrale :
de l’ordinateur. Il comporte les registres et la mémoire
la mémoire vive, ou encore RAM pour Random Access Memory
centrale.
(Mémoire à Accès Aléatoire : lecture ou écriture) qui contient
Les registres :
les données et les programmes dits "volatiles’ ; son contenu
contiennent les instructions exécutées ; s’efface dès que l’alimentation en énergie est coupée.
gardent la trace des informations courantes. la mémoire morte, ou ROM : Read Only Memory (Mémoire à
L’Unité Arithmétique et Logique (UAL) effectue les Lecture Seule) contient des données et des programmes figés,
instructions arithmétiques et logiques en travaillant sur les son contenu est fixé à la fabrication de l’ordinateur et ne peut
données. jamais être modifié.

L’Unité de Contrôle (UC) entre l’UAL et les registres et Les mémoires secondaires, quant à elles, contiennent des
décode les instructions. programmes et des données de façon permanente, puisqu’elles
conservent l’information même si la machine est éteinte. Il
La mémoire centrale contient le programme (instructions à
peut s’agir de : disques durs, disquettes, CD-ROMs ou
traiter) ainsi que les données au moment de l’exécution.
DVD-ROMs.
Le processeur et la mémoire sont reliés par un bus.
Architecture d’un ordinateur 25 Architecture d’un ordinateur 26
SAISIE TRAITEMENT RESTITUTION

Données Résultats
L’unité centrale peut être étendu avec des composants Instructions

supplémentaires (composants matériels). Il s’agit par exemple


de mémoires (mémoire centrale), de cartes sonores, cartes
vidéo, cartes réseau...
Périphériques d'entrée Mémoires auxiliaires Périphériques de sortie
Les organes périphériques permettent surtout la
communication avec l’utilisateur.
Le clavier, la souris, le CD-ROM ou DVD-ROM sont des
périphériques d’entrée. Ils permettent la collecte
Joystick Scanner Micro Souris CD-ROM
d’informations. Ecran Modem

L’écran, les imprimantes, la table traçante sont des


périphériques de sortie. Ils permettent la diffusion Modem Webcam Clavier Disque dur
Lecteur
CD-ROM Haut parleur Imprimante
d’informations

Figure – Traitement de l’information.

Architecture d’un ordinateur 27 Architecture d’un ordinateur 28

Le système d’exploitation est un programme sans lequel il


Tout traitement automatique peut être réalisé au moyen d’un n’est pas possible de communiquer avec l’ordinateur.
ou de plusieurs programmes. C’est un programme qui interprète les diverses informations
Un programme est une série d’instructions (opérations) que la données par l’utilisateur, en les convertissant en langage
machine peut exécuter pour effectuer des traitements donnés. machine.
Un logiciel est en général un ensemble de programmes visant Le système d’exploitation (Operating System) est un ensemble
à effectuer automatiquement un traitement ou une tâche de programmes dont la fonction est de gérer le système
complexe. informatique.
Une machine peut héberger plusieurs logiciels au choix de son Le rôle d’un système d’exploitation est donc de créer un
environnement pour faire fonctionner des applications
utilisateur. diverses :
gestion des ressources de l’ordinateur
gestion du disque et des fichiers
gestion des opérations effectuées par l’utilisateur
pilotage des organes périphériques
Utilisation d’un langage de commande.
Architecture d’un ordinateur 29 Capacité Mémoire- Approximation 30

1 bit = 0 ou 1
Actuellement, les OS les plus connus sont DOS, Windows,
1 octet = 8 bits = 1 byte
MacOS, OS/2 ou encore UNIX.
1 mot = 8, 16, 24 ou 32 bits= 1, 2, 3 ou 4 octets
Le langage machine, le seul directement compréhensible par la
machine, est en fait une succession de zéros et de uns 1 bit représente 2 possibilités, 2 bits 4 possibilités, 3 bits 8
définissant des opérations précises à effectuer : toute possibilités, . . . , n bits 2n possiblités.
information étant donc codée avec uniquement des 0 et des 1.
Z mesure de capacité mémoire en 2n !
Ces chiffres binaires 0 et 1 à partir desquels on construit des
nombres plus grands sont appelés bits (pour binary digit). 1 Kilo = 103 ' 210 = 1024
Toutes les données manipulées sont ainsi représentées par des 1 Mega = 106 ' 220
séquences de bits : 1 Giga = 109 ' 230
un caractère : 8 bits (code entre 0 et 255) 1 Tera = 1012 ' 240
un entier : 32 bits
1 Peta = 1015 ' 250
un réel en virgule flottante ( 32 ou 64 bits)
sons : décomposés en échantillon 1 Exa = 1018 ' 260
image décomposée en pixels 1 Zetta = 1021 ' 270
1 Yotta = 1024 ' 280

Ordinateur et Informatique
Remarques 31 Algorithme Et Programme
Notions d’algorithme et de programme
Objets simples, types et actions élémentaires
Le langage C

Plan 32

1 Ordinateur et Informatique
Quelques règles :
Généralités
Un ordinateur ne réfléchit pas → incapable de corriger une
Architecture d’un ordinateur
erreur → ne remplace pas la réflexion
Un ordinateur ne se trompe jamais ( ou presque), l’erreur est
toujours humaine 2 Algorithme Et Programme
Le programme et conçu par un humain, l’ordinateur l’exécute Notions d’algorithme et de programme
Objets simples, types et actions élémentaires

3 Le langage C

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale


Notions de problème 33 Notions d’algorithme et de programme 34
Utilité de l’ordinateur :
nous décharger de tâches peu valorisantes et/ou rébarbatives,
nous aider, voire faire à notre place (plus rapidement et L’algorithmique est une science très ancienne. Son nom vient
probablement avec moins d’erreurs) un travail nécessaire à la d’un mathématicien arabe du IXème siècle El Khawrismi.
résolution de problèmes auxquels nous devons faire face. Des mathématiciens grecs comme Euclide ou Archimède en
Préalable, à la résolution d’un problème : ont été les précurseurs (calcul du PGCD de 2 nombres, calcul
définir quel est le problème posé. du nombre π).
mentionner l’objectif à atteindre (= le résultat attendu). Nombreuses intéractions avec la combinatoire, le calcul des
probabilités, la théorie des nombres,etc.
Question à se poser :
Algorithmique : Science qui étudie l’application des
De quoi dispose-t-on ? algorithmes à l’informatique
Quelles sont les hypothèses ? Il existe plusieurs définitions possibles de l’Algorithme :
Quelle est la situation de départ ?
Spécification d’un problème
Etant donné [les données] on demande [l’objectif ]

Notions d’algorithme et de programme 35 Mon premier algorithme 36


Définition
Spécification d’un schéma de calcul, sous forme d’une Mon premier algorithme
suite finie d’opérations élémentaires obéissant à un 1 Je rencontre un problème à résoudre
enchaînement déterminé.♣
2 Je cherche la solution
Ensemble de règles opératoires dont l’application
3 Si je n’y arrive pas au bout de quelques minutes, je
permet de résoudre un problème donné au moyen d’un
reviens au point 2.
nombre fini d’opérations.♣
4 Si je n’y arrive pas au bout d’un quart d’heure, je
Etant donné un traitement à effectuer, un algorithme
demande des indices au prof ou à mes camarades de
du traitement est l’énoncé d’une séquence d’actions
promotion. Je reviens au point 2.
réalisant ce traitement.
5 Si, malgré toute cette aide et après être tombé de
Exemples fatigue, je n’y arrive toujours pas, j’écoute la correction
Indiquer son chemin à quelqu’un en classe et le soir venu, je reviens au point 1.
Recette de cuisine
Montage d’un meuble en kit « En essayant continuellement, on finit par réussir. Donc plus ça
Contre-Exemples rate, plus on a de chance que ça marche »
"débrouille-toi" n’est pas un algorithme
Mon deuxième algorithme 37 Notions d’algorithme et de programme 38
Le développement de l’informatique a marqué l’essor de
l’algorithmique, mais cette discipline n’est pas l’apanage de
l’informatique.
La notion d’algorithme est liée mathématiquement à la
possibilité de résolution systématique d’un problème, donc à la
notion de méthode de calcul, mais plus exigeant que les
maths.
On trouve dans le domaine purement mathématique de
nombreux algorithmes :
les algorithmes de calcul des opérations élémentaires (addition
posée, multiplication posée...)
l’algorithme de la division euclidenne par différences successives
l’algorithme d’Euclide du calcul du pgcd
l’algorithme de résolution des équations de degré 2
l’algorithme du pivot de Gauss pour résoudre les systèmes
d’équations linéaires, et répondre à d’autres questions
d’algèbre linéaire.
l’algorithme de Hörner pour l’évaluation d’un polynôme
etc.

Pourquoi un cours d’algorithmique ? 39 Propriétés d’un algorithme 40


L’objectif est obtenir de l’ordinateur qu’il effectue un travail à
notre place.
Par conséquent le problème sera le suivant
Un algorithme doit être
Expliquer à l’ordinateur comment il doit s’y prendre
Mais... comment le lui dire ? =⇒ PRECIS : Il doit indiquer :
Comment s’assurer qu’il fait ce travail aussi bien que nous ? l’ordre des étapes qui le constituent
Mieux que nous ? Plus vite que nous ? à quel moment il faut cesser une action
Le but sera dont d’apprendre une logique de programmation à quel moment il faut en commencer une autre
qui pourra être réutilisée dans la plupart des langages de comment choisir entre différentes possibilités
programmation. =⇒ DETERMINISTE
En d’autre termes, il faudra apprendre à expliciter et à Une suite d’exécutions à partir des mêmes données doit
formaliser son raisonnement. produire des résultats identiques.
Les prérequis sont : =⇒ FINI DANS LE TEMPS
esprit logique, bon sens, intuition
c’est-à-dire s’arrêter au bout d’un temps fini.
méthode, rigueur
NB : Pas besoin d’être bon en maths pour écrire de bons
algorithmes mais les maths apportent : "l’intuition" de la
résolution du problème (qu’on peut obtenir avec beaucoup
d’expérience)
Exemple 41 Problèmes fondamentaux en algorithmique 42

Calculabilité
Exemple : Résolution de l’équation du premier degré AX + B = 0
Etant donnée une tâche, peut-on dire s’il existe un algorithme
début
Lire les coefficients A et B qui la résolve ?
si A est non nul alors Existe-t-il des tâches pour lesquelles il n’existe aucun
affecter à X la valeur −B/A algorithme ?
afficher à l’écran la valeur de X
sinon Complexité
si B est nul alors En combien de temps un algorithme va-t-il atteindre le
écrire "tout réel est solution" résultat escompté ?
sinon De quel espace a-t-il besoin ?
écrire "pas de solution"
fin Correction
fin Peut-on être sûr qu’un algorithme réponde au problème pour
lequel il a été conçu ?

Les différentes étapes du processus de programmation 43 Les différentes étapes du processus de programmation 44

Spécifications
Algorithmiques
Problème
réel
ANALYSE Programmation
Problème
(C)

Traduction
ALGORITHME
CODAGE Analyse de
Code Source
problème

Exécution
PROGRAMME Compilation et
Algorithme Résultats
exécution
Erreurs sémantiques

Erreurs syntaxiques Algorithmique Programmation


RESULTATS
Notion de pseudo-langage 45 Elaboration d’un algorithme 46
langage indépendant des machines sur lesquels les
programmes vont s’executer : pseudo-langage
permet la description de façon formelle et précise de tout
algorithme =⇒ compréhensible par tous les programmeurs Analyse du problème
traduction facile dans un langage de programmation de haut compréhension de l’énoncé
niveau
Probleme sans Enoncé précis Ecriture des Expression d’une solution en langage courant
Programme
formulation précise du probème algorithmes
description succincte du problème

Expression d’une solution en pseudo-langage


choix de la solution
Langage Langage Langage de
naturel algorithmique programmation
Tests et Vérification de l’adéquation de la solution
vérification du bon déroulement de l’algorithme

ANALYSE ALGORITHMIQUE PROGRAMMATION

Programmation 47 Programmation 48

Depuis leur création, les langages de programmation ont


différents logiciels prêts à l’emploi :
évolué et se sont diversifiés.
jeux
De nos jours, il existe de nombreux langages informatiques,
Bureautique(traitements de textes, tableurs...)
de gestion (fichiers, bases de données...) dédiés à la programmation. Schématiquement, il est possible
retouche de son ou d’images... de les classer en cinq catégories :
Necessité parfois de concevoir un logiciel pour une tâche Les langages procéduraux ou impératifs.
Les langages fonctionnels.
spécifique
Les langages logiques.
concevoir le programme réalisant la tâche avec un langage de Les langages objets.
programmation
langages de programmation : FORTRAN, COBOL, BASIC, C, Les langages majoritairement les plus utilisés actuellement
ADA, C++, LISP,SCHEME, CAML, PROLOG, JAVA. sont ceux qui font partie de la catégorie des langages
procéduraux ou Hybrides.
Programmation 49 I Programmation 50 II

FORTRAN ancêtre commun des langages procéduraux

Dans cette courte liste, seuls Algol, Basic et Pascal sont des
langages qui ont été conçus par des équipes dans des buts de
recherche ou d’enseignement.
Les autres langages sont élaborés par des firmes et des
compagnies dans des buts de commercialisation.

Programmation 51 I Compilateur 52
Un compilateur est un programme informatique qui transforme
un code source écrit dans un langage de programmation
compréhensible par l’humain
en un code assembleur ou code machine compréhensible
seulement par la machine

Un algorithme est (théoriquement) portable sur toute machine. Le


compilateur permet de traduire le code source de l’algorithme en
un code assembleur propre à chaque machine.
Structure d’un algorithme 53 I Structure d’un algorithme 54 I

Un premier algorithme...
Algorithme EleveAuCarre
Un algorithme (comme un programme) est composé de trois /*Cet algorithme calcule le carre du nombre que lui fournit
parties principales : l’utilisateur*/
1 La partie définitions permet de définir les « entités » qui variables unN ombre, sonCarre : entiers
pourront être manipulées dans l’algorithme. En particulier, on début
définit des constantes, des types et des sous-programmes. /*preparation du traitement*/
2 La partie déclarations permet de déclarer les données qui sont Ecrire("Quel nombre voulez-vous elever au carré")
utilisées par le programme. Les données sont représentées par lire(unN ombre)
des variables. /*traitement*/
sonCarre ← unN ombre ∗ unN ombre
3 La partie instructions constitue le programme principal. Les
/*presentation du resultat*/
instructions sont exécutées par l’ordinateur pour transformer
Ecrire("Le carre de ", unN ombre)
les données.
Ecrire("c’est ", sonCarre)
fin
Les trois étapes d’un algorithme sont les suivants :

Structure d’un algorithme 55 II Données 56 I

En informatique, une donnée est la représentation d’un objet


abstrait ou concret du monde. Dans une machine chaque
1 (Déclarations) donnée est codée et stockée dans une mémoire.
2 Préparation du traitement Un algorithme ou une action manipule des données pour
saisie des données nécessaires à la résolution du problème obtenir un résultat.
objets en entrée et sortie d’un algorithme
3 Traitement
résolution pas à pas du problème, après décomposition en Un objet va être caractérisé par :
sous-problèmes si nécessaire un identificateur (son nom) : pour le désigner cet identificateur
4 Edition des résultats doit être parlant : q=quotient ?
Un type (nature de l’objet : entier, caractère) simple ou
affichage à l’écran, sauvegarde dans un fichier, etc.
structuré. Un type détermine en particulier les valeurs possibles
de l’objet et les opérations primitives applicable à l’objet.
Une valeur (contenu de l’objet) unique. Cette valeur peut
varier au cours de l’algorithme ou d’une exécution à l’autre :
ces objets sont des variables.
Codage des Données 57 I Codage Décimal 58 I

Tout entier positif x est codé par un tableau x =< x1, ..., xn >
comprenant n = blog10 x + 1c cases (ou chiffres),
L’informatique utilise plusieurs codages de données, dont les chacun ayant une valeur de 0 à 9,
principaux sont : et tel que :
n
X
Décimal : en mathématiques, les données sont généralement x= xi 10i
codées en base 10. i=0

Binaire : dans une mémoire électronique, les données sont Exemple


codées en base 2. Considérons le nombre entier x "un million cent mille huit cent
Hexadécimal : codage en base 16 (24), utilisé pour interpréter trente six". En base 10 il est codé par le tableau :
les données binaires.
1 1 0 0 8 3 6
106 105 104 103 102 101 100

On a bien 1, 100, 836=


1 · 106 + 1 · 105 + 0 · 104 + 0 · 103 + 8 · 102 + 3 · 101 + 6 · 100

Codage Binaire 59 I Codage hexadécimal 60 I


Tout entier positif x est codé par un tableau x =< x1, ..., xn >
Tout entier positif x est codé par un tableau x =< x1, ..., xn >
comprenant n = blog16 x + 1c cases (ou chiffres),
comprenant n = blog2 x + 1c cases (ou chiffres),
chacun ayant une valeur dans
chacun ayant une valeur de 0 à 2, {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
et tel que : et tel que :
n
X n
i
x= xi 2
X
x= xi 16i
i=0 i=0
Exemple Exemple : Conversion binaire → hexadécimale
Considérons le nombre entier x "soixante quinze". En base 2 il est Chaque paquet de 4 bits est regroupé et codé par un chiffre
codé par le tableau : hexadécimal.
1 0 0 1 0 1 1 0 1 0 0 1 0 1 1
26 25 24 23 22 21 20 | {z } | {z }
8 B
On a bien 75= 1 · 64 + 0 · 32 + 0 · 16 + 1 · 8 + 0 · 4 + 1 · 2 + 1 · 1
Le nombre décimal 75 correspond bien au nombre hexadécimal 8B.
Type de données 61 I Type de données 62 II
Les objets simples sont :
des nombres (par exemple 3 , 7 , 3.141592 , 1996).
des caractères ou des chaînes de caractères (par exemple : ’A’ Les différents types simples sont les suivants :
, ’45’ , ’BONJOUR’).
Type entier : prend ses valeurs dans un sous-ensemble des
des valeurs booléennes (VRAI , FAUX) entiers relatifs.
On distingue généralement : Type réel : prend ses valeurs dans un sous-ensemble de réels
les types scalaires qui sont par définition totalement ordonnés décimaux signés.
les types structurés qui regroupent sous un même nom une Type caractère : prend ses valeurs dans l’ensemble des
collection d’objets élémentaires qui peuvent être de même caractères de la table ASCII.
type (type homogène) ou de type différents (type hétérogène). Type chaîne de caractère : se compose d’une suite de
Ces types structurés seront vus ultérieurement. symboles de type caractère
Type booléen : type logique qui peut prendre les valeurs
VRAI ou FAUX.

Type de données - Les entiers 63 I Type de données - Les Les réels 64 I

Le type Entier caractérise les entiers relatifs.


Exemple
1 7
2 0 Le type Réel caractérise les réels.
3 -7 Exemple
Les opérations sont : +, -, *, Div (division entière), Mod 10.0
(reste de la division entière) et Abs (valeur absolue) 0.0
- et + peuvent être unaires ou binaires. -10e-4

Exemple Les opérations sont : +, -, *, /, Abs (valeur absolue), Trunc


(partie entière). - et + peuvent être unaires ou binaires.
7 Mod 3 -- 1 ( reste de la division entière de 10 par 3)
7 Div 3 -- 2 ( quotient de la division entière de 10 par 3)
1 Div 2 -- 0 ( quotient de la division entière de 1 par 2)
Abs(-8) -- 8 (l’entier est mis entre parenthèses (cf sous-programmes))
Type de données - Booléen 65 I Type de données - Booléen 66 II

Le type Booléen caractérise les valeurs booléennes qui ne


correspondent qu’à deux valeurs VRAI ou FAUX.
Les opérations sont Et, Ou et Non qui sont définies par la
table de vérité suivante : Remarque :
A B A ET B A OU B NON A Soit A est une variable de type Booleen
VRAI VRAI VRAI VRAI FAUX A est équivalent à A = VRAI
VRAI FAUX FAUX VRAI FAUX Non A est équivalent à A = FAUX
FAUX VRAI FAUX VRAI VRAI
Il est préférable d’utiliser A et Non A. Les deux autres formulations,
FAUX FAUX FAUX FAUX VRAI
si elles ne sont pas fausses, sont des pléonasmes !
Lois de De Morgan :

Non (A Et B) = (Non A) Ou (Non B)


Non (A Ou B) = (Non A) Et (Non B)
Non(NonA) =A

Type de données - Les caractères 67 I Type de données - Les chaînes de caractères 68 I


Le type Caractère caractérise les caractères.
Exemple de représentants des caractères

’a’-- le caractère a
’\’’-- le caractère ’ Le type Chaîne caractérise les chaînes de caractère
’\\’-- le caractère \ Exemple
’\n’-- retour à la ligne
’\t’-- Caractère tabulation "Une␣chaîne␣de␣caractères"
"Une␣chaîne␣avec␣guillement␣(\")"
On considère que les lettres majuscules, les lettres minuscules et
les chiffres se suivent. Ainsi, pour savoir si un variable c de type
Nous verrons plus en détail les chaînes de caractères lorsque nous
caractère correspond à un chiffre, il suffit d’évaluer l’expression(
traiterons de la structure de données « tableau ».
c >= ’0’) Et (c <= ’9’).
Opérations :
Ord : Permet de convertir un caractère en entier.
Chr : Permet de convertir un entier en caractère.
Pour tout c : Caractère on a Chr(Ord(c)) = c.
Structure d’un algorithme 69 I Objets-Identificateurs-Variables 70 I

Pour désigner ces différents objets, on utilisera des chaînes de


caractères qui seront appelées les identificateurs des objets.
Pour différencier un identificateur d’un nombre, un
En résumé, identificateur commence par une lettre et ne comporte pas
objet =⇒ donnée ou algorithme d’espace. Il peut contenir un nombre quelconque de lettres,
algorithme =⇒ procédure ou fonction chiffres ou soulignés(_).
donnée =⇒ constante ou variable
constante ou variable =⇒ type scalaire ou type structuré De plus, on essaiera toujours de choisir des noms explicites
type structuré =⇒ type homogène ou hétérogène afin de faciliter la relecture et l’éventuelle maintenance de
l’algorithme par un tiers.
Un objet peut être :
une constante ou une variable s’il s’agit d’une donnée
au sens large, une fonction (ou une procédure) s’il s’agit d’un
algorithme

Objets-Identificateurs-Variables 71 Objets-Identificateurs-Variables 72 I
Un problème est spécifié par une relation entre
les valeurs des paramètres en entrée (les données) et
Une variable peut être vue comme une zone dans la mémoire
les valeurs des paramètres en sortie (les résultats). (vive) de l’ordinateur qui est utilisée pour conserver les données qui
Pour calculer les valeurs des paramètres en sortie à partir des seront manipulées par l’ordinateur.
valeurs en entrée, un algorithme peut utiliser des données Une variable est caractérisée par quatre informations :
intermédiaires, appelées variables locales. son rôle : il indique à quoi va servir la variable dans le
programme. Cette information doit apparaître dans
Algorithme :
relation entre entrées et sorties l’algorithme sous la forme d’un commentaire informel (texte
Paramètres Paramètres
en entrée en sortie libre) associé à la variable ;
variables locales
son nom : composé uniquement de lettres minuscules,
majuscules, de chiffres et du caractère souligné, il permet
Exemple : résoudre une équation du second degré d’identifier la variable. On parle d’« identificateur ». Ce nom
doit être significatif (refléter le rôle de la variable).
Résolution d'une équation du second degré :
ar12 +br1 +c = ar22 +br2 +c=0
son type : une variable est utilisée pour représenter des
a,b,c r1,r2 données qui sont manipulées par le programme. Un type est
variables locale : delta
utilisé pour caractériser l’ensemble des valeurs qu’une variable
peut prendre.
Objets-Identificateurs-Variables 73 Déclaration d’une variable 74 I
sa valeur : La variable contient une information qui peut
varier au cours de l’exécution d’un programme. C’est cette
information que l’on appelle valeur de la variable. La valeur
d’une variable doit correspondre au type de la variable. La Associe à un identifiant son type de données
valeur d’une variable n’existe que lorsque le programme est Syntaxe (en pseudo code)
exécuté. Les autres informations (nom, rôle et type) sont <identifiant> : <type de donnees>
définies lors de la conception du programme, pendant la con- exemples
struction de l’algorithme age : Entier
nom : Chaine de caracteres

Attention !
Entier caractère une variable ne peut pas changer de type de données
age 26 Initiale A sa valeur peut par contre changer (en accord avec le type)
la valeur d’initialisation est aléatoire.
nom Camara

Objets-Identificateurs-Variables 75 I Objets-Identificateurs-Variables 76 II

Certaines informations manipulées par un programme ne


changent jamais. ( exemple π, du nombre maximum
d’étudiants dans une promotion, etc.
L’utilisation d’une constante permet essentiellement de gagner
Ces données ne sont donc pas variables mais constantes. en clarté et lisibilité.
Plutôt que de mettre explicitement leur valeur dans le texte Ces quantités ne peuvent pas changer au cours de l’exécution
du programme (constantes littérales), il est préférable de leur d’un programme.
donner un nom symbolique (et significatif).
Toutefois, si un changement doit être réalisé , il suffit de
On parle alors de constantes (symboliques). changer la valeur de la constante symbolique dans sa
définition (et de recompiler le programme) pour que la
PI = 3.1415 -- Valeur de PI modification soit prise en compte dans le reste de l’algorithme.
MAJORITE = 18 -- Age correspondant à la majorité
TVA = 19.6 -- Taux de TVA en vigueur au 15/09/2000 (en %)
CAPACITE = 120 -- Nombre maximum d’étudiants dans une promotion
INTITULE = "Algorithmique et programmation" -- par exemple
Actions élémentaires-Opérateurs 77 Expression 78 I
Une expression est « quelque chose » qui a une valeur.
une expression est une constante, une variable ou toute
Opérateur Notation Type opérandes Type résultat combinaison d’expressions en utilisant les opérateurs
+ et - unaires +- entier/réel type opérande arithmétiques, les opérateurs de comparaison ou les
négation logique NON booléen booléen opérateurs logiques.
Puissance ↑ entier/réel entier/réel
Multiplication * entier/réel entier/réel 10.0 -- une constante litérale
Division entière DIV entier entier PI -- une constante symbolique
Division / entier/réel réel
rayon -- une variable de type réel
Reste(modulo) MOD entier entier
Addition + entier/réel entier/réel 2*rayon -- l’opérateur * appliqué sur 2 et rayon
Soustraction - entier/réel entier/réel 2*PI*rayon 6 -- une expression mélant opérateurs, constantes et
Comparaison <,≤,>,≥,<>,= tout type booléen rayon>=0 -- expression avec un opérateur de comparaison
ET logique ET booléen booléen
OU logique OU booléen booléen
Attention : Pour qu’une expression soit acceptable, il est nécessaire
que les types des opérandes d’un opérateur soient compatibles.

Expression 79 II Expression 80 III


Exercice : Parenthéser complétement les expressions suivantes.
Une expression est évaluée en fonction de la priorité des Peuvent-elles être considérées comme correctes et si oui, à quelles
opérateurs qui la composent, en commençant par ceux de conditions, si non pourquoi ?
priorité plus forte.
à priorité égale, les opérateurs sont évalués de gauche à droite. 2+x*3
-x+3*y<=10+3
Voici les opérateurs rangés par priorité décroissante x=0 Ou y=0
. (accès à un champ) la priorité la plus forte
+, -, Non (unaires) Exercice : A quelles conditions les instructions suivantes sont-elles
*, /, Div, Mod, Et cohérentes ?
+, -, Ou
<, >, <=, >=, = et <> priorité la plus faible (a Mod b)
Il est toujours possible de mettre des parenthèses pour modifier les (rep = ’o’) Ou (rep = ’n’)
priorité. (R <> ’O’) Et (R <> ’o’)
En cas d’ambiguïté (ou de doute), il est préférable de mettre des (C >= ’A’) Et (C <= ’Z’) Ou (C >= ’a’) Et (C <= ’z’)
parenthèses. termine Ou (nb > 10)
Non trouve Ou (x = y)
Actions élémentaires-Affectation 81 I Actions élémentaires-Affectation 82
Echange de Pull

variable ← expression
attribuer une valeur, résultat d’une évaluation, à un objet
l’affectation permet de modifier la valeur associée à une
variable.
A « l’exécution » : l’expression est évaluée (calculée) et sa
valeur est rangée dans la variable.
Règle : Le type de expression doit être compatible avec le
type de variable.
reste ← a%b quotient ← a/b
somme ← n ∗ (n + 1)/2 volume ← surf ace ∗ hauteur
delta ← b ∗ b − 4 ∗ a ∗ c racine ← (−b + sqrt(delta))/(2 ∗ a)
surf ace ← pi ∗ r ∗ ∗2

Actions élémentaires-Affectation 83 I Actions élémentaires 84 I


Permutation circulaire des valeurs de deux variables A et B
Ces actions permettent d’assurer l’interface entre l’environnement
externe (l’utilisateur) et l’algorithme.
Saisir une donnée
Lire(<liste de noms de variables>);
Fonction :
Instruction permettant de placer en mémoire les informations
fournies par l’utilisateur.
affecter aux variables avec les valeurs lues au clavier.
Déclarer une variable supplémentaire
Exemples
variables A, B, Temp : entiers;
Lire(unNombre);
Utiliser cette variable pour stocker provisoirement une des
Lire(nom, prenom);
valeurs :
Lire(val);
Temp←A;
A←B;
B←Temp;
Ordinateur et Informatique
Actions élémentaires 85 II Algorithme Et Programme
Notions d’algorithme et de programme
Objets simples, types et actions élémentaires
Le langage C

Afficher une information, une donnée, un résultat Actions élémentaires 86


Ecrire(<liste de noms de variables, de constantes ou
d’expressions>); ALGORITHME Epicier ;
VAR prixT otal, prixDuKg : REEL ;
Fonction :
nbKg : ENTIER ;
Instruction permettant de transmettre des informations à
début
l’utilisateur et/ou de visualiser les informations placées en
Ecrire(’Entrez le prix d’un kilogramme de choux : ’) ;
mémoire.
Lire(prixDuKg) ;
Exemples : Ecrire (’Entrez le nombre de kilogramme de choux : ’) ;
Ecrire("Veuillez saisir un nombre : "); Lire (nbKg) ;
Ecrire(unNombre, "est différent de 0"); prixT otal ← prixDuKg ∗ nbKg;
Ecrire("La somme de", unNombre, "et" , val ,
Ecrire (’Le prix total de l”achat est :’,prixT otal) ;
"est", unNombre + val);
fin
Nous utiliserons une variante EcrireLn(expr) qui ajoute un Commentaires : Suite de caractères quelconques encadrée par les
saut de ligne sur le périphérique de sortie après avoir affiché la symboles /* et */. Améliorer la lisibilité d’un algorithme.
valeur de l’expression. /* ceci est un commentaire */

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale

Ordinateur et Informatique Ordinateur et Informatique


Notions d’algorithme et de programme
Algorithme Et Programme Algorithme Et Programme
Objets simples, types et actions élémentaires
Le langage C Le langage C

Actions élémentaires 87 Plan 88


Ecrire un algorithme qui demande à l’utilisateur d’entrer la largeur
et la longueur et afficher la surface (S) et le périmètre (P) d’un
rectangle. 1 Ordinateur et Informatique
ALGORITHME rectangle ; Généralités
VAR largeur, longueur, S, P : REEL ; Architecture d’un ordinateur
début
Ecrire (’entrer la largeur’) ;
Lire (largeur) ; 2 Algorithme Et Programme
Ecrire (entrer la longueur) ; Notions d’algorithme et de programme
Lire (longueur) ; Objets simples, types et actions élémentaires
S = largeur ∗ longueur ;
P = 2 ∗ (largeur + longueur) ; 3 Le langage C
Ecrire (’la surface d’un rectangle est :’,S) ;
Ecrire (’le périmètre d’un rectangle est :’,P ) ;
fin
Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale
Repères historiques 89 Caractéristiques succintes du langage C 90
Origine Denis Ritchie et Ken Thomson (Bell Labs) pour UNIX
Historique
1969 UNIX par Ken Thomson (en assembleur ) Le langage C est un langage procédural (description linéaire
1972 invention du C par Denis Ritchie
des états de la mémoire)
1973 UNIX en C par Denis Ritchie et Ken Thomson
1978 The C Programming Language : Brian W. C est structuré en blocs fonctionnels imbriqués.
kernighan/Denis Ritchie C supporte l’appel de fonctions, c’est un langage typé et
1989 1ère normalisation : ANSI C (C89), ISO C90 compilé
1999 2éme normalisation : ISO C99
C est plus CONCIS que à PASCAL mais plus obscur. C est
Le C est toujours très utilisé :
mieux standardisé, mais les compilateurs C sont plus libéraux
systèmes d’exploitations : Linux ' 6,8 millions de lignes
bibliothèques : GNU libc ' 1 million de lignes que les compilateurs Pascal pour la vérification des types de
compilateur : gcc (C, C++, ada, etc.) ' 1.4 million de lignes données.
Internet : Apache (serveur WEB) ' 250 000 lignes Respecter les spécifications ANSI et de tenir compte des
applications : GIMP (retouche d’images) ' 700 000 lignes avertissements (warnings) pour s’assurer de la portabilité d’un
Langages inspirés du C programme en C sur d’autres compilateurs,
compatibles : C++, Objective-C
de syntaxe similaire : Java, C#, etc.

Structure générale d’un programme C 91 Structure générale d’un programme C 92

[directives au préprocesseur]
[déclarations de variables externes]
Z Un programme C : texte, respectant la syntaxe du langage, et [fonctions secondaires]
stocké sous la forme d’un ou plusieurs fichiers (d’extension .c) main(){
Z Ensemble de fonctions, dont une est privilégiée, la fonction déclarations de variables internes
main, qui est le point de départ de tout programme. instructions
Z Chaque fichier (appelé module) est composé de : }
La fonction principale main est la seule fonction appelée lors
définitions de fonctions,
définitions de variables, du lancement
déclarations de variables et fonctions externes, Les fonctions secondaires peuvent être placées indifféremment
directives du préprocesseur (lignes commençant par #), avant ou après la fonction principale. Une fonction secondaire
peut se décrire de la manière suivante :
type ma_fonction ( arguments ){
déclarations de variables internes
instructions
}
Structure générale d’un programme C 93 Structure générale d’un programme C 94
# include < stdio .h >
# include < stdlib .h >
# define PI 3.1415
Z Exemple fonction main
int main (){

#include <stdio.h> double rayon ; /* le rayon du cercle lu au clavier */


int main() { double perimetre ; /* le perimètre du cercle */
printf("Bonjour");
return 1; /* Saisir le rayon */
printf ( " Rayon = " );
} scanf ( " % lf " , & rayon );
Z Exemple fonction secondaire
/* Calculer le périmètre */
int produit(int x, int y){ perimetre = 2 * PI * rayon ;
int resultat;
/* Afficher le périmètre */
resultat = x * y; printf ( " Le périmètre est : %4.2 f \ n " , perimetre );
return(resultat);
} return EXIT_SUCCESS ;

Structure générale d’un programme C 95 Exemples Instruction et expression 96

# include < stdio .h > expression


# define BLANC ’ ’ suite de composants élémentaires syntaxiquement corrects, formée
# define POINT ’. ’ à partir de constantes, d’identificateurs, à l’aide d’opérateurs.
main (){
int blanc = 0 , autres = 0;
Z
char c ;
c = getchar (); a = 0
while c != POINT {
if ( c == BLANC ) (i >= 0) && (i < 10) && (t[i] != 0)
blancs ++;
else
Une expression
autres ++; a une valeur (évaluation en respectant les priorités des
c = getchar (); opérateurs)
}
printf ( " le texte comporte " ) possède un type (évaluation au moyen de règles de typage)
printf ( " % d blancs , blancs " et " ); peut avoir une action (effet de bord)
printf ( " % d autres caractères " , autres );
} instruction
Une instruction est une expression suivie d’un point-virgule. Le
point-virgule signifie en quelque sorte « évaluer cette expression ».
Exemples Instruction et expression 97 Les phases de la compilation 98
Une déclaration, comme
char c; #include <stdio.h>
int main() {
Une instruction d’affectation comme Editeur printf("Bonjour");
return 1;
c = getchar(); }
Code source nom.c
autres++;
Un appel de fonction comme
Compilateur
printf("Le texte comporte \n");
Des instructions de rupture de séquence comme Code source nom.obj

return;
Edition de nom.exe
break; Bibliotheques
*.ib liens
continue;
instruction composée entre accolades { et }
if (x != 0){
z = y / x;
t = y % x;
}

Les composants élémentaires du C 99 Les composants élémentaires du C 100

identificateur
Un programme en langage C est constitué des six groupes de
composants élémentaires suivant : sert à donner un nom à une entité du programme (variable,
procédure, fonction ) Suite de caractères parmi :
les identificateurs,
les lettres (minuscules ou majuscules, mais non accentuées),
les mots-clefs,
les chiffres,
les constantes,
le « blanc souligné » (_).
les chaînes de caractères (constantes),
les opérateurs,
Le premier caractère d’un identificateur ne peut pas être un
les signes de ponctuation. chiffre.
On peut ajouter à ces six groupes les commentaires, qui sont Zvar1, tab_23 ou _deb sont des identificateurs valides
ignorés par le préprocesseur. 1i et i:j ne le sont pas
Le C fait la différence entre majuscules et minuscules.
Les composants élémentaires du C 101 Les commentaires 102

Commentaire
Les mots-clefs Un commentaire débute par /* et se termine par */.
Un mots-clé, est un mot réservé pour le langage lui-même et ne
peut pas être utilisé comme identificateur. L’ANSI C compte 32
/* Ceci est un commentaire */
mots clefs :
/* Les commentaires peuvent être formulés sur
auto double int struct plusieurs lignes */
break else long switch
case enum register typedef /* Il est fréquent
char extern return union * de formuler
const float short unsigned * des commentaires ainsi
continue for signed void */
default goto sizeof volatile
do if static while /* Ceci est /* incorrect a cause */ de l’imbrication */

On ne peut pas imbriquer des commentaires.

Les types de base 103 Les types de base : Les caractères 104

Un objet de type caractère est désigné par le mot-clef char.


La plupart du temps, un objet de type char est codé sur un
Type octet.
Ensemble de valeurs possibles pour une donnée tout objet de type char en C est qu’il peut être assimilé à un
entier (son code ASCII)
structures de données de base : les entiers et les flottants. si c est de type char, l’expression c + 1 désigne le caractère
Les pointeurs constituent un autre type de données suivant dans le code ASCII.
élémentaire. • char représente selon la machine
Toute autre structure de données est dérivée de ces types de l’ensemble {−128, . . . , +127} (signé)
base. l’ensemble {0, . . . , +255} (non signé)
Les caractères, booléens, constantes symboliques, etc. ne sont • unsigned char représente toujours
rien d’autres de des entiers. l’ensemble {0, . . . , +255}
• signed char représente toujours
l’ensemble {−128, . . . , +127}
Fonctions dans la bibliothèque <ctype.h> 105 Fonctions dans la bibliothèque <ctype.h> 106

tolower Convertit en minuscule


Tous les paramètres sont de type int pour la portabilité.
toupper Convertit en majuscules
isalpha Lettre de A à Z ou de a à z char et int sont donc très voisins
isalnum Caractère alphanumérique unique différence : char est généralement codé sur 1 octet
iscntrl Caractère DEL ou de contrôle 0x7F ou 0x00 ou 0x1F tandis que l’int l’est sur 2.
isdigit Chiffre de 0 à 9 Les caractères comme ’a’, ’8’, ’?’ sont des int en C.
isxdigit Caractère hexadécimal (0 à 9, A à F, a à f) On peut donc écrire ’a’+2 qui est la somme de deux int et
islower Lettre minuscule qui donne un int
isupper Lettre majuscule
isgraph Caractère imprimable mais sans l’espace On peut également ajouter un int et un char,
isprint Caractère imprimable int x,i ;
ispunct Caractère de ponctuation char c;
isspace Espace, tabulation, retour chariot, saut de ligne, saut de page x= i+c /* c est automatiquement converti en int */
isascii Caractère entre 0 et 127

Les entiers : int 107 Les entiers : int 108

Les entiers peuvent être affectés d’un attribut Les entiers sont signés par défaut.
de précision (d’occupation en mémoire) et
Pour déclarer des entiers non signés, mettre le mot-clé
de représentation
unsigned devant char, short, int ou long.
Les attributs de précision sont short et long.

Nb. de val. Min. signé Max. signé Max. non signé


TYPE DESCRIPTION TAILLE EN OCTETS TAILLE EN BITS 28 = 256 −27 = −128 27 − 1 = 127 28 − 1
16
char Caractère 1 8 bits 2 = 65536 −215 = −32768 215 − 1 216 − 1
short Entier court 2 16 bits 232 = 4294967296 −231 = −2147483648 231 − 1 232 − 1
int Entier 4 32 bits
long Entier long 4 32 bits Les valeurs minimales et maximales sont définies dans limits.h
pour chaque type d’entier
Les flottants 109 Le type void 110

Représentation des nombres en virgule flottante :


float, double et long double servent à. une conversion en type void d’une expression signifie que sa
valeur est ignorée
utilisé pour le type pointeur
TYPE DESCRIPTION TAILLE MEMOIRE utilisé pour les fonctions sans valeur et sans paramètre
Float Flottant 32 bits sert comme type générique de pointeur : pas de contrôle de
Double Flottant double précision 64 bits type avec un pointeur de type void
long double Flottant quadruple précision 128 bits

Compatibilité des types prédéfinis 111 Bibliothèque mathématique <math.h> 112

Tous les types arithmétiques, entiers, caractères, réels, sont


compatibles entre eux. Fonction Description
double exp(double x); exponentielle de x ;
Z une expression peut contenir des objets de types différents : double log(double x); logarithme népérien de x ;
conversions implicites double pow(double x, double y); x à la puissance y ;
Z règles conversions implicites : double sqrt(double x); racine carrée de x
en l’absence de unsigned, les objets sont convertis dans le double cbrt(double x); racine cubique de x
type le plus fort selon l’ordre décroissant : double sin(double x); sinus de x
long double, double, float, long int, int. double cos(double x); cosinus de x
les règles pour les opérandes unsigned dépendent de double tan(double x); tangente de x
l’implémentation la conversion en unsigned ne se fait qu’en int abs(int x); valeur absolue de x ;
cas de nécessité double fabs(double x); valeur absolue de x ;
promotion entière : l’arithmétique se fait au moins en int, double ceil(double x); arrondi par excès
c’est-à-dire que char et short sont promus en int double floor(double x); arrondi par défaut
attention, suivant l’implémentation un char peut être promu double rint(double x); arrondi vers l’entier le plus proche
en un entier négatif ! double fmod(double x,double y); reste de la division de x par y.
Quelques utilitaires de C 113 Les constantes entières 114

On dispose de trois notations pour les constantes entières :


Nom Prototype Description notation décimale : 123, -123, ...
notation octale (avec un 0 en première position et ne
abs int abs(int p) Valeur absolue du paramètre contiennent que des chiffres octaux) : 0123,
atof double atof(char* s) Conversion caractères vers flottant notation hexadécimale (avec les caractères 0x ou 0X en
atoi int atoi(char* s) Conversion caractères vers entier première position et les chiffres de 0 à 9, ainsi que les lettres
atol long atol(char* s) Conversion caractères vers entier de a à f sous leur forme majuscule ou minuscule) : 0x1bn
exit void exit(int cr) Arrêt du programme, 0X2C, 0X2c, 0x5a2b...
fourniture d’un code de retour Une constante entière non signée : suffixe u ou U.
labs long labs(long p) Valeur absolue du paramètre l’attribut de précision : suffixe long l ou L .
rand int rand(void) Fournit un entier pseudo-aléatoire
0xaf9fL = 44959
srand void srand(int seed) Initialisation du générateur
0xffffu = 65535
de nombres pseudo-aléatoires
Le type d’une constante entière est le plus petit type dans
lequel elle peut être représentée.

Les constantes réelles 115 Les constantes caractères 116


caractères imprimables, entre apostrophes :
’a’,’1’,’/’,...
sauf : antislash et apostrophe, désignés par ’\\’ et ’\’’.
Une constante flottante : suite de chiffres (partie entière), un ’?’ et ’ "’ sont des caractères imprimables. Autre
point jouant le rôle de virgule, une suite de chiffres (partie représentation : ’\?’ et ’\ "’.
fractionnaire), la lettre e (ou E), éventuellement le signe + ou représentation de caractères non imprimables : séquences
- suivi d’une suite de chiffres (valeur absolue de l’exposant). d’échappement
La partie entière ou la partie fractionnaire peuvent être
’\n’ newline, Nouvelle ligne
omises, mais pas les deux.
’\t’ tab, Tabulation horizontale
Le point ou l’exposant peuvent être omis (mais pas les deux). ’\v’ vertical tab, Tabulation verticale
Une constante flottante par défaut de type double, le suffixe ’\b’ backspace, retour arrière
F indique qu’elle est de type float, le suffixe LF indique ’\r’ carriage return, retour chariot
qu’elle est de type long double. ’\f’ form feed, saut de page
.5e4 ’\a’ audible alert, signal d’alerte
5.E3 ’\’’ Apostrophe
5000 ’\’" Guillemets
’\\’ Backslash
’\0’ Caractère NUL
Les constantes caractères 117 Les constantes chaînes de caractères 118

ZExemple suite de caractères entre guillemets.


"Ceci est une chaîne de caractères"
#include<stdio.h>
main(){ peut contenir des caractères non imprimables
char a, b, c, d;
"ligne 1 \n ligne 2 \n ligne 3\n "
a = ’A’ ; b = 65 ; c = ’\101’ ; d = ’\x41’ ;
printf("%ch! %ch! %ch! %ch!\n",a, b, c, d); Dans chaîne, le " doit être désigné par \". La caractère ’
printf("%c %d %o %x \n", a, a, a, a); peut être sa séquence d’échappement ou par lui même.
}
le caractère \ suivi d’un passage à la ligne est ignoré.⇒
NB 65 et 42 sont les codes ascii des caractères ’A’ et ’*’ écriture de longues chaînes sur plusieurs lignes.
résultat "ceci est une longue longue longue longue \
chaîne de caractères"
Ah! Ah! Ah! Ah!
A 65 101 41 A la fin de chaque chaîne de caractères , le compilateur ajoute
\0 pour marquer la fin de la chaîne.

Les constantes nommées 119 Les constantes nommées 120


deux façons de donner un nom à une constante
soit en utilisant les possibilités du pré processeur énumérations
soit en utilisant des énumérations On peut définir les constantes de la façon suivante :
enum liste-d’identificateurs
La commande define
#define identificateur valeur enum {LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE}
ou
const typeVariable idendificateur=valeur;
définit les identificateurs LUNDI,..., DIMANCHE comme
permettent de définir une constante dont la valeur est valeur. étant des constantes de type int, et leur donne les valeurs
0,1,..,6.
#define PI 3.14159 On peut aussi donner des valeurs constantes aux constantes :
#define MAX 32767 ou
const int MAX=32767; enum {MALI=5, SENEGAL=8, TOGO=9}
#define un_caratere ’A’ ou Pas nécessaire de donner une valeur à toutes les constantes
const char un_caratere=’A’;
enum {MALI=5, GABON, MAROC, SENEGAL=8, TOGO=9}
#define une_chaine "un texte" ou
const char une_chaine[]="un texte"; donnera les valeurs 6 à GABON et 7 à MAROC.
Des booléens ? 121 Les variables 122

Une variable est caractérisée par :


un nom, ou identificateur composé d’une suite de caractères
Contrairement à d’autres langages (Pascal par exemple), il n’y commençant par une lettre et suivie de caractères
a pas de type booléen en C. alphanumériques ou du caractère _ (souligné) :
On le représente comme un entier et se comporte comme la x, x1, cpt, var_locale,...
valeur booléenne vrai si cet entier est non nul, la valeur faux un type qui permet d’allouer l’espace mémoire nécessaire pour
correspondant à la valeur nulle stocker la valeur de la variable.
A voir dans la suite une valeur arbitraire si la variable n’est pas explicitement
Déclaration possible affectée.
typedef enum {faux = 0, vrai = 1 } booleen une adresse qui désigne l’emplacement de la variable en
mémoire.
En C toute variable doit auparavant avoir été définie ou déclarée.

Les variables 123 Les Entrées/Sorties 124

Sortie formatée
Déclaration/définition printf d’afficher à l’écran les arguments qu’on lui fournit.
type identificateur <=expression>; printf("format", arg1, arg2,...,argN);

format une chaîne de caractères contenant éventuellement des


int i ; spécifications de format données par le caractère spécial % suivi
int i,j ; d’une ou plusieurs lettres significatives
short int k;
float f; quelques spécifications usuelles
double d1,d2;
int n = 50 ; %c caractère
int n = 50, m = 45 ; %s chaîne de caractères
%d Entier
%f flottant
Les Entrées/Sorties 125 Les Entrées/Sorties 126
char␣un_caractere␣=␣’A’;
int␣un_entier␣=␣10;
float␣un_reel␣=␣3.14; printf("Coucou"),
double␣un_double␣=␣1.10e2; → pas d’arguments, format est réduit à la chaîne "Coucou",
1.printf("%c\n",␣un_caractere);
2.printf("%d\n",␣un_entier); printf("%s","Coucou"),
→ un argument de type chaîne qui est la chaîne "Coucou",
3.printf("%f\n",␣un_reel);
4.printf("%f\n",␣un_double); printf("%d",3),
5.printf("2␣*␣%d␣=␣%d\n",␣un_entier,␣un_entier␣*␣2); → un argument de type entier qui est l’entier 3,
6.printf("c␣=␣%c␣et␣nb␣=␣%f\n",␣un_caractere,␣un_double);
printf("La somme de %d et %d vaut %d" ,3,5,3+5),
Le programme affiche alors : → trois arguments de type entier.
Remarque Il n’y a aucune vérification de cohérence entre le
1 A format et le type des arguments fournis.
2 10
3 3.140000 printf("%c %d",65,65);
4 0.011000 → affichera à l’écran A 65
5 2 * 10 = 20
6 c = A et nb = 0.011000

Les Entrées/Sorties 127 Les Entrées/Sorties : Options de "printf" et "scanf" 128 I

Entrée formatée % Affichage au format ... Saisie d’un...


scanf permet de lire des données au clavier. %c char char
%d int "int"
scanf("format", &arg1, &arg2,...,&argN); %hd short" "short int"
%ld long "long"
L’argument format est le même que précédemment. Le symbole & %lld long long "long long"
devant chaque argument signifie adresse. %u unsigned int S"unsigned int"
%hu unsigned short "unsigned short"
%lu unsigned long "unsigned long"
char un_caractere;
%llu unsigned long long "unsigned long long"
int un_entier;
%o int en octal "int" en octal
float un_reel; %ho short en octal "short" en octal
double un_double; %lo long en octal "long" en octal
1. scanf("%c", &un_caractere); %llo long long en octal "long long" en octal
2. scanf("%d", &un_entier); %x int en hexadécimal "int" en hexadécimal
3. scanf("%f", &un_reel); %hx short en hexadécimal "short" en hexadécimal
4. scanf("%lf", &un_double);
5. scanf("%c%d%lf", &un_caractere, &un_entier, &un_double);
Les Entrées/Sorties : Options de "printf" et "scanf" 129 II Les Entrées/Sorties : Options de "printf" et "scanf" 130 III
%lx long en hexadécimal "long" en hexadécimal
%llx long long long long
en hexadécimal en hexadécimal
%f float en notation classique float en notation "classique scientif. ("printf" choisira
%lf double en notation class. double en notation class. l’affichage prenant le moins
%Lf long double en notation long double en notation de place)
"class." class. %Lg long double en notation class.
%e float en notation scientifique float en notation scientif. ou scientif. ("printf" choisira
%le double en notation scientif. double en notation scientif. l’affichage prenant le moins
%Le long double en notation long double en notation de place)
scientif. "scientifique" %s Affichage d’une chaîne de caract. Saisie d’une chaîne de caract.
%g float en notation class.ou %r chiffres romains minuscules
scientif. ("printf" choisira (option non normalisée)
l’affichage prenant le moins %R chiffres romains majuscules
de place) "(option non normalisée)
%lg double en notation class. ou

Les Entrées/Sorties 131 Les Entrées/Sorties 132


Exemple de programme C recopiant l’entrée sur la sortie

#include <stdio.h>
Autre fonction d’entrée void main(){
Les fonctions int getchar(void) retourne un caractère lu au int c;
clavier c=getchar()
while (c != EOF) {
/* Lecture d’une ligne et affichage en sens inverse */ putchar(c) ;
void renverse (void) { c=getchar() ;
char c ; }
if ((c = getchar()) != ’\n’ ) }
renverse() ;
putchar(c) ; EOF est une pseudo-constante définie par un #define dans
return ; stdio.h et vaut généralement -1.
} getchar renvoie un entier pris sur l’entrée standard (code
ascii du caractère) et -1 si la fin de fichier est atteinte.
putchar prend un entier en paramètre effectif et envoie le
caractère correspondant sur la sortie standard.
Les Entrées/Sorties 133 Rappels et remarques sur te type char 134

#include <stdio.h> • Un caractère est un entier car il s’identifie à son code ASCII.
void main(){ • Un caractère peut donc être codé sur un octet.
int c; • On peut donc appliquer toutes les opérations entières sur les
while ((c = getchar() ) != EOF) { caractères (addition, soustraction ...).
putchar(c);
• Problème, On ne sait pas si ce sont des entiers signés ou non,
}
car cela dépend des machines. Les autres variantes du type
}
entiers sont toujours signées par défaut (pas de unsigned).
C’est pourquoi on plûtot que
Ce programme est équivalent au précédent
écrit
En C une expression syntaxiquement valide renvoie un
int c; char c;
résultat, c’est le cas de l’affectation qui renvoie comme valeur
if((c=getchar())!=EOF) if ((c=getchar())!=EOF)
la valeur affectée.
Donc (( c = getchar () ) != EOF ) se décompose en car getchar () peut renvoyer -1 (et donc ce test ne
c = getchar(), la valeur de cette expression est ensuite fonctionnera que sur les machines ou les caractères sont
comparée à EOF. signés).

Les opérateurs : L’affectation 135 Les opérateurs : L’affectation 136


L’affectation effectue une conversion de type implicite : la valeur
de l’expression est convertie dans le type de la variable.
affectation
Peut produire :
un opérateur à part entière et non une intruction
indétermination
variable = expression perte de précision
de double à float ou de float à long int, par exemple
évalue expression et affecte la valeur obtenue à variable. De
plus, cette expression possède une valeur, qui est celle main(){
expression. Ainsi, l’expression i = 5 vaut 5. int i, j = 2;
float x = 2.5;
i = 3 i = j + x;
f = 3 .4 x = x + i;
i = j + 1 printf("\n %f \n",x);
}
i = (j = k) + 1
imprime pour x la valeur 6.5 (et non 7), car dans l’instruction
i = j + x;, l’expression j + x a été convertie en entier.
Les opérateurs arithmétiques +, -, *, % 137 Les opérateurs de comparaison ==, ! =, <=, >=, <, > 138
expression1 opérateur expression2
Opérateur Syntaxe signification
Opérateur Sémantique
+ + express + unaire
> Strictement supérieur
express1 + express2 addition
>= supérieur ou égal
- - express - unaire < Strictement inférieur
express1 - express2 soustraction <= Inférieur ou égal
* express1 * express2 multiplication == Egal
/ express1 / express2 division != différent
% express1 % express2 reste de la division
• Toute expression logique est de type int et a pour valeur
Dans le cas de 2 opérandes entiers, le résultat de la division 0 si elle est évaluée à FAUX
est entier, dans tous les autres cas, il est réel. 1 si elle est évaluée à VRAI
float x; i>=3 vaut 0 si i<3, et vaut 1 si i 3
x = 3 / 2; /*x vaut 1.*/ • Inversement tout entier a une valeur logique qui est
x = 3 / 2.; /*x vaut 1.5*/ FAUX si l’entier est 0
L’opérateur % ne s’applique qu’à des opérandes de type entier. VRAI sinon
Dans le cas de la division entière, le C garantit que (si b<>0) a+b && a-b est vraie si et seulement si a+ b et a-b sont
on a : (a/b)*b + a%b = a vraies, c’est à dire, si et seulement si a 6= ±b

Les opérateurs de comparaison ==, ! =, <=, >=, <, > 139 Les opérateurs logiques booléens &&, ||, ! 140
Ne pas confondre l’opérateur de test d’égalité == avec l’opérateur
d’affection =.

main(){ Opérateur Sémantique


int x = 0; && et logique
int y = 1; || ou logique
if (x = y) ! négation logique
printf("\n x et y sont egaux \n");
else valeur retournée : 1 si la condition est vraie et 0 sinon.
printf("\n x et y sont differents \n"); On suppose que a ≤ b
}
Conditions Expressions en C
imprime à l’écran x et y sont égaux ! a≤x≤b (x >= a) && (x <= b)
if (x) ... est équivalent à if (x !=0) ... x >= a && x <= b
a > x ou x < b (x < a) | | (x < b)
if ( !x) ... est équivalent à if (x==0)
!( x >= a && x <= b)
expr1 && expr2 est équivalent à
(expr1 !=0)*(expr2 !=0),
expr !=0 est équivalent à ! !expr.
Les opérateurs logiques booléens &&, ||, ! 141 Les opérateurs logiques bit à bit 142
manipuler des entiers de toute longueur (short, int ou
Règles d’évaluation paresseuse long), signés ou non, au niveau du bit
expression1 op1 expression2 op2 ...expressionn
& Et | Ou inclusif
L’évaluation se fait de gauche à droite et s’arrête dès que le
^ ou exclusif ~ Complément à 1
résultat final est déterminé. On parle d’évaluation paresseuse.
<< décalage à gauche >> Décalage à droite
ET logique
& 0 1
e1 e2 e1 && e2 0 0 0
= 0 non évaluée = 0 1 0 1
6= 0 Evaluée =1 si e2 6= 0
| 0 1
= 0 si e2 = 0
0 0 1
OU logique 1 1 1
^ 0 1
e1 e2 e1 || e2
0 0 1
6= 0 non évaluée =1
=0 Evaluée =1 si e2 6= 0 1 1 0
~ change la valeur de chaque bit d’un entier. >> et << effectuent
=0 si e2 = 0
resp. une multiplication et une division par une puissance de 2

Les opérateurs logiques bit à bit 143 Les opérateurs d’affectation composée +=, -=, *=,... 144

Exemple
opérateurs d’affectation composée
Considérons par exemple les entiers a=77 et b=23 de type
unsigned char (i.e. 8 bits). += -= *= /= %= &= ^= |= «= »=

Pour tout opérateur op, l’expression


Valeur
Expression Binaire Décimale expression1 op= expression2
A 01001101 77
B 00010111 23 est équivalente à
a & b 00000101 5
a | b 01011111 95 expression1 = expression1 op expression2
a ^ b 01011010 90
~ a 10110010 178 Toutefois, avec l’affection composée, expression1 n’est évaluée
b << 2 01011100 92 multiplication par 4 qu’une seule fois.
b << 5 11100000 112 ce qui dépasse disparaît
b >> 1 00001011 11 division entière par 2 x *= a+b équivaut à x = x * (a+b) et non à x = (x*a) + b
Les opérateurs d’incrémentation et de décrémentation ++, L’opérateur , 146
-- 145
Une expression peut être constituée d’une suite d’expressions
Les opérateurs d’incrémentation ++ et de décrémentation -- séparées par des virgules :
expression1, expression2, ... , expressionn
Expression ++i i++ --i i--
Valeur i+1 i i-1 i Cette expression est alors évaluée de gauche à droite. Sa valeur
Valeur de i après évaluation i+1 i-1 sera la valeur de l’expression de droite.

main(){
int a = 3, b, c; int a, b;
int i, t[10]; b = ((a = 5), (a + 2));
b = ++a; /* a et b valent 4 */ printf("\n b = %d \n",b);
c = b++; /* c vaut 4 et b vaut 5 */ }
int i = 0 ; /* t[i++] a pour valeur t[0] /
int i = 0 ; /* t[++i] a pour valeur t[1] */ imprime b = 7.
La virgule séparant les arguments d’une fonction ou les
Les opérateurs ++ et -- s’appliquent à une variable, mais pas une déclarations de variables n’est pas l’opérateur virgule. En
constante ou une expression arithmétique. particulier l’évaluation de gauche à droite n’est pas garantie.
++5 --(i+1) ++i++ n’ont pas de sens

L’opérateur conditionnel ? 147 L’opérateur de conversion de type (Coercition) 148


opérateur de conversion de type
L’opérateur conditionnel ? est un opérateur ternaire. appelé cast, permet de modifier explicitement le type d’un objet.
(type) objet
condition ? expression1 : expression2
main(){
Si condition est VRAIE, la valeur est celle de expression1 et int i = 3, j = 2;
expression2 n’est pas évaluée printf("%f \n",(float)i/j);
Si condition est FAUSSE la valeur est celle de expression2 et }
expression1 n’est pas évaluée.
retourne la valeur 1.5.
un seul parmi expression1 et expression2 est évalué.
main(){
abs = x >= 0 ? x : -x int i, j; double x, y, z, t;
max = m = ((a > b) ? a : b); i = 5/2; x = 5/2; y = (double) (5/2);
max = x>y ? x>z ? x : z y>z ? y : z j = (double) 5/2; z = (double) 5/2; t = 5./2;
printf("il y a %d élément%s", n, n>1 ?"s" : ""); printf("%d, %g, %g, %d, %g, %g\n", i, x, y, j, z, t);
x = y ? 10/y : 99999 ; }

retourne 2, 2, 2, 2, 2.5, 2.5


Les opérateurs adresse et taille 149 Règles de priorité des opérateurs 150
priorité décroissants.
L’opérateur adresse
même priorité sur une ligne, ordre définie par la flèche
L’opérateur d’adresse & appliqué à une variable retourne
l’adresse-mémoire de cette variable.
Opérateurs
&objet () [] -> . →
! ~ ++ -- -(unaire) (type) *(indirection) & sizeof ←
L’opérateur taille * / % →
sizeof(identificateur_ de_ type) ou + -(binaire) →
Sizeof(expression) << >> →
< <= > >= →
== != →
taille en octets du type donné ou du type de l’expression. La valeur
&(et bit-à-bit) →
est de type size_t type entier défini dans la bibliothèque standard.
^ →
| →
sizeof(short) vaut 2 && →
char t[100]; || →
sizeof(t) vaut 100 ? : ←
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = += -= *= /= %= &= ^= |= <<= >>= ←
sizeof(float) <= sizeof(double) <= sizeof(long double) , →

Règles de priorité des opérateurs 151 Conflits d’effets de bord 152


Une unique instruction (terminée par ;) peut :
Attention lire plusieurs variables,
Tout programme qui dépend de l’ordre d’évaluation des opérandes modifier plusieurs variables.
doit être considéré comme incorrect. L’ordre de ces opérations est indéfini !
Conséquence
2 exemples incorrects, on ne sait pas si le second a vaut 1 ou 2 Une instruction ne doit pas :
a=1 ; a=1 ; modifier deux fois la même variable,
x= (a=2) + a ; x = f(a=2) + g( a) ; lire et modifier une même variable.
Incorrect car on ne peut pas savoir lequel de ++n et f(n) sera Exemples incorrects
évalué en premier x = (y=2) + (y=3); /* invalide: y modifié deux fois */
printf("%d %d",++n, f(n)) x = (x=2) + 1; /* invalide: x modifié deux fois */
Incorrect mais plus subtile x = (y=2) + y; /* invalide: y lu et modifié */
a[i] = i++ ; for (i=0; s1[i]; s2[i]=s1[i++]); y = x++ + x; /* invalide: x lu et modifié */
Correct exception : dans var=expr, var peut apparaitre dans expr
a[i++] = i; for (i=0 ; s1[i] ; s2[i]=s1[++i]); x = x+1; /* correct */
a[i] = ++i ; for (i=0 ; s1[i] ; s2[i++]=s1[i]); Conclusion
Se limiter à une affectation par instruction
Exemple 153 Exemple 154
Programme qui permet de trouver l’aire et la circonférence d’un
cercle

* Corrigé
# include < stdio .h >
# include < conio .h >
void main (){
int r ;
float pi =3.14 , aire , ci ;
clrscr ();
printf ( " entrer le rayon du cercle : " );
scanf ( " % d " ,& r );
aire = pi * r * r ;
printf ( " aire du cercle =% f " , aire );
ci =2* pi * r ;
printf ( " cironférence =% f " , ci );
getch ();
}

Ordinateur et Informatique Ordinateur et Informatique


Algorithme Et Programme Algorithme Et Programme
Le langage C Le langage C

* Corrigé Références I
On a :

Alfred V. Aho et Jeffrey D. Ullman.


Concepts fondamentaux de l’informatique,
Dunod, 1993.
Brassard Gilles, Bratley Paul
Fundamentals of Algorithmics,
Prentice Hall, 1996.
Cormen Thomas H., Leiserson Charles E., Rivest Ronald L.,
Stein Clifford
Introduction à l’algorithmique,
Dunod, 2002 (seconde édition).

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale
Ordinateur et Informatique
Algorithme Et Programme
Le langage C

Références II

Philippe Flajolet et Robert Sedgewick.


Introduction à l’analyse d’algorithmes,
Addison-Wesley, 1996. Thomson Publishing, 1996
Danièle Beauquier, Jean Berstel, Philippe Chrétienne.
Éléments d’algorithmique,
Masson, 1992. http ://www-igm.univ-mlv.fr/b̃erstel/
C. Froidevaux, M-C. Gaudel, M. Soria :
Types de données et Algorithmes.
McGraw Hill Paris, 1990
Granjon :
Algorithmes en Pascal et en langage C.
Dunod, 2004

Pr. David C. FAYE/UFR SAT-UGB UE INFO111 - Algo I : Introduction générale

Vous aimerez peut-être aussi