• Aucun résultat trouvé

ou encore :

N/A
N/A
Protected

Academic year: 2022

Partager "ou encore :"

Copied!
5
0
0

Texte intégral

(1)

Algorithmique et Programmation – Examen (dur´ ee 3 heures) CORRECTION de la premi` ere session du 9 juin 2021

Remarque : Ce document ne pr´ esente que des ´ el´ ements de correction. Les variantes possibles sont nombreuses.

Exercice 1 : Inclusion mutuelle d’objets communicants a)

1 c h a r i n c l u s i o n _ c e r c l e s (int c1x , int c1y , int c1r , int c2x , int c2y , int c2r ) { 2 d o u b l e d i s t = s q r t (( c1x - c2x ) * ( c1x - c2x ) + ( c1y - c2y ) * ( c1y - c2y ) ) ; 3 c h a r res = 0 ;

4

5 if ( d i s t < c1r && d i s t < c2r ) {

6 res = 3 ;

7 }

8 e l s e if ( d i s t < c1r || d i s t < c2r ) {

9 res = 2 ;

10 }

11 e l s e if ( d i s t - c1r - c2r > 0) {

12 res = 1 ;

13 }

14

15 r e t u r n res ; 16 }

ou encore :

1 c h a r i n c l u s i o n _ c e r c l e s (int c1x , int c1y , int c1r , int c2x , int c2y , int c2r ) { 2 d o u b l e d i s t = s q r t (( c1x - c2x ) * ( c1x - c2x ) + ( c1y - c2y ) * ( c1y - c2y ) ) ; 3

4 if ( d i s t < c1r && d i s t < c2r ) 5 r e t u r n 3 ;

6

7 if ( d i s t < c1r || d i s t < c2r ) 8 r e t u r n 2 ;

9

10 if ( d i s t - c1r - c2r > 0) 11 r e t u r n 1 ;

12

13 r e t u r n 0 ; 14 }

b)

1 int m a i n () {

2 int d1 , d2 ;

3

4 p r i n t f (" D o n n e z le p r e m i e r r a y o n : ") ; 5 s c a n f (" % d ", & d1 ) ;

6

7 p r i n t f (" D o n n e z le d e u x i e m e r a y o n : ") ; 8 s c a n f (" % d ", & d2 ) ;

9

10 if ( i n c l u s i o n _ c e r c l e s ( -2 , 3 , d1 , 2 , 3 , d2 ) >= 2) { 11 p r i n t f (" Les o b j e t s p e u v e n t c o m m u n i q u e r .\ n ") ;

12 }

13 e l s e {

14 p r i n t f (" Les o b j e t s ne p e u v e n t pas c o m m u n i q u e r .\ n ") ;

15 }

16

17 r e t u r n 0 ; 18 }

(2)

ou encore :

1 int m a i n () {

2 int d1 , d2 ;

3 c h a r c o m m u n i c a t e ; 4

5 p r i n t f (" D o n n e z le p r e m i e r r a y o n : ") ; 6 s c a n f (" % d ", & d1 ) ;

7

8 p r i n t f (" D o n n e z le d e u x i e m e r a y o n : ") ; 9 s c a n f (" % d ", & d2 ) ;

10

11 c o m m u n i c a t e = i n c l u s i o n _ c e r c l e s ( -2 , 3 , d1 , 2 , 3 , d2 ) ; 12

13 if ( c o m m u n i c a t e == 3 || c o m m u n i c a t e == 2) { 14 p r i n t f (" Les o b j e t s p e u v e n t c o m m u n i q u e r .\ n ") ;

15 }

16 e l s e {

17 p r i n t f (" Les o b j e t s ne p e u v e n t pas c o m m u n i q u e r .\ n ") ;

18 }

19

20 r e t u r n 0 ; 21 }

c)

1 int m a i n () {

2 int bx [8] = { -2 , 3 , -4 , 5 , -5 , 1 , 0 , 2 } ; 3 int by [8] = { 5 , 5 , -2 , -2 , 5 , 3 , -1 , 2 } ;

4 int br [8] = { 2 , 1 , 1 , 1 , 4 , 2 , 2 , 4 } ;

5 int x , y , r , i , c p t 2 =0 , c p t 3 =0 ; 6 c h a r e t a t ;

7

8 p r i n t f (" D o n n e z l ’ a b s c i s s e : ") ; 9 s c a n f (" % d ", & x ) ;

10

11 p r i n t f (" D o n n e z l ’ o r d o n n e e : ") ; 12 s c a n f (" % d ", & y ) ;

13

14 p r i n t f (" D o n n e z le r a y o n : ") ; 15 s c a n f (" % d ", & r ) ;

16

17 for ( i =0 ; i <8 ; i ++) {

18 e t a t = i n c l u s i o n _ c e r c l e s ( bx [ i ] , by [ i ] , br [ i ] , x , y , r ) ; 19

20 if ( e t a t == 3) {

21 c p t 3 ++ ;

22 }

23 e l s e if ( e t a t == 2) {

24 c p t 2 ++ ;

25 }

26 }

27

28 p r i n t f (" Cet o b j e t p e u t c o m m u n i q u e r :\ n ") ;

29 p r i n t f (" en bi - d i r e c t i o n n e l a v e c % d o b j e t s .\ n ", c p t 3 ) ; 30 p r i n t f (" en uni - d i r e c t i o n n e l a v e c % d o b j e t s .\ n ", c p t 2 ) ; 31

32 r e t u r n 0 ; 33 }

E Etre capable d’´ ˆ ecrire des fonctions et des programmes simples

(3)

Exercice 2 : Paquetage d’objets communicants a)

13 c h a r o b j e t _ r e a d ( T O b j e t * b , F I L E * d e s c ) {

14 int x , y , r ;

15 c h a r res = 0 ; 16

17 if (! f e o f ( d e s c ) && f s c a n f ( desc , " % d % d % d ", & x , & y , & r ) == 3) { 18 b - > x = x ;

19 b - > y = y ; 20 b - > r = r ;

21 res = 1 ;

22 }

23

24 r e t u r n res ; 25 }

ou encore :

13 c h a r o b j e t _ r e a d ( T O b j e t * b , F I L E * d e s c ) { 14 c h a r res = 0 ;

15

16 if (! f e o f ( d e s c ) && f s c a n f ( desc , " % d % d % d ", &( b - > x ) , &( b - > y ) , &( b - > r ) ) == 3) {

17 res = 1 ;

18 }

19

20 r e t u r n res ; 21 }

ou encore :

13 c h a r o b j e t _ r e a d ( T O b j e t * b , F I L E * d e s c ) {

14 r e t u r n ! f e o f ( d e s c ) && f s c a n f ( desc , " % d % d % d ", &( b - > x ) , &( b - > y ) , &( b - > r ) ) == 3) ; 15 }

b)

27 c h a r o b j e t _ c o m m u n i c a t e ( T O b j e t * b1 , T O b j e t * b2 ) {

28 r e t u r n i n c l u s i o n _ c e r c l e s ( b1 - > x , b1 - > y , b1 - > r , b2 - > x , b2 - > y , b2 - > r ) ; 29 }

D Etre capable de lire dans des fichiers texte et de manipuler une structure de donn´ ˆ ees

Exercice 3 : Programme d’analyse des communications entre objets communicants

1 /* F i l e : m a i n . c */

2 # i n c l u d e < s t d i o . h >

3 # i n c l u d e < s t d l i b . h >

4

5 # i n c l u d e " T O b j e t . h "

6

7 # d e f i n e F O P E N ( _d , _f , _m ) {\

8 if (!( _d = f o p e n ( _f , _m ) ) ) {\

9 p e r r o r (" E r r o r : c a n n o t o p e n f i l e . ") ;\

10 e x i t (1) ;\

11 }}

12

13 # d e f i n e M A L L O C ( _p , _t , _n ) {\

(4)

19 int m a i n () { 20 T O b j e t * o b j e t s ; 21 int * c o m m u n i q u e ;

22 int N , i ;

23 c h a r f i l e n a m e [ 2 5 6 ] ; 24 F I L E * d e s c ;

25

26 int j , cpt =0 ;

27 c h a r e t a t ; 28

29 p r i n t f (" D o n n e z le nom du f i c h i e r de p r e v i s i o n s : ") ; 30 s c a n f (" % s ", f i l e n a m e ) ;

31

32 F O P E N ( desc , f i l e n a m e , " r ") ; 33

34 f s c a n f ( desc , " % d ", & N ) ; 35

36 M A L L O C ( objets , TObjet , N ) ; 37 M A L L O C ( c o m m u n i q u e , int, N ) ; 38

39 i = 0 ;

40 w h i l e (! f e o f ( d e s c ) ) {

41 o b j e t _ r e a d ( o b j e t s + i , d e s c ) ; 42 c o m m u n i q u e [ i ] = 0 ;

43 i ++ ;

44 }

45

46 f c l o s e ( d e s c ) ; 47

48 for ( i =0 ; i < N ; i ++) { 49 for ( j = i +1 ; j < N ; j ++) {

50 e t a t = o b j e t _ c o m m u n i c a t e ( o b j e t s + i , o b j e t s + j ) ; 51

52 if ( e t a t == 3) {

53 p r i n t f (" Ces d e u x o b j e t s p e u v e n t c o m m u n i q u e r en bi - d i r e c t i o n n e l :\ n ") ; 54 o b j e t _ p r i n t ( o b j e t s + i ) ;

55 o b j e t _ p r i n t ( o b j e t s + j ) ; 56 c o m m u n i q u e [ i ] = 1 ; 57 c o m m u n i q u e [ j ] = 1 ;

58 }

59 e l s e if ( e t a t == 2) {

60 p r i n t f (" Ces d e u x o b j e t s p e u v e n t c o m m u n i q u e r en uni - d i r e c t i o n n e l :\ n ") ; 61 o b j e t _ p r i n t ( o b j e t s + i ) ;

62 o b j e t _ p r i n t ( o b j e t s + j ) ; 63 c o m m u n i q u e [ i ] = 1 ; 64 c o m m u n i q u e [ j ] = 1 ;

65 }

66 }

67 }

68

69 for ( i =0 ; i < N ; i ++) { 70 cpt += ! c o m m u n i q u e [ i ] ;

71 }

72

73 p r i n t f (" % d o b j e t % s h o r s a t t e i n t e :\ n ", cpt , cpt ==1 ? " est " : " s s o n t ") ; 74

75 for ( i =0 ; i < N ; i ++) { 76 if (! c o m m u n i q u e [ i ]) { 77 o b j e t _ p r i n t ( o b j e t s + i ) ;

78 }

79 }

80

81 r e t u r n 0 ; 82 }

(5)

ou encore :

19 int m a i n () { 20 T O b j e t * o b j e t s ; 21 int * c o m m u n i q u e ;

22 int N , i ;

23 c h a r f i l e n a m e [ 2 5 6 ] ; 24 F I L E * d e s c ;

25

26 int j , cpt =0 ;

27 c h a r e t a t ; 28

29 p r i n t f (" D o n n e z le nom du f i c h i e r de p r e v i s i o n s : ") ; 30 s c a n f (" % s ", f i l e n a m e ) ;

31

32 F O P E N ( desc , f i l e n a m e , " r ") ; 33

34 f s c a n f ( desc , " % d ", & N ) ; 35

36 M A L L O C ( objets , TObjet , N ) ; 37 M A L L O C ( c o m m u n i q u e , int, N ) ; 38

39 i = 0 ;

40 w h i l e (! f e o f ( d e s c ) ) {

41 o b j e t _ r e a d (&( o b j e t s [ i ]) , d e s c ) ; 42 c o m m u n i q u e [ i ] = 0 ;

43 i ++ ;

44 }

45

46 f c l o s e ( d e s c ) ; 47

48 for ( i =0 ; i < N ; i ++) { 49 for ( j = i +1 ; j < N ; j ++) {

50 e t a t = o b j e t _ c o m m u n i c a t e (&( o b j e t s [ i ]) , &( o b j e t s [ j ]) ) ; 51

52 if ( e t a t == 3) {

53 p r i n t f (" Ces d e u x o b j e t s p e u v e n t c o m m u n i q u e r en bi - d i r e c t i o n n e l :\ n ") ; 54 o b j e t _ p r i n t (&( o b j e t s [ i ]) ) ;

55 o b j e t _ p r i n t (&( o b j e t s [ j ]) ) ; 56 c o m m u n i q u e [ i ] = 1 ;

57 c o m m u n i q u e [ j ] = 1 ;

58 }

59 e l s e if ( e t a t == 2) {

60 p r i n t f (" Ces d e u x o b j e t s p e u v e n t c o m m u n i q u e r en uni - d i r e c t i o n n e l :\ n ") ; 61 o b j e t _ p r i n t (&( o b j e t s [ i ]) ) ;

62 o b j e t _ p r i n t (&( o b j e t s [ j ]) ) ; 63 c o m m u n i q u e [ i ] = 1 ;

64 c o m m u n i q u e [ j ] = 1 ;

65 }

66 }

67 }

68

69 for ( i =0 ; i < N ; i ++) { 70 cpt += ! c o m m u n i q u e [ i ] ;

71 }

72

73 p r i n t f (" % d o b j e t % s h o r s a t t e i n t e :\ n ", cpt , cpt ==1 ? " est " : " s s o n t ") ; 74

75 for ( i =0 ; i < N ; i ++) { 76 if (! c o m m u n i q u e [ i ]) {

77 o b j e t _ p r i n t (&( o b j e t s [ i ]) ) ;

78 }

79 }

80

81 r e t u r n 0 ; 82 }

Références

Documents relatifs

Surtout, ne cherchez pas ` a apprendre la correction, mais utilisez l` a pour v´ erifier que vous avez bien r´ epondu ` a la question et comprendre, le cas ´ ech´ eant, comment

— Sinon, s’il reste au moins 4 jours et s’il y a plus de 3 jours de beau temps parmi les 4 premiers jours, prendre un pack de 4 jours.. — Sinon, s’il reste au moins deux jours

D´ eduire des questions pr´ ec´ edentes que, pour tout n ≥ 1, le syst` eme consid´ er´ e admet au moins un point p´ eriodique de p´ eriode primitive n.. Un peu de th´

Les exercices sont ind´ ependants, et peuvent ˆ etre trait´ es dans n’importe quel ordre.. A chaque op´ eration sur les ´ equations d’un syst` eme ou sur les lignes ou

Sur un autre dessin que celui de la question 3, mais en gardant la mˆ eme unit´ e de longueur, tracer pr´ ecis´ ement cette trajectoire en faisant figurer son orientation et

Les exercices sont ind´ ependants, et peuvent ˆ etre trait´ es dans n’importe quel ordre.. A chaque op´ eration sur les ´ equations d’un syst` eme ou sur les lignes ou

On suppose que la solution y est assez r´eguli`ere.. Pr´eciser vos hypot`eses de r´egularit´e

A quelle heure au plus tard devez-vous vous mettre en route (a) pour arriver sans retard presque sˆ urement?. (b) pour que votre probabilit´ e d’arriver sans retard soit au moins