Vous êtes sur la page 1sur 6

Correction Sujet 27 Mai 2014

8h

program S27_05_2014_8h;
uses wincrt;
type
Tab=array[1..100]of integer;
var
i,j,n,m:integer;
T,T1:tab;

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

{saisie de n et m}
procedure saisie(var n,m:integer);
begin
repeat
writeln('donner deux entiers:');
readln(n,m);
until (n>=10) and (n<m) and (m<=999);
end;
{fonction qui calcule la somme des diviseurs
dun entier n}
function som_diviseur(n:integer):integer;
var
s,i:integer;
begin
s:=0;
for i:=1 to n div 2 do
if n mod i = 0 then
s:=s+i;
som_diviseur:=s;
end;
{Procdure qui classe les termes de la suite
dans un tableau, sa taille sera i}
procedure suite(var t:tab;var
i:integer;n:integer);
var
x:integer;
begin
T[1]:=n;
i:=1;
repeat
i:=i+1;
T[i]:=som_diviseur(n);
n:=T[i];
until (n=1) or (T[i]=T[i-1]);

Correction Propose par Professeur Nesrine Rid@ne

end;
{Procdure qui permet dafficher les lments
dun tableau T de taille x}
procedure affichage(t:tab;x:integer);
var
i:integer;
begin
for i:=1 to x do
write(T[i],' ');
writeln;
end;
{Procdure qui permet dafficher le nombre des
lments en commun des deux tableaux}
procedure commun(T,T1:tab;x,y:integer);
var
nbr:integer;
ok:boolean;
begin
nbr:=0;
for i:=1 to x do
begin
j:=0;
ok:=false;
repeat
j:=j+1;
if T[i]=T1[j] then
begin
ok:=true;
nbr:=nbr+1;
end;
until(ok=true) or (j=y);
end;
writeln(nbr);
end;
{programme principal}
begin
saisie(n,m);
suite(T,i,n);
suite(T1,j,m);
affichage( T,i);

Page 1

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

affichage(T1,j);
commun(T,T1,i,j);
end.

Correction Propose par Professeur Nesrine Rid@ne

Page 2

Correction Sujet 27 Mai 2014


9h30

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

program S27_05_2014_9h30;
uses wincrt;
var
ch:string;
{procdure qui permet de saisir une adresse
lectronique qui remplie les deux conditions
demandes}
procedure saisie(var ch:string);
var
i,j,n:integer;
ok:boolean;
ch1:string;
begin
repeat
writeln('donner une adresse electronique:');
readln(ch);
n:=0;
for i:=1 to length(ch) do
if ch[i]='@' then
n:=n+1;
if n=1 then
begin
ch1:=copy(ch,1,pos('@',ch)-1);
j:=1;
ok:=false;
repeat
j:=j+1;
if not(ch1[j] in ['a'..'z','A'..'Z','_','-','.']) then
ok:=true;
until (ok=true) or (j=pos('@',ch)-1);
end;
until (ok=false) and (upcase(ch[1]) in ['A'..'Z'])
and (pos('@',ch)<>1);
end;

end;
{programme principal}
begin
saisie(ch);
writeln(passwd(ch));
end.

{Fonction qui permet de gnrer le mot de


passe}
function passwd(ch:string):string;
var
p:string;
begin
p:=copy(ch,1,pos('@',ch)- 1)+
ch[pos('@',ch)+1]+ch[length(ch)];
passwd:=p;
Correction Propose par Professeur Nesrine Rid@ne

Page 3

Correction Sujet 27 Mai 2014


11h

program S27_05_2014_11h;
uses wincrt;
type
tab=array[1..40] of integer;
var
t,v,t1:tab;
n,j,k:integer;

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

{procdure qui permet de saisir la taille du T}


procedure saisie(var n:integer);
begin
repeat
writeln('donner la taille');
readln(n);
until (n in [5..40]);
end;

{procdure qui permet de remplir le tableau T}


