Vous êtes sur la page 1sur 2

Corrigé de l’examen 1 d’Algorithmique et structures de données statiques

06 Décembre 2021
Exercice I :
Procedure Somme (N :Integer) ;
Var I,S,V1,V2 :Integer ; Encore :Boolean ;
Begin
Encore :=True ;
While Encore Do
Begin
Encore :=False ;I :=1 ;
Readln(V1) ;
While (I<N)And(Not Encore) do
Begin
Readln(V2) ;I :=I+1
If V1>V2 Then Encore :=True //Reprendre du début, car pas trié
Else V1 :=V2 ;
End
End ;
End ;

Exercice II :
Question 1 :

Procedure SommeSens (M :TM ; I, J : Integer ; sens : Char) : Integer ;


Var S,C,L :Integer ;
Begin
S :=0 ;
Case Sens Of :
‘G’ :For C :=1 To J-1 Do S :=S+M[I,C] ;
‘D’ :For C :=J+1 To 100 Do S :=S+M[I,C] ;
‘H’ :For L :=1 To I-1 Do S :=S+M[L,J] ;
‘B’ :For L :=I+1 To 50 Do S :=S+M[L,J] ;
End ;
SommeSens :=S
End ;
Question 2 :

Procédure Coordonnees (M :TM ; Sens1,Sens2 : Char) ;


Var S1,S2,I,J :Integer ;
Begin
For I :=1 To 50 Do For J :=1 To 100 Do
Begin
Case Sens1 Of
‘G’ :S1 := SommeSens(M,I,J,’G’) ;
‘D’ :S1 := SommeSens(M,I,J,’D’) ;
‘H’ :S1 := SommeSens(M,I,J,’H’) ;
‘B’ :S1 := SommeSens(M,I,J,’B’) ;
End ;
Case Sens2 Of
‘G’ :S2 := SommeSens(M,I,J,’G’) ;
‘D’ :S2 := SommeSens(M,I,J,’D’) ;
‘H’ :S2 := SommeSens(M,I,J,’H’) ;
‘B’ :S2 := SommeSens(M,I,J,’B’) ;
End ;
If M[I,J]=S1+S2 Then Writeln(I,J)
End ;
End ;
Exercice III :
Question 1:
Function Triee(T :Tab) : Integer ;
Var I :Integer ;Croissant :Boolean ;
Begin
I :=1 ; While (T[I]= T[I+1])And (I<50) Do I :=I+1 ;
If I=50 Then If (T[I]= T[I-1])Or(T[I]> T[I-1]) Then triee :=1 Else triee :=2
Else //I<50
Begin
Croissant :=T[I]< T[I+1] ;
If Croissant then While (T[I]< T[I+1])And (I<50) Do I :=I+1 ; If I=50 Then Triee :=1 Else Triee :=0;
If Not Croissant then While (T[I]> T[I+1])And (I<50) Do I :=I+1 ; If I=50 Then Triee :=2
Else Triee :=0;
End
End ;
Question 2 :

Function Colonne(M :TM ;T :TAB) :Integer;


Fonction Egale(M :TM ;T :TAB ;X :Integer) :Boolean ;//Compare T avec la colonne X
Var I :Integer ;
Begin
I :=1 ;
While (T[I]=M[I,X]) And (I<50) Do I :=I+1 ; Egale := (T[I]=M[I,X]) ;
End ;
Var I :Integer ;
Beginf
I :=1 ;
While (Not Egale(M,T,I))And(I<100) Do I :=I+1 ;
If Egale(M,T,I) Then Colonne :=I Else I :=0
End ;
Question 3 :

Function ColonneInverse(M :TM ;T :TAB) :Integer ;


Fonction EgaleInverse(M :TM ;T :TAB ;X :Integer) :Boolean ;//Compare T avec colonne X
Var I :Integer ;
Begin
I :=1 ;
While (T[50-I+1]=M[I,X]) And (I<50) Do I :=I+1 ; Egale := (T[50-I+1]=M[I,X]) ;
End ;
Var I :Integer ;
Begin
I :=1 ;
While (Not EgaleInverse (M,T,I))And(I<100) Do I :=I+1 ;
If Egale(M,T,I) Then Colonne :=I Else I :=0
End ;

Question 4 :
Pour la dernière question, la solution consiste à trier chaque colonne du tableau avant de la comparer avec le
tableau T (trié aussi).

Vous aimerez peut-être aussi