Documente Academic
Documente Profesional
Documente Cultură
Master 1 EEA-AEETS
Nicolas Rivire
Universit Toulouse III
Septembre 2013
Septembre 2013
1 / 123
Sommaire
Introduction lAlgorithmique
Langage C : Bases
Gnralits
Variables
Oprateurs
Instructions
Langage C : Fonctions
Les fonctions
Rcursivit
Entres/Sorties standards
Langage C : Bases pour les structures de donnes
Les tableaux
Les pointeurs
Les structures
Les unions
Nicolas Rivire (Universit Toulouse III)
Septembre 2013
2 / 123
Sommaire
Septembre 2013
3 / 123
Introduction lAlgorithmique
Objectifs
I
Septembre 2013
4 / 123
Introduction lAlgorithmique
Moyens
Les critres pour les structures de donnes sont les mmes que pour
lalgorithme : efficacit, abstraction, rutilisabilit
Septembre 2013
5 / 123
Introduction lAlgorithmique
Mise en uvre
I
Septembre 2013
6 / 123
Langage C : Bases
Du programme lexcution.
Gnralits
Septembre 2013
7 / 123
Langage C : Bases
Gnralits
Du programme lexcution
Fichier C
Compilateur
Programme excutable
Septembre 2013
8 / 123
Langage C : Bases
Gnralits
/* 1 - directives du preprocesseur */
/* 2 - dfinition des constantes */
/* 3 - dfinition des types crs */
/* 4 - dfinition des variables globales */
/* 5 - dclaration des fonctions */
/* 6 - dfinition de la fonction principale */
/* 7 - dfinition des autres fonctions */
Septembre 2013
9 / 123
Langage C : Bases
Gnralits
Septembre 2013
10 / 123
Langage C : Bases
Gnralits
Septembre 2013
11 / 123
Langage C : Bases
Gnralits
Septembre 2013
12 / 123
Langage C : Bases
Identificateurs.
Variables.
Constantes.
Type numr.
Variables
Septembre 2013
13 / 123
Langage C : Bases
Variables
Identificateurs
I
1.
2.
3.
4.
a-z
A-Z
0-9
caractre soulignement (underscore) _ ( viter en dbut de nom)
Septembre 2013
14 / 123
Langage C : Bases
Variables
Types (1)
Septembre 2013
15 / 123
Langage C : Bases
Variables
Types (2)
Exemples de types en C :
I
I
I
Septembre 2013
16 / 123
Langage C : Bases
Variables
Types (3)
alphabtique (8)
hexadcimal (0x38)
octal (\070)
caractres spciaux (\n)
Type bool introduit dans le C99 avec true (1) et false (0)
Septembre 2013
17 / 123
Langage C : Bases
Variables
Les constantes
I
Septembre 2013
18 / 123
Langage C : Bases
Variables
Les dclarations
Septembre 2013
19 / 123
Langage C : Bases
Oprateurs
Oprateurs
Septembre 2013
20 / 123
Langage C : Bases
Oprateurs
Oprateurs arithmtiques
5 oprateurs : +, -, *, /, %
Septembre 2013
21 / 123
Langage C : Bases
Oprateurs
Oprateurs relationnels
Ils renvoient une valeur entire (type int) gale : 0 faux, 1 vrai
Egalit : ==
Diffrence : !=
Septembre 2013
22 / 123
Langage C : Bases
Oprateurs
Oprateurs logiques
Ils sappliquent aux oprandes qui ont la valeur logique Faux (0) ou
Vrai
ET logique : &&
OU logique : ||
Ngation logique : !
Septembre 2013
23 / 123
Langage C : Bases
Oprateurs
OU inclusif : |
OU exclusif : ^
Complment 1 : ~
Septembre 2013
24 / 123
Langage C : Bases
Oprateurs
Affectation
I
I
Septembre 2013
25 / 123
Langage C : Bases
Oprateurs
Septembre 2013
26 / 123
Langage C : Bases
Oprateurs
Val = 5;
/* Incrmentation de Val avant la multiplication par 3 */
Page = ++Val * 3;
/* Val = 6 et Page=18 */
/* Incrmentation de Val aprs la multiplication par 3 */
Delta = (Val++) * 3;
/* Val=7 et Delta=18 */
Septembre 2013
27 / 123
Langage C : Bases
Oprateurs
Septembre 2013
28 / 123
Langage C : Bases
De contrle
Itratives
Instructions
Septembre 2013
29 / 123
Langage C : Bases
Instructions
if (<condition>)
< corps du alors >
[ else
< corps du sinon > ]
I
Septembre 2013
30 / 123
Langage C : Bases
Instructions
Max = (4 > 8) ? 4 : 8;
Min = (4 < 8) ? 4 : 8;
Septembre 2013
31 / 123
Langage C : Bases
Instructions
Une tiquette est de type entier (ou caractre) qui peut tre une
constante explicite ou construite partir doprateurs (logiques,
logiques bit bit, arithmtiques, relationnels, conditionnel)
Septembre 2013
32 / 123
Langage C : Bases
Instructions
Septembre 2013
33 / 123
Langage C : Bases
Instructions
switch(i) {
{
case 0 :
printf("bonjour");
break;
case 1 :
...
}
Septembre 2013
34 / 123
Langage C : Bases
Instructions
Exemples :
for (i=0; i<5; i++)
{
if (i==3) continue;
printf("%d\n",i);
}
Septembre 2013
35 / 123
Langage C : Bases
Instructions
Septembre 2013
36 / 123
Langage C : Bases
Instructions
for ( ; ; )
for ( ; ; )
for ( ; ; );
{
...
}
Septembre 2013
37 / 123
Langage C : Bases
Instructions
while (<conditions>)
<corps de boucle>
I
Septembre 2013
38 / 123
Langage C : Bases
Instructions
do
<corps de boucle>
while (<conditions>);
I
Septembre 2013
39 / 123
Langage C : Bases
Instructions
int i;
int S=0;
for (i=0; i<6; i++)
{
S+=i;
if (S>12) break;
}
int S=1;
while (S<12)
{
S=2*S+1;
}
int S=15;
do
{
S=2*S+1;
}while (S<12)
int A=3;
int B=5;
if (B>A) A=2*A;
else B=2*B;
double X=0.5;
int A;
if (X>0 && X<0.2) A=1;
else if (X<0.4) A=2;
else if (X<0.8) A=3;
else A=4;
Septembre 2013
40 / 123
Langage C : Fonctions
Dfinition
Paramtres
Exemples
Rcursivit
Les fonctions
Septembre 2013
41 / 123
Langage C : Fonctions
Les fonctions
Prsentation
locales,
globales,
passes par des paramtres formels.
Septembre 2013
42 / 123
Langage C : Fonctions
Les fonctions
Dfinition
<type du resultat> nom_fonction (<declaration arguments>)
{
<corps de la fonction>
}
I
Exemples :
double Pi()
{
...
}
void Rien()
{}
Septembre 2013
43 / 123
Langage C : Fonctions
Les fonctions
Paramtres
Septembre 2013
44 / 123
Langage C : Fonctions
Les fonctions
Une fonction appele doit tre dclare ou dfinie avant son appel.
Septembre 2013
45 / 123
Langage C : Fonctions
Les fonctions
Exemples
int f1(char b)
{
...
}
int main(void)
{
int i;
i = f1(c);
}
int f1(char);
int f2(double b)
{
int i;
i = f1(c);
}
int f1(char b)
{
...
}
int main(void)
{ ... }
Septembre 2013
46 / 123
Langage C : Fonctions
Rcursivit
Principe
I
Septembre 2013
47 / 123
Langage C : Fonctions
Rcursivit
Exemple
Sans rcursivit :
long int factorielle(int n)
{
long int Facto=1;
int i;
for (i=1;i<=N;i++)
Facto = Facto*i;
return Facto;
}
Septembre 2013
48 / 123
Langage C : Fonctions
Rcursivit
Exemple
Septembre 2013
49 / 123
Langage C : Fonctions
Rcursivit
Phase de descente :
F(4)=4.F(3)
F(3)=3.F(2)
F(2)=2.F(1)
F(1)=1 (condition terminale)
Phase de monte :
F(2)=(2).(1)
F(3)=(3).(2)
F(4)=(4).(6)
24 (fin de la rcursion)
F (4) = 4! = 24
Septembre 2013
50 / 123
Langage C : Fonctions
Formates.
Fichier.
Entres/Sorties standards
Septembre 2013
51 / 123
Langage C : Fonctions
Entres/Sorties standards
Septembre 2013
52 / 123
Langage C : Fonctions
Entres/Sorties standards
Septembre 2013
53 / 123
Langage C : Fonctions
Entres/Sorties standards
Lit des donnes dont le nombre et le type sont spcifis dans la chane
format.
Septembre 2013
54 / 123
Langage C : Fonctions
Entres/Sorties standards
Septembre 2013
55 / 123
Langage C : Fonctions
Entres/Sorties standards
Fichier (1)
Septembre 2013
56 / 123
Langage C : Fonctions
Entres/Sorties standards
Fichier (2)
I
Les entres-sorties par ligne sont effectues comme gets et puts avec
les fonctions fgets et fputs :
char * fgets(char * Ligne, int Max, FILE * pfic)
int fputs(char * Ligne, FILE * pfic)
Septembre 2013
57 / 123
Dfinition.
De caractres.
Multidimensionnels.
Les tableaux
Septembre 2013
58 / 123
Les tableaux
Dfinition
Septembre 2013
59 / 123
Les tableaux
Chane de caractres
Septembre 2013
60 / 123
Les tableaux
Tableaux multi-dimensionnels
Septembre 2013
61 / 123
Principes.
Pointeurs et tableaux.
Tableaux de pointeurs.
Pointeurs et fonctions.
Indirections multiples.
Allocation dynamique.
Les pointeurs
Septembre 2013
62 / 123
Les pointeurs
Principes
I
Un pointeur est une variable qui contient ladresse dune autre variable.
Septembre 2013
63 / 123
Les pointeurs
Pointeurs et tableaux
int tableau[7];
int * p_jour;
I
Une chane de caractres est un tableau (de caractres) donc son nom
est ladresse du premier caractre.
Septembre 2013
64 / 123
Les pointeurs
Tableaux de pointeurs
type_pointe * Nom_tableau[taille_tableau];
I
Septembre 2013
65 / 123
Les pointeurs
Pointeurs et fonctions
I
Septembre 2013
66 / 123
Les pointeurs
Indirections multiples
I
Exemple :
int un_entier;
int * p_sur_entier;
int ** p_sur_p_sur_entier;
Septembre 2013
67 / 123
Les pointeurs
Allocation mmoire
I
Septembre 2013
68 / 123
Les pointeurs
Pointeurs gnriques
Septembre 2013
69 / 123
Les pointeurs
Septembre 2013
70 / 123
Les pointeurs
Septembre 2013
71 / 123
Les pointeurs
#include <stdio.h>
/*-------------------------*/
int main()
{
float x;
float* px;
x=0.5;
px=&x;
x/=2.0;
printf("%f
return 0;
}
%f
\n",x,*px);
Septembre 2013
72 / 123
Les pointeurs
#include <stdio.h>
#include <stdlib.h> /* pour malloc() */
/*-------------------------*/
int main()
{
float x;
float* px;
/* reserve memoire pour un float */
px=(float*) malloc(sizeof(float));
x=0.5;
*px=x;
x/=2.0;
printf("%f %f \n",x,*px);
free(px); /* libere memoire */
return 0;
}
Septembre 2013
73 / 123
Les pointeurs
#include <stdio.h>
/*-------------------------*/
int main()
{
float x;
float y;
float* p;
x=0.5;
y=0.3;
p=&x;
*p+=y;
p=&y;
*p-=x;
printf("%f
return 0;
}
%f
\n",x,y);
Septembre 2013
74 / 123
Les pointeurs
#include <stdio.h>
/*-------------------------*/
int main()
{
int tab[4]={4,3,2,1};
int* p;
int i;
p=tab;
(*p)++;
p++;
*(p+2)=5;
(*p)+=2;
for (i=0; i<4; i++) printf("%d ",tab[i]);
printf("\n");
return 0;
}
Septembre 2013
75 / 123
Les pointeurs
I
I
#include <stdio.h>
void f1(int a, int b)
{ a=b; }
void f2(int* a, int* b)
{ *a=*b; }
void f3(int a, int* b)
{ a=*b; }
void f4(int* a, int b)
{ *a=b; }
int main()
{
int n1=5, n2=7, n3=9;
f1(n1,n2);
printf("%d %d
f2(&n1,&n2);
printf("%d %d
f3(n2,&n3);
printf("%d %d
f4(&n2,n3);
printf("%d %d
%d\n",n1,n2,n3);
%d\n",n1,n2,n3);
%d\n",n1,n2,n3);
%d\n",n1,n2,n3);
return 0;
}
Septembre 2013
76 / 123
Les pointeurs
#include <stdio.h>
/*-------------------------*/
int main()
{
int i=0,j;
j=++i;
printf("%d %d\n",i,j);
j=i++;
printf("%d %d\n",i,j);
return 0;
}
Septembre 2013
77 / 123
Principes.
Utilisation.
Pointeurs et structure.
Les structures
Septembre 2013
78 / 123
Les structures
Principes
I
struct Personne
{ char nom[15];
char prenom[15];
int age;
};
Septembre 2013
79 / 123
Les structures
Manipulations
I
Septembre 2013
80 / 123
Les structures
Imbrication
I
Septembre 2013
81 / 123
Les structures
Structures et pointeurs
Septembre 2013
82 / 123
Les structures
Tableaux de structure
classe[1].numero = 121;
strcpy(classe[1].Etudiants.nom, "toto");
Septembre 2013
83 / 123
Les unions
Principes de lUnion
Septembre 2013
84 / 123
Les unions
Manipulations
I
Septembre 2013
85 / 123
Les unions
Septembre 2013
86 / 123
Les unions
Exemple
union nombre
{ int i;
float f;
};
enum type {Entier,Flottant};
struct calcul
{
enum type type_val;
union nombre u;
};
struct calcul n;
n.typ_val=Entier;
n.u.i=10;
Septembre 2013
87 / 123
Piles.
Files.
Listes.
Septembre 2013
88 / 123
Piles
Piles : dfinition
I
I
I
Septembre 2013
89 / 123
Piles
Soit lopration :
4+2 16
6
Septembre 2013
90 / 123
Piles
Septembre 2013
91 / 123
Files
Files
Une file est un ensemble de donnes qui sont ajoutes en queue de file
et supprimes en tte : First Input First Output, FIFO.
Trois oprations sur une file :
I
I
Septembre 2013
92 / 123
Listes
Listes
I
I
I
I
simplement chanes
doublement chanes
circulaires
Septembre 2013
93 / 123
Listes
Insrer un lment
etc.
Septembre 2013
94 / 123
Listes
I
I
Septembre 2013
95 / 123
Listes
Septembre 2013
96 / 123
Listes
struct s_element
{
int donnee;
struct s_element* suivant;
struct s_element* precedent;
};
typedef struct s_element t_element;
Septembre 2013
97 / 123
Listes
Listes circulaires
Pas de queue !
Chaque lment est form de 2 ou 3 parties :
Septembre 2013
98 / 123
Listes
en tte
en queue
nimporte o
Septembre 2013
99 / 123
Listes
Septembre 2013
100 / 123
Listes
I
I
I
I
I
Septembre 2013
101 / 123
Listes
Septembre 2013
102 / 123
Listes
Septembre 2013
103 / 123
Listes
Septembre 2013
104 / 123
Algorithmes de tri
Tri rapide
Tri bulles.
Septembre 2013
105 / 123
Algorithmes de tri
Principe
I
Tri basique trs lent dun ensemble de n valeurs (ici tri croissant)
I
I
I
I
I
18
2
2
Exemple
2
2
2
10
10
3
3
3
3
3
3
10
9
9
9
25
25
25
25
10
10
9
9
9
10
25
18
2
18
18
18
18
25
Septembre 2013
106 / 123
Algorithmes de tri
Algorithme
I
I
end
Rechercher_min (Tab, pos, taille)
1. min = pos
2. val_min = Tab[pos]
3. for i = pos to (n-2) do
4.
if (val_min>Tab[i+1]) then
5.
val_min = Tab[i+1]
6.
min = i+1
end
Permuter(...)
Septembre 2013
107 / 123
Algorithmes de tri
Principe
Septembre 2013
108 / 123
Algorithmes de tri
Exemple
18
18
10
10
10
3
3
3
3
3
3
3
3
3
3
3
2
10
18
18
18
10
10
10
10
10
10
9
9
9
9
9
3
3
3
3
3
18
18
18
18
18
18
10
10
10
10
10
9
9
9
25
25
25
25
25
25
25
25
18
18
18
18
18
10
10
10
10
9
9
9
9
9
9
9
25
25
25
25
25
18
18
18
18
18
2
2
2
2
2
2
2
2
2
2
2
25
25
25
25
25
25
Module TC2 - Master 1 EEA-AEETS
Septembre 2013
109 / 123
Algorithmes de tri
Algorithme
I
I
end
Inserer (Tab, pos, valeur)
1. i = pos - 1
2. while (i 0 and Tab[i] > valeur) do
3.
Tab[i+1] = Tab[i]
4.
i=i-1
5. Tab[i+1] = valeur
end
Septembre 2013
110 / 123
Algorithmes de tri
Tri rapide
Principe
Septembre 2013
111 / 123
Algorithmes de tri
Tri rapide
Exemple
24
24
11
11
52
14
14
14
11
11
24
24
94
28
28
28
28
94
36
36
36
36
52
52
14
52
94
80
80
80
80
94
Septembre 2013
112 / 123
Algorithmes de tri
Tri rapide
Algorithme
I
I
end
Partitionner (Tab, gauche, droite)
1. pivot = Choisir_pivot(Tab[gauche], Tab[droite]) // plusieurs manires
2. memo = gauche
3. for i = gauche to (droite-1) do
4.
if (Tab[i] Tab[pivot]) then // si llment est infrieur au pivot
5.
memo = memo + 1 // on incrmente le compteur
6.
// on place llment la position finale du pivot
Permuter (Tab[i], Tab[memo])
7. Permuter (Tab[memo], Tab[droite]) // on place le pivot sa place
8. return memo // on renvoie la position finale du pivot
end
Nicolas Rivire (Universit Toulouse III)
Septembre 2013
113 / 123
Algorithmes de tri
Tri bulles
Principe
Septembre 2013
114 / 123
Algorithmes de tri
Tri bulles
Exemple
18
10
10
10
10
10
3
3
3
3
3
3
3
3
3
2
10
18
3
3
3
3
10
10
10
10
10
9
9
9
2
3
3
3
18
18
18
18
18
18
9
9
9
10
2
2
9
9
25
25
25
25
9
9
9
9
18
2
2
2
10
10
10
10
9
9
9
9
25
2
2
2
2
18
18
18
18
18
18
18
2
2
2
2
2
25
25
25
25
25
25
25
25
25
25
25
Septembre 2013
115 / 123
Algorithmes de tri
Tri bulles
Algorithme
I
I
n=N
permutation = FAUX
do
for i = 0 to (n-2) do
if (Tab[i] > Tab[i+1])
Permuter (Tab[i], Tab[i+1])
permutation = VRAI
if (n > 0) do
n = n-1
while (permutation = VRAI)
end
Septembre 2013
116 / 123
Compilation modulaire
Prprocesseur
la macro-substitution
linclusion de fichiers
la compilation conditionnelle
Septembre 2013
117 / 123
Compilation modulaire
La macro-substitution(1)
Allgement du programme
Septembre 2013
118 / 123
Compilation modulaire
La macro-substitution(2)
Septembre 2013
119 / 123
Compilation modulaire
Le prprocesseur
Inclusion de fichiers :
I
Le contenu dun fichier texte peut tre insr dans un autre fichier
grce la directive include
Septembre 2013
120 / 123
Compilation modulaire
Compilation conditionnelle
I
Exemple :
#ifndef TAILLE
#define TAILLE 100
#endif
Septembre 2013
121 / 123
Compilation modulaire
Septembre 2013
122 / 123
Compilation modulaire
Septembre 2013
123 / 123