Benoît DARTIES
ITC34 - Algorithmique
et programmation
Partie C / C++
Introduction
1
Petite introduction
2
Benoît DartiesITC34 - Partie C / C++
Introduction
Qu’est-ce que le C ?
Langage de programmation impératif
-code écrit selon une suite d’instructions élémentaires
-quatre type d’instructions principales
assignation
branchement conditionnel
branchement sans condition
bouclage
-conçu pour la programmation système UNIX
3
Benoît DartiesITC34 - Partie C / C++
Introduction
Qu’est-ce que le C++ ?
langage de programmation offrant de multiples paradigmes :
-programmation impérative
-programmation orientée objet
-programmation générique
-...
considéré comme le petit frère du C
apporte de nouveaux éléments par rapport au C
-objets
-fonctions virtuelles
-surcharge des opérateurs et des fonctions
-références
-gestion de flux d’entrée / sortie
-...
4
Benoît DartiesITC34 - Partie C / C++
Histoire du langage C
1972, Naissance du C
Développé par Dennis M. Ritchie, laboratoire Bell
Objectif : développer une version portable d’UNIX
Inspiré du langage B (1970, Ken Tompson)
1978, définition officielle
par Brian W. Kernighan & Dennis M. Ritchie
livre «The C programming language», le K&R-C
1983 : nouveau standard
besoin d’une référence, pour répondre aux problèmes de compatibilité
Standardisation ANSI-C (Américan National Standards Institute)
Publication dans la seconde édition du K&R-C (1988)
5
Benoît DartiesITC34 - Partie C / C++
Histoire du langage C
1989, Ratification du standard : ANSI X3.159-1989
ANSI C, Standard C ou encore C89
1990, Adoption par l’ISO du standard ANSI
International Organisation for Standardization
Norme ISO/IEC 9899:1990
C90 (identique C89)
1999 : Révision du standard
Norme ISO/IEC 9899:1990
C99
Ajout des fonctions inline, types de données, ...
2007 : réflexions sur une évolution du standard : C1X
6
Benoît DartiesITC34 - Partie C / C++
Histoire du langage C++
1979, Pendant ce temps ...
Bjarne Stroustrup travaille sur l’ajout de classes au C
-encapsulation de données
-classes dérivées
-typage fort
-fonctions inline (repris dans C)
1983, C++ adopté comme nom officiel
ajout de fonctionnalités supplémentaires
-fonctions virtuelles
-surcharge d’opérateurs
-références
-constantes (repris dans C)
-commentaires de fin de lignes // (repris dans C)
-...
7
Benoît DartiesITC34 - Partie C / C++
Histoire du langage C++
1985, première référence
livre «The C++ programming language»
pas encore de standard officiel
1989, seconde version de C++
héritage multiple
classes abstraites
...
1990, «The annotated C++ Reference Manual» (ARM)
bases pour le futur standard
1998, Standardisation (ISO/CEI 14882:1998)
Version corrigée en 2003 (ISO/CEI 14882:2003)
8
Benoît DartiesITC34 - Partie C / C++
Popularité des langages de programmation
9
Position
Aug 2010
Position
Aug 2009
Delta in Position
Lanugage
Jul 2010
/ Jul 2009
1
1
=
Java
17.994%
-1.53%
A
2
2
=
C
17.866%
+0.65%
A
3
3
=
C++
9.658%
-0.84%
A
4
4
=
PHP
9.180%
-0.21%
5
5
=
(Visual) Basic
5.413%
-3.07%
6
7
+
C#
4.986%
+0.54%
7
6
-
Python
4.223%
-0.27%
8
8
=
Perl
3.427%
-0.60%
9
19
++++++++++
Objective-C
3.150%
+2.54%
A
10
11
+
Delphi
2.428%
+0.09%
11
9
--
JavaScript
2.401%
-0.41%
12
10
--
Ruby
1.979%
-0.51%
13
12
-
PL/SQL
0.757%
-0.23%
14
13
-
SAS
0.715%
-0.10%
15
20
+++++
MATLAB
0.627%
+0.07%
16
18
++
Lisp/Scheme/
0.626%
0.00%
17
16
-
Pascal
0.622%
-0.05%
18
15
---
ABAP
0.616%
-0.12%
19
14
-----
RPG (OS/400)
0.606%
-0.15%
20
-
++++++++++
Go
0.603%
0.00%
B
Benoît DartiesITC34 - Partie C / C++
Popularité des langages de programmation
10
Benoît DartiesITC34 - Partie C / C++
Ne pas confondre C et C++ !
Langages très proches
s’inspirent mutuellement
fortes interactions :
-Compilation d’un programme C avec un compilateur C++
-Utilisation de librairies statiques développées en C++ dans du C
-...
mais doivent être considérés comme des langages séparés !
11
Benoît DartiesITC34 - Partie C / C++
Organisation de ce cours
Partie C
Bases du langage
Compilation
Gestion de la mémoire
-mise en application sur le langage C
-fonctionnement étendu au C++ (non présenté)
Partie C++
Ajouts / modifications en langage impératif par rapport au C++
-Surcharge de fonctions, d’opérateurs ..
-Gestion des flux
Programmation orientée objets
Librairies C++
12
Bases du langage C
13
Benoît DartiesITC34 - Partie C / C++
Composition du langage C
Six groupes de composants élémentaires :
les identificateurs
les mots-clé
les constantes
les chaînes de caractères
les opérateurs
les signes de ponctuation
(éventuellement les commentaires)
14
Benoît DartiesITC34 - Partie C / C++
Les identificateurs
Rôle d’un identificateur
Donner un rôle à une entité du programme
Peut désigner :
-un nom de variable
-un nom de fonction
-un type
-....
Composition : suite de caractères
lettres majuscules / minuscules non accentuées
chiffres
caractère «underscore» _
ne peut commencer par un chiffre
respect de la casse : différenciation des majuscules / minuscules
15
Benoît DartiesITC34 - Partie C / C++
Les mots-clé
mots réservés pour le langage C
ne peuvent être utilisés comme identificateurs
ANSI C compte 32 mots-clé
différentes utilités
16
auto
const
double
float
int
short
struct
unsigned
break
continue
else
for
long
signed
switch
void
case
default
enum
goto
register
sizeof
typedef
volatile
char
do
extern
if
return
static
union
while
Benoît DartiesITC34 - Partie C / C++
Structure d’un programme C
Un programme C :
manipule des variables
nommées par un identificateur
sur lesquelles il effectue des opérations utilisant des opérateurs
ces opérations sont décrites par des instructions
Une instruction :
est une expression : suite de composants syntaxiquement correct
suivie d’un point virgule
a pour objet le résultat d’une action décrite par l’expression
-affectation : associer une valeur à un variable
-comparaison : comparaison de valeurs
-opération mathématique ou logique : calcul d’une valeur
-branchement : saut vers une instruction non consécutive
-...
17
Benoît DartiesITC34 - Partie C / C++
Structure d’un programme C
bloc d’instruction :
suite d’instructions encadrée par des crochets ouvrant et fermant
inclusion des blocs d’instructions possible
Une variable :
espace mémoire fini
identifiée par un identificateur
capable de contenir une valeur
possède un type : int, float, char, ...
-nécessite d’être déclarée avant utilisation
portée généralement limitée au bloc d’instruction dans lequel elle est
définie
18
Benoît DartiesITC34 - Partie C / C++
Structure d’un programme C
Squelette d’un programme C
19
[directives du préprocesseur]
[déclaration de variables externes]
[fonctions secondaires]
int main() { // bloc d’instructions du main
[variables internes]
[instructions]
}
Benoît DartiesITC34 - Partie C / C++
Types de données
Types de données
Le langage C est un langage typé
toute variable, fonction, constante est typée
Un type définit :
-la façon dont l’élément est représenté en mémoire
-la taille occupée par l’élément
-les valeurs que peut prendre l’élément (=domaine)
-les opérations autorisées sur ce dernier
Deux familles de types :
-type primitifs
-types composés (abordés plus loin)
20
Benoît DartiesITC34 - Partie C / C++
Types de données
Relation entre type, taille, encodage, signification
espace mémoire de taille n bits : mot binaire
2^n mot binaires possibles, chacun représente une valeur
21
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
0
0
1
1
0
0
1
0
1
1
1
0
0
0
1
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
valeur binaire sur espace mémoire taille 16 bits valeur décimale
0
1
2
3
...
26055
...
65535
Signification
taille : dépend du type utilisé
Dépend du type !
entier ?
valeur négative ?
réel ?
caractère ?
mot ?
autre ?
1
0
1
0
1
0
0
1
1
0
0
1
0
0
1
0
Bit de poids le + faible
Bit de poids le + fort
Benoît DartiesITC34 - Partie C / C++
Représentation des caractères
Types représentant les caractères
utilisés pour représenter des caractères
mot clé : char
objet élémentaire du langage C
taille : 1 octet (la plupart du temps), soit 256 possibilités
-chaque valeur est associée à un caractère
-correspondance selon le jeu de caractères de la machine utilisée
Généralement jeu de caractères ISO 8859 (8 bits)
Valeurs 0 à 127 : table ASCII (codée sur 7 bits)
Valeurs 128 à 255 : caractères propre aux différentes langues
En Europe occidentale : ISO 8859-1 (ISO-LATIN-1)
une variable de type char est un mot binaire d’un octet auquel est
associé un caractère ! (par l'intermédiaire d’une valeur décimale)
22
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Types représentant les entiers
utilisés pour représenter des valeurs entières
-on ne peut pas représenter tous les entiers !
-impossible de représenter tous les éléments d’une quantité infinie
mot clé : int
-peut-être précédé d’un attribut de précision : short ou long
-et/ou d’un attribut de représentation : unsigned
mot clé : char
-peut être précédé d’un attribut de représentation : unsigned
23
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Attribut de précision :
short, long , (long long depuis C99, non ANSI)
Modifie le nombre d’octets alloués à la variable
Encodage du signe des entiers :
bit de poids le plus fort à 0 pour les entiers positifs
attribut unsigned
-utilisation du bit de poids le plus fort pour l’encodage du nombre
-encodage d’entiers positifs ou nul seulement
-valeur max deux fois plus grande
24
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Tableau des types de données pour entiers (C99, proc. 32 bits)
25
Type
Signification
Taille (octet)
Plage de valeurs
char
Caractère
1
-128 à 127
unsigned char
Caractère non signé
1
0 à 255
short int
Entier court
2
-32768 à 32767
unsigned short int
Entier court non signé
2
0 à 65535
int
Entier
4
-32768 à 32767
-2147483648 à 2147483647
unsigned int
Entier non signé
4
0 à 65535
0 à 4294967295
long int
Entier long
4
-2 147 483 648 à 2 147 483 647
unsigned long int
Entier long non signé
2
0 à 4 294 967 295
long long int
Entier long long
8
–9,223,372,036,854,775,808 à
9,223,372,036,854,775,807
unsigned long long int
Entier long long non signé
8
0 à 18,446,744,073,709,551,615
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Conséquences :
L’algorithme ne s’arrête jamais (exécution infinie)
Le programme s’arrêtera au bout d’un certain temps
-ceci quel que soit le type de la variable a
-type : retarde la fin d’exécution
26
entier a;
debut
a <- 1;
tant que (a > 0) faire
a<- a + 1;
fin tant que
fin
int main() {
int a;
a=1;
while (a > 0) {
a = a+1;
}
}
Algorithme de boucle infinie Implémentation en C
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Incrémentation d’une variable dont la valeur est maximum
Integer Overflow
Résultat obtenu dépendant du type (donc de la représentation)
-Type non signé (mot clé unsigned )
-Type signé
-Problèmes dans tous les cas
27
Exemple : pacman
Numéro de level codé sur 1 octet
256 possibilités
Levels 0 à 255 OK
Level 256 : problèmes d’affichage
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers
Représentation des valeurs entières sur type non signé :
Le poids de chaque bit correspond à une puissance de deux
Valeur max atteinte lorsque représentation binaire : 1111...1111
incrémentation : 10000 ... 0000
-bit tout à gauche inexistant
-réduction au nombre 0000...0000
Représentation des valeurs entières sur type signé
Bit de poids fort à 0 pour les entiers positifs
Valeur Max atteinte lorsque représentation binaire : 0111...1111
Valeur numérique de 1000...0000 jusqu’à 1111...1111 ?
Comment sont représentés les entiers négatifs ???
Pourquoi peut-on représenter un négatif de plus qu’un positif ??
28
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers négatifs
Approche naïve : méthode Sign-and-Magnitude
n-1 bits de poids faibles : code un nombre
1 bit de poids le plus fort : code le signe
-0 : nombre positif
-1 : nombre négatif
Inconvénients :
-double représentation du 0
-opérations arithmétiques compliquées
29
Binaire
Décimal
00000000
0
00000101
5
01000001
65
01111111
127
Représentation sur type de taille 1 octet
Binaire
Décimal
10000000
-0
10000101
-5
11000001
-65
11111111
-127
Représentation sur type de taille 1 octet
Benoît DartiesITC34 - Partie C / C++
Représentation des entiers négatifs
Complément-à-un
Nombre positif codé sur n-1 bits
Pour obtenir le négatif : inversion des bits
Avantages :
-certaines opérations mathématiques sont facilités
-exemple : addition
Inconvénients :
-double représentation du 0
30
Binaire
Décimal
00000000
0
00000101
5
01000001
65
01111111
127
Représentation sur type de taille 1 octet
Binaire
Décimal
11111111
-0
11111010
-5
10111110
-65
10000000
-127
Représentation sur type de taille 1 octet
1 / 14 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !