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