Académique Documents
Professionnel Documents
Culture Documents
Langage C
Langage C
Prsentation gnrale
et instructions de base
2007/2008
Langage C
2007/2008
Premier programme en C
#include <stdio.h>
void main()
bibliothque
Point d'entr du programme
{
printf(Mon programme !\n");
Instruction
2007/2008
Langage C : G
Gnralit
ralits
2007/2008
char (caractres),
int (entier),
short (entiers courts),
long (entiers longs),
float (rel),
double (rel grande prcision),
long double (rel avec plus de prcision),
unsigned int (entier non sign)
2007/2008
Exemple:
2007/2008
Langage C: l'affectation
2007/2008
Langage C : affichage d
dune variable
%c : caractre
%lf : double
%s : chaine de caractres
%e : rel en notation scientifique
2007/2008
Langage C : affichage d
dune variable
= "<< r <<'\n';
Langage C : lecture d
dune variable
2007/2008
10
Langage C : lecture d
dune variable
cin>>var;
Exemple
int i ;
cout <<"entrez i "<<'\n';
cin>>i;
float r ;
cout<<"entrez le rayon
cin>>r;
2007/2008
r " <<'\n';
11
Langage C : oprateurs
Instructions de base
oprateurs de base
2007/2008
12
Traduction en C
Si condition alors
instructions
Finsi
if (condition) {
instructions;
}
Si condition alors
instructions1
Sinon
instructions2
Finsi
if (condition) {
instructions1;
} else {
instructions2;
}
2007/2008
13
2007/2008
Traduction en C
switch(v){
case v1 : action1; break;
case v2 : action2; break;
14
Traduction en C
TantQue condition
Instructions
FinTantQue
while( condition) {
instructions;
}
for( i=v1;i<=v2;i=i+p){
instructions;
}
Rpter
instructions
Jusqu condition
do{
2007/2008
instructions;
} while(condition)
15
Fonctions et proc
procdures
2007/2008
16
17
18
Fonctions et proc
procdures
2007/2008
19
Fonctions
2007/2008
20
Caract
Caractristiques des fonctions
2007/2008
21
Fonctions : exemples
2007/2008
22
2007/2008
23
Procdures
24
FinProcdure
Algorithme exepmleAppelProcdure
Dbut
exempleProcedure ()
Fin
25
2007/2008
26
Remarque : le paramtre effectif doit tre une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse
27
28
29
2007/2008
30
2007/2008
31
2007/2008
32
Fonctions et procdures en C
2007/2008
33
Fonctions en C : exemple
int min(int a, int b);
void main()
{ int c;
/* entrez les valeurs de a et b */
c= min(a, b) ;
printf("le min de %d et %d est : %d \n", a, b, c);
}
int min(int a, int b)
{
if (a <b) return a;
else return b;
}
2007/2008
34
Rcursivit
Tout module rcursif doit possder un cas limite (cas trivial) qui
arrte la rcursivit
2007/2008
35
2007/2008
36
2007/2008
37
2007/2008
38
2007/2008
39
2007/2008
40
Les tableaux
2007/2008
41
Tableaux : introduction
Supposons que l'on veut calculer le nombre dtudiants ayant une note
suprieure 10 pour une classe de 20 tudiants.
42
Tableaux
En pseudo code :
Exemple :
43
Les tableaux
0
45
1
54
2
1
3
4
5
-56 22 134
6
49
7
12
8
90
9
-26
44
Tableaux : remarques
Un grand avantage des tableaux est qu'on peut traiter les donnes
qui y sont stockes de faon simple en utilisant des boucles
Les lments dun tableau sutilisent comme des variables
2007/2008
45
Exemples :
x tab[0]
La variable x prend la valeur du premier lment du
tableau (45 selon le tableau prcdent)
tab[6] 43
Cette instruction a modifie le contenu du 7me lment
du tableau (43 au lieu de 49)
2007/2008
46
Tableaux : exemple 1
Constante
N=20 : entier
Variables
i ,nbre : entier
tableau notes[N] : rel
Dbut
nbre 0
Pour i allant de 0 N-1
Si (notes[i] >12) alors
nbre nbre+1
FinSi
FinPour
crire ("le nombre de notes suprieures 12 est : ", nbre)
Fin
2007/2008
47
Tableaux : exemple 2
48
2007/2008
49
2007/2008
50
Tableaux : Exercice
Que produit lalgorithme suivant ?
Variable Tableau F[10], i : entier
dbut
F[0] 1
F[1] 1
crire(F[0],F[1])
pour i allant de 2 9 faire
F[i] F[i-1]+F[i-2]
crire(F[i])
finpour
fin
2007/2008
51
Tableaux : syntaxe en C
type nom_tableau[dimension];
dimension : doit tre une constante
type nom_tableau[dim1][dim2][dimn];
Exemple: char buffer[20][80];
2007/2008
52
2007/2008
53
0
1
2
0
12
23
43
1
28
36
21
2
44
51
55
3
2
11
67
4
76
38
83
5
77
54
41
6
32
25
69
54
55
2007/2008
56
Initialisation de matrice
Pour initialiser une matrice on peut utiliser par
exemple les instructions suivantes :
T1[3][3]
T2[3][3]
T3[4][4]
T4[4][4]
2007/2008
=
=
=
=
57
2007/2008
58
59
2007/2008
60
Notion de complexit
61
2007/2008
62
Complexit : exemple
crire une fonction qui permet de retourner le plus grand diviseur dun
entier.
Fin
Pour un ordinateur qui effectue 106 tests par seconde et n=1010 alors le
temps requis par PGD1 est dordre 3 heures alors que celui requis par
PGD2 est dordre 0.1 seconde
2007/2008
63
Complexit : notation en O
64
Complexit : rgles
2007/2008
65
La complexit asymptotique
Supposons que lon dispose de 7 algorithmes dont les complexits dans le
pire des cas sont dordre de grandeur 1, log2n, n, nlg2n, n2, n3, 2n et un
ordinateur capable deffectuer 106 oprations par seconde. Le tableau suivant
montre lcart entre ces algorithmes lorsque la taille des donnes croit :
Complexit
log2n
n
log2n
n2
n3
2n
N=102
1s 6.6s
4.1016a
N= 103
1s 9.9s
1ms
N=104
9.9ms 1s
16.6mn
! (>10100)
1s 13.3s 10ms
0.1s
100s
11.5j
N= 105
1s 16.6s 0.1s
1.6s
2.7h
31.7a
N= 106
1s 19.9s 1s
19.9s
11.5j
31.7103a !
2007/2008
66
La recherche squentielle
Consiste parcourir un tableau non tri partir du dbut et
sarrter ds quune premire occurrence de llment sera
trouve. Le tableau sera parcouru du dbut la fin si llment ny
figure pas.
2007/2008
67
i0 , Trouve Faux
TantQue (i < N) ET (not Trouve)
Si (T[i]=x) alors
Trouve Vrai
Sinon
ii+1
FinSi
FinTantQue
Si Trouve alors // c'est quivalent crire Si Trouve=Vrai alors
crire ("x est situ dans la "+i+ "eme position du
tableau ")
Sinon
crire ("x n'appartient pas au tableau")
FinSi
2007/2008
68
2007/2008
69
Recherche dichotomique
2007/2008
70
Recherche dichotomique
Oui !
Chercher X dans
[ 0 .. (n-1)/2- 1 ]
(n-1)/2
n-1
moyen
grand
X < moyen
Non !
Chercher X dans
[ (n-1)/2 .. n-1 ]
X
2007/2008
71
Recherche dichotomique :
algorithme
inf0 , supN-1, Trouve Faux
TantQue (inf <=sup) ET (not Trouv)
milieu(inf+sup) div 2
Si (x<T[milieu]) alors supmilieu-1
Sinon Si (x>T[milieu]) alors infmilieu+1
Sinon Trouve Vrai
FinSi
FinSi
FinTantQue
Si Trouve alors crire ("x appartient au tableau")
Sinon
crire ("x n'appartient pas au tableau")
FinSi
2007/2008
72
Considrons le tableau T :
Si la valeur cherch est 16 alors les indices inf, sup et milieu vont voluer
comme suit :
inf
0 5 5 6
sup
12 15
17 27 29 37
milieu 4
Si la valeur cherch est 9 alors les indices inf, sup et milieu vont voluer
comme suit :
inf
0 0 2
sup
2007/2008
milieu 4
73
2007/2008
74
2007/2008
75
Principe : Cest daller chercher le plus petit lment du tableau pour le mettre
en premier, puis de repartir du second, daller chercher le plus petit lment
pour le mettre en second etc
Au i-me passage, on slectionne le plus petit lment parmi les positions i..n
et on l'change ensuite avec T[i].
Exemple :
9 6
2 6
tape 2: on cherche le plus petit lment, mais cette fois partir du deuxime
lment. On le trouve en dernire position, on l'change avec le deuxime:
2 5
2 5
tape 3:
2007/2008
76
2007/2008
77
(n-i) = 0 (n2)
i=0..n-2
2007/2008
78
79
Non tries et
quelconques
Tries
0
2007/2008
i-1
n-1
80
Non tries et
quelconques
Tries
0
2007/2008
i-1
n-1
Plus petit :
Linsrer gauche.
81
4 9
1 4
tape 3:
1 4
tape 4:
1 3
7 9
2007/2008
82
FinTantque
FinPour
2007/2008
83
i = 0 (n2)
i=1..n-1
2007/2008
84
Tri rapide
Le tri rapide est un tri rcursif bas sur l'approche "diviser pour rgner"
(consiste dcomposer un problme d'une taille donne des sous
problmes similaires mais de taille infrieure faciles rsoudre)
2007/2008
85
86
Procdure de partition
Procdure Partition(tableau T :rel par adresse, p, r: entier par valeur,
q: entier par adresse )
Variables i, j: entier
pivot: rel
pivot T[p], ip+1, j r
TantQue (i<=j)
TantQue (i<=r et T[i] <=pivot) i i+1 FinTantQue
TantQue (j>=p et T[j] >pivot ) j j-1 FinTantQue
Si i <j alors
Echanger(T[i], T[j]), i i+1, j j-1
FinSi
FinTantQue
Echanger(T[j], T[p])
qj
Fin Procdure
2007/2008
87
2007/2008
88
2007/2008
89
Enregistrements
90
Enregistrements
Un enregistrement est un type comme les autres types.
Ainsi la dclaration suivante :
f, g : FicheEtudiant
dfinit deux variables f et g enregistrements de type FicheEtudiant
Lenregistrement FicheEtudiant contient plusieurs parties (champs), on
y accde par leur nom prcd dun point "." :
f.nom dsigne le champ (de type chaine) nom de la fiche f
f.notes[i] dsigne le champ (de type rel) notes[i] de la fiche f
Pour dfinir les champs dun enregistrement, on crit :
f: FicheEtudiant
f.nom "XXXXX" f.prenom "YYYYY" f.numero 1256
f.notes[2] 12.5
Les affectations entre enregistrement se font champ par champ
2007/2008
91
Enregistrement Complexe
Debut re : rel
im: rel
Fin
2007/2008
92
Enregistrements : exemple
Fonction add( z1, z2 :Complexe par valeur) : Complexe
Debut Variable z: Complexe
z.re=z1.re+z2.re
z.im=z1.im+z2.im
retourne(z)
FinFonction
Programme principale
Variables u, v, w: Complexe
a, b, c, d : rel
Debut ecrire("Entrez 4 valeurs relles :")
lire(a,b,c,d)
u.re a u.im b
v.re c
v.im d
ww add(u,v)
ecrire("Somme( ,) = :", w.re,w.im)
Fin
2007/2008
93
Structures en C
Dclaration :
struct personne {
char nom[20];
char prenom[20];
int no_employe;
}
Ce type de structure est utilis pour dclarer des variables de la
manire suivante : struct personne p1, p2;
Accs aux membres : p1.nom="XAAA";p2.no_employe=20;
Initialisation : struct personne p={"AAAA", "BBBB", 5644};
Tableau de structure : struct personne T[100];
2007/2008
94