Anda di halaman 1dari 281

1 INSAT 2010/2011 1

Cours algorithmique et
structure de donnes
Dr. Sofiane ouni
http://insatien.com
2 INSAT 2010/2011 2
Plan
1. Introduction linformatique
2. Notions lmentaires des algorithmes :
dclarations, entres/sorties, calcul,
affectations
3. Les structures conditionnelles
4. Les structures itratives
5. Les tableaux
6. Les enregistrements
7. Les procdures et fonctions
8. Les fichiers


3 INSAT 2010/2011 3
Chapitre 1 :
Introduction linformatique
http://fr.wikipedia.org/wiki/Langages_de_programmation
http://www.buvetteetudiants.com/cours/administrator/html-css/langages-informatiques.php
http://www.maestro.ca/francais/ressources/livres-blancs/petite-histoire-des-langages-de-programmation
4 INSAT 2010/2011 4
1. Reprsentations des donnes
Les informations traites par un ordinateur peuvent tre de
diffrents types (texte, nombres, etc.) mais elles sont
toujours reprsentes et manipules par l'ordinateur sous
forme binaire. Toute information sera traite comme une
suite de 0 et de 1. L'unite d'information est le chiffre binaire
(0 ou 1), que l'on appelle bit (pour binary digit, chiffre
binaire).
Le codage d'une information consiste a tablir une
correspondance entre la reprsentation externe
(habituelle) de l'information (le caractre A ou le nombre
36 par exemple), et sa reprsentation interne dans la
machine, qui est une suite de bits.
5 INSAT 2010/2011 5
Changements de bases
6 INSAT 2010/2011 6
Reprsentation des entiers
7 INSAT 2010/2011 7
8 INSAT 2010/2011 8
Reprsentation des nombres
factionnaires
9 INSAT 2010/2011 9
Conversion de et vers la base 10
10 INSAT 2010/2011 10
11 INSAT 2010/2011 11
12 INSAT 2010/2011 12
Conversion bases 2, 8 et 16
13 INSAT 2010/2011 13
Reprsentation des caractres
14 INSAT 2010/2011 14
Code ASCII
15 INSAT 2010/2011 15
Codage des instructions
Exemples dinstruction
16 INSAT 2010/2011 16
17 INSAT 2010/2011 17
2. Architecture dun ordinateur
18 INSAT 2010/2011 18
Architecture dun ordinateur
19 INSAT 2010/2011 19
Mmoire centrale ou principale
20 INSAT 2010/2011 20
Processeur
C'est le moteur de l'ordinateur. Il excute les
instructions contenues dans les programmes. Il le fait
de faon plus ou moins rapide en fonction de la
frquence interne du processeur. Par exemple un
processeur 3 Ghz effectue 3 milliards d'oprations
la seconde.
21 INSAT 2010/2011 21
L'instruction par seconde (la plupart du temps million d'instructions par seconde, MIPS)
est une unit de mesure utilise en informatique.
22 INSAT 2010/2011 22
Excution dinstructions
L'unit de commande et de contrle effectue les oprations suivantes :
extraction de l'instruction excuter, analyse de cette instruction et liaison
avec l'U.A.L. (Unit Arithmtique et Logique) , recherche des donnes
traiter dans la mmoire centrale, dclenchement du traitement dans l'U.A.L.,
rangement des rsultats dans la mmoire centrale ou en mmoire auxiliaire
23 INSAT 2010/2011 23
Ouni sofiane
Carte mre
24 INSAT 2010/2011 24
http://zabile.free.fr/Montage_PC.htm
http://www.world-informatique.com/hardware/cmere/index.html
25 INSAT 2010/2011 25
3. Architecture de systme
informatique
26 INSAT 2010/2011 26
Langage machine : Le langage machine appel aussi
langage binaire, c'est avec ce langage que fonctionnent
les ordinateurs. Il consiste utiliser deux tats
(reprsents par les chiffres 0 et 1) pour coder les
informations (texte, images etc.).
Dans le langage machine, le programmeur doit entrer
chaque commande et toutes les donnes sous forme
binaire c'est dire sous forme de suite d'octets.
Le programme crit en langage volu (C, Pascal) sera
traduit en langage machine par un programme
particulier appel compilateur.

27 INSAT 2010/2011 27
Exemple de code machine :



