-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfonctions.tex
360 lines (327 loc) · 9.06 KB
/
fonctions.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
% !TEX encoding = IsoLatin9
%%%é%%%%%%%%%%%%%%%%%% SECTION 1
\section{Les fonctions}
\begin{frame}
\begin{columns}
\column{4.8cm}
\tableofcontents[currentsection,hideothersubsections]
\column{7cm}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Introduction}
\begin{itemize}
\setlength\itemsep{1em}
\item La résolution d'un problème informatique
peut conduire à la résolution de plusieurs problèmes
plus élémentaires.
\begin{itemize}
\item Exemple des traitements des tableaux
\end{itemize}
\item Idée :
\begin{itemize}
\item Identifier ces traitements élémentaires
pour la résolution du problème initial.
\item Construire des petits programmes pour chacun
des traitements élémentaires (et les \red{tester}).
\item Ecrire un programme final simple qui utilise
les programmes élémentaires comme des briques de base.
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Solution : les fonctions}
\begin{block}{}
Le langage C permet ce découpage.
C'est la programmation modulaire.
\end{block}
\begin{itemize}
\item Permet de découper un traitement en autant
de traitements élémentaires qu'on le souhaite.
\item Permet d'appeler des modules existants (bibliothèque).
\item Permet de définir ses modules et de construire ses propres
bibliothèques.
\item Permet de découper un gros logiciel pour faciliter sa mise au point.
\item Evite des copier-coller de code et améliore sa visibilité.
\item Permet le travail collaboratif.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Qu'est-ce qu'une fonction ?}
\begin{alertblock}{}
Une fonction est sous-programme pouvant être
appelé dans un programme et qui effectue une
suite d'opérations.
Les opérations effectuées peuvent dépendre
de 1 ou plusieurs entrées et la fonction peut
renvoyer \red{au plus} une seule sortie (en langage C).
\end{alertblock}
\vspace{1cm}
\begin{figure}
\centering
\begin{tikzpicture} [
auto,
function/.style={diamond, draw=blue,thick,fill=blue!20,
text width = 2cm, text badly centered, rounded corners,
aspect=2},
texte/.style={text width = 2cm,text badly centered},
line/.style = { draw, thick, ->, shorten >=2pt },
node distance=4cm,
]
\node (input) [texte]{Entiers, tableaux, réels, ...};
\node (fonc) [function, right of = input] {La fonction};
\node (output) [texte, right of = fonc] {\textbf{Un} entier ou \textbf{Un} réel, ou ...};
\begin{scope}[every path/.style=line]
\path (input) -- (fonc) ;
\path (fonc) -- (output);
\end{scope}
\end{tikzpicture}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle<1>{Exemple : la fonction max}
\frametitle<2>{Terminologie}
\visible<2>{\red{\textbf{Déclaration : }}}
\begin{figure}
\centering
\begin{tikzpicture} [
auto,
function/.style={diamond, draw=blue,thick,fill=blue!20,
text width = 2cm, text badly centered, rounded corners,
aspect=2},
texte/.style={text width = 2cm,text badly centered},
line/.style = { draw, thick, ->, shorten >=2pt },
node distance=4cm,
]
\node (input) [texte]{Un entier \textbf{a}, Un entier \textbf{b}};
\node (fonc) [function, right of = input] {max};
\node (output) [texte, right of = fonc] {\textbf{Un entier} (maximum entre a et b)};
\begin{scope}[every path/.style=line]
\path (input) -- (fonc) ;
\path (fonc) -- (output);
\end{scope}
\end{tikzpicture}
\end{figure}
\visible<2>{\red{\textbf{Appel : }}}
\begin{figure}
\centering
\begin{tikzpicture} [
auto,
function/.style={diamond, draw=blue,thick,fill=blue!20,
text width = 2cm, text badly centered, rounded corners,
aspect=2},
texte/.style={text width = 2cm,text badly centered},
line/.style = { draw, thick, ->, shorten >=2pt },
node distance=4cm,
]
\node (input) [texte]{2\\3};
\node (fonc) [function, right of = input] {max};
\node (output) [texte, right of = fonc] {3};
\begin{scope}[every path/.style=line]
\path (input) -- (fonc) ;
\path (fonc) -- (output);
\end{scope}
\end{tikzpicture}
\end{figure}
\visible<2>{\red{\textbf{Définition : }}}
\begin{figure}
\centering
\begin{tikzpicture} [
auto,
function/.style={diamond, draw=blue,thick,fill=blue!20,
text width = 2cm, text badly centered, rounded corners,
aspect=2},
texte/.style={text width = 2cm,text badly centered},
line/.style = { draw, thick, ->, shorten >=2pt },
node distance=4cm,
]
\node (input) [texte]{Un entier \textbf{a}, Un entier \textbf{b}};
\node (fonc) [function, right of = input, text width = 3cm, inner sep = 0pt] {{\footnotesize si a<b, renvoyer b\\sinon renvoyer a}};
\node (output) [texte, right of = fonc] { \textbf{Un entier} (maximum entre a et b)} ;
\begin{scope}[every path/.style=line]
\path (input) -- (fonc) ;
\path (fonc) -- (output);
\end{scope}
\end{tikzpicture}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{En langage C}
\begin{itemize}
\setlength\itemsep{1em}
\item Déclaration (le \red{prototype} de la fonction) :\\
\bvrb|£textitµtype_retour nom_fonction§(£textitµarguments§);|\\
\item Appel :\\
\bvrb|£textitµnom_fonction§(£textitµliste_valeurs§);|\\
\item Définition :\\
\bvrb|£textitµtype_retour nom_fonction§(£textitµarguments§)|\\
\bvrb|{|\\
\bvrb|£textitµdéclaration de variables locales§|\\
\bvrb|£textitµbloc d'instructions§|\\
\bvrb|return £textitµvaleur_retour§;|\\
\bvrb|}|
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{La fonction \Verb|max|}
\begin{itemize}
\setlength\itemsep{1em}
\item Déclaration :\\
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
int max (int a, int b);
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\item Appel :\\
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
int maxi ;
int n ;
scanf("%d",&n);
maxi = max(n,3); //Appel de la fonction max
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\item Définition :\\
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
int max (int a, int b)
{
if (a<b) return(b) ;
else return(a) ;
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Quelque règles}
\begin{itemize}
\setlength\itemsep{1em}
\item Une fonction peut être définie n'importe où dans le programme ;
\item Une fonction doit être déclarée avant d'être déclarée avant d'être appelée pour
la première fois ;
\item Une fonction peut être appelée dans le \bvrb|main| ou dans
une autre fonction ;
\item On ne peut \red{pas} définir une fonction dans une autre fonction ;
\item Une fonction peut prendre autant d'argument que l'on souhaite
en entrée mais ne retour qu'un plus un élément ;
\item Les règles sur les noms de fonctions sont les mêmes que
sur les noms de variables.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Tolérance}
\begin{block}{}
Si l'on définit une fonction avant de l'appeler, on peut éventuellement
se passer de la déclarer.
\end{block}
\begin{columns}
\column{.4\textwidth}
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
//Déclaration-Définition
int max (int a, int b) {
if (a<b) return (b) ;
else return (a) ;
}
//Fonction principale
int main() {
int maxi, n ;
scanf("%d",&n);
maxi = max (n,3);
printf("%d\n",maxi);
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\column{.15\textwidth}
{\centering {\footnotesize Equivalent
$$\Leftrightarrow$$}}
\column{.4\textwidth}
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
//Déclaration
int max (int a, int b) ;
//Fonction principale
int main() {
int maxi, n ;
scanf("%d",&n);
maxi = max (n,3);
printf("%d\n",maxi);
}
//Définition
int max (int a, int b) {
if (a<b) return (b) ;
else return (a) ;
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fonction appelée / Fonction appelante}
\begin{columns}
\column{0.45\textwidth}
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
//Déclaration des fonctions
int f(int a);
int g(int b);
//Fonction principale
int main() {
int z = 2 ;
z = g(z) + f(z) ;
printf("%d\n",z);
}
//Définition des fonctions
int f (int a) {
return (a+2) ;
}
int g (int b) {
return ( 2*f(b) ) ;
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\column{0.5\textwidth}
\begin{block}{}
Une fonction peut àtre appelée de n'importe
quelle fonction y compris dans le
\bvrb|main|
\end{block}
\begin{itemize}
\item Fonctions appelantes :
\begin{itemize}
\item \Verb|main| appelle \Verb|g| et \Verb|f|
\item \Verb|g| appelle \Verb|f|
\end{itemize}
\item Fonctions appelées :
\begin{itemize}
\item \Verb|f| est appelée par \Verb|main| et \Verb|g|
\item \Verb|g| est appelée par \Verb|main|
\end{itemize}
\end{itemize}
\end{columns}
\end{frame}