-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtabfonc.tex
167 lines (135 loc) · 3.18 KB
/
tabfonc.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
% !TEX encoding = IsoLatin9
%%%%%%%%%%%%%%%%%%%%% SECTION 1
\section{Passage d'un tableau en argument}
\begin{frame}
\begin{columns}
\column{4.8cm}
\tableofcontents[currentsection,hideothersubsections]
\column{7cm}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Passage d'un tableau en argument}
\begin{itemize}
\setlength\itemsep{1em}
\item Pour un tableau à une dimension, on passe
le tableau et sa taille\\
\bvrb|£textitµtype_retour nom_fonction§(float £textitµTab§[N], int n);|
\item Pour un tableau à deux dimensions :\\
\bvrb|£textitµtype_ret nom_fonct§(float £textitµTab§[N1][N2], int n1, int n2);|
\end{itemize}
\begin{alertblock}{}
\Verb|N|, \Verb|N1| et \Verb|N2| ne sont \red{pas}
des variables, ce sont des expressions constantes ou des
identificateurs pour le précompileur via un
\bvrb|#define|.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Exemple}
\begin{columns}
\column{0.65\textwidth}
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
#define N1 3
#define N2 2
void affiche(int T[N1][N2], int n1, int n2);
int main() {
int Tab[N1][N2]={1,2,3,4,5,6};
affiche(Tab,N1,N2);
}
void affiche(int T[N1][N2], int n1, int n2)
{
int i,j;
for (i=0 ; i < n1 ; i++) {
for (j=0 ; j < n2 ; j++) {
printf("%d\t",Tab[i][j]);
}
printf("\n");
}
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\column{0.3\textwidth}
Qu'affiche le programme ?
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Tolérance}
\begin{block}{}
L'indication de la taille de la première dimension est facultatif.
\end{block}
\begin{itemize}
\setlength\itemsep{1em}
\item Tableau à une dimension :\\
\bvrb|£textitµtype_retour nom_fonction§(float £textitµTab§[], int n);|
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
void affiche(int T[], int n);
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\item Pour un tableau à deux dimensions :\\
\bvrb|£textitµtype_ret nom_fonct§(float £textitµTab§[][N2], int n1, int n2);|
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
void affiche(int T[][2], int n1, int n2);
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Tableau entrée/sortie}
\begin{block}{}
Un tableau est un cas particulier d'argument
qui peut être modifié.
C'est un passage par référence (voir cours sur les pointeurs).
\end{block}
\begin{alertblock}{}
Si le tableau est modifié dans la fonction appelé, il sera
aussi modifié pour la fonction appelante.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]
\frametitle{Exemple}
\begin{columns}
\column{0.65\textwidth}
\begin{codeblock}{}
\vspace{-.3cm}
\lstset{escapeinside={§§}}
\lstset{basicstyle=\scriptsize}
\begin{codeC}
#define N 3
void affiche(int Tab[], int n);
void init0 (int Tab[],int n);
int main() {
int T[N]={1,2,3};
affiche(T,N);
init0(T,N);
affiche(T,N);
}
void init0 (int Tab[],int n)
{
int i;
for (i=0 ; i < n ; i++) {
Tab[i]=0;
}
}
\end{codeC}
\vspace{-.3cm}
\end{codeblock}
\column{0.3\textwidth}
Qu'affiche le programme ?
\end{columns}
\end{frame}