Lycée Pilote de Sousse
Devoir de Synthèse N° 2
Année scolaire : 2011/2012
Matière : Informatique
Durée : 1HMr. Med Abdallah Mani
Classe : 4 TechNom & Prénom : ………. Note : ……. / 20
Exercice 1.
(3.5 pts)Soit l’algorithme suivant : 1) Debut devoir 2) Lire(n) 3) Convch(N,ch)
4) Pour i de 1 à long(ch) DIV 2 faire C ch[i]
Ch[i] ch[long(ch)-i+1]
ch[long(ch)-i+1] c FinPour
5) Valeur(ch,n,e) 6) Ecrire(n) 7) Fin Devoir
1. Exécuter l’algorithme précédent pour N=3247
………7423………
2. Donner le rôle de l’algorithme
………Afficher le nombre miroir d’un nombre (inverse)………
3. Transformer l’instruction n°3 en remplaçant la boucle POUR par la structure Répéter … Jusqu’à.
i1 Répéter C ch[i]
Ch[i] ch[long(ch)-i+1]
ch[long(ch)-i+1] c i i+1
jusqu’à (i> long(ch) DIV 2)
i:=1;
repeat C := ch[i];
Ch[i] := ch[length(ch)-i+1];
ch[length(ch)-i+1] := c ; i:=i+1;
until(i>length(ch) DIV 2);
Exercice 2.
(2.5 pts)Compléter le tableau suivant par les entêtes des modules (analyse Procédure ou Fonction) :
Actions Entêtes des modules
Trier un tableau T de n chaînes par ordre alphabétiques
Def proc tri (var t :tab ;n :entier) Eclater un tableau T de n entiers en deux
tableaux T1 contenant les entiers positifs et T2 contenant les entiers négatifs
Def proc eclat (t :tab ;var
t1,t2 :tab ;n :entier ;var n1,n2 :entier) Déterminer la position du minimum d’un
tableau de n réels
Def fn min(t :tab ;n :entier) :entier Inverser l’ordre des éléments d’un tableau T
de n caractères
Def proc inv(var t :tab ; n :entier) Vérifier si un tableau T de n entiers est
symétrique ou non
Def fn symet(t :tab ;n :entier) :booleen
Problème.
(14 pts)On désire résoudre un problème qui permet :
Saisir un tableau T de N chaînes avec 2≤N≤20 et la taille de la chaîne entre 2 et 10 caractères
Remplir un deuxième tableau V par le nombre de caractères non alphabétiques dans chaque case
Trier le tableau T dans l’ordre croissant selon le tableau V
Afficher le(s) mot(s) contenant le plus grand nombre de caractères non alphabétiques Exemple :
Pour N=5 et T contenant :
A5+M+2 ScO@p* BAC 12*0 T*ech*/
On obtient le tableau V suivant :
4 2 0 4 3
Après le tri de T selon le tableau V on obtient :
BAC ScO@p* T*ech*/ 12*0 A5+M+2
0 2 3 4 4
Le(s) mot(s) contenant le plus grand nombre de caractères non alphabétiques : A5+M+2
12*0
1. Analyser le programme principal en le décomposant en modules.
2. Analyser chacun des modules envisagés
3.
Déduire l’algorithme de programme principal ainsi que celui d’un module de votre choix.
program devoir;
uses wincrt;
type
tabc=array [1..20] of String;
tab=array[1..20] of integer;
var t:tabc;
v:tab;
n,i:integer;
procedure saisie (var ft:tabc;var fn:integer);
var i:integer;
begin repeat
writeln('Donner la taille du tableau:');
readln(fn)
until (n in [2..20]);
for i:=1 to n do repeat
writeln('Donner une chaine n° ',i,':');
readln(ft[i]);
until (length(ft[i]) in [2..10]);
end;
procedure remplir(ft:tabc;var fv:tab;fn:integer);
var c,j,i:integer;
ch:string;
begin
for i:=1 to n do begin
fv[i]:=0;
ch:=ft[i];
c:=length(ch);
for j:=1 to length(ch) do if ch[j] in ['A'..'z'] then c:=c-1;
fv[i]:=c;
end;
end;
Procedure permuter( var a:integer; var b:integer);
Var
p : integer;
begin p:=a;
a:=b;
b:=p;
end;
procedure tri(var ft:tabc;var fv:tab;fn:integer);
var
i,j,pmin:integer;
ch:string;
begin
for i:=1 to n-1 do begin
pmin:=i;
for j:=i+1 to n do
if fv[j]<fv[pmin] then pmin:=j;
if i<>pmin then begin
permuter(fv[i],fv[pmin]);
ch:=ft[i] ; ft[i]:=ft[pmin];
ft[pmin]:=ch;
end;
end;
end;
procedure affiche (ft:tabc;fv:tab;fn:integer);
var i,max:integer;
begin max:=fv[fn];
i:=fn;
while fv[i]=max do begin
writeln(ft[i]);
i:=i-1;
end;
end;
begin saisie(t,n);
remplir(t,v,n);
tri(t,v,n);
for i:=1 to n do write (t[i],'|');
writeln;
for i:=1 to n do write (v[i],'|');
writeln;
Affiche(t,v,n);
end.