Ajouter AX 3
Code en langage assembleur :
instructions en langage machines sont remplaces par des symboles: Mov,
Cest langage difficile, dpendant et ncessitant la connaissance
dtaille de larchitecture matriel de lordinateur (=> vers langages volus)
Langage Machine 0010 101 11
Langage assembleur ADD Ax 3
28 INSAT 2010/2011 28
29 INSAT 2010/2011 29
30 INSAT 2010/2011 30
4. langages informatiques:
Types
Langage machine
Langage assembleur (assembly language)
Langage volu
Les langages de scripts (langages interprts)
Les langages compils
Langage de balisage (langage de marquage)
Langage de requte

31 INSAT 2010/2011 31
Le langage volu est un langage qui accomplit beaucoup
pour un minimum de code et d'effort de programmation,
titre d'exemple : Pascal, Java, C, C++, C#, Visual Basic (ou
VB), Delphi, Python, Perl, PHP, JavaScript, VBscript, ASP
etc.
Bref la syntaxe des langages volus est trs simplifie, on
y trouve par exemple des mots en anglais (if, do while,
switch, integer, string) donc il est plus accessible et
comprhensible aux gens que l'assembleur lui mme plus
accessible que le langage machine.
Ces langages sont traduits en langage machine avant leur
excution par un programme compilateur, ces programmes
fonctionnent ensuite comme s'ils taient directement crits
en langage machine.
32 INSAT 2010/2011 32
Langages volus de
programmation
http://www.info.univ-angers.fr/~gh/hilapr/progs.htm
33 INSAT 2010/2011 33
Langage de balisage (langage de marquage)
Ces langages reposent sur ce qu'on appelle des balises ou
tags, ces derniers sont des tiquettes avec lesquelles on
peut tiqueter des donnes (mots, texte etc.) pour
produire un effet chez eux tant en sens (leurs donner du
sens : ceci est un paragraphe, ceci est un titre, citation
etc.) qu'en rendu visuel (italique, gras, couleur du texte
etc.), on peut tiqueter des donnes en les encadrant
par ces balises, parmi ce type de langages il y a le
HTML (HyperText Markup Language), le XML, le
SGML, XHTML (Extensible HyperText Markup
Language).
Par exemple :
Pour mettre en italique : <i> texte en italique </i> ;
34 INSAT 2010/2011 34
Langages de requtes
Ces langages qualifient le plus souvent les
langages propres aux bases de donnes, ils sont
reprsents notamment par le SQL (structured
query language) en franais langage structur de
requtes, il permet tout simplement de grer une
base de donnes par exemple l'interroger, y insrer
des donnes ou en supprimer d'autres, lui
demander de faire ressortir des donnes selon des
critres que je lui fixe.
35 INSAT 2010/2011 35
paradigme (ou style ou type) des
langages de programmations
Langages impratifs et procduraux :
comme C,
Langages objets : comme C++, Java,
Langages dclaratifs : comme Prolog,..
Langages logiques : comme Prolog,
Langages fonctionnels : comme Lisp,

36 INSAT 2010/2011 36
Langages impratifs et procduraux
langages impratifs : une instruction du langage
correspond un ensemble d'instructions du
langage
Un programme est form par plusieurs
procdure. Une procdure, appele galement
fonction, est une suite d'instructions devant tre
effectue dans un ordre prcis.
Main ( )
{
int a, b;
a=b*b;
printf( %d ,a);
}
Int carre ( int b)
{
return (b*b);
}

Main ()
{ int a;
a= carre (b);
Printf( %d ,a); }
En C
37 INSAT 2010/2011 37
Langages dclaratifs
Un langage dclaratif ne dcrit pas
comment est ralise une opration,
comme dans un langage impratif, mais
dcrit le problme lui-mme, sans
s'intresser au contexte.
Figurent parmi les langages dclaratifs
Oz, Prolog ou encore Clips.
38 INSAT 2010/2011 38
Langages logiques
Un programme logique est compos de faits et de
rgles qui sont traits par un moteur d'infrence.
Prolog fut le premier langage de ce type tre
fonctionnel sur un ordinateur.
39 INSAT 2010/2011 39
Langages fonctionnels
Dans ce paradigme, l'opration de base n'est pas
l'affectation, contrairement aux langages impratifs,
mais l'valuation de fonctions.

