Correction Bac Algo 2008

Transcription

Correction Bac Algo 2008
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-8h30
Correction devoir pratique : sujet n°1 (8 h:30)
program sujet1;
uses wincrt;
{¤¤¤¤¤¤¤¤¤¤¤¤¤ Structures des données: 2 points ¤¤¤¤¤¤¤¤¤}
{ ********* Déclaration d'un nouveau type *******}
type
base = record
bin : string[20];
oct : string[20];
hex : string[20];
end;
Devoirs et examens sur : www.kiteb.net
fnombre= file of word;
fbase =file of base;
{******** Déclaration des variables globaux ******}
var n:integer; f:fnombre; fb:fbase;
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{************ fonction de conversion de la base décimale à la base binaire*****}
function conv_bin(dec:word):string;
var r:word; ch_bin,chr:string[20];
begin
ch_bin:='';
repeat
r:=dec mod 2;
str(r,chr);
ch_bin:=chr+ch_bin;
dec:=dec div 2
until (dec =0);
conv_bin:=ch_bin;
end;
{************ fonction de conversion de la base décimale à la base binaire*****}
function conv_oct(dec:word):string;
var r:word; ch_oct,chr:string[20];
begin
ch_oct:='';
repeat
r:=dec mod 8;
str(r,chr);
ch_oct:=chr+ch_oct;
dec:=dec div 8
until (dec =0);
conv_oct:=ch_oct;
end;
{************ fonction de conversion de la base décimale à la base hexadécimale*****}
function conv_hex(dec:word):string;
var r:word; ch_hex,ch_r:string[20];
Correction réalisée par : ILAHI Néjib
Page 1/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-8h30
begin
ch_hex:='';
repeat
r:=dec mod 16;
if(r<10)then
begin
str(r,ch_r);
ch_hex:=ch_r+ch_hex;
end
else
begin
r:=r+(ord('A')-10);
ch_hex:=chr(r)+ch_hex;
end;
Devoirs et examens sur : www.kiteb.net
dec:=dec div 16
until (dec =0);
conv_hex:=ch_hex;
end;
{******* procedure de création de fichier des données *******}
procedure creation(var f:fnombre; n:integer);
var m,i:word;
begin
assign(f,'c:\bac2008\nombres.dat');
rewrite(f);
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Contraintes : 3 points ¤¤¤¤¤¤¤¤¤¤¤¤}
for i:=1 to n do
begin
repeat
write('saisir un entier inférieur à < 32000: ');
readln(m);
until (m<32000);
write(f,m);
end;
close(f);
end;
procedure affiche(var f:fnombre;var fb:fbase;n:integer);
var i:integer; dec:word;b:base;
begin
reset(f);
assign(fb,'c:\bac2008\nbr_conv.dat');
rewrite(fb);
for i:=1 to n do
begin
read(f,dec);
with b do
begin
bin:=conv_bin(dec);
Correction réalisée par : ILAHI Néjib
Page 2/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-8h30
oct:=conv_oct(dec);
hex:=conv_hex(dec);
end;
with b do
begin
write('conversion du (',dec,')10 est: (');
write( bin,')2, (',oct,')8 et (',hex,')16');
writeln;
write(fb,b);
end;
end;
close(fb);
close(f);
end;
{************* programme principal ********}
begin
repeat
write('Saisir le nombre des nombres décimaux: ');
readln(n);
until (n in[5..50]);
creation(f,n);
clrscr;
writeln('----------------------------------------------------------');
writeln('-- Liste des nombres décimaux ainsi que leurs conversion--');
writeln('----------------------------------------------------------');
Devoirs et examens sur : www.kiteb.net
affiche(f,fb,n);
end.
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Barême
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Modularité : 4 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Traitements ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤ 1 - Creation et remplissage fichier
: 2 points
¤}
{¤ 2 - Fonctions de conversions :
1.5*3 :4.5 points
¤}
{¤ 3 - Saisie de la dimension du fichier : 0.5 point
¤}
{¤ 4 - Appel des fonctions & procedures
: 1 point
¤}
{¤ 5 - Traitement des fichiers
: 1 point
¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
Correction réalisée par : ILAHI Néjib
Page 3/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-10h
Devoirs et examens sur : www.kiteb.net
Correction devoir pratique : sujet n°2 (10 h:00)
program sujet2 ;
uses wincrt;
{********** Structures des données ***********}
var
ft,ftc:text;
{********** procedure de creation de ft *****}
procedure creation(var ft:text);
var ligne:string;
begin
assign(ft,'c:\bac2008\phrases.txt');
rewrite(ft);
append(ft);
write('Pour terminer la saisie donner un chaîne vide: ');
readln(ligne);
while(ligne<>'')do
begin
writeln(ft,ligne);
write('Pour terminer la saisie donner un chaîne vide: ');
readln(ligne);
end;
close(ft);
end;
{*********** Fonction qui retourne le nombre de mots par phrase ***}
function nombre_mots(ch:string):integer;
var nb:integer;
begin
nb:=0;
while(pos(' ',ch)<>0)do
begin
nb:=nb+1;
delete(ch,pos(' ',ch),1);
end;
nombre_mots:=nb+1;
end;
{*********** Procedure de lecture d'un fichier texte ******}
procedure affiche(var f:text);
var ligne:string; s,k,nbmots:integer;
begin
reset(f);
s:=0; k:=0;
while(not(seekeof(f)))do
begin
readln(f,ligne);
k:=k+1;
nbmots:=nombre_mots(ligne);
s:=s+nbmots;
writeln(ligne,' et elle comporte ',nbmots,' mots.');
Correction réalisée par : ILAHI Néjib
Page 4/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-10h
writeln;
end;
writeln;
writeln('------------------------------------------');
writeln;
writeln('La moyenne des nombres de mots dans ce fichier est: ',s Div k);
close(f);
end;
{********* Fonction qui enleve les espaces de début d'une ligne *****}
function enleve_esp_deb(ch:string):string;
Devoirs et examens sur : www.kiteb.net
begin
while(pos(' ',ch)=1)do
delete(ch,1,1);
enleve_esp_deb:=ch;
end;
{********* Fonction qui enleve les espaces de fin d'une ligne *****}
function enleve_esp_fin(ch:string):string;
begin
while(pos(' ',ch)=length(ch))do
delete(ch,length(ch),1);
enleve_esp_fin:=ch;
end;
{******** Fonction qui enleve plus qu'un espace entre deux mots ****}
function enleve_esp(ch:string):string;
var i:integer;
begin
i:=1;
while(i<length(ch))do
if(ch[i]=' ')and (ch[i+1]=' ')then
delete(ch,i,1)
else
i:=i+1;
enleve_esp:=ch;
end;
function ajout_point(ch:string):string;
begin
if(ch[length(ch)]<>'.')then
ch:=ch+'.';
ajout_point:=ch;
end;
{*********** procedure de correction du fichier *****}
procedure correction(var ft,ftc:text);
var ligne:string;
begin
assign(ftc,'c:\bac2008\phr_cor.txt');
rewrite(ftc);
Correction réalisée par : ILAHI Néjib
Page 5/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-10h
append(ftc);
reset(ft);
while(not(seekeof(ft)))do
begin
readln(ft,ligne);
ligne:=enleve_esp_deb(ligne);
ligne:=enleve_esp_fin(ligne);
ligne:=enleve_esp(ligne);
ligne:=ajout_point(ligne);
writeln(ftc,ligne);
end;
close(ftc);
close(ft);
end;
{*********** programme principal ********}
begin
writeln('---------------- AVANT CORRECTION ----------------');
creation(ft);
writeln;
Devoirs et examens sur : www.kiteb.net
correction(ft,ftc);
writeln('---------------- APRES CORRECTION -----------------');
affiche(ftc);
end.
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Barême
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Modularité : 4 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Compilation: 2 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤ Structures de données: 3 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Traitements ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤ 1 - Creation et remplissage fichier
: 1.5 points
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤ 2 - Trois corrections
: 1.5*3 :4.5 points
¤}
{¤ 3 - Affichage du fichier texte
: 0.5 point
¤}
{¤ 4 - Affichage nombre de mots par phrase : 1 point
¤}
{¤ 5 - Affichage moyenne de mots par phrase : 1.5 point
¤}
{¤ 6 - Appel des fonctions & procedures
: 1 point
¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
Correction réalisée par : ILAHI Néjib
Page 6/8
BAC pratique informatique 2008
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-14h
Correction devoir pratique : sujet n°3 (14 h:00)
program sujet3;
uses wincrt;
type fnat= file of word;
Devoirs et examens sur : www.kiteb.net
var f,fr,fnr:fnat;n:integer;
procedure creation(var f:fnat;n:integer);
var i:integer;m:word;
begin
assign(f,'c:\bac2008\naturels.dat');
rewrite(f);
for i:=1 to n do
begin
repeat
write('saisir un entier naturel: ');
readln(m);
until (m >=0)and (m<32000);
write(f,m);
end;
close(f);
end;
function conv_bin(dec:word):string;
var r:word; ch_bin,chr:string[20];
begin
ch_bin:='';
repeat
r:=dec mod 2;
str(r,chr);
ch_bin:=chr+ch_bin;
dec:=dec div 2
until (dec =0);
conv_bin:=ch_bin;
end;
function rond(nb:word):boolean;
var n0,n1,i:integer;ch:string;
begin
ch:=conv_bin(nb);
n0:=0;n1:=0;
for i:=1 to length(ch)do
if(ch[i]='0')then
n0:=n0+1
else
n1:=n1+1;
if(n0=n1)then
rond:=true
else
rond:=false;
end;
Correction réalisée par : ILAHI Néjib
Page 7/8
BAC pratique informatique 2008
Devoirs et examens sur : www.kiteb.net
Sciences de l’informatique – Algorithmique et programmation- 21 mai 2008-14h
procedure eclat(var f,fr,fnr:fnat);
var nb:word;ch:string;
begin
assign(fr,'c:\bac2008\round.dat');
rewrite(fr);
assign(fnr,'c:\bac2008\non_round.dat');
rewrite(fnr);
reset(f);
while(not(eof(f)))do
begin
read(f,nb);
if(rond(nb))then
begin
write(fr,nb);
ch:=conv_bin(nb);
writeln('Le nombre ',nb,' est round car ',nb,'=(',ch,')2');
end
else write(fnr,nb);
end;
close(fr);
close(fnr);
close(f);
end;
{*********** programme principal **********}
begin
repeat
write('Saisir le nombre des entiers: ');
readln(n);
until( n in [10..100]);
creation(f,n);
clrscr;writeln('------------------------------------------'); writeln;
writeln('---- LISTE DES ENTIERS NATURELS RONDS ----');
writeln;
writeln('------------------------------------------');
writeln;
eclat(f,fr,fnr);end.
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Barême
¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Modularité : 4 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ Compilation: 2 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤ Structures de données: 3 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤
Contraintes : 2 points ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
Traitements ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
{¤ 1 - Creation et remplissage fichier
: 1 points
¤}
{¤ 2 - Affichage du nombre si elle est rond : 1 point
¤}
{¤ 3 - Verification si un nombre est rond : 2 point
¤}
{¤ 4 - Eclatement en deux fichiers
: 2 points
¤}
{¤ 5 - conversion à la base binaire
: 2 points
¤}
{¤ 6 - Appel des fonctions & procedures
: 1 point
¤}
{¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤}
Correction réalisée par : ILAHI Néjib
Page 8/8