الثلاثاء، 3 مايو 2011

correction Examen du baccalaureat, session de juin 2010, science de l'informatique le 27 mai 2010 à 8h30

program min_max;
uses wincrt;
type
fich = file of byte;
var
f:fich;
n:byte;
pn,gn:string;

(*la defintion de la procedure remplir*)
procedure remplir(var f:fich; var n:byte);
var
i,x:byte;
begin
repeat
write('donner n:');
readln(n);
until(n>2)and(n<=50);
rewrite(f);
for i:= 1 to n do
begin
x := random(9) + 1;
writeln(x);
write(f,x);
end;
close(f);
end;

(*la defintion de la procedure construction_nombre*)
procedure nombres(var f:fich;n:byte; var pn,gn:string);
var
x,k,j,i:byte;
c:string;
begin
reset(f);
read(f,x);
str(x,c);
pn := c;
gn := c;

for i:= 2 to n do
begin
read(f,x);
str(x,c);
j := 1; k:=1;
while(c < gn[j])and( j <= length(gn) )do
begin
j := j + 1;
end;

insert(c,gn,j);

while (c > pn[k]) and (k <= length(pn) ) do
begin
k := k +1;
end;

insert(c,pn,k);

end;
writeln('le plus grand nombre:',gn);
writeln('le plus petit nombre:',pn);

close(f);
end;

(*la defintion de la procedure verif*)
procedure verif(gn:string);
var
i,j,k,ci,cj:byte;
r,r1,av,nv:integer;
er:integer;

begin
i := 1;
j := length(gn);
val(gn[i],ci,er);
val(gn[j],cj,er);
av := ci - cj;

i := i + 1;
j := j - 1;
val(gn[i],ci,er);
val(gn[j],cj,er);
nv := ci - cj;
r := nv - av;
r1 := r;
k := length(gn);

while( i < k div 2 )and(i+j = k+1) and (r1 = r) do
begin

av := nv;
i := i + 1;
j := j - 1;
val(gn[i],ci,er);
val(gn[j],cj,er);
nv := ci - cj;
r1 := nv - av;
end;

if (r1 = r)then
writeln('la suite est arithmétique, son raison = ', r)
else
writeln('cette suite n''est pas arithmétique.');
end;

(*Le programme principal*)
begin
assign(f , 'c:\bac2010\123456\nombres.dat');
randomize;
remplir(f,n);
nombres(f,n,pn,gn);
verif(gn);
end.

série d'exercices algorithmique 3SI (Enoncé + correction)

Exercice 7 :

Ecrivez un programme qui lit un nombre décimal positif au clavier et qui calcule la valeur de ce nombre arrondie au centième inférieur, puis l'affiche.

Exemple : 42.2135789 à 42.21

Solution

program Serie1Ex7;

uses wincrt;

var

x:real;

begin

writeln('Donner le réel x');

readln(x);

x:=(round(x*100))/100;

writeln(x:6:2);

end.

série d'exercices algorithmique 3SI (Enoncé + correction)

Exercice 6 :

Ecrivez un programme qui lit une ligne en entrée et affiche le nombre de caractères de cette ligne.

Exemple : Voici une ligne de texte. à 25

Solution :

program Serie1Ex6;

uses wincrt;

var

s:string;

begin

readln(s);

writeln(length(s));

end.

série d'exercices algorithmique 3SI (Enoncé + correction)

Exercice 4 :

Ecrire un programme qui lit deux réels a et b comme étant les deux cotés droits d’un triangle rectangle puis d’afficher la longueur de l’hypoténuse correspondante.

Solution :

program Serie1Ex4;

uses wincrt;

var

a,b,c:real;

begin

writeln('Donner les longueurs des deux côtés droits');

readln(a,b);

c:=sqrt(sqr(a)+sqr(b));

writeln(c:6:2);

end.

série d'exercices algorithmique 3SI (Enoncé + correction)

Exercice 5 :

Ecrivez un programme qui lit un nombre décimal positif au clavier et qui affiche la valeur de ce nombre, arrondie à l'entier le plus proche. Dans le cas où la partie décimale du nombre est égale à 0.5, on arrondira à l'entier supérieur. Par exemple, pour 4.5, on devra afficher 5.

Solution :

program Serie1Ex5;

uses wincrt;

var

x:real;

begin

writeln('Donner l''entier à arrondir');

readln(x);

writeln(round(x));

end.

série d'exercices algorithmique 3SI (Enoncé + correction)

Exercice 3 :

Ecrire un programme de conjugaison à toutes les personnes au temps de l'imparfait d'un verbe régulier du premier groupe.

Solution :

program Serie1Ex3;

uses wincrt;

var

verbe,terminaison,radical :string;

begin

writeln('Donner le verbe à conjuguer');

readln(verbe);

radical:=copy(verbe,1,length(verbe)-2);

terminaison:=copy(verbe,length(verbe)-1,2);

if terminaison<>'er' then

writeln('Il ne s''agit pas d''un verbe du premier groupe')

else

begin

writeln('Je ',radical,'ais');

writeln('Tu ',radical,'ais');

writeln('Il ',radical,'ait');

writeln('Elle ',radical,'ais');

writeln('Nous ',radical,'ions');

writeln('Vous ',radical,'iez');

writeln('Ils ',radical,'aient');

writeln('Elles ',radical,'aient');

end;

end.

série d'exercices algorithmique 3SI (Enoncé + correction)

a et b étant deux variables de types chaîne de caractères. Ecrire un algorithme qui saisit les contenus de chacune, permute leurs contenus puis les affiche à l'écran.

Solution :

program Serie1Ex2;

uses wincrt;

var

a,b,aux:string;

begin

writeln('Donner les deux chaînes à permuter ');

readln(a);

readln(b);

aux:=a;

a:=b;

b:=aux;

writeln(a);

writeln(b);

end.