Par exemple avec Lisp:
(first '(7 3 10))
cela donne 7
(* (+ 2 2) 4)
cela donne 16
40 INSAT 2010/2011 40
Langages objets
Les langages objets offrent un abstraction la machine :
l'objet est une structure smantique indpendante qui
rassemble des donnes et des traitements.
En se basant sur une mthode de conception objet et
sur un langage de modlisation objet, on peut facilement
implanter un concept au moyen d'un langage de
programmation objets.
Class Television {
int poids;
int longueur_diagonale;
boolean allume;
String Chaine_memorisees;

void eteindre ();
void allumer();
void memoriser_chaines (String chaine);
};
En C++
41 INSAT 2010/2011 41
5. Introduction lalgorithmique
L'algorithmique est lensemble des rgles et des
techniques qui sont impliques dans la dfinition et la
conception d'algorithmes, c'est dire de processus
systmatiques de rsolution, par le calcul, d'un problme
permettant de dcrire les tapes vers le rsultat.
En d'autres termes, un algorithme est une suite finie et non-
ambigu doprations permettant de donner la rponse un
problme.
Un algorithme est une solution informatique indpendant du
langage de programmation
Un algorithme est une tape qui prcde limplmentation
dun programme permettant de faire un raisonnement sur la
suite dinstructions ncessaires
Le style de structure dalgorithme trait dans ce cours
sinspire des langages de programmation impratifs et
procduraux

42 INSAT 2010/2011 42
43 INSAT 2010/2011 43
44 INSAT 2010/2011 44
Chapitre 2:
Notions lmentaires des algorithmes :
dclarations, entres/sorties,
calcul, affectations
Rfrences :
support du cours de Gilles Protoy et Daniel Millot, Tlcom SudParis - 1re anne
-Support du cours MPI de faten chaieb 2009
-Support du cours de 1re anne SMP/SMC, 2007/2008, Mouad BEN MAMOUN, Moulay Driss RAHMANI, Universit Mohammed V

45 INSAT 2010/2011 45
46 INSAT 2010/2011 46
47 INSAT 2010/2011 47
48 INSAT 2010/2011 48
49 INSAT 2010/2011 49
50 INSAT 2010/2011 50
51 2007/2008 Module I2, 1re anne SMP/SMC 51
Choix des identificateurs (1)
Le choix des noms de variables est soumis quelques rgles qui
varient selon le langage, mais en gnral:

Un nom doit commencer par une lettre alphabtique
exemple valide: A1 exemple invalide: 1A

doit tre constitu uniquement de lettres, de chiffres et du
soulignement _ (Eviter les caractres de ponctuation et les espaces)
valides: SMIP2007, SMP_2007 invalides: SMP 2005,SMI-2007,SMP;2007

doit tre diffrent des mots rservs du langage (par exemple en
Java: int, float, else, switch, case, default, for, main, return, )

La longueur du nom doit tre infrieure la taille maximale spcifie
par le langage utilis
52 2007/2008 Module I2, 1re anne SMP/SMC 52
Choix des identificateurs (2)
Conseil: pour la lisibilit du code choisir des noms significatifs
qui dcrivent les donnes manipules

exemples: TotalVentes2004, Prix_TTC, Prix_HT


Remarque: en pseudo-code algorithmique, on va respecter
les rgles cites, mme si on est libre dans la
syntaxe

53 2007/2008 Module I2, 1re anne SMP/SMC 53
Types des variables
Le type dune variable dtermine lensemble des valeurs quelle peut
prendre, les types offerts par la plus part des langages sont:
Type numrique (entier ou rel)
Byte (cod sur 1octet): de 0 255
Entier court (cod sur 2 octets) : -32 768 32 767
Entier long (cod sur 4 ou 8 octets)
Rel simple prcision (cod sur 4 octets)
Rel double prcision (cod sur 8 octets)
Type logique ou boolen: deux valeurs VRAI ou FAUX

Type caractre: lettres majuscules, minuscules, chiffres, symboles,
exemples: A, a, 1, ?,
Type chane de caractre: toute suite de caractres,
exemples: " Nom, Prnom", "code postale: 1000",

54 2007/2008 Module I2, 1re anne SMP/SMC 54
Dclaration des variables
Rappel: toute variable utilise dans un programme doit avoir
fait lobjet dune dclaration pralable
En pseudo-code, on va adopter la forme suivante pour la
dclaration de variables
Variables liste d'identificateurs : type
Exemple:
Variables i, j,k : entier
x, y : rel
OK: boolen
ch1, ch2 : chane de caractres

Remarque: pour le type numrique on va se limiter aux entiers
et rels sans considrer les sous types
55 2007/2008 Module I2, 1re anne SMP/SMC 55
Linstruction daffectation
laffectation consiste attribuer une valeur une variable
(a consiste en fait remplir o modifier le contenu d'une zone mmoire)

En pseudo-code, l'affectation se note avec le signe
Var e: attribue la valeur de e la variable Var

- e peut tre une valeur, une autre variable ou une expression
- Var et e doivent tre de mme type ou de types compatibles
- laffectation ne modifie que ce qui est gauche de la flche

Ex valides: i 1 j i k i+j
x 10.3 OK FAUX ch1 "SMI"
ch2 ch1 x 4 x j
(voir la dclaration des variables dans le transparent prcdent)
non valides: i 10.3 OK "SMI" j x

56 2007/2008 Module I2, 1re anne SMP/SMC 56
Quelques remarques
Beaucoup de langages de programmation (C/C++, Java, ) utilisent
le signe gal = pour laffectation . Attention aux confusions:

l'affectation n'est pas commutative : A=B est diffrente de B=A
l'affectation est diffrente d'une quation mathmatique :

A=A+1 a un sens en langages de programmation
A+1=2 n'est pas possible en langages de programmation et n'est
pas quivalente A=1

Certains langages donnent des valeurs par dfaut aux variables
dclares. Pour viter tout problme il est prfrable d'initialiser les
variables dclares

57 2007/2008 Module I2, 1re anne SMP/SMC 57
Exercices simples sur l'affectation (1)
Donnez les valeurs des variables A, B et C aprs excution
des instructions suivantes ?

Variables A, B, C: Entier
Dbut
A 3
B 7
A B
B A+5
C A + B
C B A
Fin
58 2007/2008 Module I2, 1re anne SMP/SMC 58
Exercices simples sur l'affectation (2)
Donnez les valeurs des variables A et B aprs excution des
instructions suivantes ?

Variables A, B : Entier
Dbut
A 1
B 2
A B
B A
Fin

Les deux dernires instructions permettent-elles dchanger les
valeurs de A et B ?
59 2007/2008 Module I2, 1re anne SMP/SMC 59
Exercices simples sur l'affectation (3)
Ecrire un algorithme permettant dchanger les
valeurs de deux variables A et B
60 2007/2008 Module I2, 1re anne SMP/SMC 60
Expressions et oprateurs
Une expression peut tre une valeur, une variable ou une
opration constitue de variables relies par des oprateurs
exemples: 1, b, a*2, a+ 3*b-c,

L'valuation de l'expression fournit une valeur unique qui est le
rsultat de l'opration

Les oprateurs dpendent du type de l'opration, ils peuvent tre :

des oprateurs arithmtiques: +, -, *, /, % (modulo), ^ (puissance)
des oprateurs logiques: NON, OU, ET
des oprateurs relationnels: =, , <, >, <=, >=
des oprateurs sur les chanes: & (concatnation)

Une expression est value de gauche droite mais en tenant
compte de priorits

61 2007/2008 Module I2, 1re anne SMP/SMC 61


Priorit des oprateurs

Pour les oprateurs arithmtiques donns ci-dessus, l'ordre de
priorit est le suivant (du plus prioritaire au moins prioritaire) :

^ : (lvation la puissance)
* , / (multiplication, division)
% (modulo)
+ , - (addition, soustraction)
exemple: 2 + 3 * 7 vaut 23

En cas de besoin (ou de doute), on utilise les parenthses pour
indiquer les oprations effectuer en priorit
exemple: (2 + 3) * 7 vaut 35
62
63
Chapitre 3:
Structures conditionnelle et itratives
Rfrences :
support du cours de Gilles Protoy et Daniel Millot, Tlcom SudParis - 1re anne
-Support du cours MPI de faten chaieb 2009
-Support du cours de 1re anne SMP/SMC, 2007/2008, Mouad BEN MAMOUN, Moulay Driss RAHMANI, Universit Mohammed V
-Nicolas Delestre, Introduction a l'algorithmique - 2eme partie (Conditionnelles et itrations) I3 Algorithmique, asi
64
65
66
67
68
69
70
71
72
73
74
( non n>0)
75
%d
76
77
78
Avec le C
79
80
81
82
OU
83
84
85
86
87
88
89
90
91
92
93
Exercice
94
95
exercice
Ecrire lalgorithme et le code en C interprtant lorganigramme
suivant sur un jeu de dcouverte de nombre :
96
Une trs bonne rfrence sur le C :
http://www.inp-toulouse.fr/tice/pdf/1Extrait_C.pdf
97
Procdure et fonctions
Nicolas Delestre, https://moodle.insa-rouen.fr/file.php/87/Cours/FonctionProcedure.pdf
Nicolas Delestre, Michel Mainguenaud, http://webdav-noauth.unit-c.fr/files/perso/ndelestre/Cours/FonctionProcedure.pdf , insa de
rouen
98
99
100
101
102
103
Fonctions : exemples
La fonction SommeCarre suivante calcule la somme des
carres de deux rels x et y (paramtres formels ,
arguments, variables locales) :
Fonction SommeCarre (x : rel, y: rel ) : rel
var z : rel // variable locale
Dbut
z x^2+y^2
retourne (z)
FinFonction

La fonction Pair suivante dtermine si un nombre est pair :

Fonction Pair (n : entier ) : boolen
Dbut
retourne (n%2=0)
FinFonction
104
Utilisation des fonctions
L'utilisation d'une fonction se fera par simple criture de son nom
dans le programme principale. Le rsultat tant une valeur, devra
tre affect ou tre utilis dans une expression, une criture, ...

Exepmle : Algorithme exepmleAppelFonction
var z : rel, b : boolen //variable globale
Dbut
b Pair(3)
z 5*SommeCarre(7,2)+1
crire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin

Lors de l'appel Pair(3) le paramtre formel n est remplac par
le paramtre effectif 3
Les variables globales peuvent tre utilises aussi dans les
fonctions mais cela nest pas conseill
105
106
Exemple
107
Appel d'une procdure
L'appel d'une procdure, se fait dans le programme principale ou dans une
autre procdure par une instruction indiquant le nom de la procdure :
Procdure exemple_proc ()

FinProcdure

Algorithme exepmleAppelProcdure
Dbut
exemple_proc ()

Fin

Remarque : contrairement l'appel d'une fonction, on ne peut pas affecter la
procdure appele ou l'utiliser dans une expression. L'appel d'une
procdure est une instruction autonome
108
Procdures
Dans certains cas, on peut avoir besoin de rpter une tache dans plusieurs
endroits du programme, mais que dans cette tche on ne calcule pas de
rsultats ou qu'on calcule plusieurs rsultats la fois

Dans ces cas on ne peut pas utiliser une fonction, on utilise une procdure

Une procdure est un sous-programme semblable une fonction mais qui
ne retourne rien
Une procdure s'crit en dehors du programme principal sous la forme :

Procdure nom_procdure (paramtres et leurs types)

Instructions constituant le corps de la procdure

FinProcdure
Remarque : une procdure peut ne pas avoir de paramtres
109
Exemple
110
Paramtres d'une procdure
Les paramtres servent changer des donnes entre le programme
principale (ou la procdure appelante) et la procdure appele

Les paramtres placs dans la dclaration d'une procdure sont appels
paramtres formels. Ces paramtres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas rellement)

Les paramtres placs dans l'appel d'une procdure sont appels
paramtres effectifs. ils contiennent les valeurs pour effectuer le
traitement

Le nombre de paramtres effectifs doit tre gal au nombre de paramtres
formels. L'ordre et le type des paramtres doivent correspondre
111
Les paramtres en Entre sont considrs aussi comme paramtres
passs par valeur
Les paramtre en sortie ou en Entre/ sortie sont considr aussi comme
paramtres passs par adresse ou par rfrence

112
113
114
115
116
Un nombre parfait est un nombre naturel n non nul qui est gal la somme de
ses diviseurs stricts
Le premier nombre parfait est 6, car 1, 2, et 3 sont les diviseurs stricts de 6 et
1 + 2 + 3 = 6.
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Rsultat:

X=3, y=5
Il n y a pas eu de permutation les paramtres x et y en sont pas affects
puisquils sont passs par valeur (par copie)
132
133
134
Les tableaux
F. Chaieb Chakchouk, cours 2009 algo
Ccile Balkanski, Nelly Bensimon, Grard Ligozat, http://www.limsi.fr/Individu/cecile/Enseignement/coursAlgo_V2.pdf
135
136
137
138
139
140
141
142
143
144
145

146

147

148

149

150

151
152

153

154
Tableau dimension variable
Algorithme manipulationTableau

Const Max=100;
Type Ttab= Tableau[0..Max] de entier
Var Ltab : entier // nombre des lments du tableau (Ltab<Max)
t :Ttab;

Procdure saisieTableauVar (E/S t:Ttab, E l:entier)
Var i : entier
Dbut
pour i 0 l faire
lire (t[i])
FinPour
Fin Proc

Procdure AfficherTableauVar (E t:Ttab, E l:entier)
Var i : entier
Dbut
pour i 0 l faire
Ecrire (t[i], )
FinPour
Fin Proc


Dbut // dbut algo
crire (donnez la dimention ou le nombre dlments du tableau (<,Max, :);
lire (Ltab);
saisieTableVar(t,Ltab);

AfficherTableauVar(t,Ltab);

Fin
155
Exercices dapplication
Raliser les fonctions suivantes :
Inversion des lments dun tableau
Dcalage droite et gauche
Suppression dun lment
Ajout dun lment la fin dun tableau
Ajout dun lment cas gnral
156
Les Tableaux
avec le langage C
Jean-Jacques Girardot / Marc Roelens, Introduction au langage C, http://kiwi.emse.fr/INTROINFO/cours-t4-4.pdf
F.Faber , les tableaux, http://www.ltam.lu/cours-c/prg-c65.htm
157
158
159
160
161
162
163
Saisie
164
165
166
167
168
169
170
171
172
173
174
175
176
177
saisie
178
Les chaines de caractres
avec C
Magali Contensin , Langage C et algorithmique , http://www.cmi.univ-mrs.fr/~contensi/coursC/index.php?section=lang&page=tabl
179
180
181
182
183
184
185
*(ch1+3)=T;
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
Exercices
exercice : crivez un programme qui prend une chane
en minuscules et qui la convertit en majuscules
201
Exercice : crivez un programme qui renverse une chane, i.e. abcd\0 devient dcba\
202
Exercice
Raliser une application C qui permet de
manipuler une liste de noms des tudiants dun
groupe : ajout, suppression et recherche
203
"Ali" "Mohamed" "Saleh"
LT=3
TN
204
205
206
Amliorez ce programme afin de ne pas avoir des variables globales et avoir des fonctions avec paramtres
207
Amlioration faire
#include <stdio.h>
#include <string.h>

typedef char string[20] ;
string TN[100];
int LT = 0;
void Aff_Menu ()
{
printf ("0-Aff \n");
printf ("1-Ajout \n");
printf ("2-supp \n");
printf ("3-rech \n");
printf ("4-Quiter \n");
printf ("Donnez votre choix?");
}
208
void Ajout (string TN[ ],int LT)
{
string Nom;
printf ( "donnez un nom?");
scanf("%s",Nom);
strcpy(TN[LT], Nom);
LT ++;
}

209
int recherche (string TN[ ], int LT)
{
string Nom;
int TR=0;
printf(" donnez le nom chercher?");
scanf("%s", Nom);
for (int i=0; i<LT; i++)
{
if (strcmp(TN[i], Nom)==0)
{
printf ("le nom existe");
TR =1;
}
return(i);
}
if (TR==0)
{
printf ("le nom n'existe pas");
return (-1);
}
}
210
void suppression (string TN[ ],int LT)

{
int j,i;
j= recherche (TN, LT);
if (j==-1)
return ;
for ( i= j; i<LT;i++)
{
strcpy(TN[i],TN[i+1]);
}
LT=LT-1;

}
211
void Affichage (string TN[ ],int LT)
{

for( int i=0; i<LT; i++)
{
printf ("%s " , TN[i]);
}
printf("\n\n");
}
212
main()
{
string TN[100];
int LT = 0;

char c ;
do
{
Aff_Menu();
scanf("%c",& c);
switch (c)
{
case '0': Affichage (TN, LT); break ;
case '1': Ajout (TN, LT); break ;
case '2': suppression (TN, LT); break ;
case '3': recherche (TN, LT); break ;
}
}
while (c!=4);
}
Amliorez le code pour que dans les fonction ajout, suppression et recherche, il ny a pas de saisie et daffichage.
(il faudra ajouter dautres fonctions : lecture pour la saisie de nom,)
213
Remarque!
En algorithmique pour le type chaine
(chaine de caractre), on suppose galement
lexistence des fonctions inspires du C de
manipulation des chaines :
strcpy, strcmp, strcat, strlen,
214
Notion de structure ou
denregistrement
S. Laporte, http://btsig972.free.fr/cours/Algorithme/1e_annee/06.pdf
S. Laporte, http://stephanie.laporte.pagesperso-orange.fr/Pdf/structures.pdf
Pierre Tellier, Algorithmique et Structures de Donnes, http://dpt-info.u-strasbg.fr/~tellier/polys/poly3_ASD.pdf
215
Enregistrement
Contrairement aux tableaux qui sont des structures de
donnes dont tous les lments sont de mme type,
Les enregistrements sont des structures de donnes
dont les lments peuvent tre de type diffrent
Les lments qui composent un enregistrement sont
appels champs
Les enregistrements sont aussi appel structures, en
analogie avec le langage C
216
Syntaxe
217
Dclaration d'un enregistrement
218
219
Accs aux champs d'un
enregistrement
220
Programme Exemple
Type
Structure tpersonne
nom : chane
prnom : chane
ge : entier
FinStruct
Var
pers1, pers2 : tpersonne

Dbut
Ecrire( "Entrez le nom puis lge de la personne 1")
lire( pers1.nom, pers1.age) // il est impossible d'crire Saisir pers1
Ecrire( "Entrez le nom puis l'ge de la personne 2")
lire( pers2.nom, pers2.age)
Ecrire( "La diffrence d'ge entre ", pers1.nom, " et ", pers2.nom, " est de ")
Si pers1.age > pers2.age
Alors Ecrire( pers1.age pers2.age, " ans ")
Sinon Ecrire( pers2.age pers1.age, " ans ")
FinSi
Fin
221
Exemple :
Voil une fonction qui renvoie la diffrence d'ge entre
deux personnes.

Fonction diffrence (pers1, pers2 : tpersonne): entier
Dbut
Si pers1.age > pers2.age
Alors Retourner ( pers1.age pers2.age )
Sinon Retourner ( pers2.age pers1.age )
FinSi
FinFonct
222
L'imbrication d'enregistrements
Un type structur peut tre utilis comme type
pour des champs d'un autre type structur
223
224
225
Les tableaux d'enregistrement
226
227
228
Procdure afficher_anniversaire_enfants_Tous( TabEmp :
tableau[1..MAX] d'Employ, n:entier)
Var i, j : entier
Dbut
Pour i 1 n Faire
Si TabEmp[i].NbEnf <> 0 Alors
Pour j 1 TabEmp[i].NbEnf Faire
Ecrire( TabEmp[i].Progniture[j].Prnom)
Ecrire( "anniversaire le ", TabEmp[i].Progniture[j].journaiss,
TabEmp[i].Progniture[j].moisnaiss)
FinPour
Sinon Ecrire( "l'employ ", TabEmp[i].Nom, " n'a pas d'enfant")
FinSi
FinPour
FinProcdure

229
230
Structure Avec le langage C
Structures simples
231
Exemple : calcul de la veille d'une date
232
233
Structures imbriques
Exercice :
Nous dfinissons un type FICHE, destin contenir des informations sur des
personnes. Ces informations sont : nom, prnom, adresse, date de naissance,
sachant qu'une adresse est constitue d'un numro, d'un nom de rue, d'un code
postal et d'une ville, alors que la date de naissance est la runion de 3
informations : jour, mois et anne.
TDate t1;
struct t_date t2;
struct t_date tt;
234
void saisieAdresse(TAdresse *adr)
{
char chaine[1024];
int n;
printf("Saisie de l'adresse\n");
printf("Numero : "); scanf("%d", &n);
(*adr).numero = n;
printf("Nom de la rue : "); scanf("%s", chaine);
(*adr).rue = strdup(chaine);
printf("Code Postal : "); scanf("%d",&(*adr).code);
printf("Ville : "); scanf("%s", chaine);
(*adr).ville = strdup(chaine);
return ;
}
ou
235
236
void saisieFiche(TFiche *f)
{
char chaine[1024];
TAdresse adr;
TDate date;

printf("Nom : "); scanf("%s", chaine);
(*f).nom = strdup(chaine);
printf("Prnom : "); scanf("%s", chaine);
(*f).prenom = strdup(chaine);
saisieAdresse(&adr);
(*f).adresse = adr;

date = saisieNaissance();
(*f).naissance = date;
}
237
void saisieFiche(TFiche *f)
{
char chaine[1024];
TAdresse adr;
TDate date;

printf("Nom : "); scanf("%s", (*f).nom );
printf("Prnom : "); scanf("%s", (*f).prenom );
saisieAdresse(&(*f).adresse);

date = saisieNaissance();
(*f).naissance = date;
}
238
exemple d'utilisation de ces fonctions : une fonction qui permet de visualiser le
contenu de la structure, et un programme principal qui manipule ces fonctions :
239
Rcursivit
http://www.u-picardie.fr/~furst/docs/3-Recursivite.pdf
240
241
242
243
244
245
246
247
248
249
Algorithmes de tri
Un algorithme de tri est un algorithme qui permet d'organiser une collection d'objets selon un ordre
dtermin. Les objets trier font donc partie d'un ensemble muni d'une relation d'ordre
Christophe Rapine Christophe Thomas, http://www.g-scop.inpg.fr/~rapinec/Algorithmique/Documents/cours9.pdf
Nicolas Delestre et Michel Mainguenaud, http://www.greyc.ensicaen.fr/ensicaen/CoursEnLigne/AlgoTri.pdf
http://fr.wikipedia.org/wiki/Algorithme_de_tri
250
251
252
253
procdure TriBulles (E/S t : Tableau[0..MAX] d'Entiers,
nbElements : Naturel)
var i,k : Naturel
dbut
pour i 0 nbElements-1 faire
pour k 1 nbElements-1 faire
si t[k]<t[k-1] alors echanger(t[k],t[k-1])
FinSi
FinPour
FinPour
FinProc
Nombre de comparaison est de : (n) *(n-1)
(pire des cas) ->
254
opt
Nombre de comparaison est de : n + (n-1)+ (n-2) 1 = n*(n+1)/2
procdure TriBulles (E/S t : Tableau[0..MAX] d'Entiers,
nbElements : Naturel)
var i,k : Naturel
dbut
pour i 0 nbElements-1 faire
pour k 1 nbElements-1-i faire
si t[k]<t[k-1] alors echanger(t[k],t[k-1])
FinSi
FinPour
FinPour
FinProc
255
Optimisation du tri bulles
256
Tri par minimum successif ou par
slection
257
258
259
Tri par insertion
chaque itration
Retrait de llment suivant dans la portion non trie du tableau
Insertion de cet lment sa place dans la portion trie du
tableau
260
Dcalage pour insertion
partir de llment suprieur
Algorithme de tri par insertion
261
262
Manipulation des fichiers
263
264
265
266
267
268
269
Var f :FichierTexte

En cration : f ouvrir( nomFichier, CREATION )

cre d'un nouveau fichier avec le nom du fichier, son
emplacement sur le support, positionne la tte d'E/S sur le premier
caractre de la premire ligne, et renvoie l'identifiant du fichier ou le nom
logique: f,

En consultation : f ouvrir(nomFichier, LECTURE )

ouverture du fichier existant ayant pour nom nomFichier en
le protgeant contre toute modification, positionne la tte d'E/S sur
le premier caractre de la premire ligne, et renvoie le nom logique:f,

En extension : f ouvrir(nomFichier, AJOUT )
ouverture du fichier existant ayant pour nom nomFichier et
positionne la tte d'E/S sur le dernier caractre de la dernire ligne,
et renvoie le nom logique : f
270
271
272
Exemple de copie de fichier
Procdure copie( E source : Chaine, E dest :Chaine )
var fS, fD : Fichier Texte.
c : Caractre
Debut
fS ouvrir( source, LECTURE )
fD ouvrir( dest, ECRITURE )
TantQue Non( fdf( fS) ) Faire
lire( fS, c )
ecrire( fD, c )
FinFaire
fermer( fS )
fermer( fD )
Fin
273
Fichier texte avec C
274
275
276
277
Exemple
278
fic = fopen ( nom_fic , r);
279
Rsultat:
280
281

Anda mungkin juga menyukai