Lycée Pilote de Sousse
Devoir de Synthèse N° 1
Année scolaire : 2013/2014
Matière : Informatique Durée : 1H 30 Min
Mr. Med Abdallah Mani Classe : 4 Tech
Nom & Prénom : ……….
Note : ……. / 20
Exercice1. (2 Pts)
Evaluer les expressions suivantes pour a=60 et b=3 : 1. (a-b =69) AND ( a mod 2=0) OR NOT(b div 2<>1)
………TRUE………..
2. NOT(‘Inconnu’<’inconnu’) AND (succ(ORD(‘A’))=Pred(ORD(‘B’)))
………FALSE………..
Exercice 2. (5 Pts)
Function verifier (ch2,ch1 : string):Boolean;
Var ok:boolean; i,l,p:integer; ch3:string;
Begin
l :=length(ch2);
ok:= true;
If l <> length (ch1) then ok:= false
Else Begin
For i:=1 to l Do
ch3:= ch3 + upcase(ch1[i]);
i:= 1;
Repeat
p:= pos(upcase(ch2[i]),ch3);
If p = 0 then ok:= false Else Begin i:= i + 1;
ch3[p] := '*';
End;
Until ((not ok) or (i > l));
End;
Verifier := ok;
End;
1) Def Proc verifier(ch2,ch1 :chaine ;var ok :booléen)
2) L long(ch2) 3) Ok vrai
4) Si l<>long(ch1) alors Ok faux
Sinon
Pour i de 1 à l faire
Ch3 ch3+majus(ch1[i]) FinPour
i 1 répéter
p pos(majus(ch2[i],ch3) si p=0 alors
ok faux sinon i i+1
ch3[p] ‘’*’’
FinSI
Jusqu’à (NON(ok)) ou (i>l) FinSI
Fin VERIFIER
1. Compléter les pointillés dans la fonction
2. Essayer la fonction avec les chaines suivantes : niche, chien et donner le résultat : ………TRUE………….
3. Donner le rôle de cette fonction
………cette fonction vérifie est ce que le mot2 est anagramme du mot1 oui/non (les deux chaines contiennent les même caractéres et de taille égale )………..
4. Réécrire la fonction en procédure en algorithme
Bon Travail P a g e | 1
Problème. (13 Pts)
Ecrire un programme qui remplit un tableau par N (N entre 5 et 20) consonnes majuscules, qui affiche le tableau et affiche le nombre d’occurrences d’une consonne donnée dans le tableau.
Exemple.
Pour n=7 : Soit T :
F R G H R P Q
1 2 3 4 5 6 7
Si on veut afficher le nombre d’occurrence de R le programme affichera le message suivant :
Le nombre d’apparition de R est 2 Travail à faire.
1. Ecrire l’analyse modulaire du programme principal en utilisant une procédure de remplissage de tableau, une procédure d’affichage et une fonction de calcul de nombre d’occurrence
2. Ecrire l’algorithme principal 3. Ecrire l’analyse des trois modules
4. Ecrire l’algorithme de la fonction de Calcul d’occurrence Analyse programme Principal :
Résultat = Ecrire ('’Le nombre d''apparition de ‘',r,'’ est ‘',FN occ(t,n,r)) R=[] Répéter
R=donnée (‘'Donner une Consonne Majuscule’')
Jusqu’à (r dans [‘'A’'..'’Z’']) ET NON(r dans ['’A’','’E’','’Y’','’U’','’I’','’O’']) Proc Affiche(t,n)
(T,N)=PROC Remplir (t,n) Fin Devoir
Algorithme Programme principal : 1) Debut Devoir
2) PROC Remplir(t,n) 3) PROC Affiche(t,n) 4) Répéter
Ecrire(‘'Donner une Consonne Majuscule’') Lire(r)
Jusqu’à (r dans [‘'A’'..'’Z’']) ET NON(r dans ['’A’','’E’','’Y’','’U’','’I’','’O’']) 5) Ecrire('’Le nombre d''apparition de ‘',r,'’ est ‘',FN occ(t,n,r))
6) Fin Devoir
Analyse de la procédure REMPLIR : Def Proc Remplir(var t :tab ;var n :entier) Resultat = t,n
T=[]pour i de 1 à n Faire []répéter
Bon Travail P a g e | 2
T[i]=donnée(‘’T[‘’,i,’’]=’’)
Jusqu’à (t[i] dans [‘'A’'..'’Z’']) ET NON(t[i] dans ['’A’','’E’','’Y’','’U’','’I’','’O’']) FinPour
N=[]répéter
N=Donnée(‘’Donner n entre 5 et 20’’) Jusqu’à n dans [5..20]
Fin Remplir
Analyse de la procédure AFFICHE : Def PROC Affiche(t :tab ; n :entier) Résultat =Af
Af=[]Pour i de 1 à N faire Ecrire(‘’ ‘’,t[i],’’ |’’) FinPour
Analyse de la fonction OCC :
Def FN OCC (t :tab ;n :entier ;r :caractère) :entier Résultat = OCC
Occ o
O=[o0]pour i de 1 à n faire []Si t[i]=r alors
O o+1 FinSI
FinPour
Algorithme de la fonction OCC :
1) Def FN OCC (t :tab ;n :entier ;r :caractère) :entier 2) o0
3) pour i de 1 à n faire Si t[i]=r alors O o+1 FinSI FinPour 4) Occ o 5) Fin OCC Traduction Pascal : program test;
uses wincrt;
type
tab=array [1..20] of char;
var r:char;
n:integer;
t:tab;
procedure remplir(var t:tab; var n:integer);
var
Bon Travail P a g e | 3
i:integer;
begin repeat
writeln('donner n entre 5 et 20');
readln(n);
until n in [5..20];
for i:=1 to n do repeat
writeln('T[',i,']=');
readln(t[i]);
until (t[i] in ['A'..'Z']) and not(t[i] in ['A','E','Y','U','I','O']);
end;
procedure affiche (t:tab;n:integer);
var i:integer;
begin
for i:=1 to n do write(' ',t[i],' |');
writeln;
end;
function occ(t:tab;n:integer;r:char):integer;
var
i,o:integer;
begin o:=0;
for i:=1 to n do if r=t[i] then o:=o+1;
occ:=o;
end;
begin
remplir(t,n);
affiche(t,n);
repeat
writeln('Donner une Consonne Majuscule');
readln(r);
until (r in ['A'..'Z']) and not(r in ['A','E','Y','U','I','O']);
writeln('Le nombre d''apparition de ',r,' est ',occ(t,n,r));
end.
Bon Travail P a g e | 4