procedure remplissage(var t:tab;n:integer);
var
i:integer;
begin
for i:=1 to n do
repeat
writeln('donner l"element',i);
readln(T[i]);
until (T[i]>=0);
end;
{Procdure qui classe les termes de la suite
dans un tableau T1, sa taille sera j}
Procedure suite (var T1:tab;var
j:integer;n:integer);
var
i:integer;
begin
T1[1]:=1;
j:=1;
for i:=1 to n do
begin
j:=j+1;
T1[j]:=3*T1[j-1]-1;
end;
end;
Correction Propose par Professeur Nesrine Rid@ne

{procdure qui permet de remplir le tableau V,


sa taille sera k}
procedure formation(t:tab;var
v:tab;n:integer;var
k:integer;T1:tab;j:integer);
var
i,c:integer;
begin
k:=0;
for i:=1 to n do
begin
c:=0;
repeat
c:=c+1;
if T[i]=T1[c] then
begin
k:=k+1;
V[k]:=T[i];
end;
until(T[i]=T1[c]) or (c=j) ;
end;
end;
{procdure qui permet de trier un tableau}
procedure tri(var t:tab;n:integer);
var
echange:boolean;
i:integer;
procedure permut(var x,y:integer);
var
aux:integer;
begin
aux:=x;
x:=y;
y:=aux;
end;

begin
repeat
echange:=false;
for i:=1 to n-1 do
if T[i]>T[i+1] then
begin
permut(T[i],T[i+1]) ;
Page 4

echange:=true;
end;
n:=n-1
until(echange=false) or (n=1);
end;

formation(t,v,n,k,T1,j);
tri(v,k);
writeln('Les lments qui reprsentent des
termes de la suite sans redondance sont:');
aff_sans_rep(v,k);
end.

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

{procdure qui permet dafficher les lments


dun tableau}
procedure affichage(t:tab;n:integer);
var
i:integer;
begin
for i:=1 to n do
write(T[i],' ');
writeln;
end;
{procdure qui permet dafficher les lments
dun tableau sans rptition}
procedure aff_sans_rep(t:tab;n:integer);
var
i,j:integer;
ok:boolean;
begin
write(T[1],' ');
for i:=2 to n do
begin
j:=i;
ok:=false;
repeat
j:=j-1;
if T[i]=T[j] then
ok:=true;
until (ok=true) or (j=1);
if j=1 then
write(T[i],' ');
end;
end ;
{programme principal}
begin
saisie(n);
remplissage(t,n) ;
writeln('Les lments du tableau T sont:');
affichage(t,n );
suite(T1,j,n);
writeln('les lments de la suite sont:');
affichage(T1,j);
Correction Propose par Professeur Nesrine Rid@ne

Page 5

Correction Sujet 27 Mai 2014


14h

program S27_05_2014_14h;
uses wincrt;
var
a,b:longint;
{procdure qui permet de saisir a et b}
procedure saisie(var a,b:longint);
begin
repeat
writeln('donner deux entiers');
readln(a,b);
until(a>=100) and (a<b);
end;

writeln(i);
end;
{programme principal}
begin
saisie(a,b);
affichage(a,b);
end.

D e v o i r s e t e x a m e n s s u r : w w w. k i t e b . n e t

{Fonction qui permet de vrifier si un


entier long n est Polydivisible ou non}
function verif (n:longint):boolean;
var
ch,ch1:string;
i,e:integer;
r:longint;
ok:boolean;
begin
str(n,ch);
i:=1;
repeat
i:=i+1;
ch1:=copy(ch,1,i);
val(ch1,r,e);
ok:=(r mod i)=0;
until (i=length(ch)) or (ok=false);
verif:=ok;
end;
{procdure qui permet dafficher tous
les lments Polydivisibles qui sont
compris entre a et b}
procedure affichage(a,b:longint);
var
i:longint;
begin
for i:=a to b do
if verif(i) then
Correction Propose par Professeur Nesrine Rid@ne

Page 6