Permutation de 2 octets #inclu de de< < s t d i o . h> i n t main()
{ u n si si g ne ne d i n t u ,
te m p ; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc anf (”% (”%u” , &u ); temp = u & 255; temp <<= 8 ; u >>= 8 ; u | = t em em p ; p r i n t f ( ” Ap A p re re s p e rm r m ut u t at a t io i o n c i r c u l a i r e d es e s o c t et e t s , c e t t e v a l eu eu r e s t ” ”%u ”%u \ n ” , u ) ; return 0 ; }
Permutation de 4 octets #inclu de de< < s t d i o . h> i n t main()
{ unsigned long l ; unsigned unsigned unsig ned s hort o c t e t1 t1 ,
o c t e t2 t2 , o c t e t3 t3 , o c t e t 4 ; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; s c a n f ( ”% ”%l u ” , & l ) ; o c t e t4 t4 = 2 5 5 & l ; l >>= 8 ; o c t e t3 t3 = 2 5 5 & l ; l >>= 8 ; o c t e t2 t2 = 2 5 5 & l ; l >>= 8 ; o c t e t1 t1 = 2 5 5 & l ; l = o c t e t4 t4 ; l <<= 8 ; l |= o c t e t 3 ; l <<= 8 ; l |= o c t e t 2 ; l <<= 8 ; l |= o c t e t 1 ; p r i n t f ( ” Ap A p re re s p e rm r m ut u t at a t io i o n c i r c u l a i r e d es e s o c t et e t s , c e t t e v a l eu eu r e s t ” ”%lu \ n ” , l ) ; return 0 ;
}
A.1.5 A.1.5
Morcea Morceaux ux ch choisi oisiss
Pi` eces eces de monnai mon naie e #inclu de de< < s t d i o . h> #define EPS 0 . 0 0 1 i n t main()
{ float valeur ; int nbPieces ;
p r i n t f ( ” S a i s s e z l a somme : ” ) ; s c a n f ( ”% ”% f ” , & v a l e u r ) ; p r i n t f ( ” Po Po u r l a p ay ay er er , v ou ou s a ur u r e z b e so s o i n d e : \ n” ); / ∗−−−−−−− ∗−−−−−−−−∗ / n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ 0 . 5 ; p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 5 e u r o s \ n ” , n b P i e c e s ) ; v a l e u r −= n b P i e c e s ∗ 0 . 5 ; / ∗−−−−−−− ∗−−−−−−−−∗ / n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ 0 . 2 ; p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 2 e u r o s \ n ” , n b P i e c e s ) ; v a l e u r −= n b P i e c e s ∗ 0 . 2 ; ∗−−−−−−−−∗ / / ∗−−−−−−− n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ 0 . 1 ; p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 1 e u r o s \ n ” , n b P i e c e s ) ; v a l e u r −= n b P i e c e s ∗ 0 . 1 ; / ∗−−−−−−− ∗−−−−−−−−∗ / n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ 0 . 0 5 ; p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 0 5 e u r o s \ n ” , n b P i e c e s ) ; v a l e u r −= n b P i e c e s ∗ 0 . 0 5 ; / ∗−−−−−−− ∗−−−−−−−−∗ /
128
n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 0 2 v a l e u r −= n b P i e c e s ∗ 0 . 0 2 ; ∗−−−−−−−−∗ / / ∗−−−−−−− n b Pi P i e c es e s = ( v a l e u r + EP EPS )/ )/ p r i n t f ( ”% ”%d p i e c e ( s ) d e 0 . 0 1 v a l e u r −= n b P i e c e s ∗ 0 . 0 1 ; return 0 ;
0.02 ; e u r o s \n ” , n b P i e c e s ) ; 0.01 ; e u r o s \n ” , n b P i e c e s ) ;
}
Dernier bit #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned s hort s ,
s S a ns n s D e r ni ni e r Bi Bi t , d e r n i e r B i t ; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc an f (”%hu” (”%hu” , &s ) ; s S a n s De De r n i e rB rB i t = ( s & 2 5 4 ) ; d e r n i e rB rB i t = ( s & 1 ) ; d e r n i e rB rB i t = ˜ d e r n i e r B i t & 1 ; s = sSansDernierBit | dernierBit ; p r i n t f ( ” Ap A p re re s m o d i f ic i c a t i o n d u d e r n i e r b i t , c e t t e v a l e ur ur e s t ” ”%hu\ ”%hu \ n ” , s ) ; return 0 ;
}
Permutation sans variable temporaire #inclu de de< < s t d i o . h> i n t main()
{ int a , b ;
p r i n t f ( ” S a i s s i s s e z l e s v a l eu e u r s d e 2 v a r i a bl b l e s : \ nA = ” ); sc an f (”%d” (”%d” , &a ) ; / / n ot ot on on s x c e t t e v al a l e ur ur , a = x p r i n t f ( ”B ”B = ” ) ; ot on on s y c e t t e v al a l e ur ur , b = y sc anf (”% (”%d” , &b ); / / n ot a ˆ = b ; / / a = xˆ xˆy , b = y ˆ y , b = y ˆ a = yˆ y ˆ xˆ xˆ y = x b ˆ= a ; / / a = x ˆy ˆy ˆx ˆx = y , b = y a ˆ = b ; / / a = x ˆy p r i n t f ( ” Ap A p re re s p er er mu mu ta ta ti t i on o n , l e s v a l e u rs r s d es e s v a r i a b l e s s o nt nt : ” ” \nA = %d \nB = %d \ n ” , a , b ) ; return 0 ; }
129
A.2
Traitem raitemen ents ts conditi conditionn onnel el
A.2. A.2.1 1
Pris Prise e en Main Main
Ma jorit or it´ ´ e #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned s hort age ;
p r i n t f ( ”T ”T ’ a s q u e l a g e ? \ n” ) ; sc an f (”%hu” (”%hu” , &age ) ; i f ( a g e >= 1 8 ) p r i n t f ( ”T ”T ’ e s m a j e ur ur . ” ) ; else
p r i n t f ( ”T ”T ’ e s m i n eu eu r . ” ) ; p r i n t f ( ” \ n” ) ; return 0 ; }
Valeur absolue #inclu de de< < s t d i o . h> i n t main()
{ float a ;
p r i n t f ( ” S a i s i s s e z u n e v a l e ur u r \ n” ); sc anf (”%f” (”%f” , &a ); p r i n t f ( ” La La v a l eu e u r a b so s o l ue u e d e %f %f e s t ” , a ) ; i f ( a < 0 ) a = −a ; p r i n t f ( ”% ”% f . \ n ” , a ) ; return 0 ; }
Admissions #inclu de de< < s t d i o . h> i n t main()
{ f l o a t note ;
p r i n t f ( ” S a i s i s s e z v o tr t r e n ot o t e\ e \ n” ); s c a n f ( ”% ”% f ” , &n o t e ) ; i f ( note < 8 ) p r i n t f ( ” A j o u r ne ne ” ) ; i f ( note >= 8 && n o t e < 1 0 ) p r i n t f ( ” R a t t r a p a ge ge ” ) ; i f ( note >= 1 0 ) p r i n t f ( ” Ad Ad mi mi s ” ) ; p r i n t f ( ” \ n” ) ; return 0 ; }
Assurance #inclu de de< < s t d i o . h> i n t main()
{ f l o a t domm dommag ages es ,
fra nch is e , remboursement remboursement ; p r i n t f ( ” S a i s i s s e z l e m on on ta ta nt nt d e s do mm mma ge ges\ n” ); sc an f (”%f (”%f ” , &dommag dommages) es) ; f r a n c h i s e = d om om ma ma ge ge s ∗ 0 . 1 ; i f ( f r a n c h i s e > 4 0 0 0 ) franchise = 4000; remboursement remboursement = dom domma mage gess − f r a n c h i s e ; p r i n t f ( ” Mo Mo n t a n t d e l a f r a n c h i s e : % . 2 f \ n ” , f r a n c h i s e ) ; p r i n t f ( ” M on on ta ta nt nt r e mb mb o ur ur s e : % .2 .2 f \ \ n” , remboursement remboursement ); return 0 ; }
Valeurs distinctes parmi 2
130
#inclu de de< < s t d i o . h> i n t main()
{ int a , b ;
p r i n t f ( ” S a i s i s s e z d e ux ux v a l e u rs rs : \ n a = ” ) ; sc an f (”%d” (”%d” , &a ) ; p r i n t f ( ”b ”b = ” ) ; sc anf (”% (”%d” , &b ); i f ( a == b ) p r i n t f ( ” Vo Vo us us a v ez ez s a i s i d eu eu x f o i s l a meme v a l e u r . ” ) ; else
p r i n t f ( ” Vo Vo u s a ve v e z s a i s i d e ux ux v a l e u rs rs d i s t i n c t e s . ” ) ; p r i n t f ( ” \ n” ) ; return 0 ; }
Plus petite valeur parmi 3 #inclu de de< < s t d i o . h> i n t main()
{ int a , b ,
c , min ; p r i n t f ( ” S a i s i s s e z t r o i s v a l eu eu r s : \ n a = ” ) ; sc an f (”%d” (”%d” , &a ) ; p r i n t f ( ”b ”b = ” ) ; sc anf (”% (”%d” , &b ); printf (”c = ” ); sc an f (”%d” (”%d” , &c ) ; min min = a ; i f ( b < min) min = b; i f ( c < min) m in in = c ; p r i n t f ( ” La La p l us u s p e t i t e d e c e s v a l e u r s e s t %d %d . ” , mi n ) ; p r i n t f ( ” \ n” ) ; return 0 ; }
Recherche de doublons #inclu de de< < s t d i o . h> i n t main()
{ int a , b ,
c; p r i n t f ( ” S a i s i s s e z t r o i s v a l eu eu r s : \ n a = ” ) ; sc an f (”%d” (”%d” , &a ) ; p r i n t f ( ”b ”b = ” ) ; sc anf (”% (”%d” , &b ); printf (”c = ” ); sc an f (”%d” (”%d” , &c ) ; i f (a == b | | a == c | | b == == c ) p r i n t f ( ” I l y a d es e s d ou ou bl bl on o n s d a ns ns l e s v a l eu e u r s q u e v o us us a ve ve z s a i s i e s ” ) ;
else
p r i n t f ( ” Vo Vo u s a ve ve z s a i s i p r i n t f ( ” \ n” ) ; return 0 ;
trois
v a l e u rs rs d i s t i n c t e s ” ) ;
}
Valeurs distinctes parmi 3 #inclu de de< < s t d i o . h> i n t main()
{ int a , b ,
c , n bd ; printf(”Saisissez trois sc an f (”%d” (”%d” , &a ) ; p r i n t f ( ”b ”b = ” ) ; sc anf (”% (”%d” , &b ); printf (”c = ” ); sc an f (”%d” (”%d” , &c ) ; i f (a == b && a == c ) nbd = 1;
else i f (a == b
v a l eu eu r s : \ n a = ” ) ;
| | a == c | | b == == c )
nbd = 2;
131
else
nbd = 3; p r i n t f ( ” I l y a %d %d v a l e u r ( s ) return 0 ;
d i s t i n c t e ( s ) . \ n” , nbd nbd );
}
ax + b = 0 #inclu de de< < s t d i o . h> i n t main()
{ double a , b , x ;
p r i n t f ( ” S a i s i s s e z l e s c o e f f i c i e n t s d e l ’ e qu q u at a t io i o n ( E ) : a x + b = 0\ 0\ n a = ” ) ; sc anf (”%l (”%l f ” , &a ); p r i n t f ( ”b ”b = ” ) ; s c a n f ( ”% ”% l f ” , &b ) ; i f ( a ! = 0 ) { x = −b/a ; p r i n t f ( ” La La s o l u t i o n d e ( E) E) e s t x = %l %l f ” , x ) ; } else
{ i f (b == == 0)
p r i n t f ( ” To To u t r e e l
e s t s o l u t i o n d e ( E) E) ” ) ;
else
p r i n t f ( ” ( E) E) n ’ a p as as d e s o l u t i o n ” ) ; } p r i n t f ( ” . \ n” ); return 0 ; }
ax2 + bx + c = 0 #inclu de de< < s t d i o . h> #inclu de de< i n t main()
{ double a , b ,
c , x1 , x2 , d e l t a ; p r i n t f ( ” S a i s i s s e z l e s c o e f f i c i e n t s d e l ’ e qu q u at a t io io n (E ) : ” ” a x ˆ 2 + b x + c = 0\ 0\ n a = ” ) ; sc anf (”%l (”%l f ” , &a ); p r i n t f ( ”b ”b = ” ) ; s c a n f ( ”% ”% l f ” , &b ) ; printf (”c = ” ); sc anf (”%l (”%l f ” , &c ); i f ( a ! = 0 ) { d e l t a = b∗ b∗b − 4∗ a∗ c ; i f ( d e l t a > 0 ) { x1 = ( sqr t ( del ta ) − b ) / ( 2 ∗ a ) ; x 2 = (− (− s q r t ( d e l t a ) − b ) / ( 2 ∗ a ) ; p r i n t f ( ” L es es s o l u t i o n s d e ( E ) s o nt n t % l f e t %f %f ” , x1 , x2 ) ; } else
{ i f ( d e l t a == 0 )
{ x 1 = (− (− b ) / ( 2 ∗ a ) ; p r i n t f ( ” La La s o l u t i o n d e ( E ) e s t x = %l %l f ” , x 1 ) ; } else
p r i n t f ( ” (E ( E ) n ’ a p as as d e s o l u t i o n r e e l l e ” ) ; } } else
{ i f ( b ! = 0 )
{ x1 = −c / b ; p r i n t f ( ” La La s o l u t i o n d e ( E ) e s t x = %l %l f ” , x 1 ) ; } else
{ i f ( c == 0 )
p r i n t f ( ” To To u t r e e l
e s t s o l u t i o n d e ( E) E) ” ) ;
else
132
p r i n t f ( ” (E ( E ) n ’ a p as as d e s o l u t i o n ” ) ; } } p r i n t f ( ” . \ n” ); return 0 ; }
A.2. A.2.2 2
Swit Switcch
Calculatrice #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> i n t main()
{ f l o a t g au au ch ch e , d r o i t e , i n t e r re re u r = 0 ; char o p e r a t e u r ;
resul tat ;
p r i n t f ( ” O pe pe ra ra nd nd e g a uc uc h e : ” ) ; sc anf (”%f” (”%f” , &gauche ); getchar (); p r i n t f ( ” O p er er a te te u r : ” ) ; s c a n f ( ”% ”%c ” , & o p e r a t e u r ) ; p r i n t f ( ” O pe pe ra ra nd nd e d r o i t : ” ) ; s c a n f ( ”% ”%f ” , & d r o i t e ) ; getchar (); switch ( o p e r a t e u r ) { case ’ + ’ : r e s u l t a t = g au au ch ch e + case ’− ’ : r e s u l t a t = ga ga uc uc he he − case ’ / ’ : r e s u l t a t = g a uc uc he he / case ’ ∗ ’ : r e s u l t a t = ga ga uc uc he he ∗ d e f a u l t : e r re r e ur ur = 1 ; } i f ( e r r e u r ) p r i n t f ( ” S a i s i e e r r o n ne ne e . \ n” );
droite ; droite ; d r o i te te ; droite ;
break ; break ; break ; break ;
else
p r i n t f ( ” % . 2 f %c %c % . 2 f = %f %f \ n ” , g au au ch ch e , o p e ra r a t e ur ur , d r o i t e , 0;
return
}
A.2. A.2.3 3
Heur Heures es et da date tess
Op´ erations eratio ns sur les heures #inclu de de< < s t d i o . h> i n t main()
{ i n t heureDebut heureDebut ,
heureFin , minuteDe minuteDebut but , minuteFin , h e u r e E c a r t , m i n u t e E c ar ar t ; p r i n t f ( ” H e ur ur e d e bu bu t ( h h :m :mm) ? ” ) ; sc an f (”%d:%d” (”%d:%d” , &heureDebut , &minuteDebut ) ; p r i n t f ( ” H e ur ur e f i n ( hh hh : mm) ? ” ) ; sc anf (”% (”%d:%d” d:%d” , &heureFin , &minuteFin ); h e u r e E c a r t = h e u r e F i n − heureDebut ; m i n u t e E c a r t = m i n u t e F i n − minuteDebut ; i f ( m i n u t e E c a r t < 0 ) { h e u r e E c a r t −−; −−; m i n u t e E c a rt rt += 6 0 ; } p r i n t f ( ” D ur ur ee ee d e l ’ i n t e r v a l l e : % 2. 2. 2d 2d : % 2. 2. 2 d\ d\ n” , h e u re re E c a rt rt , m i n ut ut e E ca ca r t ) ; return 0 ; }
Le jour jou r d’apr` d’a pr` es es #inclu de de< < s t d i o . h> i n t main()
{ int jour ,
m o is is , a n ne ne e , n b J ou ou r s , e r re re u r = 0 ; p r i n t f ( ” S a i s i s s e z l a d a te te : ( j j /mm/ a aa aa a ) ” ) ; sc an f (”%d (”%d/%d/%d d/%d” ” , &jour , &mois , &annee ) ;
133
resul tat );
switch ( m o i s )
{ case 1 :
c a s e 3 : case 5 : case 7 : case 8 : case 10 : c a s e 1 2 : n b J o u r s = 3 1 ; break ; case 4 : c a s e 6 : case 9 : case 11 : n b J o u r s = 3 0 ; break ; case 2 : i f ( a n n e e % 4 | | ! ( a nn n n ee ee % 1 0 0 ) ) nbJours = 28; else
nbJours = 29; break ; default :
e r re re u r = 1 ; } i f ( e r r e u r )
{ p r i n t f ( ” S a i s i e e r r o n n e e : % 2. 2. 2 d/ d/ %2 %2 .2 .2 d /% /% 4. 4. 4 d\ d\ n” , j o u r , mo is , a nn ee ) ; return −1; } p r i n t f ( ” L e l e n de de m a i n d u % 2 .2 .2 d /% /% 2. 2. 2 d/ d/ %4 %4 .4 .4 d e s t j o u r , mo is , a nn ee ) ; j o u r ++; i f ( j o u r == n b J o u rs rs + 1 ) { j o u r = 1 ; mois++; i f ( m o i s == 1 3 ) { mois = 1; annee++; } } p r i n t f ( ” e s t l e % 2. 2. 2 d/ d/ %2 %2 .2 .2 d /% /% 4. 4. 4 d .\ .\ n” , j o u r , mo is , a nn ee ) ; return 0 ;
le ” ,
}
A.2. A.2.4 4
Echi Echiqu quie ierr
Couleurs des cases #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned s hort i ,
j; p r i n t f ( ” S a i s i s s e z l e s c oo o o rd r d on o n ne n e es e s d e l a c a se s e : \ n” ); printf (”i = ” ); sc anf (”% (”%hu” , &i ); printf (”j = ” ); sc anf (”% (”%hu” , &j ); p r i n t f ( ” La La c a s e (%hu , %hu ) e s t ” , i , j ) ; i f ( ( i + j ) % 2 == 0 ) print f (”noire ” );
else
pri ntf (”blanche” ); p r i n t f ( ” . \ n” ); return 0 ; }
Cavalier #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> i n t main()
{ unsigned unsig ned s hort i D , j D , i A ,
jA ; p r i n t f ( ” S a i s i s s e z l e s c o or o r do d o nn n n e es es d e l a c a s e d e d ep e p a rt rt : \ n” ); printf (”i = ” ); sc an f (”% (”%hu” , &iD ) ; printf (”j = ” ); sc an f (”% (”%hu” , &jD ) ; p r i n t f ( ” S a i s i s s e z l e s c oo o o rd r d on o n ne n e es e s d e l a c a se s e d e l a c a se s e d ’ a r r i v ee e e : \ n” ) ; printf (”i = ” ); sc an f (”%hu” (”%hu” , &iA ) ; printf (”j = ” ); sc an f (”% (”%hu” , &jA ) ;
134
p r i n t f ( ” L e mo uv uv em em en ent d e c a v a l i e r (%hu , %hu ) −> (%hu , %hu ) e s t ” , iD, jD, iA , jA); i f ( ( a bs bs ( i A − i D ) == 1 && a b s ( j A − j D ) == 2 ) | | ( a b s ( i A − i D ) == 2 && a b s ( j A − j D ) == == 1 ) ) print f (”va lide” ); else
printf (”invalide” ); p r i n t f ( ” . \ n” ); return 0 ; }
Autre Au tress pi`eces ec es #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> i n t main()
{ unsigned unsig ned s hort i D , jD , i A , j A ,
piece ; p r i n t f ( ” Q u e l l e p i e c e s o u h a it i t e z− z −v ou o u s d e p l a c e r ? n” n” ) ; p r i n t f ( ” 0 = C a v a l i e r\ r \ n” ); p r i n t f ( ” 1 = T ou ou r\ r\ n” ); p r i n t f ( ” 2 = F ou ou \ n” ); printf (”3 = Damen” ); p r i n t f ( ” 4 = R oi oi \ n” ); sc anf (”% (”%hu” , &pie ce ); p r i n t f ( ” S a i s i s s e z l e s c o or o r do d o nn n n e es es d e l a c a s e d e d ep e p a rt rt : \ n” ); printf (”i = ” ); sc an f (”% (”%hu” , &iD ) ; i f ( iD <1 | | iD >8) { p r i n t f ( ” c o o rd r d o nn nn e e i n v a l i d e \ n” ); return 1 ; } printf (”j = ” ); sc an f (”% (”%hu” , &jD ) ; i f ( jD <1 | | jD >8) { p r i n t f ( ” c o o rd r d o nn nn e e i n v a l i d e \ n” ); return 1 ; } p r i n t f ( ” S a i s i s s e z l e s c o or o r do d o nn n n e es es d e l a c a s e d ’ a r r i v e e : \ n” ); printf (”i = ” ); sc an f (”%hu” (”%hu” , &iA ) ; i f ( iA <1 | | iA >8) { p r i n t f ( ” c o o rd r d o nn nn e e i n v a l i d e \ n” ); return 1 ; } printf (”j = ” ); sc an f (”% (”%hu” , &jD ) ; i f ( jD <1 | | jD >8) { p r i n t f ( ” c o o rd r d o nn nn e e i n v a l i d e \ n” ); return 1 ; } pr in tf (”Le mouv mouvem emen entt (%hu, (%hu, %hu) −> (%hu , %hu ) e s t ” , iD, jD, iA , jA); switch ( p i e c e ) { case 0 : i f ( ( a bs b s ( i A − i D ) == 1 && a b s ( j A − j D ) == 2 ) | | ( a b s ( i A − i D ) == 2 && a b s ( j A − j D ) == == 1 ) ) print f (”va lide” ); else
printf (”invalide” ); case 1 : i f ( i A == == i D
| | j A == == j D ) print f (”va lide” );
else
printf (”invalide” ); case 2 : i f ( a b s ( i A − i D ) ==
a bs bs ( j A − j D ) )
print f (”va lide” ); else
printf (”invalide” ); case 3 : i f (iA == iD
| | jA == jD | | a b s ( i A − i D ) == print f (”va lide” );
a bs bs ( j A − j D ) )
135
else
printf (”invalide” ); case 4 : i f ( a b s ( i A − iD ) <= 1 && a bs( jA − jD ) <= 1 )
print f (”va lide” ); else
printf (”invalide” ); p r i n t f ( ” S ys ys te te m E r r or or . I t i s r ec ec om om me me nd nd e d t h a t ” ” y ou ou f o r ma ma t y o ur ur h a rd rd d i s k . ” ) ; return 1 ;
default :
} p r i n t f ( ” . \ n” ); return 0 ; }
A.2.5 A.2.5
Inter Interv valles alles et et recta rectangl ngles es
Intervalles Inter valles bien bie n form´ for m´ es es #inclu de de< < s t d i o . h> i n t main()
{ i n f , s up up ; p r i n t f ( ” S a i s i r un i n t e r v a l l e ( [ x x , x x ] ) sc anf (”% (”%f , %f ] ” , &inf , &sup ); p r i n t f ( ” Ce Ce t i n t e r v a l l e e s t ” ) ; i f ( i n f > s u p ) p r i n t f ( ” m al al ” ) ; float
[ ” );
else
print f (”bien”); p r i n t f ( ” f o rm rm e . \ n” ); return 0 ; }
Appartenance Appart enance ` a un intervalle #inclu de de< < s t d i o . h> i n t main()
{ i n f , s up up , v a l e u r ; p r i n t f ( ” S a i s i r un i n t e r v a l l e ( [ x x , x x ] ) sc anf (”% (”%f , %f ] ” , &inf , &sup ); float
[ ” );
i f ( i n f > s u p )
{ p r i n t f ( ” Ce Ce t i n t e r v a l l e −1;
e s t m a l f or or me me . \ n” );
return
} p r i n t f ( ” S a i s i r u n e v a l e ur ur : ” ) ; s c a n f ( ”% ”% f ” , & v a l e u r ) ; p r i n t f ( ”% ”% f ” , v a l e u r ) ; i f ( i n f <= v a l e u r && && v a l e u r <= s u p ) print f (”appartient” ); else
p r i n t f ( ”n ”n ’ a p p a r t i e n t p a s ” ) ; p r i n t f ( ” a l ’ i n t e r v a l l e [ % f , % f ] . \ n ” , i n f , s up up ) ; return 0 ; }
Intersections d’intervalles #inclu de de< < s t d i o . h>
AFFI AFFICH CHE E INT( INT( in f , sup ) \ p r i n t f ( ” [% [% f , % f ] ” , i n f , s up up ) i n t main()
{ i n f 1 , s up up 1 , i n f 2 , s up up 2 , i n f I n t e r s e c t i o n , s u p I n t e r se se c t i o n ; i n t i n c l u s i o n 1 , i n c l u s i o n 2 , i n t e r s ec e c t i o n N o nV nV i d e ; p r i n t f ( ” S a i s i r un i n t e r v a l l e ( [ x x , x x ] ) [ ” ) ; sc anf (”% (”%f , %f ] ” , &inf1 , ¹ ); i f ( i n f 1 > s u p 1 ) { p r i n t f ( ” Ce Ce t i n t e r v a l l e e s t m a l f or or me me . \ n” ); float
136
return −1; } p r i n t f ( ” S a i s i r un i n t e r v a l l e ( [ x x , x x ] ) [ ” ) ; sc anf (”% (”%f , %f ] ” , &inf2 , ² ); i f ( i n f 2 > s u p 2 ) { p r i n t f ( ” Ce Ce t i n t e r v a l l e e s t m a l f or or me me . \ n” ); return −1; } i n c l us u s i o n 1 = i n f 2 < i n f 1 && s u p 1 < sup2 ; i n c l us u s i o n 2 = i n f 1 < i n f 2 && s u p 2 < sup1 ; i n f I n t e r s e c t i o n = ( i n f 1 > i n f2 f 2 ) ? i n f1 f 1 : i n f2 f2 ; s u p I n t e r s e c t i o n = ( s u p 1 < s up up 2 ) ? s up up 1 : s up up 2 ; i n te t e r s ec e c t i on o n N on o n V id id e = i n f I n t e r s e c t i o n < s u p I n t e r s e c t i o n ; AFFI AFFIC CHE INT( INT( in f1 , sup1 ); i f ( i n c l u s i o n 1 ) prinf tf (” est” ); else
p r i n f t f ( ” n ’ e s t p as as ” ) ; p r i n f t f ( ” i n c l u s d an an s ” ) ; AFFI AFFIC CHE INT( INT( in f2 , sup2 ); p r i n t f ( ” \ n” ) ; AFFI AFFIC CHE INT( INT( in f2 , sup2 ); i f ( i n c l u s i o n 2 ) prinf tf (” est” ); else
p r i n f t f ( ” n ’ e s t p as as ” ) ; p r i n f t f ( ” i n c l u s d an an s ” ) ; AFFI AFFIC CHE INT( INT( in f1 , sup1 ); p r i n t f ( ” \ nL ’ i n t e r s e c t i o n d e ” ) ; AFFI AFFIC CHE INT( INT( in f1 , sup1 ); p r i n t f ( ” e t de ” ) ; AFFI AFFIC CHE INT( INT( in f2 , sup2 ); printf (” est ” ); i f ( i n t e r s e c t i o n N o n V i d e ) p r i n f t f ( ” no no n ” ) ; p r i n t f ( ” v i d e .\ . \ n” ); return 0 ; }
Pr´epro ep roce cess sseu eurr #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h>
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define #define #define #define #define
CAVALI CAVALIER ER 0 TOUR 1 FOU 2 DAME 3 ROI ROI 4
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define MAIN i n t main() \
{ / ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define FINMAIN return
0;\ } / ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ /
#define SI
i f (
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / / ∗−−−−−−−− #define ALOR ALORS S ){
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define SINON } e l s e {
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define FINSI }
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define SUIV SUIVAN ANT( T( va r ) switch ( v a r ) {
137
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define FINSUI FINSUIVAN VANT( T( d e f )
default :
d ef ef }
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define CAS ( v a l e u r ,
i n s t r u c t i o n s ) case v a le le u r : break ;
i n s t r uc uc t i o n s \
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define PIECES LIST
\ p r i n t f ( ”% ”%hu = C a v a l i e r \ n” , CAVA CAVALI LIER) ER) ; \ pr in tf (”% (”%hu = Tour Tour \ n” , TOUR) ; \ pr in tf (”% (”%hu = Fou Fou \ n” , FOU) ; \ printf (”%hu = Dame\ Dame\ n” , DAME) ; \ p r i n t f ( ”% ”%h u = R o i\ i \ n” , ROI) ROI)
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define CHEC CHECK K COOR COORD( D( i ) \ SI i <1 | | i >8 ALORS ALORS \
p r i n t f ( ” c o o rd r d o nn nn e e i n v a l i d e \ n” ); \ 1; \
return
FINSI / ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define GET VAR(A VAR(A , B) \
p r i n t f ( ”A ”A = ” ) ; \ sc an f (”%hu” (”%hu” , &B) ; \ CHECK COORD( ORD(B B) ; −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / / ∗−−−−−−−− #define PRINT VA VALID p r i n t f ( ” v a l i d e ” )
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define PRINT IN INVALID p r i n t f ( ” i n v a l i d e ” )
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define FATAL ERROR pr in tf (” System System Error .
It i s recomm recommend ended ed that ” \ ” y ou ou f o r m at at y o ur ur h a rd rd d i s k . ” ) ; \ return 1 ;
/ ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ / #define CONDI CONDITI TIONA ONAL L PRINT( PRINT( co nd ) \
SI cond ALORS \ PRINT VALID VALID ; \ SINON \ PRINT INVALID INVALID ; \ FINSI / ∗−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−∗ −∗ /
MAIN unsigned unsign ed short i D , j D , i A , j A ,
piece ; p r i n t f ( ” Q u e l l e p i e c e s o u h a it i t e z− z −v ou ou s d e p la l a c e r ? \ n” ); PIECES PIECES LIST ; sca nf (”%hu” (”%hu” , &pie ce ); p r i n t f ( ” S a i s i s s e z l e s c o or or do d o n ne ne es e s d e l a c a se s e d e d e pa pa r t : \ n” ); GET VAR( i , iD ); GET VAR( j , jD ) ; p r i n t f ( ” S a i s i s s e z l e s c o or or do d o n ne ne es e s d e l a c a se s e d ’ a r r i v e e : \ n” ); GET VAR( i , iA ); GET VAR( j , jA ) ; pr in tf (”Le mouv mouvem emen entt (%hu %hu , %hu) −> (%hu , %hu ) e s t ” , iD, jD, iA , jA); SUIV SUIVAN ANT( T( p i e c e ) CAS(CAVALIER, COND CONDIT ITIO IONA NAL L PRIN PRINT( T( ( ab s ( iA − i D ) == 1 && a b s ( j A − j D ) == 2 ) | | ( a b s ( i A − i D ) == 2 && a b s ( j A − j D ) == == 1 ) ) ; ) CAS(TOUR, COND CONDIT ITION IONAL AL PRINT( PRINT( iA == iD | | j A == == j D ) ; ) CAS(FOU,
138
COND CONDIT ITIO IONA NAL L PRI PRINT NT ( ab s ( iA − i D ) == a bs bs ( j A − j D ) ) ; ) CAS(DAME, COND CONDIT ITION IONAL AL PRIN PRINT( T( iA == iD | | jA == jD | | a b s ( i A − i D ) == a bs bs ( j A − j D ) ) ; ) CAS(ROI CAS(ROI , COND CONDIT ITIO IONA NAL L PRI PRINT NT ( ab s ( iA − iD ) <= 1 && a bs( jA − jD ) <= 1 ) ; ) FINSUIVANT(FAT FINSUIVANT( FATAL AL ERROR; ERROR; ) p r i n t f ( ” . \ n” ); FINMAIN
A.2. A.2.6 6
Nom Nombr bres es et lett lettre ress
Conversio Conver sion n num´ erique eriq ue
→ fran fr an¸ ¸cais ca is
#inclu de de< < s t d i o . h> #define AFFICHE UNITE( i ) \ i f ( i == 1 ) p r i n t f ( ” un un ” ) ; \ i f ( i == 2 ) p r i n t f ( ” d eu eu x ” ) ; \ i f ( i == 3 ) p r i n t f ( ” t r o i s ” ) ; \ i f ( i == 4 ) p r i n t f ( ” q u a t re re ” ) ; \ i f ( i == 5 ) p r i n t f ( ” c i n q ” ) ; \ i f ( i == 6 ) p r i n t f ( ” s i x ” ) ; \ i f ( i == 7 ) p r i n t f ( ” s e p t ” ) ; \ i f ( i == 8 ) p r i n t f ( ” h u i t ” ) ; \ i f ( i == 9 ) p r i n t f ( ” n e u f ” ) ; \ i f ( i == 1 0 ) p r i n t f ( ” d ix ix ” ) ; \ i f ( i == 1 1 ) p r i n t f ( ” o n z e ” ) ; \ i f ( i == 1 2 ) p r i n t f ( ” d o u ze ze ” ) ; \ i f ( i == 1 3 ) p r i n t f ( ” t r e i z e ” ) ; \ i f ( i == 1 4 ) p r i n t f ( ” q u a t o r z e ” ) ; \ i f ( i == 1 5 ) p r i n t f ( ” q u i n z e ” ) ; \ i f ( i == 1 6 ) p r i n t f ( ” s e i z e ” ) ; \ i f ( i == 1 7 ) p r i n t f ( ” d i x− x −s e p t ” ) ; \ i f ( i == 1 8 ) p r i n t f ( ” d i x− x −h u i t ” ) ; \ i f ( i == 1 9 ) p r i n t f ( ” d i x− x −n e u f ” ) #define AFFICHE DIZAINE( i ) \ i f ( i == 2 ) p r i n t f ( ” v i n g t ” ) ; \ i f ( i == 3 ) p r i n t f ( ” t r e n t e ” ) ; \ i f ( i == 4 ) p r i n t f ( ” q u a r a n t e ” ) ; \ i f ( i == 5 ) p r i n t f ( ” c i n q u a n t e ” ) ; \ i f ( i == 6 ) p r i n t f ( ” s o i x a n t e ” ) ; \ i f ( i == 7 ) p r i n t f ( ” s o i x a n t e ” ) ; \ i f ( i == 8 ) p r i n t f ( ” q u a t r e− e −v i n g t ” ) ; i f ( i == 9 ) p r i n t f ( ” q u a t r e− e −v i n g t ” )
\
#define AFFICHE AFFICHE TROIS TROIS CHIFFRES( CHIFFRES( nb ) \
{ \ unsigned unsign ed long u n i t es es ,
d i z a i n e s , c e n t a i n es e s , d e u xD xD e r ni ni e r s ; \ u n i t e s = ( nb nb ) % 1 0 ;\ ;\ d i z a i n e s = ( ( n b ) − u n i t e s ) / 1 0 % 1 0 ;\ d e u x D e r n i e r s = 1 0∗ 0∗ d i z a i n e s + u n i t e s ; \ c e n t a i n e s = ( ( n b ) − ( n b) b) %1 %1 00 00 ) / 1 0 0 % 1 0 ; \ i f ( c e n t a i n e s >= 2 ) \ {\ AFFI AFFICH CHE E UNIT UNITE( E( ce nt ai ne s ) ; \ p r i n t f ( ”− ”−” ) ; \ }\ i f ( c e n t a i n e s > 0 ) \ print f (”cent”); \ i f ( d e u x D e r n i e r s == 0 && c e n t a i n e s > 1 ) \ printf (”s”);\ i f ( c e n t a i n e s > 0 && && d e u x D e r n i e r s ! = 0 ) \ p r i n t f ( ”− ”−” ) ; \ i f ( d i z a i n e s > 1 ) \ {\ AFFI AFFICH CHE E DIZA DIZAIN INE( E( di z a i ne s ) ; \ }\ i f ( d i z a i n e s == 8 && u n i t e s == 0 )\ )\ printf (”s”);\ i f ( ( d i z a i n e s > 1 && && u n i t e s ! = 0 ) \ | | d i z a i n e s == 7 | | d i z a i n e s == 9 ) \ p r i n t f ( ”− ”−” ) ; \ i f ( uni te s == 1 && \
139
d i z a i n e s < 7 && && d i z a i n e s > 1 ) \ p r i n t f ( ” et e t −” ) ; \ i f ( d i z a i n e s == 7 )\ )\ {\ AFFI AFFICH CHE E UNIT UNITE( E( d eu xD er ni er s − 6 0 ) ; \ }\ else\ i f ( d i z a i n e s == 9 )\ )\ {\ AFFI AFFICH CHE E UNIT UNITE( E( d eu xD er ni er s − 8 0 ) ; \ }\ else\ i f ( d i z a i n e s == 1 )\ )\ {\ AFFI AFFICH CHE E UNITE( UNITE( deux De rn ie rs ) ; \ }\ else \ {\ AFFICHE UNITE( unites ); \ }\ } #define AFFI AFFICH CHE E TRO TROIS IS CHIFF HIFFRE RES S UNI UNIT TE( c ,
nom unite , va le ur un it e ) \
{ \ i f ( c % ( v a l e u r u n i t e ∗ m i l l e ) / v a l e u r u n i t e >= 2 ) \
{\ AFFI AFFICH CHE E TROI TROIS S CHIF CHIFFR FRES(c ES(c / va le ur un it e / ∗% m i l l e ∗ / ) ; \ printf (” ”); \ p r i n t f ( ”% ”%s s ” , n o m u n i t e ) ; \ }\ i f ( c % ( v a l e u r u n i t e ∗ m i l l e ) >= v a l e u r u n i t e && c %( %( v a l e u r u n i t e ∗ m i l l e ) < 2 ∗ v a l e u r u n i t e ) \
{\ p r i n t f ( ” un un % s ” , n o m u n i t e ) ; \ }\ } i n t main()
{ unsigned unsig ned long i = 2 0 10 1 0 00 0 0 00 00 0 1 ,
m i l l e = 1 0 0 0; 0; p r i n t f ( ” S a i s i s s e z un n om om br br e = ” ) ; s c a n f ( ”% ”%l u ” , & i ) ; p r i n t f ( ” %1 %10 l u : ” , i ) ; unsigned ned long ) 1 e 9 ) ; AFFI AFFICH CHE E TROI TROIS S CHIF CHIFFR FRES ES UNI UNITE( TE( i , ” m i l l i a r d ” , ( unsig unsigned ned long ) 1 e 6 ) ; AFFI AFFICH CHE E TRO TROIS IS CHIF CHIFFR FRES ES UNIT UNITE( E( i , ” m i l l i o n ” , ( unsig i f ( i %( %( m i l l e ∗ m i l l e ) / m i l l e >= 2 ) { AFFI AFFICH CHE E TROIS TROIS CHIF CHIFFR FRES( ES( i /m i l l e%mi ll e ) ; printf (” ” ); } i f ( i %( %( m i l l e ∗ m i l l e ) >= m i l l e ) printf (”mille ” ); AFFI AFFICH CHE E TROIS TROIS CHIFFR CHIFFRES( ES( i%m i l l e ) ; i f ( i == 0) print f (”zero” ); p r i n t f ( ” \ n” ) ; return 0 ; }
140
A.3
Boucle cles
A.3.1 A.3.1
Utilisa Utilisatio tion n de tout toutes es les les boucles boucles
Compte ` a rebours rebo urs (Tant que) qu e) #inclu de de< < s t d i o . h> i n t main()
{ i; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f sc anf (”% (”%u” , &i ); while ( i > 0 ) { pr in tf (”%u (”%u \ n ” , i ) ; i −−; −−; } p r i n t f ( ” 0\ 0 \ n” ); return 0 ;
u n si si g ne ne d i n t
: ” );
}
Comp Co mpte te ` a reb re b ours ou rs (R´ (R´ ep´ ep´ eter et er . . . jus ju squ’` qu ’`a) a) #inclu de de< < s t d i o . h> i n t main()
{ i; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f sc anf (”% (”%u” , &i );
u n si si g ne ne d i n t
: ” );
do
{ pr in tf (”%u (”%u \ n ” , i ) ; i −−; −−; } while ( i
!= 0 ) ; p r i n t f ( ” 0\ 0 \ n” ); return 0 ; }
Compte ` a rebours rebo urs (Pour) #inclu de de< < s t d i o . h> i n t main()
{ i; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f sc anf (”% (”%u” , &i ); f o r ( ; i > 0 ; i −−) −−) pr in tf (”%u (”%u \ n ” , i ) ; p r i n t f ( ” 0\ 0 \ n” ); return 0 ;
u n si si g ne ne d i n t
: ” );
}
Factorielle (Tant que) #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned long n ,
i , r es es ; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f s c a n f ( ”% ”%l u ” , &n ) ; res = 1; i = 1; while ( i <= n ) r e s ∗= i + +; +; p r i n t f ( ”% ”%l u ! = % l u\ u\n” , n , r e s ) ; return 0 ;
: ” );
}
Factor Fact orie iell lle e (R´ (R´ ep´ ep´ eter et er . . . jusq ju squ’ u’` ` a) a)
141
#inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned long n ,
i , r es es ; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f s c a n f ( ”% ”%l u ” , &n ) ; res = 1; i = 2; i f ( n ! = 0 )
: ” );
do
{ r e s ∗= i ; i++; } while ( i <= n ) ;
p r i n t f ( ”% ”%l u ! = % l u\ u\n” , n , r e s ) ; 0;
return
}
Factorielle (Pour) #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned long n ,
i , r es es ; p r i n t f ( ” S a i s i s s e z un n o m b r e p o s i t i f s c a n f ( ”% ”%l u ” , &n ) ; res = 1; f o r ( i = 1 ; i <= n ; i ++ ++) r e s ∗= i ; p r i n t f ( ”% ”%l u ! = % l u\ u\n” , n , r e s ) ; return 0 ;
: ” );
}
A.3.2
Choix de la boucle la plus appropri´ appropri´ ee ee
Table de Multiplication #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned s hort s ,
i; p r i n t f ( ” S a i s i s s e z u n e v a le l e u r p o s i t i ve ve : ” ) ; sc an f (”%hu” (”%hu” , &s ) ; f o r ( i = 1 ; i <= 10 1 0 ; i ++ ++) p r i n t f ( ” % 2. 2. hu hu ∗ %2.hu = %2.hu\ %2.hu \ n ” , i , s , s ∗ i ) ; return 0 ;
}
Tables de Multiplications #inclu de de< < s t d i o . h> i n t main()
{ unsigned s hort i , j ; unsigned f o r ( i = 1 ; i <= 10 10 ;
i ++ ++)
{ for ( j = 1 ;
j <= 10 10 ; j ++ ++) p r i n t f ( ” % 3. 3. hu hu ” , i ∗ j ) ; p r i n t f ( ” \ n” );
} return
0;
}
bn #inclu de de< < s t d i o . h> i n t main()
{ double b , r e s ; unsigned unsig ned s hort n ;
p r i n t f ( ” S a i s i s s e z un n o m b r e r e e l s c a n f ( ”% ”% l f ” , &b ) ;
: ” );
142
p r i n t f ( ” S a i s i s s e z un n o m b r e e n t i e r p o s i t i f sc anf (”% (”%hu” , &n ); p r i n t f ( ”% ”% l f ˆ% ˆ%hu = ” , b , n ) ; res = 1; while ( n > 0 ) { r e s ∗= b ; n−−; −−; } p r i n t f ( ”% ”% l f \ \ n ” , r e s ) ; return 0 ;
: ” );
}
A.3.3 A.3.3
Morcea Morceaux ux ch choisi oisiss
Approximation de 2 #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define EPS 1e −20 #define ABS( i ) (( i > 0 . ) ? i
: −i )
i n t main()
{ double t e rm rm e = 1 , s e r i e = 0 ; while (AB (ABS( terme ) > EPS)
{ s e r i e += t e rm rm e ; terme ∗= 0 . 5 ; } p r i n t f ( ” 2 = % .1 .1 2 l f return 0 ;
a % .1 .1 2 l f
p r e s . \ n ” , s e r i e , EPS ) ;
}
Approximation de e #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define EPS 1e −20 #define ABS( i ) (( i > 0 . ) ? i
: −i )
i n t main()
{ double t e rm rm e = 1 . , s e r i e = 0 . , while (AB (ABS( terme ) > EPS)
f a c te te u r = 1 . ;
{ s e r i e += t e rm rm e ; t e rm rm e /= f a c t e u r ; f a c t e u r += += 1 . ; } p r i n t f ( ” e = % . 12 12 l f return 0 ;
a % .1 .1 2 l f
p r e s . \ n ” , s e r i e , EPS ) ;
}
Approximation de ex #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define EPS 1e −10 #define ABS( i ) (( i > 0 . ) ? i
: −i )
i n t main()
{ double t e rm rm e = 1 . ,
s e r i e = 0 . , f a c te te u r = 1 . , x ; p r i n t f ( ”x ”x = ” ) ; sc anf (”%l (”%l f ” , &x ); while (AB (ABS( terme ) > EPS) { s e r i e += t e rm rm e ; terme ∗= ( x / f a c t e ur ur ) ; f a c t e u r += += 1 . ; } p r i n t f ( ” e = % . 12 12 l f a % .1 .1 2 l f p r e s . \ n ” , s e r i e , EPS ) ;
143
return
0;
}
Conversion d’entiers en binaire #inclu de de< < s t d i o . h> i n t main()
{ unsigned unsig ned s hort s ,
unsigned ned s hort ) ∗ 8 ; i , m a sk = 1 , n b Bi Bi t s = s i z e o f ( unsig p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc an f (”%hu” (”%hu” , &s ) ; ˜ c s e nt p r i n t f ( ” Sa Sa r e pr pr A nt at a t i on on b i n a i r e e s t [ ” ) ; mask <<= n b B i t s − 1 ; f o r ( i = n bB b B it it s ; i >= 1 ; i −−) −−) { i f ( ( i − n b B i t s ) && ! ( i % 8) 8) ) p r i n t f ( ” . ” ) ; pr in tf (”% (”%hu” , ( s&ma s&mask)! sk)! =0 ); mask >>=1; } p r i n t f ( ” ] \ n” ); return 0 ;
}
Converssion de d´ ecimales ecimales en binaire binai re #inclu de de< < s t d i o . h> i n t main()
{ double d ;
p r i n t f ( ” S a i s i s s e z u n e v a le l e u r e nt nt r e 0 e t 1 : ” ) ; s c a n f ( ”% ”% l f ” , &d ) ; ˜ c s en p r i n t f ( ” Sa Sa r e pr pr A e n ta ta ti ti on on b i n a i r e e s t [ 0 . ” ) ; while ( d ! = 0 ) { d ∗=2 ; p r i n t f ( ”% ”%d ” , ( i n t ) ( d ) ) ; d −= ( d >=1); } p r i n t f ( ” ] \ n” ); return 0 ; }
Inversion de l’ordre des bits #inclu de de< < s t d i o . h> i n t main()
{ short s , k ; unsigned s hort n b B i t s = s i z e o f ( unsig unsigned unsigned ned s hort ) ∗ 8 , f i r s t M a s k = 1<<(nbBits − 1 ) , l a s t Ma Ma s k = 1 ,
f i r s t B i t , l a s tB tB i t , r e s ul ul t = 0 ; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc an f (”%hu” (”%hu” , &s ) ; f o r ( k = n b B i t s − 1 ; k >= 1 ; k −=2) { f i r s t B i t = f i rs r s t Ma Ma s k & s ; l a s t B i t = l a s t Ma Ma s k & s ; f i r s t B i t >>= k ; l a s t B i t <<= k ; r e s u l t |= f i r s t B i t | l a s t B i t ; f i r s t M a s k >>=1; lastMask <<=1; } ˜ ¨ s i n v e r s i o n d e l ’ o r dr p r i n t f ( ” Ap Ap rA d r e d es e s b i t s , l a v a l e ur u r q ue ue v ou ou s a ve ve z ” ” s a i s i e s t %h %h u . \ n ” , r e s u l t ) ; return 0 ; }
Joli Jo li carr ca rr´ ´ e #inclu de de< < s t d i o . h> i n t main()
{
144
u n si si g ne ne d i n t
i , j , n;
p r i n t f ( ”n ”n = ” ) ; sc anf (”% (”%u” , &n ); f o r ( i = 1 ; i <= n ; i ++ ++) { f o r ( j = 1 ; j <= n ; j ++ ++) p r i n t f ( ”X ”X ” ) ; p r i n t f ( ” \ n” ); i f ( i ! = n ) p r i n t f ( ” \ n” ); } return 0 ; }
Racine carr´ ee ee par dichotomie dichotomi e #inclu de de< < s t d i o . h> #define EPS 1e −10 i n t main()
{ double x , do
i n f , s up up , mi d ;
{ p r i n t f ( ” S a i s i s s e z u n e v a le l e ur u r p o s i t i v e o u n u l le le : ” ) ; sc anf (”%l (”%l f ” , &x ); } while ( x < 0 ) ;
inf = 0; sup = x; while ( s u p − i n f > EPS) { mi d = ( i n f + s up up ) / 2 ; i f (mid∗ (mid ∗ mid > x ) sup = mid; else
inf = mid; } p r i n t f ( ” La La r a c i n e c a r r e d e % . 1 0 l f x , ( i n f + s up up ) / 2 , EPS ) ; return 0 ;
e s t % . 10 10 l f
( e r r e u r +−%.10lf ). \ n” ,
}
145
A.4 A.4 A.4. A.4.1 1
Tab able leau aux x Pris Prise e en main main
Initialisati Initialisation on et Affichage Affichage #inclu de de< < s t d i o . h> #define n 10 i n t main()
{ i n t T [N [N ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , int i ; f o r ( i = 0 ; i < N ; i ++ ++)
8 , 9 , 1 0} 0} ;
p r i n t f ( ”T ”T[ %d %d ] = %d %d \ n ” , i , T [ i ] ) ; 0;
return
}
Initialisation avec une boucle #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ i n t T[N] ; int i ; for ( i = 0 ;
i < N ; i ++ ++) T[ i ] = i + 1; f o r ( i = 0 ; i < N ; i ++ ++) p r i n t f ( ”T ”T[ %d %d ] = %d %d \ n ” , i , T [ i ] ) ; return 0 ; }
Somme #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ i n t T[N] ; i n t i , somme = 0 ; for ( i = 0 ; i < N ;
i ++ ++) T[ i ] = i ; f o r ( i = 0 ; i < N ; i ++ ++) somme += T[ i ] ; p r i n t f ( ” La La s om omme d e s e l e m e n t s du t a b l e a u e s t %d\ n” , somm somme e ); return 0 ; }
Recherche #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ i n t T[N] ; int i , t ; for ( i = 0 ;
i < N ; i ++ ++) T[ i ] = i ; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc anf (”%d” (”%d” , &t ); i = 0; while ( i < N && && T [ i ] ! = t ) i++; i f ( i == N) p r i n t f ( ”% ”%d n e s e t r o uv u v e p as a s d an an s l e t a b l e a u . \ n ” , t ) ; else
p r i n t f ( ”% ”%d s e t r o uv u v e d an an s l e t a b l e au a u a l ’ i n d i c e %d . \ n ” , t , 0;
return
}
146
i );
A.4. A.4.2 2
Indi In dice cess
Permutation circulaire #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ i n t T[N] ; i n t i , t em emp ; for ( i = 0 ; i < N ;
T[ i ] = i + 1; t em em p = T [ 9 ] ; for ( i = N − 1 ; T[ i ] = T[ i − T [ 0 ] = t em emp ; for ( i = 0 ; i < p r i n t f ( ”T ”T[ %d %d ] return 0 ;
i ++ ++)
i >= 1 ; 1];
i −−) −−)
N ; i ++ ++) = %d %d \ n ” , i , T [ i ] ) ;
}
Permutation circulaire circula ire sans s ans deuxi`eme eme tableau ta bleau #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ int T[N] , Q[N] ; int i ; for ( i = 0 ; i < N ;
i ++ ++) T[ i ] = i + 1; Q [ 0 ] = T[ T[ N − 1 ] ; f o r ( i = 1 ; i < N ; i ++ ++) Q[ i ] = T[ i − 1 ] ; f o r ( i = 0 ; i < N ; i ++ ++) pr in tf (”Q (”Q[%d [%d ] = %d %d \ n ” , i , Q [ i ] ) ; return 0 ; }
Miroir #inclu de de< < s t d i o . h> #define N 10 i n t main()
{ i n t T[N] ; i n t i , j , temp ; for ( i = 0 ; i < N ;
i ++ ++) T[ i ] = i + 1; i = 0 ; j = N − 1 ; while ( i < j ) { te mp mp = T [ i ] ; T[ i ] = T[ j ] ; T [ j ] = t em em p ; i++; j −−; −−; } f o r ( i = 0 ; i < N ; i ++ ++) p r i n t f ( ”T ”T[ %d %d ] = %d %d \ n ” , i , T [ i ] ) ; return 0 ; }
A.4.3
Recherche s´ equentielle equentielle
Modification du tableau #inclu de de< < s t d i o . h> #define N 20
147
i n t main()
{ i n t T [N [N ] , i ; for ( i = 0 ; i < N ;
i ++ ++) T [ i ] = i ∗ i % 1 7; 7; f o r ( i = 0 ; i < N ; i ++ ++) p r i n t f ( ”T ”T[ %d %d ] = %d %d \ n ” , i , T [ i ] ) ; return 0 ; }
Min/max #inclu de de< < s t d i o . h> #define N 20 i n t main()
{ i n t T [ N] N] , i , mi n , max ; f o r ( i = 0 ; i < N ; i ++ ++)
T [ i ] = i ∗ i % 1 7; 7; min = max max = T[ 0 ] ; f o r ( i = 1 ; i < N ; i ++ ++) { i f (T[ i ] > max) max max = T[ i ] ; i f (T[ i ] < min) min min = T[ i ] ; } p r i n t f ( ” Le Le p l us u s p e t i t e le l e me m e nt n t e s t %d %d , return 0 ;
l e p l us u s g ra ra nd nd e s t %d %d . \ n ” , m in in , max ) ;
}
Recherche Reche rche s´ equentie eque ntielle lle #inclu de de< < s t d i o . h> #define N 20 i n t main()
{ i n t T [N [N ] , i , t ; for ( i = 0 ; i < N ;
i ++ ++) T [ i ] = i ∗ i % 1 7; 7; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc anf (”%d” (”%d” , &t ); p r i n t f ( ” V oi o i c i l a l i s t e d es es i n d i c es e s d es es o c cu c u r re r e n ce ce s de ” ”%d d a ns ns l e t a b l e au au : \ n ” , t ) ; f o r ( i = 0 ; i < N ; i ++ ++) i f (T[ i ] == t ) pr in tf (”%d (”%d \ n ” , i ) ; return 0 ; }
Recherche s´ equentielle equentiel le avec sto ckage ckage des indices indic es #inclu de de< < s t d i o . h> #define N 20 i n t main()
{ i n t T [N [ N ] , I [ N ] , i , t , nbV = 0 ; f o r ( i = 0 ; i < N ; i ++ ++)
T [ i ] = i ∗ i % 1 7; 7; p r i n t f ( ” S a i s i s s e z u n e v a l e ur ur : ” ) ; sc anf (”%d” (”%d” , &t ); f o r ( i = 0 ; i < N ; i ++ ++) i f (T[ i ] == t ) I [ nbV+ nbV++] +] = i ; i f (nbV (nbV == == 0) p r i n t f ( ”% ”%d n ’ e s t p as a s d an an s l e t a b l e au au . \ n ” , t ) ; else
{ p r i n t f ( ”% ”%d a p pa p a r a it i t d an an s l e t a bl b l e a u a ux u x i n d i c e s s u i v an an t s : \ n ” , t ) ; i < nbV ; i ++ ++) printf (”%d\ (”%d \ n” , I [ i ] ) ;
for ( i = 0 ;
} return
0;
}
148
A.4.4 A.4.4
Morcea Morceaux ux ch choisi oisiss
Pi` eces eces de monnai mon naie e #inclu de de< < s t d i o . h> #define N 6 #define EPS 0 . 0 0 1 i n t main()
{ f l o a t p i e c e s [ N] N] = { 0 . 5 , int i , nbPieces [N] ; do
0 . 2 , 0 . 1 , 0 . 05 0 5 , 0 . 02 0 2 , 0 . 01 0 1} , somme ,
res te ;
{ p r i n t f ( ” S a i s i s s e z u n e somme s t r i ct c t e m e nt nt p o s i t i v e sc anf (”%f (”%f ” , &som somme);
: ” );
} while (somme <= 0 ) ;
r e s t e = so somme ; i < N ; i ++ ++) { n b P i e c e s [ i ] = ( r e s t e +E +EPS ) / p i e c e s [ i ] ; r e s t e −= n b P i e c e s [ i ]∗ ]∗ p i e c e s [ i ] ; } p r i n t f ( ” Po P o ur ur p a ye ye r c e t t e somme a v ec ec d e s p i e c e s , i l v ou o u s f a u dr dr a : ” ) ; f o r ( i = 0 ; i < N ; i ++ ++) i f ( n b P i e c e s [ i ] ! = 0 ) p r i n t f ( ”% ”%d p i e c e %s %s d e % . 2 f e u r o s \ n” , nbPieces [ i ] , (( nbPieces [ i ] > 1 ) ? ” s ” : ” ” ) , p i e c e s [ i ] ) ; return 0 ; for ( i = 0 ;
}
Recherche de la tranche minimale en
O(n3)
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define N 20 i n t main()
{ i n t T [N [N ] , i , j , k ; i n t v a l e ur ur T r a nc nc h e M in in , d e bu bu t Tr Tr a nc nc h eM eM i n , f o r ( i = 0 ; i < N ; i ++ ++)
f i n T ra ra n c h eM eM i n , v a l e u r T r a n c h e ;
{ T[ i ] = rando random()%27 m()%27 − 1 1 ; p r i n t f ( ”T ”T[ %d %d ] = % %d d\n ” , i , T [ i ] ) ; } valeurTrancheMin = T[ 0 ] ; debutTranch debutTrancheMin eMin = 0; f i n T r a nc nc h e M i n = 0 ; for ( i = 0 ; i < N ; i ++ ++) f o r ( j = i ; j < N ; j ++ ++) { v a l e u r Tr Tr a n c h e = 0 ; f o r ( k = i ; k <= j ; k++) valeu rTranc he += T[ k ] ; i f ( v a l e u r T r a n c h e < v a l e u r T r a n c h e M i n ) { v a l e u r Tr Tr a n c h e Mi Mi n = v a l e u r T r a n c h e ; debutTranch debutTrancheMin eMin = i ; f i n T r a n ch ch e M i n = j ; } } p r i n t f ( ” La La t r an a n c he he m in in im im al al e e s t s i t u e e e n tr tr e l e s debutTra debutTrancheM ncheMin in , finTrancheMin ); return 0 ;
i n d i c e s %d %d e t %d %d\ n” ,
}
Recherche de la tranche minimale en
O(n2)
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define N 20 i n t main()
{ i n t T [N [N ] , i , j ; i n t v a l e ur ur T r a nc nc h e M in in ,
d e bu bu t Tr Tr a nc nc h eM eM i n , f i n T ra ra n c h eM eM i n , v a l e u r T r a n c h e ;
149
for ( i = 0 ;
i < N ;
i ++ ++)
{ T[ i ] = rando random()%27 m()%27 − 1 1 ; p r i n t f ( ”T ”T[ %d %d ] = % %d d\n ” , i , T [ i ] ) ; } valeurTrancheMin = T[ 0 ] ; debutTranch debutTrancheMin eMin = 0; f i n T r a nc nc h e M i n = 0 ; for ( i = 0 ; i < N ; i ++ ++) { v a l e u r Tr Tr a n c h e = 0 ; f o r ( j = i ; j < N ; j ++ ++) { valeu rTranc he += T[ j ] ; i f ( v a l e u r T r a n c h e < valeurTrancheMin) { v a l e u r Tr Tr a n c h e Mi Mi n = v a l e u r T r a n c h e ; debutTranch debutTrancheMin eMin = i ; f i n T r a nc nc h e M i n = j ; } } } p r i n t f ( ” La La t r an a n c he he m in in im im al al e e s t s i t u e e e n tr tr e l e s debutTra debutTrancheM ncheMin in , finTrancheMin ); return 0 ;
i n d i c e s %d %d e t %d %d\ n” ,
}
Recherche de la tranche minimale en
O(n)
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define N 20 i n t main()
{ int int int for
T [N [N ] , i ; valeurTrancheMin , debutTra debutTrancheM ncheMin in , finTrancheMin ; valeurTrancheMinAvecI , debutTranche debutTrancheMinAve MinAvecI cI , finTrancheMinAvecI ; ( i = 0 ; i < N ; i ++ ++)
{ T[ i ] = rando random()%27 m()%27 − 1 1 ; p r i n t f ( ”T ”T[ %d %d ] = % %d d\n ” , i , T [ i ] ) ; } valeurTrancheMin = T[ 0 ] ; debutTranch debutTrancheMin eMin = 0; f i n T r a nc nc h e M i n = 0 ; valeurTrancheMinAvecI = T [ 0 ] ; debutTrancheMin debutTrancheMinAvecI AvecI = 0; f i n T r a nc nc h e M i n A ve ve c I = 0 ; for ( i = 1 ; i < N ; i ++ ++) { i f (valeurTrancheMinAvecI > 0 ) { valeurTrancheMinAvecI = T[ i ] ; debutTrancheMin debutTrancheMinAvecI AvecI = i ; f i n T r a n ch ch e M i n A v ec ec I = i ; } else
{ valeurTrancheMinAvecI += T[ i ] ; f i n T r a n ch ch e M i n A v ec ec I = i ; } i f (valeurTrancheMinAvecI < v a l e u r T r a n c h e M i n )
{ valeurTrancheMin = valeurTrancheMinAvecI ; debutTrancheMin = debutTrancheMinAvecI ; f i n T r a n ch ch e M i n = f i n T r a n ch ch e M i n A v ec ec I ; } } p r i n t f ( ” La La t r an a n c he he m in in im im al al e e s t s i t u e e e n tr tr e l e s debutTra debutTrancheM ncheMin in , finTrancheMin ); return 0 ; }
150
i n d i c e s %d %d e t %d %d\ n” ,
A.5
Chaˆ Chaˆınes ıne s de caract` car act`eres ere s
A.5. A.5.1 1
Pris Prise e en main main
Affichage #inclu de de< < s t d i o . h> i n t main()
{ char s [ 6 4 ] = ” Le L e s f r a mb m b o i se se s
s o nt nt p e rc r c h ee ee s ” ” s u r l e t a b o ur u r e t d e mo mon g ra r a nd nd −per e . ” ; p r i n t f ( ” %s %s \ n ” , s ) ; return 0 ;
}
Affichage sans %s #inclu de de< < s t d i o . h> i n t main()
{ char s [ 6 4 ] = ” Le L e s f r a mb m b o i se se s
s o nt nt p e rc r c h ee ee s ” ” s u r l e t a b o ur u r e t d e mo mon g ra r a nd nd −per e . ” ; int i = 0 ; while ( s [ i ] ! = 0 ) p r i n t f ( ”% ”%c ” , s [ i + + ] ) ; p r i n t f ( ” \ n” ) ; return 0 ;
}
Longueur #inclu de de< < s t d i o . h> #define BUFFE BUFFER R SIZE SIZE 150 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [ BUFFE BUFFER R SIZE SIZE ] ; int i = 0 ;
f g e t s ( s , BUFFER SI SIZE , s t d i n ) ; != 0) i++; i f ( s [ i − 1 ] != != ’ \n ’ ) CLEAR BUFFER BUFFER;; p r i n t f ( ” l o n g u e u r = %d %d \ n ” , i ) ; return 0 ; while ( s [ i ]
}
Longueur sans retour chariot #inclu de de< < s t d i o . h> #define BUFFE BUFFER R SIZE SIZE 150 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [ BUFFE BUFFER R SIZE SIZE ] ; int i = 0 ;
f g e t s ( s , BUFFER SI SIZE , != 0) i++; i f ( s [ i − 1 ] != != ’ \n ’ ) CLEAR BUFFER BUFFER;;
stdi n );
while ( s [ i ]
else
{ s[ i − 1] = 0; i −−; −−; } p r i n t f ( ” l o n g u e u r = %d %d \ n ” , i ) ; return 0 ; }
151
A.5. A.5.2 2
Les Les fonc foncti tion onss de string.h
strcmp.c #inclu de de< < s t d i o . h> #inclu de de< < s t r i n g . h> #define BUFFER BUFFER SIZE SIZE 30 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [BUFFER [BUFFER SIZ SIZE E] , int r ;
t [BUFFER [BUFFER SIZ SIZE E];
˜ R ne p r i n t f ( ” S a i s i r u ne ne chaA : \ n” ); f g e t s ( s , BUFFER SI SIZE , s t d i n ) ; i f ( s [ st rl en ( s ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; else
s [ st rl en ( s) − 1 ] = 0 ; ˜ R ne p r i n t f ( ” S a i s i r u ne ne a u t r e chaA : \ n” ); f g e t s ( t , BUFFER SI SIZE , s t d i n ) ; i f ( t [ st rl en ( t ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; t [ st rl en ( t) − 1 ] = 0 ; p r i n t f ( ”% ”%s ” , s ) ; r = s tr tr cm cm p ( s , t ) ; i f ( r == 0) p r i n t f ( ” =” =” ) ; e ls ls e i f ( r < 0 ) p r i n t f ( ”<” ) ; else
p r i n t f ( ”>” ) ; p r i n t f ( ” %s \ n ” , t ) ; return 0 ; }
strlen.c #inclu de de< < s t d i o . h> #inclu de de< < s t r i n g . h> #define BUFFER BUFFER SIZE SIZE 30 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [BUFFER [BUFFER SIZ SIZE E] , int r ;
t [BUFFER [BUFFER SIZ SIZE E];
˜ R ne p r i n t f ( ” S a i s i r u ne ne chaA : \ n” ); f g e t s ( s , BUFFER SI SIZE , s t d i n ) ; i f ( s [ st rl en ( s ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; else
s [ st rl en ( s) − 1 ] = 0 ; ˜ R ne p r i n t f ( ” S a i s i r u ne ne a u t r e chaA : \ n” ); f g e t s ( t , BUFFER SI SIZE , s t d i n ) ; i f ( t [ st rl en ( t ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; t [ st rl en ( t) − 1 ] = 0 ; p r i n t f ( ”% ”%s e s t ” , s ) ; r = strl en ( s ) − str le n (t ); i f ( r == 0) print f (”aus si” ); e ls ls e i f ( r > 0 ) print f (”plus” ); else
p r i n t f ( ” m o i ns ns ” ) ; p r i n t f ( ” l o n gu g u e q ue ue %s %s \ n ” , t ) ; return 0 ; }
A.5.3 A.5.3
Morcea Morceaux ux ch choisi oisiss
Extensions #inclu de de< < s t d i o . h> #inclu de de< < s t r i n g . h>
152
#define BUFFE BUFFER R SIZE SIZE 100 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [ BUFFE BUFFER R SIZE SIZE ] ; int k , i ;
˜ R ne p r i n t f ( ” S a i s i r u ne ne chaA : \ n” ); f g e t s ( s , BUFFER SI SIZE , s t d i n ) ; i f ( s [ st rl en ( s ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; else
s [ st rl en ( s) − 1 ] = 0 ; i = 1; k = 0; p r i n t f ( ”n ” nom d u f i c h i e r : ” ) ; while ( s [ k ] ! = 0 ) { i f ( s [ k ] == ’ . ’ ) p r i n t f ( ” \ n%d−eme e x t e n s i o n : ” , i + + +)) ; else
p r i n t f ( ”% ”%c ” , s [ k ] ) ; k++; } p r i n t f ( ” \ n” ) ; return 0 ; }
Pare Parenth nth` ` eses es es #inclu de de< < s t d i o . h> #inclu de de< < s t r i n g . h> #define BUFFER BUFFER SIZE SIZE 30 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char s [ BUFFE BUFFER R SIZE SIZE ] ; int k , i ;
p r i n t f ( ” S a i s i r u n e c h ai a i n e : \ n” ); f g e t s ( s , BUFFER SI SIZE , s t d i n ) ; i f ( s [ st rl en ( s ) − 1 ] != ! = ’ \n ’ ) CLEAR BUFFER BUFFER;; else
s [ st rl en ( s) − 1 ] = 0 ; k = 0; i = 0; while ( s [ k ] ! = 0 ) { i f ( s [ k ] == ’ ( ’ ) i++; i f ( s [ k ] == ’ ) ’ ) i −−; −−; i f ( i < 0 ) { p r i n t f ( ” E x p r e s si s i o n m a l p a r e n th t h e s e e ! \ n” ); return − 1; } k++; } i f ( i ! = 0 ) { p r i n t f ( ” E x p r e s si si o n m a l p a r e n th t h e s e e ! \ n” ); return −1; } p r i n t f ( ” L ’ e x p r e s s i o n e s t c o r r ec e c t e m en e n t p a r e n th t h e s e e ! \ n” ); return 0 ; }
153
A.6 A.6
Fonct onctio ions ns
A.6. A. 6.1 1
G´ eom´ eo m´ etri et rie e
#inclu de de< < s t d i o . h>
/ ∗ A f fi f i c he h e l e c ar a r a ct c t er er e c ∗ / void a f f i c h e C a r a c t e r e ( char c )
{ p r i n t f ( ”% ”%c ” , c ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ a f f ic i c h e n f o i s l e c ar a r ac a c te t e re r e c , n e r ev e v ie i e nt n t p a s a l a l i gn gn e a p re r e s l e d e r n i er e r c a r a c te te r e . ∗ / void l i g n e S a n s R e t u r n ( i n t n ,
char c )
{ int i ; for ( i = 1 ;
i <= n ; i ++ ++) afficheCar actere (c );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ a f f ic i c h e n f o i s l e c ar a r ac a c te t e re r e c , r e vi v i e nt n t a l a l i gn g n e a p re re s l e d e rn r n i er e r c a r ac a c t er er e .
∗ / void l i g n e A v e c R e t u r n ( i n t n ,
char c )
{ ligneSansReturn (n, c ); p r i n t f ( ” \ n” ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f i c h e n e s p ac ac e s .
∗ / void e s p a c e s ( i n t n )
{ l i g n e Sa Sa n s R et et u r n ( n ,
’
’ );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f fi f i c he h e l e c ar a r a ct c t er e r e c a l a c ol ol on on ne ne i , n e r e v ie i e n t p a s a l a l i g n e a pr p r es es . ∗ / void u n C a r a c t e r e S a n s R e t u r n ( i n t i , char c )
{ espa ces ( i − 1 ) ; p r i n t f ( ”% ”%c ” , c ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f fi f i c he h e l e c ar a r a ct c t er e r e c a l a c ol ol on on ne ne i , r e vi v i e n t a l a l i g n e a pr p r es es .
∗ / void unCaractereAvecReturn( i n t i , char c )
{ u n C a r a c t e r e S a n s Re Re t u r n ( i , c ) ; p r i n t f ( ” \ n” ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
154
/ ∗ A f fi f i c he h e l e c ar a r a ct c t er e r e c a u x c ol o l on o n ne ne s i e t j , r e vi v i e n t a l a l i g n e a pr p r es es .
∗ / void d e u x C a r a c t e r e s ( i n t i ,
i n t j , char c )
{ int k ; i f ( i > j )
d e ux u x C a ra r a c t er er e s ( j , i , c ) ; else
{ i f ( i
!= j )
{ u n C a r a c t e r e S a ns ns R e t u r n ( i , c ) ; unCaractereAvecReturn( j − i , c ) ; } else
u n C a r ac ac t e r e A v ec ec R e t u r n ( i , c ) ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e u n c a r r e d e c o te te n .
∗ / void c a r r e ( i n t n )
{ int k ; l i g n e A ve ve c R e t u rn rn ( n , ’ ∗ ’ ) ; f o r ( k = 2 ; k <= n − 1 ; k++) d e ux u x C a ra r a c t er er e s ( 1 , n , ’ ∗ ’ ) ; l i g n e A ve ve c R e t u rn rn ( n , ’ ∗ ’ ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f i c h e u n c h ap ap ea ea u d o n t l a p o i n t e − n on a f f i c h e e − e s t s ur u r l a c ol o l on o n ne n e c en e n tr t r e , a ve ve c l e s c a r ac a c t e re re s c . ∗ / void chapeau( i n t
c e n t r e , char c )
{ int k ; int delta ; for ( k = 2
; k <= c e n t r e − 1 ; k++)
{ d e lt lt a = k − 1 ; d e u x C a r a c t e r e s ( c e n t r e − d e lt l t a , c e n tr tr e + d e l t a ,
’∗ ’ );
} } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A f f i c h e u n c ha ha pe pe au au a l ’ e n v e rs r s a v ec ec d e s c a r a c t e r e s c , l a p o in i n t e − no n a f f i c h e e − e s t a l a c ol o l on o n ne n e c e nt nt r e
∗ / void c h a p e a u I n v e r s e ( i n t
c e n t r e , char c )
{ int k ; int delta ; f o r ( k = c e n tr t r e − 1 ; k >= 2 ; k−−) −−)
{ d e lt lt a = k − 1 ; d e u x C a r a c t e r e s ( c e n t r e − d e lt l t a , c e n tr tr e + d e l t a , } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e u n l o sa s a n ge g e d e c o te te n .
∗ / void l o s a n g e ( i n t n )
155
’∗ ’ );
{ u n Ca Ca r a ct ct e r eA eA v e cR cR e t ur ur n ( n , ’ ∗ ’ ) ; c ha ha pe pe au au ( n , ’ ∗ ’ ) ; d e u x C a r a c te te r e s ( 1 , 2 ∗ n − 1 , ’ ∗ ’ ) ; c h a pe p e a u I nv nv e r s e ( n , ’ ∗ ’ ) ; u n Ca Ca r a ct ct e r eA eA v e cR cR e t ur ur n ( n , ’ ∗ ’ ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e u ne ne c r o ix ix d e c o t e n
∗ / void c r o i x ( i n t n )
{ d e u x C a r a c te te r e s ( 1 , 2 ∗ n − 1 , ’ ∗ ’ ) ; c h a pe p e a u I nv nv e r s e ( n , ’ ∗ ’ ) ; u n Ca Ca r a ct ct e r eA eA v e cR cR e t ur ur n ( n , ’ ∗ ’ ) ; c ha ha pe pe au au ( n , ’ ∗ ’ ) ; d e u x C a r a c te te r e s ( 1 , 2 ∗ n − 1 , ’ ∗ ’ ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
main() { taille ; p r i nt n t f ( ” S a i s i s se se z l a t a i l l e s c a n f ( ”% ”%d ” , & t a i l l e ) ; carre( tail le ); losange ( ta il le ); croix ( tail le );
int
d es es f i g ur u r e s \ n” );
}
A.6.2
Arithm´etique etique
#inclu de de< < s t d i o . h>
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ int
unites ( int n)
{ return n%10;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
d i z a i n e s ( int n)
{ return
unites(n / 10);
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
e x t r a i t ( int n , int k )
{ while ( k−− > 1 )
n /= 10; unites (n);
return
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
nbChiffre s ( int n)
{ int i = 0 ; while ( n ! = 0 )
{ i++; n /= 10; } return
i;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int sommeChiffres( int n)
{ int s = 0 ; while ( n ! = 0 )
156
{ s += u n i t e s ( n ) ; n /= 10; } return
s;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
sommeDiviseursStricts ( int n)
{ int i = 1 ; i n t sommeD sommeDiv iv = 0; while ( i <= n / 2 )
{ i f ( ! ( n % i
)) sommeDiv sommeDiv += += i ;
i++; } return sommeDiv; sommeDiv;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / i n t sontAmis( i n t a ,
int b)
{ return
s o m m e D i v i s e u r s S t r i c t s ( a ) == s o m m e D i v i s e u r s S t r i c t s ( b ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
e s t P a r f a i t ( int n)
{ return
s o m m e D i v i s e u r s S t r i c t s ( n ) == n ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int
puissance ( int b , int n)
{ int r e s = 1 , i ; f o r ( i = 1 ; i <= n ;
i ++ ++)
r e s ∗= b ; return r e s ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / i n t sommeParties( i n t n ,
int k )
{ i n t u = n% p u i s s a n c e ( 1 0 , k ) ; int v = n/ puissance (10 , k ); return u + v ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int estKaprekar ( int n)
{ int i ; i n t s qu q u ar a r re r e dN d N = p u i s s a n ce ce ( n , 2 ) ; i n t nbC = n b C h i f f r e s ( s q u a r r e d N ) ; f o r ( i = 0 ; i <= nb nbC ; i ++ ++)
{ i f ( s o m m e P a r t ie ie s ( s q u a rr rr e d N ,
i ) == n ) ;
{ return
1;
} } return
0;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t main()
{ p r i n t f ( ”% ”%d ” , e s t K a pr pr e k a r ( 4 6 ) ) ; 1;
return
}
157
A.6.3
Passage de tableaux en param` param` etre etre
#inclu de de< < s t d i o . h>
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void a f f i c h e T a b l e a u ( i n t t [ ] ,
int n)
{ int i ; for ( i = 0 ;
i < n ; i ++ ++) p r i n t f ( ”% ”%d ” , t [ i ] ) ; p r i n t f ( ” \ n” );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t somme( i n t t [ ] ,
int n)
{ int s = 0 , i ; for ( i = 0 ; i < n ;
i ++ ++)
s += t [ i ] ; return s ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t min( i n t t [ ] ,
int n)
{ int m = t [ 0 ] , i = 0 ; while(++i < n ) m = (m < t [ i ] ) return m;
? m : t [ i ];
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int
e x i s t e ( int t [] ,
int n ,
int k )
{ int i ; f o r ( i = 0 ; i < n ; i ++ ++) i f ( t [ i ] == k) return 1 ; return 0 ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t sommePairs( i n t t [ ] ,
int n)
{ int s = 0 , i ; f o r ( i = 0 ; i < n ; i ++ ++) i f ( t [ i ] % 2 == 0 )
s += t [ i ] ; return
s;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int
estTri e ( int t [] ,
int n)
{ int i ; f o r ( i = 1 ; i < n ; i ++ ++) i f ( t [ i − 1 ] > t [ i ] ) return 0 ; return 1 ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void permutat ion ( i n t t [ ] ,
int n)
{ int d e r n i e r = t [ n − 1 ] , i ; f o r ( i = n− n −1 ; i > 0 ; i −−) −−)
t [ i ] = t [ i − 1]; t [ 0 ] = d e r n i er er ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void e c h a n g e ( i n t t [ ] ,
int i ,
int
j)
{
158
i n t temp temp = t [ i ] ; t [ i ] = t [ j ]; t [ j ] = t em em p ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void m i r o i r ( i n t t [ ] ,
int n)
{ i n t i = 0 , j = n − 1; while ( i < j )
e c h an an g e ( t ,
i + +, +, j −−); −− );
}
A.6.4
D´ ecomposition ecomposition en facteurs premiers premiers
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define SIZE SIZE TAB TAB 50
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int
d i v i s e ( int a , int b)
{ return b % a == 0 ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t power( i n t b ,
int n)
{ i f (n == == 0) return 1 ; return b ∗ p ow ow er er ( b , n − 1 );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int
estPremi er ( int n , int T [ ] , int k )
{ int i ; for ( i = 0 ;
i < k ;
i ++ ++)
{ i f ( p o w er er ( T [ i ] , 2 ) > n ) return 1 ; i f ( d i v i s e (T (T [ i ] , n ) ) return 0 ;
} return
1;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void t r o u v e P r e m i e r s ( i n t T [ ] ,
int n)
{ i; j; T[0] = 2; f o r ( i = 1 ; i < n ; i ++ ++) { j = T [ i − 1 ] + 1 ; while ( ! e s t P re re m i e r ( j , T , i − 1 ) ) j ++; T[ i ] = j ; } int int
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void a f f i c h e T a b ( i n t T [ ] ,
int n)
{ int i ; for ( i = 0 ;
i < n ; i ++ ++) p r i n t f ( ”% ”%d ” , T [ i ] ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void i n i t T a b ( i n t T [ ] ,
int n ,
int
val )
{
159
int i ; for ( i = 0 ;
i < n ; T[ i ]=v ]=v al ;
i ++ ++)
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void decompose( i n t n ,
int K [ ] ,
i n t T[ ] )
{ int i ; i n i t T a b ( K, K, SI ZE ZE TAB , 0 ) ; while ( n ! = 1 ) { i = 0; while ( ! d i v i s e ( T[ T[ i ] , n ) ) i++; K[ i ]++; n /= T[ i ] ; }
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int recompose( int K [ ] ,
int T [ ] ,
int n)
{ i n t r es es = 1 ; int i ; for ( i = 0 ;
i < n
; i ++ ++)
{ r e s ∗= power(T[ power(T[ i ] , K[ i ] ) ; } return
res ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t min( i n t a ,
int b)
{ i f ( a < b ) return a ; return b ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void pgcdTab( i n t A [ ] ,
int B [ ] ,
int
r e s [ ] , int n)
{ int i ; for ( i = 0 ;
i < n ; i ++ ++) r e s [ i ] = m in in ( A [ i ] , B [ i ] ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t pgcd( i n t a ,
int b)
{ A[ SIZE TAB ] ; B[ SIZE TAB ] ; T[ SIZE TAB ] ; P[ SIZE TAB ] ; t r o u v e P r e m i e r s (T (T , SIZE T AB AB ) ; d ec ec om om po po s e ( a , A , T ) ; d ec ec om om po po s e ( b , B , T ) ; pgcdT pgcdTab(A, ab(A, B, P, SIZE SIZE TAB) ; return r e c o m p os os e ( P , T , SI ZE ZE TAB ) ; int int int int
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
main() { int a = 9 0 ; int b = 1 0 8 ;
p r i n t f ( ” p g cd cd (% (%d , %d ) = %d %d ” , a , b , p gc gc d ( a , b ) ) ; getch () ; }
A.6.5 A.6.5
Statis Statistiq tiques ues
void d e c a l a g e G a u c h e ( i n t T [ ] ,
int a ,
int b)
{
160
int i ; for ( i = a ;
i <= b ;
i ++ ++)
{ T[ i − 1 ] = T [ i ] ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / int calculeTempsTotalConnexi onClient ( int C [ ] ,
int D [ ] ,
int n ,
int
{ i n t j , sum = 0 ; f o r ( j = i ; j < n ; j ++ ++) i f (C[ j ] == C[ i ] )
sum sum += D [ j ] ; return sum;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t supprimeDoublons( i n t C [ ] ,
int D [ ] ,
int n ,
int
i)
{ i n t n bS bS up up pr pr = 0 , j = i + 1; 1; while ( j < n − nbSuppr) i f (C[ j ] == C[ i ] )
{ d e ca ca l ag ag e Ga Ga u ch ch e ( C, C, j + 1 , n − nbSuppr − 1 ) ; d e c a la la g e Ga Ga u c he he ( D , j + 1 , n − nbSuppr − 1 ) ; nbSuppr++; } else
j ++; return nbSuppr ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / i n t tempsTotalDeConnexion( i n t C [ ] ,
int D [ ] ,
int n ,
int
i)
{ D [ i ] = c a l c u l e Te Te m p s T o ta ta l C o n n e xi xi o n C l i e nt nt ( C, C, D , n , return s u pp pp r im im e Do Do u bl bl o ns ns ( C , D , n , i ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t tempsTotauxDeConnexion( i n t C [ ] ,
int D [ ] ,
int n)
{ int i = 0 ; while ( i < n )
n −= t e m ps ps T o ta ta l D e Co Co n n ex ex i o n ( C , D , n , return n ;
}
A.6.6
Chaines de caract` eres eres
void a f f i c h e C h a i n e ( char s [ ] )
{ int i = 0 ; while ( s [ i ] ! = 0 )
p r i n t f ( ”% ”%c ” , s [ i + + ] ); ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t l o n g u e u r ( char s [ ] )
{ int l = 0 ; while ( s [ l + +] +] ! = 0 ) ; return l ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / char e x t r a i t ( char s [ ] ,
int n)
{ return
s[ n − 1];
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void s u b s ( char s [ ] ,
int n ,
char a )
161
i + +) +) ;
i );
i)
{ s[ n − 1] = a ; }
A.6.7 A.6.7
Progra Programma mmatio tion n d’un d’un pendu pendu
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define N 30
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void
i n i t i a l i s e ( char t [ ] , i n t n )
{ int i ; for ( i = 0 ;
i < n ; t[i] = ’ ’; t [n] = 0;
i ++ ++)
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ int
v e r i f i e ( char t [ ] , char k [ ] , char c )
{ i n t i , o cc cc = 0 ; for ( i = 0 ; t [ i ]
!= 0 ;
i ++ ++)
{ i f ( t [ i ] == c && k [ i ] == ’
’)
{ k[ i ] = c ; occ++; } } return
occ ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t terminePendu( char t [ ] )
{ int i = 0 ; while ( t [ i ] ! = ’
’ && t [ i ] ! = 0 ) i++; return t [ i ] == 0; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / int
i t e r a t i o n P e n d u ( char t [ ] , char k [ ] )
{ char l e t t r e ,
l e t t r e s Tr Tr o u v e e s ; p r i n t f ( ” S a i s se s e z une l e t t r e : ” ) ; s c a n f ( ”% ”%c ” , & l e t t r e ) ; getchar (); l e t tr t r e s Tr T r o uv uv e e s = v e r i f i e ( t , k , l e t t r e ) ; p r i n t f ( ”% ”%d o c c u r r e n c e ( s ) d e %c t r o u v e e ( s ) \ n ” , l e t t re r e s T r ou ou v e e s , affiche Chaine (k ); p r i n t f ( ” \ n” ); return l e t t r e s T r o u v e e s ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t t r o u v e r P e n d u ( char t [ ] ,
int
nbEssais )
{ char k [ N ] ; int lettresATrouver = longueur ( t ) − 1 ;
i n i t i a l i s e (k , let tre sAT rou ver ) ; while ( nbEssa is −− > 0 && && l e t t r e s A T r o u v e r > 0 )
l e t t r e s A T r o u v e r −= i t e r a t i o nP nP e n d u ( t , k ) ; return ( ! l e t t r e s A T r o u v e r ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void s a i s i e C h a i n e ( char t [ ] ,
int n)
{ i = 0; fgets (t , n, stdin ); while ( t [ i ]!= 0) i++; int
162
lettr e );
i f ( t [ i − 1 ] == == ’ \ n ’ )
t [ i −1 ] = 0 ; else while ( g e t c h ar a r ( ) ! = ’ \ n ’ );
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void jouerPendu ()
{ char t [N] ;
˜ t ro p r i n t f ( ” S a i s s e z l e mot A r o uv u v er er : ” ) ; saisieChaine (t , N); i f ( t r o u v er er P e nd nd u ( t , N ) ) p r i n t f ( ” Yo You w in in ! \ n” ); else
{ p r i n t f ( ” Yo You l o s e . . . \ n L e mot e s t : ” ) ; affich eChaine ( t ); p r i n t f ( ” \ n” ); } }
A.6. A.6.8 8
Tris ris
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define N 30
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void e c h a n g e ( i n t t [ ] ,
int i ,
j)
int
{ i n t temp temp = t [ i ] ; t [ i ] = t [ j ]; t [ j ] = t em em p ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void o r d o n n e ( i n t T [ ] ,
int a ,
int b)
{ i f (T[ a ] > T [ b ] )
e c ha ha ng n g e ( T, T, a , b ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void b u l l e ( i n t T [ ] ,
int a ,
int b)
{ int i ; for ( i = a + 1
; i <= b ; i ++ ++) o r do do n ne ne ( T , i − 1 , i ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void t r i B u l l e ( i n t T [ ] ,
int n)
{ int i ; f o r ( i = n− n −1 ;
i > 0 ; i −−) −−) b u l l e ( T, T, 0 , i ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t indiceDuMin( i n t T [ ] ,
int i ,
int
j)
{ i n t i Mi Mi n = i , k ; f o r ( k = i + 1 ; k <= j
; k++) iMin = (T[ iMin ] <= T [ k ] ) ? i M i n : k ; return iMin ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void p l a c e M i n ( i n t T [ ] ,
int i ,
int j ,
int k )
{ e c h an an g e ( T , k , i n di di c eD eD u Mi Mi n ( T , i , j ) ) ; }
163
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void t r i P a r S e l e c t i o n ( i n t T [ ] ,
int n)
{ int i ; for ( i = 0 ;
i < n − 1 ; i ++ ++) p la l a c eM eM i n (T (T , i , n − 1 , i ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t main()
{ i n t T[N] ; int i ; for ( i = 0 ;
i < N ; i ++ ++) T [ i ] = r a nd nd ( ) % 1 0 0 ; a f f i c h e T a b l e a u ( T, T, N ) ; t r i B u l l e ( T, T, N ) ; a f f i c h e T a b l e a u ( T, T, N ) ; m i r o i r ( T, T, N ) ; a f f i c h e T a b l e a u ( T, T, N ) ; t r i P a r S e l e c t i o n ( T, T, N ) ; a f f i c h e T a b l e a u ( T, T, N ) ; return 0 ; }
164
A.7 A.7
Stru Struct ctur ures es
A.7. A.7.1 1
Heur Heures es
#inclu de de< < s t d i o . h> t y pe pe d ef ef s t r u c t
{ i n t heure ; i n t minute ;
}heure t ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ R et et ou ou rn rn e ue ue n s t r u c tu tu r e i n i t i a l i s e e v a l e u r s h e ur u r e s e t m in i n ut u t es es . ∗ /
a ve ve c l e s
h e u r e t c r e e rH r H e u re re ( i n t h e u r e s , i n t m i n u t e s ) { h e ur u r e t x = { h e u r es es , m i n ut ut e s } ; return x ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ C o n v e r t i t t e n m i nu nu t es es . ∗ / i n t e n Mi Mi n ut ut e s ( h e u r e t
t)
{ return 60 ∗ t . heure + t . minute ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ C o nv n v e rt r t i t l a d ur u r ee ee t e n h e u re re t . ∗ /
h e u r e t e nH n H e ur ur e s ( i n t t ) { h e ur u r e t x = { t / 6 0% 0% 12 12 , t % 6 0} 0} ; return x ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f i c h e x a u f o r m a t h h : mm
∗ / void a f f i c h e H e u r e ( h e u r e t x )
{ p r i n t f ( ” %0 %02 d: d: %0 %0 2 d” d” , x . h e u re re , x . m i n ut ut e ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A dd dd it i t io i o nn nn e a e t b . ∗ /
h e u r e t a d d i ti ti o n n eH e H e u r es es ( h e u r e t a , h e u r e t b ) { return e n He He u r es es ( e n Mi Mi n ut ut e s ( a ) + e n Mi Mi n ut ut e s ( b ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ R et et ou ou rn rn e l a v a l eu e u r a a j o u te t e r a x p ou ou r o b t en e n i r 0 0 : 00 00 . ∗ /
heure t {
i n v e r se s e H e u re re ( h e u r e t x )
return e n H e u r es es ( e n M i nu nu t e s ( c r e e r H e u r e ( 1 2 ,
0))
− e n M i nu nu t e s ( x ) ) ;
165
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ S o us u s t ra ra i t b a a .
∗ / h e u re r e t s o u s t ra r a i t H e ur u r e s ( h e u re r e t a , h e u re re t b ) { return a d d i t i o n n e H e u r e s ( a , i n v e r s e H e u r e ( b ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ R et et ou ou rn r n e 1 s i a > b , −1 s i a < b , 0 s i a = b . ∗ / i n t c om o m pa pa re r e He He ur ur es es ( h e u r e t a ,
heure t b)
{ i f (a . heure < b. heur e ) return − 1; i f (a . heure > b. heur e ) return 1 ; i f (a . minute < b . m i n u t e ) return − 1; i f (a . minute > b . m i n u t e ) return 1 ; return 0 ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ R e t o u rn rn e l a p l us u s p e t i t e d es es h eu e u re re s a e t b . ∗ /
h e u r e t m in in He He ur ur e ( h e u r e t a , h e u r e t b ) { i f ( c o m p a r e He He u r e s ( a , b ) <= 0 ) return a ; else return b ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ Pou r t e s t e r ∗ /
les
f o n c ti ti o n s . . .
i n t main()
{ return
0;
}
A.7. A. 7.2 2
R´ eper ep erto toir ire e t´ el´ el´ epho ep honi niqu que e
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< < s t r i n g . h> #define TAILLE TAILLE NOM 50 #define TAILLE TAILLE TEL 10 #define NB MAX MAX NOM NOMS S 5 00
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ struct
personne
{ char nom[ TAIL TAILLE LE NOM+ NOM+ 1] ; char tel [TAILLE TEL+1];
}; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ void a f f i c h e P e r s o n n e ( s t r u c t
p e r s o n ne ne p )
{ p r i n t f ( ”% ”%s : %s \ n ” , p . no nom , p . t e l ) ; }
166
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/
c e s d o n t l e nom n e co mm / / A f f ic i c h e t o u t es e s l e s entr A ˜ mmen ce ce p a s ˜ / / p a r un c a r ac ac t A ¨re nul . void a f f i c h e R e p e r t o i r e ( s t r u c t p e r s o n n e r [ ] ) { int i = 0 ; while ( i < NB MAX NOMS && && r [ i ] . nom nom [ 0 ] != 0) { p r i n t f ( ”% ”%d ” , i ) ; aff ich ePe rso nne ( r [ i ] ) ; i ++; ++; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ ¨ r e n u l . // U Un n e n r e gi gi s t r em e m e n t e s t v i d e s i l e nom co commence p ar ar l e c a ra ra c t A ˜ c pertoire. / / C e tttt e f o nc n c ti t i on on i n i t i a l i s e l e r A void i n i t R e p e r t o i r e ( s t r u c t p e r s o n n e r e p [ ] ) { int i ; f o r ( i = 0 ; i < NB MAX NOMS ; i ++) ++) r e p [ i ] . n om om [ 0 ] = 0 ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/
c / / r et e t o ur ur n e u n n no o m b r e p o s i t i f s i l a p r em em i A ˜ ¨r ¨r e p e rs rs o nn nn e a u ne ne clA ˜ ˜ ˜ c e l l e d e l a d eu c rieure A / / s u pA eu x i A¨ A¨me ˜ me personne . i nt comparePersonnes(struct
p e rs r s o n ne ne p , s t r u c t p e r s o nn nn e q )
{ return strncmp (p .nom, .nom,
q .nom, .nom, TAILLE NOM) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void d e c a l a g e D r o i t e ( s t r u c t
p e r s o n ne ne r e p [ ] , i n t i n f , i n t s u p )
{ int i ; f o r ( i = s up up
; i >= iin nf ; rep [ i +1] = rep [ i ] ;
i −−) −−)
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ void d e c a l a g e G a u c h e ( s t r u c t
p e r s o n ne ne r e p [ ] , i n t i n f , i n t s u p )
{ int i ; for ( i = i n f
; i <= su su p ; rep [ i − 1 ] = r e p [ i ] ;
i ++ ++)
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ ˜ c l A c ment d i s p o n i b l e d an / / R et et ou ou r ne ne l ’ i n d i c e d u p r em em i er er A an s l e in t trouveFin ( struct personne rep [ ] ) { int i = 0 ; while ( i < NB MAX NOMS && && re p [ i ] . nom nom [ 0 ] != 0) i ++; ++; i f ( i != NB MAX MAX NOMS) return i ; return − 1; }
t a b l e a u . −1 s i
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ˜ ˜ c p er c . / / A j o u t e u n e p e r s o nn nn e a u r A er to to ir ir e , l e m a i n t i e nt nt tr iA i n t a j o u t e S t r u c t P e r s o n n e ( s t r u c t p e r s o nn s t r u c t nn e r e p [ ] , p e r s o nn nn e p ) { int sup = trouveFin ( rep ); int i n f = 0 ; i f ( sup == == −1) return − 1; while ( i n f < s u p && && ( c o m p a r e P e r s o n n es es ( p , r e p [ i n f ] ) > 0 ) ) inf++; d e c a l a g e D r o i t e ( r e p , i n f , s up up − 1 ) ;
167
˜ c p er l e rA er to to ir ir e e s t p l e i n .
rep[ inf ] = p; 1;
return
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ c pertoire. / / A j o u t e u n e p e r s o nn nn e a u r A i n t a j o u t e P e r s o n n e ( s t r u c t p e r s o nn nn e r [ ] , char nom[ ] , char t e l [ ] ) { s t r u c t p e rs r s o n ne ne p ; st rnc py (p .nom, .nom, nom, nom, TAILLE NOM) ; s t r n c p y ( p . t e l , t e l , TAILLE TE TEL ) ; p .nom[TAI .nom[TAILLE NOM] = 0; p. te l [TA [TAILLE TE TEL] = 0; return a j o u t e St S t r u c t Pe Pe r s o n n e ( r , p ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/
c butN / / A f f i c h e t o u t e s l e s p e r so so n n es es d o nt nt l e nom co commence p a r d A ˜ butNom. om. void t r o u v e P e r s o n n e s ( s t r u c t p e r s o n ne ne r [ ] , char debutNom [ ] ) { int i ; f o r ( i = 0 ; i < NB MAX NOMS ; i ++) ++) i f ( r [ i ] . nom [ 0 ] ! = 0 && ! strncmp( r [ i ] . nom, debu debutN tNom om , st rl en (debut (debutNo Nom m )) ) { p r i n t f ( ”% ”%d ” , i ) ; aff ich ePe rso nne ( r [ i ] ) ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ / / E ch c h an an ge ge l e s e n r e gi gi s t r em em e n t d ’ i n d i c e s i e t j . void e c h a n g e P e r s o n n e s ( s t r u c t p e r s o n ne ne r [ ] , i n t i , i n t j ) { s t r u c t p e rs r s o n ne ne p ; p = r [ i ]; r [ i ] = r [ j ]; r [ j ] = p; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ ˜ c l A c ment d ’ i n d i c e i a ve // E En n c a s d e c h an an g em em en en t d e no nom , p e rm rm u te te l ’ A ve c s e s v o i s i n s c . // jusqu ’A ˜ c e q ue u e l e t ab a b le l e au a u s o i t tr tri A ˜ void t r i L o c a l ( s t r u c t p e r s o nn nn e r [ ] , i n t i n d i c e ) { i f ( i n d i c e > 0 && c o m p a r e Pe Pe r s o n n e s ( r [ i n d i c e − 1 ] , r [ i n d i c e ] ) > 0 ) { e c h a n g eP eP e r s o nn nn e s ( r , i n d i c e − 1 , i n d i c e ) ; triLocal (r , indice − 1); } i f ( i n d i c e < NB MAX NOMS − 1 && && r [ i n d i c e + 1 ] . no nom [ 0 ] ! = 0 && c o m pa pa r e Pe Pe r s on on n es es ( r [ i n d i c e ] , r [ i n d i c e + 1 ] ) > 0 ) { e c ha h a n g eP eP e rs r s o nn nn e s ( r , i n d i c e , i n d i c e + 1 ) ; t r i L o ca c a l ( r , i n d ic ic e + 1 ) ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ / / R e mp mp la la ce ce l e nom d ’ i n d i c e i n d i c e p a r n ou ouveauNom , p u i s t r i e l e t a b l e a u . void changeNom( s t r u c t p e r s o nn nn e r [ ] , i n t i n d i c e , char nouveauNom [ ] ) { st rnc py ( r [ in di ce ] .nom, .nom, nouve nouveauN auNom om , TAILLE NO NOM) ; r [ in di ce ] . nom[TA om[TAILLE NO NOM] = 0; triLocal (r , indice ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ ˜ c ro d ’ in dic e ind ice par nouv c ro . // Rempla Remplace ce le num A uve eauN uNu um A void changeNumero( s t r u c t p e r s o nn nn e r [ ] , i n t i n d i c e , char nouveauTel [ ] ) { str ncpy ( r [ ind ic e ] . tel , nouveauTel nouveauTel , TAILLE TE TEL) ; r [ ind ic e ] . t el [ TAILLE TE TEL] = 0; }
168
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/ ˜ ˜ c cale l e s A c l A c ments s u i v a n t s p o u r / / S up up pr pr im im e l a p e rs rs o nn nn e d ’ i n d i c e i n d i c e , d A ˜ ˜ c v i t e r l e s ” t r ou // A o u s ” d a ns ns l e t a b le le a u . void s u p p r i m e P e r s o n n e ( s t r u c t p e r s o n ne ne r [ ] , i n t i n d i c e ) { int sup = trouveFin ( r ); i n t i n f = i n d ic ic e ; d e ca ca l ag ag e Ga Ga u ch ch e ( r , i n f + 1 , s up up − 1 ) ; r [ sup − 1 ] . n o m [ 0 ] = 0 ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗∗/
main() { perso nne re pe rt oi re [NB MAX NOMS] ; initRe pertoi re ( reper toir e ); a j o u t e P e r s o n n e ( r e p e r t o i r e , ” t o t o ” , ” 0 1 2 3 45 45 6 7 89 89 ” ) ; a j o u t e P e r s o n n e ( r e p e r t o i r e , ” t y t y ” , ” 0 1 2 3 45 45 6 7 89 89 ” ) ; ajoutePe rsonne ( rep ert oir e , ” t i t i ” , ”0123456789” ); a j o u t e P e r s o n n e ( r e p e r t o i r e , ” t a t a ” , ” 0 1 2 3 45 45 6 7 89 89 ” ) ; a j o u t e P e r s o n n e ( r e p e r t o i r e , ” t u t u ” , ” 0 1 2 3 45 45 6 7 89 89 ” ) ; afficheRepertoire ( repertoire ) ; s u p pr pr i m eP eP e r so so n n e ( r e p e r t o i r e , 2 ) ; afficheRepertoire ( repertoire ) ; getch () ; struct
}
169
A.8 A.8 A.8.1 A.8.1
Poin ointeur teurss Exerci Exercices ces sans sans sous-p sous-prog rogram rammes mes
Tableau de carr´ car r´ es es #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< i n t main()
{ int∗ t ; int k , n ;
p r i n t f ( ” Q ue ue ll l l e e s t l a t a i l l e du t ab a b le l e au au ? ” ) ; sc anf (”% (”%d” , &n ); t = ( i n t ∗ ) malloc (n ∗ s i z e o f ( i n t ) ) ; i f ( t == NULL) NULL) exit (0); ∗t = 1; f o r ( k = 1 ; k < n ; k++) ∗( t + k ) = ∗( t + k − 1 ) + 2 ; p r i n t f ( ”% ”%d p r e m i e r s n om om br br es es i m p a i r s : \ n ” , n ) ; f o r ( k = 0 ; k < n ; k++) p r i n t f ( ”% ”%d ” , ∗ ( t + k ) ) ; p r i n t f ( ” \ n” ) ; f o r ( k = 1 ; k < n ; k++) ∗ ( t + k ) += += ∗ ( t + k − 1 ) ; p r i n t f ( ”% ”%d p r e m ie ie r s c a r r e s : \ n ” , n ) ; f o r ( k = 0 ; k < n ; k++) p r i n t f ( ”% ”%d ” , ∗ ( t + k ) ) ; p r i n t f ( ” \ n” ) ; fr ee ( t ); return 0 ; }
Matrices et pointeurs de pointeurs #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< i n t main()
{ i n t ∗∗ T; int i , j , n ;
p r i n t f ( ” V al a l eu eu r d e n ? ” ) ; sc anf (”% (”%d” , &n ); T = ( i n t ∗ ∗ ) m a l l o c ( n ∗ s i z e o f ( i n t ∗ ) ) ; i f (T == NULL) NULL) exit (0); f o r ( i = 0 ; i < n ; i ++ ++) { ∗ ( T + i ) = ( i n t ∗ ) malloc (n ∗ s i z e o f ( i n t ) ) ; i f ( ∗ (T + i ) == NUL NULL) exit (0); f o r ( j = 0 ; j < n ; j ++ ++) ∗ ( ∗ (T + i ) + j ) = 0 ; ∗ ( ∗ (T + i ) + i ) = 1 ; } f o r ( i = 0 ; i < n ; i ++ ++) { f o r ( j = 0 ; j < n ; j ++ ++) p r i n t f ( ”% ”%d ” , ∗ ( ∗ ( T + i ) + j ) ) ; p r i n t f ( ” \ n” ); } f o r ( i = 0 ; i < n ; i ++ ++) f r e e ( ∗ (T + i ) ) ; f r e e (T (T ) ; return 0 ; }
Copie Cop ie de chaˆ chaˆınes ıne s de caract` car act`eres eres #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define B SI SI ZE ZE 1 0
170
#define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char bu ff er [ B SIZE ] , int l e n = 0 , i ;
∗ copie ;
˜ ¨r p r i n t f ( ” S a i s i s s e z u n e c h ai a i n e d e c a ra r a c tA ¨ r e : \ n” ); f g e t s ( b u f f e r , B SI SI ZE ZE , s t d i n ) ; while ( b u f f e r [ l e n ] ! = 0 ) l e n ++; i f ( b u f f e r [ l e n − 1 ] != != ’ \n ’ ) CLEAR BUFFER BUFFER;; else
l e n −−; −−; c o pi p i e = ( char ∗ ) malloc ( s i z e o f ( char ) ∗ ( l e n + 1 ) ) ; f o r ( i = 0 ; i < l e n ; i ++ ++) ∗( c o p i e + i ) = b u f f e r [ i ] ; ∗( c o p i e + l e n ) = 0 ; i = 0; while ( ∗ ( c o p i e + i ) ! = 0 ) p r i n t f ( ”%c ” , ∗ ( c o p i e + i + +) +) ) ; p r i n t f ( ” \ n” ) ; fre e ( copie ); return 0 ; }
Tableau de chaˆ chaˆınes ıne s #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #define B SI SI ZE ZE 1 0 #define NB S 4 #define CLEAR BUFFER while ( g e t c h ar ar ( ) ! = ’ \ n ’ ) i n t main()
{ char bu ff er [ B SIZE ] , ∗∗ c o p i e s ; int l e n = 0 , j , i ; c o pi p i e s = ( char ∗∗ ) m a l l o c ( NB NB S ∗ s i z e o f ( char ∗ ) ) ; f o r ( j = 0 ; j < NB S ; j ++ ++)
{ ˜ ¨r p r i n t f ( ” S a i s i s s e z u n e c h ai a i n e d e c a ra r a c tA ¨ r e : \ n” ); f g e t s ( b u f f e r , B SI SI ZE ZE , s t d i n ) ; while ( b u f f e r [ l e n ] ! = 0 ) l e n ++; i f ( b u f f e r [ l e n − 1 ] != != ’ \n ’ ) CLEAR BUFFER BUFFER;; else
l e n −−; −−; ∗ ( c o p i e s + j ) = ( char ∗ ) malloc ( s i z e o f ( char ) ∗ ( l e n + 1 ) ) ; f o r ( i = 0 ; i < l e n ; i ++ ++) ∗(∗( cop ies + j ) + i ) = b uffer [ i ]; ∗(∗( c o p i e s + j ) + l e n ) = 0 ; } for ( j = 0 ;
j < NB S ; j ++ ++)
{ i = 0; while ( ∗ ( ∗ ( c o p i e s + j ) + i ) ! = 0 )
p r i n t f ( ” %c %c ” , ∗ ( ∗ ( c o p i e s + j ) + i + +) +) ); ); p r i n t f ( ” \ n” ); free (∗( copies + j )); } fre e (copie s ); return 0 ; }
A.8.2
Point Pointeurs eurs sans ´ etoiles etoiles et triangle de Pascal
#inclu de de< < s t d i o . h> #inclu de de< #inclu de de< < s t d l i b . h> int
getInt Val ( int ∗ p)
{ return ∗ p ;
} void s e t I n t V a l ( i n t ∗ p ,
int
val )
{
171
∗p = v a l ; } int∗ getTiAdr( int ∗ t ,
i)
int
{ return
t + i;
} i n t getTiVa l ( i n t ∗ t ,
int
i)
{ return
g e t I n t V a l ( g e t T iA iA d r ( t ,
i )) ;
} void s e t T i V a l ( i n t ∗ t ,
int i ,
val )
int
{ s e t I n t V a l ( g e t T iA iA d r ( t ,
i ) , val );
} void s w a p I n t ( i n t ∗ a ,
int∗ b)
{ i n t temp temp ;
s e t I n t V a l ( &t &te mp mp , g e t I n t V a l ( a ) ) ; setIntVa l (a , getIntVal (b )) ; s e t I n t V a l ( b , t em em p ) ; } void s w a p T i j ( i n t ∗ t ,
int i ,
j)
int
{ s w ap ap I nt nt ( g e tT tT i Ad Ad r ( t ,
i ) , g e tT tT i Ad Ad r ( t , j ) ) ;
} i n t ∗∗
g e t T i A d r ( i n t ∗∗ T,
int
i)
{ return
(T + i ) ;
} i n t ∗ g e t T i ( i n t ∗∗ T,
int
i)
{ return ∗ g e t T i A d r ( T, T,
i );
} void s e tT tT
A d r ( i n t ∗∗ t , i n t ∗ p )
{ ∗t = p; } void s e t T i ( i n t ∗∗ t ,
int i ,
int ∗ p)
{ setT
A d r ( g e tT tT i A d r ( t ,
i ) , p) ;
} void c re r e at a t eT eT
( i n t ∗∗ T,
int n ,
i n t m)
{ int i ; for ( i = 0 ;
i < n ;
i ++ ++)
{ s e t Ti T i ( T , i , ( i n t ∗ ) mall oc (m ∗ s i z e o f ( i n t ) ) ) ; i f ( ge tTi (T, i ) == NU NULL) { p r i n t f ( ” H ea ea p o v e r f l o w \ n” ); e x i t ( − 1 ); } } } i n t ∗ getTijAdr ( i n t ∗∗ t ,
int i ,
int
j)
{ return g et e t Ti Ti Ad Ad r ( g e t T i ( t ,
i ) , j );
} int
g e t T i j V a l ( i n t ∗∗ t , i n t i , i n t j )
{ return
g e t I n t V a l ( g e t T i jA jA d r ( t , i , j ) ) ;
} void s e t T i j V a l ( i n t ∗∗ t ,
int i ,
int j ,
int
val )
{ s e t Ti Ti V a l ( g e t T i ( t , i ) , j , v a l ) ; / / o u b i e n s e tI t I n t Ad A d r ( g e tT tT i j Ad Ad r ( t , i , j ) , v a l ) }
172
int
C j i ( i n t ∗∗ t , i n t i , i n t j )
{ i f ( j == 0 | | i == j ) return 1 ; return g e t T i j Va Va l ( t , i − 1 , j −1 ) + g e t T i jV jV a l ( t ,
i −1 , j ) ;
} void m a l l o c P a s c a l ( i n t ∗∗ p ,
int n)
{ int i ; for ( i = 0 ;
i <= n ;
i ++ ++)
{ s e tT t T i ( p , i , ( i n t ∗ ) m a l l o c ( ( i + 1 ) ∗ s i z e o f ( i n t ) ) ) ; i f ( ge tTi (p , i ) == NU NULL) { p r i n t f ( ” H ea ea p o v e r f l o w \ n” ); e x i t ( − 1 ); } } } void s e t C j i ( i n t ∗∗ t ,
int n)
{ int i , j ; f o r ( i = 0 ; i <= n ; i ++ ++) f o r ( j = 0 ; j <= i ; j ++ ++)
s e tT t T i jV jV a l ( t , i , j ,
C j i (t , i , j ));
} i n t ∗∗
pascal ( int n)
{ i n t ∗∗ p ; p = ( i n t ∗ ∗ ) m a l l o c ( n ∗ s i z e o f ( i n t ∗ ) ) ; i f ( p == NULL) NULL) { p r i n t f ( ” He He ap ap o v e r f l o w \ n” ); e x i t ( − 1) ; } m a l l o c Pa Pa s c a l ( p , n ) ; setC j i (p, n); return p ;
} void p r i n t P a s c a l ( i n t ∗∗ p ,
int n)
{ int i , j ; for ( i = 0 ;
i <= n ;
i ++ ++)
{ for ( j = 0 ;
j <= i ; j + ++ +) p r i n t f ( ”% ”%d ” , g e t T i jV jV a l ( p , i , j ) ) ; p r i n t f ( ” \ n” );
} } void f r e e P a s c a l ( i n t ∗∗ p ,
int n)
{ int i ; for ( i = 0 ;
i <= n ;
i ++ ++)
{ f r e e ( g e t Ti Ti ( p , } free (p);
i ));
} main() { i n t ∗∗ p = p a s c a l ( 1 5 ) ; p r i n tP tP a s c a l ( p , 1 5 ) ; }
A.8.3
Fonctions onction s r´ ecursives ecursives
#inclu de de< < s t d i o . h> t y pe pe d ef ef s t r u c t
{ i n t heure ; i n t minute ;
}heure t ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
173
i n t sommeTab( i n t ∗ t ,
int n)
{ int i , s = 0 ; for ( i = 0 ; i < n ;
i ++ ++)
s += ∗ ( t + i ) ; return s ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t sommeTabRec( i n t ∗ t ,
int n)
{ i f ( n > 0 ) return ∗ t + somm sommeT eTab abRe Rec( c( t + 1 , n − 1 ) ; return 0 ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void i n i t T a b ( i n t ∗ t ,
int n)
{ int i ; for ( i = 0 ;
i < n ; ∗( t + i ) = i + 1 ;
i ++ ++)
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void i n i t T a b R e c ( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ ∗( t + n − 1 ) = n ; i n i t Ta Ta b R e c ( t , n − 1 ) ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void p r i n t T a b ( i n t ∗ t ,
int n)
{ int i ; for ( i = 0 ;
i < n ; i ++ ++) p r i n t f ( ”% ”%d ” , ∗ ( t + i ) ) ; p r i n t f ( ” \ n” ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void printTabRec( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ p r i n t f ( ”% ”%d ” , ∗ t ) ; p r i n tT tT a b R ec ec ( t + 1 , n − 1 ) ; } else
{ p r i n t f ( ” \ n” ); } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void swap( i n t ∗ t ,
int i ,
int
j)
{ i n t temp temp = ∗ ( t + i ) ; ∗( t + i ) = ∗( t + j ) ; ∗ ( t + j ) = t em em p ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void mirrorTab( i n t ∗ t ,
int n)
{ i n t i = 0 , j = n − 1; while ( i < j )
{ s wa wa p ( t , i , j ) ; i++;
174
−−; j −−; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / void mirrorTabRec( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ sw wa a p ( t , 0 , n − 1) ; m i r ro ro r T ab ab R e c ( t + 1 , n − 2 ) ; } } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ int
fin d ( int∗ t , int n , int x )
{ int i ; f o r ( i = 0 ; i < n ; i ++ ++) i f ( ∗ ( t + i ) == x ) return 1 ; return 0 ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i n t findR ec ( i n t ∗ t ,
int n ,
int x )
{ i f (n == == 0) return 0 ; i f ( ∗ t == x ) return 1 ; return f i n d R e c ( t + 1 , n − 1 , x ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ int
d i s t i n c t V a l u e s ( int∗ t , int n)
{ i n t i , dv = 1 ; for ( i = 0 ; i < n − 1 ;
i ++ ++) dv += += ! f i n d ( t + i + 1 , n − 1 − i , ∗ ( t + i ) ) ; return dv ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ int
distinctVa luesRec ( int∗ t , int n)
{ i f (n == == 0) return 0 ; return d i s t i n c t V a l ue ue s R e c ( t + 1 , n − 1 )
+ ( f i n d R e c ( t + 1 , n − 1 , ∗ t ) )? )? 0 : 1 ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
h e u r e t c r e e rH r H e u re re ( i n t h e u r e s , i n t m i n u t e s ) { h e ur u r e t x = { h e u r es es , m i n ut ut e s } ; return x ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t e n Mi Mi n ut ut e s ( h e u r e t
t)
{ return 60 ∗ t . heure + t . minute ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ h e u r e t e nH n H e ur ur e s ( i n t t ) { h e ur u r e t x = { t / 6 0% 0% 12 12 , t % 6 0} 0} ; return x ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
175
void a f f i c h e H e u r e ( h e u r e t x )
{ p r i n t f ( ” %0 %02 d: d: %0 %0 2 d” d” , x . h e u re re , x . m i n ut ut e ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ h e u r e t a d d i ti ti o n n eH e H e u r es es ( h e u r e t a , h e u r e t b ) { return e n He He u r es es ( e n Mi Mi n ut ut e s ( a ) + e n Mi Mi n ut ut e s ( b ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
heure t {
i n v e r se s e H e u re re ( h e u r e t x )
return e n H e u r es es ( e n M i nu nu t e s ( c r e e r H e u r e ( 1 2 ,
0))
− e n M i nu nu t e s ( x ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
h e u re r e t s o u s t ra r a i t H e ur u r e s ( h e u re r e t a , h e u re re t b ) { return a d d i t i o n n e H e u r e s ( a , i n v e r s e H e u r e ( b ) ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t c om o m pa pa re r e He He ur ur es es ( h e u r e t a ,
heure t b)
{ i f (a . heure < b. heur e ) return − 1; i f (a . heure > b. heur e ) return 1 ; i f (a . minute < b . m i n u t e ) return − 1; i f (a . minute > b . m i n u t e ) return 1 ; return 0 ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ h e u r e t m in in He He ur ur e ( h e u r e t a , h e u r e t b ) { i f ( c o m p a r e He He u r e s ( a , b ) <= 0 ) return a ; else return b ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void a f f i c h e T a b H e u r e s ( h e u r e t ∗ t ,
int n)
{ i f ( n > 0 )
{ a f f i c h e H e u r e (∗ t ) ; printf (” ” ); afficheTabHeures ( t + 1 , n − 1 ) ; } } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void i n i t T a b H e u r e s ( h e u r e t ∗ t ,
int n ,
h e ur u r e t d ep ep ar ar t , h e ur u r e t p as as )
{ i f ( n > 0 )
{ ∗t = depart ; i n i t T a b He He u r e s ( t + 1 , n − 1 , addition neHeures (depart , pas ) , pas ); } } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ h e u r e t s om om me me Ta Ta bH bH eu eu re re s ( h e u r e t ∗ t , i n t n )
176
{ i; h e u re r e t r e s = c r ee e e r He H e u re re ( 0 , 0 ) ; f o r ( i = 0 ; i < n ; i ++ ++) res = additionneHeures ( res , ∗( t + i ) ) ; return r e s ; int
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
heu re t sommeT sommeTabH abHeu eures resRec( Rec( heu re t ∗ t , i n t n ) { i f (n == == 0) return c r e e r H e u r e ( 0 , 0 ) ; return a d d i t i o n n e H e u r e s (∗ ( ∗ t , sommeT sommeTabH abHeur euresR esRec( ec( t + 1 , n − 1 ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ /
h e u r e t m in in Ta Ta bH bH eu eu re re ( h e u r e t ∗ t , i n t n ) { i f (n == == 1) return ∗ t ; else return minHeure( ∗ t ,
minTab minTabHeu Heure( re( t + 1 , n − 1 ) ) ;
}
A.8. A.8.4 4
Tri fusi fusion on
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< #define MOD 10 00 0
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e l e s n e le l e me m e nt n t s d u t a b le le a u t .
∗ / void p r i n t T a b ( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ p r i n t f ( ”% ”%d ” , ∗ t ) ; p r i nt nt T a b ( t + 1 , n − 1 ) ; } else
p r i n t f ( ” \ n” ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ P l ac ac e n e l em e m e nt nt s a l e a t o i r e s d e v a l e u r s m ax ax im im al al es es MOD − 1 d a n s l e t a bl b l e au au t . ∗ / void i n i t T a b ( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ ∗ t = ran d() %MOD; initTab ( t + 1 , n − 1 ); } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ R et et ou ou rn rn e u n t a b l e a u d e n e l e m e n t s a l l o u e d y na na mi mi qu qu em em en en t . ∗ / i n t ∗ createT ab ( i n t n )
{ i n t ∗ t = ( i n t ∗ ) malloc ( s i z e o f ( i n t ) ∗ n ) ; i f ( t == NULL) NULL)
{ p r i n t f ( ” n o memory a v a l a i b l e \ n” );
177
exit (0); } return
t;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ L i b e r e l a z on on e m em emo ir ir e p o i n t e e p a r ∗ t e t m et et c e p o i n t e u r a NU NULL . ∗ / void d e s t r o y T a b ( i n t ∗∗
t)
{ free (∗ t ) ; ∗ t = NUL NULL; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ ( recursive ) R et et ou ou rn rn e l ’ i n d i c e du p l u s p e t i t e l em em en e n t d u t a b l e a u t a n e l em e m e nt nt s . A f fi f i c he h e u n e e rr r r eu e u r s i l e t a bl b l e au a u e s t v id id e . ∗ / i n t indexOfMin( i n t ∗ t ,
int n)
{ i f (n == == 1) return 0 ; i f ( n > 1 )
{ i n t r e c = i nd nd ex ex Of Of Mi Mi n ( t + 1 , n − 1 ) + 1 ; return ( ∗ t < ∗ ( t + r ec e c ) ) ? 0 : r ec ec ;
} p r i n t f ( ” E rr r r eu e u r d an an s l a f o n c t i o n i n d i c e du M in in \ n” ); return − 1; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ E ch ch an an ge ge l e s ∗ /
e l e m en en t s ∗ x e t ∗ y .
void swap( i n t ∗ x ,
int∗ y )
{ i n t temp temp = ∗ x ; ∗x = ∗y ; ∗y = t e m p ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ E ch ch an an g e l e p l u s p e t i t e le l e me me nt n t d u t a b le le a u t a n e l em em e nt n t s a v ec ec l e p re r e mi mi e r . ∗ / void swapMin( i n t ∗ t ,
int n)
{ sw wa a p ( t , t + i n de de x Of Of Mi Mi n ( t , n ) ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ ( recursive ) T ri ri l e t a bl b l e au a u t a n e le l e me me nt n t s a v ec ec l a m et et ho ho de de d u t r i p a arr s e l e c t i o n . ∗ / void s e l e c t i o n S o r t ( i n t ∗ t ,
int n)
{ i f ( n > 0 )
{ s wa wa pM pM in in ( t , n ) ; selectionSort ( t + 1 , n − 1); } }
178
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ (Recursive) R ec ec op op ie i e l e s n e l e m en e n t s d u t a b l e a u s o ur ur c e a l ’ a d r e ss ss e d e s t . ∗ / void copyTab( i n t ∗ s o u r c e ,
int ∗ dest ,
int n)
{ i f ( n > 0 )
{ ∗ d e s t = ∗ source ; c op op yT yT ab ab ( s o u r c e + 1 , d e s t + 1 , n − 1 ) ; } } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ (Recursive) I n t e r c l a s s e l e s n 1 e l em em e nt nt s d e s o u r ce ce 1 a ve v e c l e s n 2 e l em em e nt n t s d e s o u r ce ce 2 . s ou o u rc r c e1 e 1 e t s ou o u rc r c e2 e 2 s on o n t s up u p po p o se s e s t r i e s . L ’ i n t er e r c l as a s s em em e n t s e f a i t e n d i s po po s an a n t c es e s e le l e me m e nt n t s d an an s l ’ o r dr d r e d an an s l e t a b le le a u d e s t . ∗ / void s h u f f l e T a b ( i n t ∗ s o u r c e 1 , i n t ∗ s o u r c e 2 , i n t n1 , i n t n2 )
int ∗ dest ,
{ i f ( n1 > 0
| | n2 > 0 )
{ i f (n1 == 0
||
( n2 > 0 && ∗ s o u r c e 2 < ∗ s o u r c e 1 ) )
{ ∗ d e s t = ∗ source 2 ; s h u f f l e Ta Ta b ( s o u rc rc e 1 , s o u r c e2 e 2 + 1 , d e s t + 1 , n1 , n 2 − 1 ) ; } else
{ ∗ d e s t = ∗ source 1 ; s h u f f l e Ta Ta b ( s o u r c e1 e 1 + 1 , s o ur ur c e 2 , d e s t + 1 , n1 − 1 , n 2 ) ; } } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ T ri r i e l e s n e le l e me m e nt n t s d e t a ve ve c l a m e t ho ho d e du du t r i ∗ / void f u s i o n S o r t ( i n t ∗ t ,
f u s io io n .
int n)
{ i f ( n > 1 )
{ i n t m = n / 2 , ∗q , ∗ r ; q = c r e a te te T a b (m (m ) ; r = t + m; c op op yT yT ab ab ( t , q , m ) ; fusio nSort (q , m); f u s i o n S o r t ( r , n − m) ; s h u f f l eT e T a b ( q , r , t , m, n − m) ; destroyTab(&q );
} } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ Compare l e s p e r fo fo r ma ma n ce ce s e n t e mp mp s d e c a l c u l d es es t r i s p ar ar s e l e ct c t i o n e t p a r f u si si o n . ∗ / int compareSorts( int
f i r s t V a l u e , int lastValue , int step )
{ int i ; int s t a r t , s t o p ; i nt ∗ t , ∗q ;
srand ( time (NU (NULL) ); f o r ( i = f i rs r s t Va V a l ue ue {
;
i <= l a s t V a l ue ue ;
i += s t e p )
179
p r i n t f ( ” w i th th %d %d e l e m en en t s : \ n ” , i ) ; t = c r e a te te T a b ( i ) ; q = c r e a te te T a b ( i ) ; initTab (t , i ); c op op yT yT ab ab ( t , q , i ) ; s t a r t = t i m e ( NU NULL ) ; selectionSort (t , i ); stop = time (NU (NULL) ; p r i n t f ( ” ∗ s e l e c t i o n s o r t : %d %d\ n ” , s t o p − s t a r t ) ; destroyTab(&t ); s t a r t = t i m e ( NU NULL ) ; fusionSort (q , i ); stop = time (NU (NULL) ; p r i n t f ( ” ∗ f u si s i o n s o r t : %d %d \ n ” , s t o p − s t a r t ) ; destroyTab(&q ); } return
0;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / / ∗ Pou r t e s t e r ecrites .. . ∗ /
les
f o n c ti t i o n s a u f u r e t a m es es u r e q u ’ e l l e s
i n t main()
{ c o m p ar ar e S o rt rt s ( 1 0 0 0 0 , 5 0 0 0 0 0 , 1 0 0 0 ) ; 0;
return
}
180
s on on t
A.9 A.9 A.9.1 A.9.1
Fic Fichier hierss Ouvert Ouverture ure et fermet fermeture ure
touch #inclu de de< < s t d i o . h> i n t main( i n t argc , char ∗ argv [ ] )
{ FILE∗ FILE ∗ f ; i f ( a r g c ! = 2 ) { p r i n t f ( ” S y nt nt a x : . / t o u ch ch f na na me me \ n w he he re re f n a me me i s a s t r i n g w it i t ho h o ut ut ” \ ” s pa p a ce c e o r s p e c i a l c h ar a r a ct c t e r\ r\ n” ) ; return −1; } f = f o p e n ( ∗ ( a r g v + 1 ) , ”w” ) ; i f ( f == NULL) NULL) { p r i n t f ( ” E rr r r e ur ur l o r s d e l ’ o u ve v e r tu t u r e du f i c h i e r %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } i f ( f c l o s e ( f ) ! = 0 ) { p r i n t f ( ” E rr r r e ur ur l o r s d e l a f e rm r m e tu t u r e du d u f i c h i e r %s %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } return 0 ; }
A.9. A.9.2 2
Lect Lectur ure e
more #inclu de de< < s t d i o . h> i n t main( i n t argv , char ∗∗
argc )
{ FILE∗ FILE∗ f ; int c ; i f ( a r g v == 1 ) f = f o pe pe n ( ” t o t o ” , ” r ” ) ; else
f = fopen (∗( argc + 1) , ”r” ); i f ( f == NULL) NULL) return
1; c = getc ( f ); while ( c != EO EOF) { p r i n t f ( ”% ”%c ” , c ) ; c = getc ( f ); } p r i n t f ( ” \ n” ); fcl ose ( f ); return 0 ; }
A.9. A.9.3 3
Ecri Ecritu ture re
Alphabet #inclu de de< < s t d i o . h> i n t main( i n t argc , char ∗ argv [ ] )
{ FILE∗ FILE ∗ f ; char c ; i f ( a r g c ! = 2 ) { p r i n t f ( ” S yn yn ta ta x : . / t o uc uc h f na na me me c o n t e n ts t s \ n” \ ” wh w h er er e f na na me me i s a s t r i n g w it i t ho h o ut ut ” \ ” s pa p a ce c e o r s p e c i a l c h ar a r a ct c t e r\ r\ n” ) ; return −1; }
181
f = f o p e n ( ∗ ( a r g v + 1 ) , ”w” ) ; i f ( f == NULL) NULL) { p r i n t f ( ” E rr r r e ur ur l o r s d e l ’ o u ve v e r tu t u r e du f i c h i e r %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } f o r ( c = ’ a ’ ; c <= ’ z ’ ; c ++) fputc(c , f ); i f ( f c l o s e ( f ) ! = 0 ) { p r i n t f ( ” E rr r r e ur ur l o r s d e l a f e rm r m e tu t u r e du d u f i c h i e r %s %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } return 0 ; }
Initialiser un fichier #inclu de de< < s t d i o . h> i n t main( i n t argc , char ∗ argv [ ] )
{ FILE∗ FILE ∗ f ; int i ; i f ( argc < 2 ) { p r i n t f ( ” S yn yn ta ta x : . / t o uc uc h f na na me me c o n t e n ts t s \ n” \ ” w he he re re : \ n− f na na me me i s a s t r i n g w it i t ho h o ut ut ” \ ” s pa p a ce c e o r s p e c i a l c h ar a r a ct c t e r\ r\ n” \ ”− c on o n te t e nt n t s i s a s t r i n g w it it ho ho ut ut ” \ ” s p e c i a l c h a ra r a c t e r\ r \ n” ); return −1; } f = f o p e n ( ∗ ( a r g v + 1 ) , ”w” ) ; i f ( f == NULL) NULL) { p r i n t f ( ” E rr r r e ur ur l o r s d e l ’ o u ve v e r tu t u r e du f i c h i e r %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } f o r ( i = 2 ; i < a r g c ; i ++ ++) { f p u t s ( ∗ ( a r gv gv + i ) , f ) ; i f ( i ! = a r gc gc − 1 ) fputc( ’ ’ , f ); } i f ( f c l o s e ( f ) ! = 0 ) { p r i n t f ( ” E rr r r e ur ur l o r s d e l a f e rm r m e tu t u r e du d u f i c h i e r %s %s \ n” , ∗( a r g v + 1 ) ) ; return −1; } return 0 ; }
A.9.4
Lecture et ´ ecriture ecriture
cp #inclu de de< < s t d i o . h> i n t main( i n t argv , char ∗∗
argc )
{ FILE∗ FILE∗ s o u r c e ; FILE∗ FILE∗ d e s t ; int c ; source = fopen (∗( argc + 1) , ”r” ); d e s t = f o p e n ( ∗ ( a r g c + 2 ) , ”w” ) ; i f ( so ur ce == NUL NULL | | de st == NUL NULL) return 1 ; while ( ( c = g e t c ( s o u r c e ) ) ! = EOF ) { fputc (c , dest ); } f c l o s e ( s o ur ur c e ) ; f c l o s e ( d es es t ) ; return 0 ; }
182
Liste de noms #inclu de de< < s t r i n g . h> #inclu de de< < s t d i o . h> i n t main( i n t argv , char ∗∗
argc )
{ FILE∗ FILE∗ f ; char b u f f e r [ 2 5 0 ] ; f = f o pe p e n ( ∗ ( a r g c + 1 ) , ”w” ) ; i f ( f == NULL) NULL) return 1 ; gets ( buffe r ); while ( s t r c m p ( ”− ”−1 ” , b u f f e r ) ) { fputs ( buffer , f ); fput c ( ’ \ n ’ , f ) ; gets ( buff er ); } fcl ose ( f ); return 0 ; } #inclu de de< < s t r i n g . h> #inclu de de< < s t d i o . h> i n t main( i n t argv , char ∗∗
argc )
{ FILE∗ FILE∗ f ; char b u f f e r [ 2 5 0 ] ; f = f o pe pe n ( ∗ ( a r g c + 1 ) , ” r ” ) ; i f ( f == NULL) NULL) return 1 ; while ( f g e t s ( b u f f e r , 2 4 9 , f ) ) { p r i n t f ( ”% ”%s ” , b u f f e r ) ; } fcl ose ( f ); return 0 ; }
183
A.10 A.10
List Listes es Chaˆ Chaˆın´ ees ees
A.10.1 A.10.1
Poin Pointeu teurs rs et et struc structur tures es
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< t y pe pe d ef ef s t r u c t
{ int i ; char c ;
}st ; i n t main()
{ st∗ p; p = ( s t ∗ ) malloc ( s i z e o f ( s t ) ) ; p−> i = 5 ; p−>c = ’ a ’ ; p r i n t f ( ” p = (%d , %c ) \ n ” , p−>i , p−>c ) ; free (p); return 0 ; }
A.10.2
Maniement Maniement du cha chaˆ ˆınage
Prise en main #inclu de de< < s t d i o . h>
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ t y pe pe d ef ef s t r u c t m a i l l o n { i n t data ; s t r u c t m a i l l o n ∗ next ; }maillon ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ i n t main()
{ m a il i l l o n m, m, p , q , r ; m a i l l o n ∗ ptr ; m . d a ta ta = 1 ; p . d at at a = 2 ; q . d at at a = 3 ; r . d a ta ta = 4 ; m. next = &p; &p; p . ne ne x t = &q &q ; q . next = &r ; r . nex t = NULL; f o r ( p t r = &m ; p t r ! = NU NULL ; p t r = p t r− r −>n e x t ) p r i n t f ( ” d a ta ta = %d %d \ n ” , p t r− r−>d a t a ) ; return 0 ; }
Tableaux #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< #define N 10
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ t y pe pe d ef ef s t r u c t m a i l l o n
{ i n t data ; s t r u c t m a i l l o n ∗ next ;
}maillon ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ void p r i n t D a t a ( m a i l l o n ∗ ptr )
{ for (
; p tr t r ! = NU NULL ; p tr t r = p t r− r −>n e x t )
184
p r i n t f ( ” d a ta ta = %d %d \ n ” , p t r− r−>d a t a ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t main()
{ maillon∗ l ; i; l = ( m a i l l o n ∗ ) mallo c (N (N ∗ s i z e o f ( m a i l l o n ) ) ; i f ( l == NULL) NULL) exit (0); l −>d a t a = 0 ; l −>nex t = NU NULL; f o r ( i = 1 ; i < N ; i ++ ++) { ( l + i )− )−> d at at a = i ; ( l + i )− )−> n ex ex t = l + i − 1 ; } printData ( l + N − 1 ) ; fre e ( l ); return 0 ; int
}
Op´erat er atio ions ns sur su r les le s liste li stess chaˆın´ees ee s #inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< #define N 10
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ t y pe pe d ef ef s t r u c t m a i l l o n
{ i n t data ; s t r u c t m a i l l o n ∗ next ;
}maillon ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ void p r i n t L L ( m a i l l o n ∗ ptr )
{ for (
; p tr t r ! = NU NULL ; p tr t r = p t r− r −>n e x t ) p r i n t f ( ” d a ta ta = %d %d \ n ” , p t r− r−>d a t a ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/
maillon ∗ creeMaillo n ( int n) { maillon∗ l ; l = ( m a i l l o n ∗ ) malloc ( s i z e o f ( m a i l l o n ) ) ; i f ( l == NULL) NULL) exit (0); l −>d a t a = n ; l −>nex t = NU NULL; return l ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/
maillon ∗ insereFinLL ( maill on ∗ l , int n) { m a i l l o n ∗ l a s t = c r e eM e M a i l lo lo n ( n ) ; maillon∗ f i r s t = l ; i f ( l == NULL) NULL) return l a s t ; else
{ while ( l −>next != NULL) l = l −>next ; l −>n ex ex t = l a s t ;
} return
fi rs t ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/
m a i l l o n ∗ copyLL( copyLL( mai llo n ∗ s o u r c e )
185
{ maillon∗ copie ; maillon ∗ maillonCopi e ; i f ( so ur ce == NUL NULL) return NULL NULL ; c o p i e = c r e e M a i l l o n ( s o u r c e− e−>d a t a ) ; maillonCopie = copie ; s o u r c e = s o u r c e −>next ; while ( sou rce != NULL) { m a i l l o n C o p i e −>n e x t = c r e e M a i l l o n ( s o u r c e− e −>d a t a ) ; m a i l l o n C o p i e = m a i l l o n C o p i e− e −>next ; s o u r c e = s o u r c e −>next ; } m a i l l o n C o p i e− e −>nex t = NUL NULL; return c o p i e ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ maillon ∗ reverseLL ( maill on ∗ l ) { maillon∗ previous ; maillon∗ current ; m a i l l o n ∗ next ; i f ( l == NULL) NULL) return NULL NULL ; c u r r e n t = l −>next ; l −>nex t = NU NULL; previous = l ; n e xt xt = c u r r e n t ; while ( cur ren t != NULL) { i f ( next != NU NULL) n e x t = n e x t −>next ; c u r r e n t− t −>n e xt xt = p r e v i o u s ; previous = current ; current = next ; } return p r e v i o u s ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/
m a i l l o n ∗ i n s e r e D e b ut ut L L ( m a i l l o n ∗ l , i n t n ) { m a i l l o n ∗ f i r s t = c r e eM e M a i l lo lo n ( n ) ; f i r s t −>n e xt xt = l ; return f i r s t ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/
maillon ∗ initLL ( int n) { m a i l l o n ∗ l = NUL NULL; int i ; f o r ( i = n − 1 ; i >= 0 ; i −−) −−) l = i n s er er e D eb eb u tL tL L ( l , i ) ; return l ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void f r e e L L ( m a i l l o n ∗ l )
{ maillon∗ n ; != NULL) { n = l −>next ; fre e ( l ); l = n; }
while ( l
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t main()
{ maillon∗ l ; maillon∗ k ;
186
l = i n i t L L ( N) N) ; printLL( l ); k = copyLL( l ); k = reverseLL(k ); printLL(k ); freeL L ( l ); freeLL (k ); return 0 ; }
A.10.3 A.1 0.3
Listes Lis tes doublem doub lement ent chaˆ chaˆın´ ees ees
#inclu de de< < s t d i o . h> #inclu de de< #inclu de de< < s t d l i b . h> #define N 10
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ t y pe pe d ef ef s t r u c t d m a i l l o n
{ i n t data ; struct d m a i l l o n∗ p r e v i o u s ; s t r u c t d m a i l l o n ∗ next ;
} dmaillon ; / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ t y pe pe d ef ef s t r u c t d L i n k e d L i s t
{ dmaillon∗ f i r s t ; dmaillon∗ l a s t ; } dLinkedList ; struct struct
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A f f ic i c h e l e s e le l e me m e nt n t s d ’ un u ne l i s t e ∗ /
c ha h a in i n ee ee .
void printDLL( dLinkedList ∗ d l )
{ d m a i l l o n∗ n∗ m ; f o r ( m = d l −> f i r s t ; m ! = NULL ; m = m−>n e x t ) pr in tf (”%d (”%d −> ” , m−>d a t a ) ;
p r i n t f ( ” \ n” ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ L ib i b er e r e t ou o u s l e s m ai a i ll l l on o n s , p ui ui s l i b e r e d l . ∗ / void f r e eD eD L L ( d L i n k e d L i s t ∗ d l )
{ d m a i l l o n∗ n ∗ m; d m a i l l o n∗ n ∗ next ; f o r ( m = d l −> f i r s t ; m ! = NULL ; m = n e x t ) { n e x t = m−>next ; f r e e (m (m ) ; } fr ee ( dl ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ A l l o u e l a me mo mo ir ir e p ou ou r u ne ne d L i n k ed ed L i s t , i n i t i a l i s e l e s p o i nt n t e u rs r s a NU NULL ∗ /
d L i n k e d L i s t ∗ makeDL makeDLL L() { d L i n k e d L i s t∗ t∗ l ; l = ( d L i n k e d L i s t ∗ ) malloc ( s i z e o f ( d L i n k e d L i s t ) ) ; i f ( l == NULL) NULL) exit (0);
187
l −> f i r s t = NU NULL; l −> la st = NU NULL; return l ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ C re re e un un m a i ll l l o n c o nt nt e na na n t l a v a l e u r n . ∗ /
d m a i l l o n∗ n ∗ makeDMaillon( i n t n ) { d m a i l l o n∗ n∗ d ; d = ( d m a i l l o n ∗ ) malloc ( s i z e o f ( d m a i l l o n ) ) ; i f ( d == NULL) NULL) exit (0); d−>pre vio us = NU NULL; d−>nex t = NU NULL; d−>d a t a = n ; return d ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ A c c r oc oc h e l e m ai a i ll l l on o n m a l a f i n d e l a l i s t e c ha h a in i n ee ee d l ∗ / void appendDMaillonDLL( dLinkedList ∗ d l ,
d m a il i l l o n∗ n ∗ m)
{ i f ( dl −> l a s t == NU NULL)
{ dl −> f i r s t = m; m; dl −> l a s t = m ; } else
{ dl −> l a s t −>n e x t = m; m; m−>p r e v i o u s = d l −> l a s t ; dl −> l a s t = m ; } dl −> f i r s t −> pre vio us = NU NULL; dl −> l a s t −>nex t = NUL NULL; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A cc cc ro ro ch ch e l e m a il il l on o n m a u d eb e b ut ut d e l a ∗ / void pushDMaillonDLL( dLinkedList ∗ d l ,
li ste
c ha h a in i n ee ee d l
d m a il i l l o n∗ n ∗ m)
{ i f ( dl −> l a s t == NU NULL)
{ dl −> f i r s t = m; m; dl −> l a s t = m ; } else
{ dl −> f i r s t −>p r e v i o u s = m ; m−>n e x t = d l −> f i r s t ; dl −> f i r s t = m; m; } dl −> f i r s t −> pre vio us = NU NULL; dl −> l a s t −>nex t = NUL NULL; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ A jo j o ut u t e a l a f i n d e d l u n m a i ll l l o n c o nt n t en e n an a n t l a v a le le u r n . ∗ / void append appendInt IntDLL( DLL( dL inke dLis t ∗ dl ,
int n)
{ append appendDMa DMaillo illonDL nDLL( L( dl , makeDMai makeDMaillon(n llon(n )) ; }
188
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A jo j o ut u t e a u d e b ut u t d e d l u n m ai a i l lo l o n c on o n te t e na n a nt n t l a v a le le u r n . ∗ / void pushIn pushIntDL tDLL( L( d Link edLi st ∗ dl ,
int n)
{ pushDM pushDMaill aillonD onDLL( LL( dl , makeDMaill makeDMaillon( on( n ) ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ P l ac ac e d a ns ns l a l i s t e d ou ou bl b l em e m en en t c h a i n ee ee l e s v a le l e u rs r s { 0 , . . . , n } ∗ / void i n i t DL DL L ( d L i n k e d L i s t ∗ dl ,
int n)
{ int i ; for ( i = 0 ;
i < n ; i ++ ++) append appendInt IntDLL( DLL( dl , i );
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ I n v e rs r s e l ’ o r d r e d es e s e l em em e nt nt s d e d l . ∗ / void r e v e rs rs e D L L ( d L i n k e d L i s t ∗ d l )
{ d m a i l l o n∗ n∗ m ; d m a i l l o n∗ n ∗ temp temp ; i f ( dl −> f i r s t ! = NULL ) { f o r ( m = d l −> f i r s t ; m ! = NULL ; m = m−> p r e v i o u s ) { temp = m−>p r e v i o u s ; m−> p r e v i o u s = m−>next ; m−>n e x t = t e m p ; } } t em em p = d l− l −> f i r s t ; dl −> f i r s t = d l −> l a s t ; dl −> l a s t = te temp ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗ R et et ou ou r ne ne u ne ne c o p i e d e s o u r ce ce . ∗ /
d L i n k e d L i s t ∗ copyDLL( dLinkedList ∗ s o u r c e ) { d L i n k e d L i s t∗ t ∗ des t = mak makeDLL( ); d m a i l l o n∗ n∗ s o u r c e M a i l l o n ; f o r ( s o u r c e M a i l l o n = s o u r c e− e−> f i r s t ; s o u r c e M a i l l o n ! = NU NULL ; s o u r c e Ma M a i l l o n = s o u r ce ce M a i l lo l o n− n −>n e x t ) a pp pp en en dI dI nt nt DL DL L ( d e s t , s o u r c e M a i l l o n −>d a t a ) ; return d e s t ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ C o n c a t e n e f i n a l a s u i t e d e d eb eb ut ut , v id id e l a l i s t e ∗ / void concatD concatDLL( LL( dLink edLi st ∗ d eb eb ut ut ,
fin .
d L i n k e d L i s t∗ t∗ f i n )
{ i f (debut− (debut −> f i r s t == NU NULL)
{ debut− debut −> f i r s t = f i n −> f i r s t ; debut− debut −> l a s t = f in i n −> l a s t ; } else
{ debut− debut −> l a s t −>n e x t = f i n −> f i r s t ;
189
i f ( fin −> f i r s t != NUL NULL) f i n −> f i r s t −>p r e v i o u s = d e b u t− t −> l a s t ; debut− debut −> l a s t = f in i n −> l a s t ;
} f i n −> f i r s t = NU NULL; f i n −> la st = NU NULL; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗∗∗∗∗/ i n t main()
{ d L i n k e d L i s t∗ t ∗ dl = makeDLL( ) ; d L i n k e d L i s t∗ t ∗ cp ; i n it it D LL LL ( d l , N ) ; printDLL( printDLL( dl ) ; cp = copy copyDL DLL( L( dl ); printDLL( printDLL( cp ) ; r e v e r se se D L L ( c p ) ; printDLL( printDLL( cp ) ; c on on ca ca t DL DL L ( d l , c p ) ; printDLL( printDLL( dl ) ; freeDLL( dl ); freeDLL(cp ); return 0 ; }
A.10.4 A.1 0.4
Fonctio onc tions ns r´ ecursives ecur sives et listes lis tes cha chaˆ ˆın´ ees ees
#inclu de de< < s t d i o . h> #inclu de de< #inclu de de< < s t d l i b . h>
/ ∗ Dans t o ut u t e s l e s f o nc n c t io i o n s a p a r ti t i r d ’ i n se s e re re , i l e s t i n t e r d i t d e c r ee e e r d es e s m ai a i l lo lo ns n s , t o u t es e s c es e s o p er e r a ti t i o ns n s d o iv i v e nt nt s e f a i r e p ar ar m o d i f i ca c a t i o n d u c h ai ai n ag a g e e t n on p ar ar r e c o p i e . ∗ / t y pe pe d ef ef s t r u c t
lls
{ i n t data ; s t r u c t l l s ∗ next ;
} ll ; ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A l l ou ou e d y na na mi mi qu qu em em e nt nt e t i n i t i a l i s e un m a i l l o n a v e c l e s v a l e u r s d a ta ta e t n ex e x t , r e t ou ou r n e s on on a d r e ss ss e . ∗ /
l l ∗ c r e e r ( i n t d at at a , l l ∗ n e x t ) { l l ∗ l = ( l l ∗ ) malloc ( s i z e o f ( l l ) ) ; i f ( l == NULL) NULL) { p r i n t f ( ” h ea ea p o v e r f l o w\ w\n , ” ) ; exit (0); } l −>d a t a = d a t a ; l −>n e x t = n e x t ; return l ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ A f fi f i c he h e l e m ai a i ll l l on on l
∗ / void a f f i c h e ( l l ∗ l )
{ i f ( l
!= NULL) pr in tf (”% (”%d −> ” , l −>d a t a ) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ A ff f f ic i c he h e , d a n s l ’ o rd r d r e , t ou o u s l e s m ai a i l lo l o ns ns d e l a
190
list e
l.
∗ / void a f f i c h e T o u t ( l l ∗ l )
{ i f ( l
!= NULL)
{ affi che ( l ); a f f i c h e T o u t ( l− l −>n e x t ) ; } else
p r i n t f ( ” \ n” ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ A f fi f i c he h e e n p ar a r ta t a nt n t d e l a f i n t ou o u s l e s m ai a i ll l l on on s de l a l i s t e l . ∗ / void a f f i c h e A L E n v e r s ( l l ∗ l )
{ i f ( l
!= NULL)
{ a f f i c h e A L E n v e r s ( l− l−>n e x t ) ; affi che ( l ); } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ D et e t r ui u i t t ou o u s l e s m ai a i l lo l o ns ns de l a a NU NULL. LL. ∗ / void d e t r u i t ( l l ∗∗
l i s t e ∗ l , me t c e p o i n te te u r
l)
{ i f ( ∗ l
!= NUL NULL)
{ d e t r u i t ( & (( (( ∗ l )−> n e x t ) ) ; f r e e (∗ l ) ; ∗ l = NUL NULL; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ R e t o u rn rn e l a l i s t e n −> n −1 −> . . . −> 2 −> 1 ∗ /
l l ∗ e n t i e r s A L E n v e r s ( long n ) { i f ( n > 0 ) return c r e e r ( n , e n t i e r s AL AL E n v e rs rs ( n − 1 ) ) ; else return NULL NULL ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ P ou ou r l a f o n c t i o n s u i v a n t e . . . . ∗ /
l l ∗ e n t i e r s T ( long n , l l ∗ acc ) { i f ( n > 0 ) return e n t i e r s T ( n − 1 , c r e e r ( n , a cc cc ) ) ; else return
acc ;
} / ∗ R e t o u rn rn e l a l i s t e 1 −> 2 −> . . . −> n ∗ /
l l ∗ e n t i e r s ( long n ) { return e n t i e r s T ( n , NULL ) ;
191
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ I ns n s er e r e l e m ai a i ll l l on o n x d a n s l a l i s t e l , s up u p po po se se e t r i e e . ∗ /
l l ∗ ins ere ( l l ∗ l , l l ∗ x) { i f ( l == NULL NULL | | x−>data <= l −>d a t a ) { x−>n e xt xt = l ; return x ; } l −>n e xt xt = i n s e r e ( l −>n e xt xt , x ) ; return l ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ T ri ri l a l i s t e l a ve ve c l a m e t h o d e d u t r i p ar ar i n se s e r ti t i o n , r et e t ou o u rn rn e l ’ a d r e ss ss e d u p rre e mi mi er er e le l e me me nt nt d e l a l i s t e t r i e e . ∗ /
l l ∗ triIns ertio n ( ll ∗ l ) { i f ( l == NULL) NULL) return NULL NULL ; return i n s e r e ( t r i I n s e r t i o n ( l −>n e x t ) , l ) ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ R ep e p ar a r ti t i t l e s e le le me me nt nt s de d e l e nt n t re re l e s l i s t e s e x : l = 1 −> 2 −> 3 −> 4 −> 5 n o us us d on on ne ne l 1 = 1 −> 3 −> 5 e t l 2 = 2 −> 4 ∗ / void s p l i t ( l l ∗ l ,
l l ∗∗ l 1 ,
l1 et l2.
l l ∗∗ l 2 )
{ i f ( l
!= NULL)
{ s p l i t ( l −>n ex ex t , l 2 , l 1 ) ; l −>n e x t = ∗ l 1 ; ∗l1 = l ; } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗ R et et ou ou rn rn e l ’ i n t er e r c l as a s s em e m e n t d es es l i s t e s ∗ /
l 1 e t l 2 , s up u p po p o se s e es es t r i e e s .
l l ∗ int erc las se ( l l ∗ l1 , l l ∗ l2 ) { i f ( l1 == NULL) NULL) return l 2 ; i f ( l2 == NULL) NULL) return l 1 ; i f ( l 1 −>data < l 2 −>d a t a ) { l 1 −>n ex ex t = i n t e r c l a s s e ( l 1− 1 −>n ex ex t , l 2 ) ; return l 1 ; } else
{ l 2 −>n ex ex t = i n t e r c l a s s e ( l 1 , return l 2 ;
l 2− 2 −>n e x t ) ;
} } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ T ri r i e l a ve ve c l a m e t h od od e d u t r i f u si s i o n , r e to to r un u n e l ’ a d r e ss ss e d u p r em e m ie ie r e l em e m en en t d e l a l i s t e t r i e e . ∗ /
192
l l ∗ triFus ion ( l l ∗ l ) { i f ( l == NULL NULL | | l −>ne xt == NUL NULL) return l ; else
{ l l ∗ l 1 = NUL NULL, ∗ l2 = NU NULL; s p l i t ( l , &l 1 , & l 2 ) ; l1 = triFusion ( l1 ); l2 = triFusion ( l2 ); return i n t e r c l a s s e ( l 1 , l 2 ) ; } } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ Pou r t e s t e r ∗ /
les
f o n c ti ti o n s . . .
i n t main()
{ long n = 5 0 0 0 0 ;
l l ∗ l = e n t i e r s AL AL E n v e rs rs ( n ) , ∗m = e n t i e r s AL AL E n v e rs rs ( n ) ; p r i n t f ( ” t r i f u s i o n \ n” ); l = triFusion ( l ); p r i n t f ( ” ok ok \ n” ); detruit(&l ); p r i n t f ( ” t r i i n s e r t i o n \ n” ); m = t r i I n s e r t i o n (m ) ; p r i n t f ( ” ok ok \ n” ); d e t r u i t ( &m &m ) ; return 0 ; }
193
Annexe B
Projets B.1 B.1
Agen Agenda da (pour (pour les les PPAs) PPAs)
Construisez un agenda en mode console fournissant les fonctionnalit´ es es suivantes suivantes : – Edition des (date + heure de d´ebut ebut + dur´ee ee + libell´ libe ll´e) e) – Sauvegarde sur sur fichier(s) – D´ etection etection des collisio c ollisions ns (quand (q uand deux entr´ees ees de l’agenda l’agend a se chevauchent) Vous r´ edigerez edigerez un dossier dossier dans lequel lequel vous vous expliquere expliquerezz succincte succinctemen mentt la fa¸con con vous avez proc´ pro c´ed´ ed´e et placerez placerez le code source. source. Vous imprimere imprimerezz le dossier dossier vous-mˆ vous-mˆ eme eme et ne me le rendrez rendrez pas sous forme de feuilles volantes, date : le 30 juin. Vous m’enverrez le code source par mail, avant le 29 juin `a minuit. Votre code doit ˆetre etre portable ! Cela signifie que je dois pouvoir pouvoir le compiler sous Linux en moins de 30 secondes (donc pas de conio.h ou de fonctionnalit´ e sp´ ecifique ecifique `a une plate-forme particuli` ere). ere). S’il est d´ecoup´ ecoup´e en plusieurs plusieur s fichiers, joignez imp´erativement erativement un makefile. Votre code doit aussi ˆetre etre lisible lisibl e : c’esta-dire `a-dire form´e de petites fonctions dont on comprend le fonctionnement fonctionnement `a la l a premi` p remi`ere ere lecture, portant des noms d´ecrivant ecrivant explicitement explic itement ce qu’elles font (vous avez droit `a 256 caract`eres), eres), et ne faisant pas appel `a des variables variables globales. Vous disposerez disp oserez toujours une fonction appel´ee ee avant la fonction appelante app elante (pour ne pas avoir de warnings et parce que c’est plus facile `a lire quand on parcourt votre code en commen¸cant cant par le d´ ebut ebut et en terminan terminantt par la fin). Vous commentere commenterezz votre votre code et expliquere expliquerezz dans le rapport rapport tous les points d´elicats elicats (qui ne me sembleront pas ´evident evident `a la premi`ere ere lecture). La noblesse, noblesse , la clart´e, e, la simplici s implicit´ t´ e et la lisibili li sibilit´ t´ e de votre code co de prendront p rendront une part p art tr`es es importante im portante dans la notation n otation ! Le dialogue avec avec l’utilisateur peut p eut ˆetre etre r´eduit eduit au minimum (commencez par quelque chose de simple). Faites toutefois en sorte que le dialogue soit intuitif (que je comprenne le fonctionnement de votre application sans avoir `a lire de notice) et que votre code soit stable (soignez les saisies, indices, etc.) : si un projet ne fonctionne pas, je ne perdrai pas de temps `a le d´ ebugger, ebugger, je passerai au suivant suivant ! Bref : faites quelque chose de simple, mais clair et soign´ e. e. La transmission transmis sion d’informations d’info rmations entre les le s ´etudiants etudiants n’est pas interdite, et est e st mˆeme eme encourag´ee. ee. Par contre votre votre code doit ˆetre etre personnel, personnel, en cas de pompage, pompage, copier/col copier/coller, ler, etc, les notes du projet source et du projet pro jet copie seront 0 (th´eor` eor`eme eme de Sananes). Sananes ).
194
Annexe A
M´ ethodologie A.1
Le probl` eme eme
D`es es que l’on code un programme d’une certaine envergure, bon b on nombre de probl` emes emes se posent. 1. Le d´ebogage ebogage peut p eut devenir un cauchemar sans fin. 2. Ensuite le code ´ecrit ecrit peut p eut ˆetre etre une bouillie lisible que par son auteur. 3. Le code peut contenir des redondances qui n’en facilite ni la lecture, ni le d´ebogage. ebogage. Je passe les nombreuses difficult´es es et laideurs pouvant r´esulter esulter d’un d´eveloppement eveloppem ent hˆatif. atif. Retenez que sans m´ ethode, ethode, vous ne parviendrez pas a` d´ evelopper evelopper un projet important, tout simplement parce que le temps de d e d´ebogage eboga ge sera prohibitif, prohibi tif, et parce que qu e votre code, co de, apr` ap r` es es les multiples bidouillages bidouil lages auxquels au xquels vous soumettrez pour d´eboguer ebogu er sera un gros pav´e bord´elique elique et illisible. illisi ble.
A.2
Les r` r` egles egles d’or
La solution au probl`eme eme mentionn´e ci-avant r´eside eside dans l’application l’appli cation des r` egles egles d’or suivantes :
A.2.1
G´en´ eral ra lit´es es
Avant toute chose, rappel r appelons ons quelques q uelques ´evidences evidences : 1. indentez votre code, on doit pouvoir trouver, pour chaque accolade ouvrante, o`u se trouve l’accolade fermante qui lui correspond en moins d’un quart de seconde. 2. utilisez utilisez des noms de variable explicites, explicites, le nom de la variable doit ˆetre etre suffisant pour p our pouvoir p ouvoir comprendre `a quoi elle sert.
A.2. A.2.2 2
Fonct onctio ions ns
Commencez par d´ ecouper ecoup er votre tr`es es gros probl`eme eme en plein de petits probl`emes emes que vous traiterez individuellement avec des fonctions. Chaque fonction devra : 1. porter un nom explicite : vous avez droit `a 256 caract` cara ct`eres... eres ... 2. ˆ etre et re pr´ pr ´ ec´ ec ´ ed´ ed ´ ee ee d’un ’u n comm co mmen enta taiire d´ ecrivant ecrivant clairement et sans paraphraser le code ce que fait la fonction. 3. tenir sur une page : il faut que vous puissiez voir toute la fonction sans avoir `a utiliser l’ascenseur, et comprendre co mprendre ais´ement ement ce qu’elle fait. 4. contenir au maximum trois niveaux d’imbrication : si vous avez plus de trois blocs (boucles, conditions, condition s, etc.) e tc.) imbriqu´ i mbriqu´es, es, placez p lacez tout ce qui d´eborde ebord e dans dan s une un e autre autr e fonction. fon ction. 5. ne jamais jamais utilis utiliser er de variabl ariables es globale globaless : l’utilisation des variables variables globales est r´ eserv´ eserv´ ee ee `a certains certains cas tr` es es pr´ ecis. ecis. Dans tous les autres autres cas, vos fonctions fonctions doivent doivent utiliser utiliser les passages passages de param`etres etres (par adresse si n´ecessaire) ecessaire ) et e t les l es valeurs de retour. 195
6. ˆ etre etr e pr´ec´ ec´ed´ ed´ ee ee de tout to utes es les le s fonc fo ncti tion onss qu’e qu ’ell lle e app ap p elle ell e : d’une part un lecteur parcourant votre code le comprendra plus ais´ ement ement si pour chaque appel app el de fonction, il a d´ej` ej` a vu la d´efinition efinition de cette fonction. Ainsi on pourra p ourra lire votre code dans l’ordre et ´eviter eviter de slalomer entre les fonctions. D’autre part, cela vous ´evitera evitera d’avoir d’avoir `a ´ecrire ecrire les prototypes des fonctions en d´ ebut ebut de fichier. Vous r´eserverez eser verez aux cas o`u il et impossible (ou laid) de faire autrement les fonctions qui s’invoquent mutuellement.
A.2.3 A.2 .3
Compila Comp ilatio tion n s´ epar´ epar´ee ee
Un fichier contenant plusieurs centaines de fonctions est impossible `a lire, en plus plu s d’ˆetre etre d’une d’ une laideur la ideur accablante. Vous prendrez donc soin s oin de d e regrouper regrou per vos fonctions fonct ions dans d ans des de s fichiers, fichiers , de les compiler com piler s´epar´ epar´ement ement et de les linker avec un makefile.
A.3
D´ ebogage ebo gage
Vous ˆetes ete s proba pr obabl bleme ement nt d´ej` ej `a conscients conscients du fait que le d´ ebogage ebogage occupe une partie tr` es es significative du temps de d´eveloppement. eveloppe ment. Aussi Au ssi est-il e st-il appr´eciable eciable de la l a diminuer dim inuer autant a utant que possible. possi ble. 1. D’une part parce que lorsque ce temps devient prohibitif, il constitue une perte de temps fort malvenue. 2. D’autre part parce que les multiples bidouilles op´er´ er´ ees ees pour p our corriger les erreurs ne font souvent que nuire `a la lisibilit´ lisibil it´e du d u code 3. Et enfin parce qu’un temps anormalement anormale ment ´elev´ elev´e est en g´en´ en´eral eral une cons´equence equence d’une analyse et d’un codage hˆ atifs. atifs. Aussi est-il g´ en´ en´ eralement eralement plus efficace de passer un peu plus de temps `a coder, et beaucoup moins de temps `a d´eboguer. ebogu er. Pour ce faire : 1. Notez Note z bien bi en que q ue tous t ous les conseils cons eils ´enonc´ enon c´es es pr´ p r´ec´ ec´edemment edem ment sont encore enco re d’act d ’actual ualit´ it´e. e. En E n parti p articuli culier er ceux c eux sur les fonctions. 2. Construis Construisez ez les fonctions fonctions dans l’ordre l’ordre inverse inverse de l’ordre d’invocatio d’invocation, n, et testez-les testez-les une par une. Les bugs sont beaucoup plus facile a` trouver quand on les cherche dans une dizaine de lignes que dans une dizaine de pages. Et en assemblant des fonctions qui marchent correctement, vous aurez plus de chances chanc es de r´ediger ediger un programme p rogramme correct. 3. N’h´esitez esit ez pas p as `a utiliser des logiciels comme valgrind. valgrind examine l’ex´ecution ecution de votre code et vous rapporte bon nombre d’utilisation irr´ eguli` eguli` ere ere de la m´ emoire emoire (pointeurs fous, zones non lib´ li b´er´ er´ees, ee s, etc. et c.))
A.4
Dur´ Dur´ ee ee de vie du du code
Si vous vous ne voulez voulez pas qu’un jour un d´ eveloppeur eveloppeur fasse un s´ electionner/supprimer sur votre code, electionner/supprimer vous devez avoir en tˆ ete ete l’id´ee ee que q ue quand quelqu’un quelqu’ un reprend ou utilise votre code vous devez r´eduire eduire au minimum a` la fois le temps qu’il mettra `a le comprendre et le nombre de modifications qu’il devra faire.
A.4.1
Le code co de doit ˆetre etre r´ eutilisable eutili sable
Cela signifie qu’un autre programmeur doit pouvoir poursuivre votre projet en faisant un minimum de modifications. Autrement dit, un autre programmeur doit pouvoir appeler vos fonctions aveugl´ aveugl´ ement ement et sans mˆeme eme regarder rega rder ce qu’il y a dedans. d edans. Les noms no ms des fonctions fonction s et les l es commentaires comm entaires d´ecrivant ecrivant leurs comportecompo rtement doivent d oivent ˆetre etre clairs, clai rs, pr´ecis, ecis , et bien ´evidemme evid emment nt exempt exe mpt de bugs. b ugs. Sinon, Sin on, un s´ electionner/supprimer electionner/supprimer mettra fin `a la courte vie de votre code. Notez bien par ailleurs que si vous avez r´ eparti eparti votre code dans des fichier fich ierss s´epar´ ep ar´es es de fa¸con con intelligente, votre code sera bien plus simple `a r´eutil eut ilis iser. er.
196
A.4.2
Le code doit ˆ etre etre adapta adaptable ble
Supposons Supposons que pour les besoins d’un projet, un autre autre d´ eveloppeur eveloppeur veuille veuille partir partir de votre votre code, par exemple exemple utiliser utiliser des listes listes chaˆ chaˆın´ ees ees au lieu de tableau, tableau, ou encore encore ajouter une sauvegar sauvegarde de sur fichier, fichier, etc. Si votre code est bien d´ ecoup´ ecoup´ e, e, il n’aura que quelques fonctions `a modifier. Si par contre, vous avez m´elang´ elan g´e affichage, affich age, saisies, sais ies, calculs, calc uls, sauvegard sauve gardes, es, etc. e tc. Notre N otre d´evelopp evelo ppeur eur devra d evra passer pass er un temps temp s consid´ con sid´erable erab le a` bidouiller votre code, et cela sans aucune certitude quand `a la qualit´ e du r´ esultat. esultat. Il fera donc un recode ra tout lui-mˆeme. eme. s´ electionner/supprimer et recodera electionner/supprimer
A.5 A.5
Exemp Exemple le : le car carne nett de con contacts tacts
Je me suis efforc´ e, e, autant autant que possibl p ossible, e, de suivre suivre mes propres conseils et de vous donner un exemple. exemple. Je vous laisse `a la fois observer observer mes recommanda recommandations tions dans le code qui suit, et traquer traquer les ´eventu eventuelles elles effractions que j’aurais pu commettre.
A.5. A.5.1 1
util util.h .h
# i f n d e f UTIL H #define UTIL H
/ ∗ S a i s i t u ne ne c h ai ai n e d e c a r a c t e r e s d e l o ng n g u eu e u r s iz iz eM eM ax ax a l ’ a d r e s s e a d r , e li l i mi m i ne n e l e c ar a r a ct c t er e r e d e r et e t ou o u r a l a l i g n e e t v id i d e s i n ec e c es e s s ai ai r e t o u s l e s c a r a c t e r e s s u p pl p l e m en e n t a i re r e s d u t a mp o n d e s a i s i e . ∗ / void g e t S t r i n g ( char ∗ adr ,
i n t sizeMax );
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ S a i s i t un e n t i e r . ∗ / int
getInt ();
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ E ch ch an an g e l e s c h ai ai n es es d e c a r a c t er er e s s 1 e t s 2 , d e t a i l l e s maximales maxima les sizeMax . ∗ / void s w a p S t r i n g s ( char ∗ s1 ,
char ∗ s2 ,
i n t sizeMax );
#endif
A.5. A.5.2 2
util util.c .c
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #inclu de de< < s t r i n g . h> void g e t S t r i n g ( char ∗ adr ,
int sizeMax)
{ len ; f g e t s ( a d r , s i ze ze M ax ax , s t d i n ) ; l e n = s t r l e n ( a dr dr ) ; i f ( ∗ ( a d r + l e n − 1 ) == == ’ \ n ’ ) ∗( a d r + l e n − 1 ) = 0 ;
int
else while ( g e t c h ar a r ( ) ! = ’ \ n ’ );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / int
getInt ()
{ char t ab ab [ 1 0 ] ;
g e t S t r i n g ( t ab ab , 1 0 ) ; atoi (tab );
return
}
197
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void s w a p S t r i n g s ( char ∗ s1 ,
char ∗ s2 ,
int sizeMax)
{ char temp temp [ sizeMax ] ;
s t r n c p y ( t em em p , s 1 , s i z e M ax ax ) ; s t r n c p y ( s 1 , s 2 , s i ze ze M ax ax ) ; s t r n c p y ( s 2 , t em em p , s i z e M ax ax ) ; ∗(s1 + sizeMax − 1 ) = 0 ; ∗(s2 + sizeMax − 1 ) = 0 ; }
A.5. A.5.3 3
tabl tablea eau. u.h h
# i f n d e f TABLEAU H #define TABLEAU H #define SIZE SIZE MAIL MAIL 30 #define NB MAIL MAILS S 6
/ ∗ I mp mp le le me me nt nt e u n c a r ne ne t d e c o n t a ct c t s a l ’ a i d e d ’ un un t a b l e a u . Une c a se se i n oc oc c up u p e e e s t r e p r e s en en t e e p a arr u ne ne c h ai ai n e v i de de , t o u t es e s l e s a d r es es s es e s s on o n t d i s po p o s e es e s p ar ar o rd r d re r e a l p h ab a b e t i qu qu e a u d e bu bu t d u t a b l e a u . ∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e l e c a rn r n et e t d e c o nt n t a ct ct s .
∗ / void a f f i c h e M a i l s ( char ∗ m a i l s ) ;
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ R et et ou ou r ne ne l ’ a d r e s s e d u i −em eme e mail . ∗ / char ∗ g e t M a i l ( char ∗ m a i l s ,
int
i );
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ R et et ou ou r ne ne l e n om om br br e d e c o n t a c t s . ∗ / i n t nombreMails( char ∗ m a i l s ) ;
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / / ∗ C re re ee ee u n t a b l e a u d e d ’ e−m ai a i l s e t l e r e to to u rn r n e . Ce t a b le l e a u c o n ti ti e n t NB MAILS c h a i n e s d e c a p a c i t e s l o n g u e ur ur SIZE MAIL i n i t i a l i s e s a v ec ec d e s c h a in in e s v i d e s . ∗ / char ∗ c r e e r M a i l s ( ) ;
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / / ∗ L i b e r e l a m em em oi oi re re ∗ / void d e t r u i t M a i l s ( char ∗ m a i l s ) ;
∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ S up up pr pr im im e l ’ a d r e s s e d o nt nt l ’ i n d i c e ∗ /
e s t p a s s e e n p a ra ra m et et r e .
void s u p p r i m e M a i l ( char ∗ m a i l s ,
indice );
int
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗
198
A jo j o ut u t e l e m ai ai l m ai ai l d a ns ns l e t a b le l e a u m ai ai l s . ∗ / void a j o u t e M a i l ( char ∗ m a i l s , char ∗ m a i l ) ;
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ R em em pl pl ac ac e l e i n d i c e −eme m ai a i l d u t a b l e a u m a il i l s p ar ar m ai ai l . L ’ i n d i c e e s t s u pp pp o se se v a l i d e . ∗ / void c h a n g e M a i l ( char ∗ m a i l s , char ∗ mail ,
int
indice );
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ E c r it i t t o us u s l e s c o n ta t a c ts t s d e m ai a i l s d an an s l e ∗ /
fichier
n om om F ic ic hi hi er er .
void s a u v e g a r d e M a i l s ( char ∗ m a i l s , char ∗ n o m F i c h i e r ) ;
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ L i t t o us u s l e s c o nt n t a c ts t s d e m ai a i l s d a ns ns l e ∗ /
fichier
n om om Fi Fi ch ch ie ie r .
void r e s t a u r e M a i l s ( char ∗ m a i l s , char ∗ n o m F i c h i e r ) ; #endif
A.5. A.5.4 4
tabl tablea eau. u.cc
#inclu de de< < s t d i o . h> #inclu de de< #inclu de de< < s t r i n g . h> #inclu de de< < s t d l i b . h> #include ” u t i l . h ” #include ” t a b l e a u . h ”
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void a f f i c h e M a i l s ( char ∗ m a i l s )
{ indice = 0; p r i n t f ( ” L i s te t e d es es c o nt n t a ct c t s : \ n” ); while ( i n d i c e < NB MAILS && ∗ g e t M a i l ( m a i l s , i n d i c e ) ) { p r i n t f ( ”% ”%d : %s \ n ” , i n d i c e + 1 , g e t Ma M a i l ( m a il il s , i n d i c e ) ) ; indice++; } int
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ char ∗ g e t M a i l ( char ∗ m a i l s ,
int
i)
{ return
m a i l s + i ∗ SIZE SIZE MAIL MAIL ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ i n t nombreMails( char ∗ m a i l s )
{ int i n d i c e = 0 ; while ( i n d i c e < NB MAILS && ∗ g e t M a i l ( m a i l s ,
indi ce ))
indice++; return i n d i c e ; } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / char ∗ c r e e r M a i l s ( )
{ char ∗ a d r = ( char ∗ ) malloc ( s i z e o f ( char ) ∗ SIZE MAIL ∗ NB MAIL MAILS S); int i ; i f ( ad r == NUL NULL)
{ p r i n t f ( ” He He ap ap o v e r f l o w ” ) ; exit (0);
199
} for ( i = 0 ;
i < NB MAIL MAILS S ; ∗ g e t Ma M a i l ( a dr dr , i ) = 0 ; return adr ;
i++)) i++
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void d e t r u i t M a i l s ( char ∗ m a i l s )
{ fre e ( mails ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void s u p p r i m e M a i l ( char ∗ m a i l s ,
int
indice )
{ while ( i n d i c e < NB MAILS && ∗ g e t Ma Ma i l ( m a il il s ,
indice + 1))
{ strncpy ( getMail ( mails , ind ic e ) , getMail ( mails , indi ce + 1) , SIZE SIZE MAIL MAIL ) ; indice++; } i f ( i n d i c e < NB MAILS)
∗ g e t Ma M a i l ( m a il il s , i n d i c e ) = 0 ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ R et et ou ou r ne ne l ’ i n d i c e d u p r em em i er er e mp mp la la ce ce me me nt nt l i b r e d an an s l e t a b l e a u m a il i l s c o nt nt e na na n t n bM bMax a d r e s se se s . On s u p po p o s e q ue ue l e n ’ e s t p as as p l e i n . ∗ / i n t i n d i c e P r e m i e r e C h a i n e V i d e ( char ∗ m a i l s ,
int indiceMax)
{ int milieu ; i f ( i n d i c e M a x == == 0 ) return 0 ;
m i l i e u = i n di d i c eM eM ax ax / 2 ; i f ( ! ∗ g e t M a i l ( m a i l s , m i l i e u ) ) return i n d i c e P r e m i e re re C h a i n e V i d e ( m a i l s , m i l i e u ) ; else return
milieu + 1 + i n d i c e P r e m i e r eC eC h a i n e V i d e ( g e t M a i l ( m a i l s , m i l i e u + 1 ) , indiceMax − ( m i l i eu eu + 1 ) ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ T r ie ie l e t a b l e a u m a il i l s c o nt nt e na na n t ( i n d i c e + 1 ) e le l e me m e n ts ts , n e f o nc n c t io i o n ne n e q ue ue s i t o us u s l e s a u t re r e s e le l e me m e nt nt s s on on t t r i e s . ∗ / void p l a c e M a i l ( char ∗ m a i l s ,
int
indice )
{ i f ( i n d i c e > 0 && && i n d i c e < NB MAILS &&
s t r nc nc m p ( g e t M a i l ( m a i l s , i n d i c e ) , getMail ( mails , indi ce − 1) , SIZE MAIL) < 0 ) { swapStrings ( getMail ( mails , ind ic e ) , getMail ( mails , indi ce − 1) , SIZE SIZE MAIL MAIL ) ; placeMail ( mails , indi ce − 1 ) ; } else i f ( i n d i c e >= 0 && i n d i c e < NB MAILS − 1 &&
∗ g e t M a i l ( m a i l s , i n d i c e + 1 ) && s t r nc nc m p ( g e t M a i l ( m a i l s , i n d i c e ) , getMail ( mails , indi ce + 1) , SIZE MAIL) > 0 ) { swapStrings ( getMail ( mails , ind ice ) , g e t Ma M a i l ( m a il il s , i n d i c e + 1 ) , SIZE SIZE MAIL MAIL ) ; p l a c e Ma Ma i l ( m a il il s , i n d i c e + 1 ) ;
200
tableau
} } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ void a j o u t e M a i l ( char ∗ m a i l s , char ∗ mail )
{ int i n d i c e ; i f ( ∗ ge tMa il ( mai ls , NB MAILS ILS − 1 ) )
{ p r i n t f ( ” C a rn rn et e t d e c o n t a ct c t p l e i n . \ n” ); } else
{ i n d i c e = i n d i c e P r e m i e r e C h a i n e V i d e ( m a i l s , NB MA MAILS − 1 ) ; s t r n c p y ( g e t M a i l ( m a i l s , i n d i c e ) , m a i l , S IZ IZ E MA MA IL IL ) ; ∗ ( g e t M a i l ( m a i l s , i n d i c e ) + SI ZE ZE M AI AI L − 1 ) = 0 ; placeMail ( mails , indi ce ); } } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void c h a n g e M a i l ( char ∗ m a i l s , char ∗ mail ,
int
indice )
{ s t r n c p y ( g e t M a i l ( m a i l s , i n d i c e ) , m a i l , S IZ IZ E M AI AI L ) ; ∗ ( g e t M a i l ( m a i l s , i n d i c e ) + S IZ IZ E MA MA IL IL − 1 ) = 0 ; placeMail ( mails , indi ce ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void s a u v e g a r d e M a i l s ( char ∗ m a i l s , char ∗ n o m F i c h i e r )
{ FILE∗ FILE ∗ f = f o p e n ( n o m F i ch ch i e r , ”w” ) ; int i ; i f ( f == NULL) NULL) p r i n t f ( ” I m p o s s i b l e d ’ o u v r i r l e f i c h i e r %s ” , n o mF mF i ch ch i er er ) ; else for ( i = 0 ;
i < NB MAILS && ∗ g e t M a i l ( m a i l s , i ) ; i ++ ++) f w r i t e ( g e t M a i l ( m a i l s , i ) , s i z e o f ( char ) , S IZ IZE MA MA IL IL , f ) ; fcl ose ( f );
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / void r e s t a u r e M a i l s ( char ∗ m a i l s , char ∗ n o m F i c h i e r )
{ FILE∗ FILE ∗ f = f o p e n ( n o m F i ch ch i e r , ” r ” ) ; i n t i , r et et = 1 ; i f ( f == NULL) NULL) p r i n t f ( ” I m p o s s i b l e d ’ o u v r i r l e f i c h i e r %s ” , n o mF mF i ch ch i er er ) ; else for ( i = 0 ;
i < NB MAILS ILS && && re t ; i++) i++) r e t = f r e a d ( g e t M a i l ( m a i l s , i ) , s i z e o f ( char ) , SI ZE ZE MA MAI L , fcl ose ( f );
}
A.5. A.5.5 5
eMai eMails ls.c .c
#inclu de de< < s t d i o . h> #inclu de de< < s t d l i b . h> #include ” u t i l . h ” #include ” t a b l e a u . h ” #define #define #define #define #define #define
AFFICHE AFFICHER R OPTION OPTION 1 SUPPRIME SUPPRIMER R OPTION OPTION 2 MODIFIER MODIFIER OPTIO OPTION N 3 AJOUTE AJOUTER R OPTION OPTION 4 QUITTER QUITTER OPTION OPTION 5 NB OPTIO OPTIONS NS 5
#define F NAME ” . adre ss es Ma il s . txt ”
/ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ A f f i c h e l e menu p r i n c i p a l .
∗ /
201
f );
void a f f i c h e M e n u ( )
{ p r i n t f ( ” \ n Op Op ti ti on o n s d i s p o n i b l e s : \ n” ”%d ”%d − a f f i c h e r l e s c o nt n t a ct c t s \ n” ”%d ”%d − s u p pr pr i m e r u n c o n t a c t \ n” ”%d ”%d − m o d i f i e r un c o n t a c t\ t \ n” ”%d ”%d − a j o u t e r u n c o n t a c t \ n” ”%d ”%d − q u i t t e r \ n” , AFFICHER OPTION, SUPPRIMER OPTION, MODIFIER OPTION, AJOUTER OPTION, QUITTE QUITTER R OPTION) OPTION) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A f f ic i c h e l e menu p r i n ci c i p a l , r e to t o ur u r n e l a v a l eu e u r s a i s i e p ar ar l ’ util isateu r .
∗ / int choisitOptionMenu ()
{ int do
option ;
{ a f f i c h e Me Me n u ( ) ; p r i n t f ( ” C h o i s i s s e z u n e o p ti ti o n e n s a i s i s s a n t o p t i on on = g e t I n t ( ) ; i f ( o p t i o n <= 0 && o p t i o n > NB OPTIONS) p r i n t f ( ” o p ti t i o n i n v a l i d e \ n” );
s on on n u m e r o : ” ) ;
} while ( o p t i o n <= 0 && o p t i o n > NB OPTI OPTIONS) ONS) ; return o p t i o n ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ Demande a l ’ u t i l i s a t e u r a l ’ a d r e s s e a dr dr . ∗ /
d e s a i s i r un m ai ai l ,
l e p l a ce ce
void s a i s i t M a i l ( char ∗ a d r )
{ p r i n t f ( ” V e u il il l e z s a i s i r
l ’ a d re r e s se s e e−m ai a i l d e v ot o t re r e c on o n ta t a ct ct : ” ) ;
do
{ g e t S t r i n g ( a d r , SI ZE ZE M AI AI L ) ; i f ( ! ∗ a d r ) p r i n t f ( ” Vo Vo u s d ev e v ez e z s a i s i r u n e a d r es es s e ” ) ; } while ( ! ∗ a d r ) ;
} ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ A f fi f i c he h e l a l i s t e d e m a il il s , l ’ un un d ’ e u x .
saisit
e t r et e t ou o u rn r n e l e nu me r o d e
∗ / int
c h o i s i t M a i l ( char ∗ m a i l s )
{ i n t i , n b Ma Ma i l s ; n b M a i ls ls = n o m br br e M ai ai l s ( m a i l s ) ; a f f i c h e M a i l s ( m a il il s ) ; do
{ p r i n t f ( ” C h o i s i s s e z un m ai a i l e n s a i s i s s a n t s on on nu me ro : ” ) ; i = g e t I nt nt ( ) ; i f ( i <= 0 && i > n b M a i l s ) p r i n t f ( ” Ce Ce t i n d i c e n ’ e x i s t e p as as ! \ n” ); } while ( i <= 0 && i > nbMails ); return i − 1 ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ /
202
/ ∗ S a i s i t u n m ai ai l m et e t u n i n di d i c e i , p ui u i s r em em pl pl ac ac e l e i − em eme e mail d e m a il i l s p ar ar m. m. ∗ / void m o d i f i e r O p t i o n ( char ∗ m a i l s )
{ int i ; char m[ SIZE MAIL ] ;
p r i n t f ( ” M o d i f i c a t i o n d ’ un u n c o n t a c t : \ n” ); i = choisitMa il ( mails ); s a i s i t M a i l (m (m ) ; c h a ng ng e M ai ai l ( m a i l s , m, i ) ; } ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / ∗ S a i s i t u n m ai ai l m et e t u n i n di d i c e i , p ui u i s r em em pl pl ac ac e l e i − em eme e mail d e m a il i l s p ar ar m. m. ∗ / void a j o u t e r O p t i o n ( char ∗ m a i l s )
{ char m[ SIZE MAIL ] ;
p r i n t f ( ” A jo j o ut ut d ’ un un c o n t a ct c t : \ n” ); s a i s i t M a i l (m (m ) ; ajoute Mail ( mails , m); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ S a i s i t u n i n d i ce c e i , p u is i s s up up pr pr im im e l e i − eme m a i l d a ns ns m a i l s .
∗ / void s u p p r i m e r O p t i o n ( char ∗ m a i l s )
{ i; p r i n t f ( ” S u p p r es e s s i o n d ’ un u n c o n t a ct c t : \ n” ); i = choisitMa il ( mails ); s u pp pp r i me me M a il il ( m a i l s , i ) ; int
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ S au au ve ve l e s d ’adieu . ∗ /
m a il i l s d an an s l e
f i c h i e r F NAME e t
a f f i c h e u n m e ss ss ag ag e
void q u i t t e r O p t i o n ( char ∗ m a i l s )
{ sauv ega rdeMa ils ( mails , F NAME) ; p r i n t f ( ”A ”Au r e v o i r ! \ n” ); } / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / / ∗ A f f ic i c h e l e menu p r i n ci ci p a l , t r a i t e me me n t n e c e s s a i re re . ∗ /
s a i s i t u n e o pt p t io io n , e t e f f e c t u e
void executeMenu( char ∗ m a i l s )
{ int do
option ;
{ o p t i o n = c h o i s it it O p ti ti o n M en en u ( ) ; switch ( option )
{ case AFFICHE AFFICHER R OPTIO OPTION N :
a f f i c h e M a i l s ( m a il il s ) ; break ; case AJOUTER AJOUTER OPTION OPTION :
ajouter Option ( mails ) ; break ; case MODIFIE MODIFIER R OPTION OPTION :
modifier Option ( mails ) ; break ;
203
le
case SUPPRIMER SUPPRIMER OPTION OPTION :
s u p p r i m e rO rO p t i o n ( m a i l s ) ; break ; case QUITTE QUITTER R OPTION OPTION :
quitterOption ( mails ); break ; default : break ;
} } while ( op ti on
!= QUIT UITTER OPTIO PTION) N) ;
} / ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗∗∗∗∗∗∗ / i n t main()
{ char ∗ m a il i l s = c r e e r Ma Ma i l s ( ) ;
r e s t a u r e M a i l s ( m a i l s , F NAME ) ; executeMenu( executeMenu( mails ) ; detrui tMail s ( mails ); return 0 ; }
A.5. A.5.6 6 all
mak makefile efile
: e M ai a i l s e Ma M a i ls ls . t g z
util .o :
util . c util .h g c c −Wall −c u t i l . c
t a b l e a u . o : t a b l e a u . c t a b l e au au . h u t i l . h g c c −Wall −c t a b l e a u . c e M a il i l s . o : e M a i ls l s . c t a b l e au au . h u t i l . h g c c −Wall −c e M a i l s . c eMails :
ut il . o tableau . o eMails . o g c c −o e Ma M a i ls l s −W al al l u t i l . o t a b l e a u . o e M a i l s . o
e M a il i l s . t g z : u t i l . h u t i l . c t a b l e a u . h t a b l e au a u . c e M a il il s . c m a k e f i l e t a r c v f z e M a il i l s . t g z u t i l . h u t i l . c t a b l e a u . h t a b l e au a u . c e M a il il s . c m a k e f i l e
204