Affichage des articles dont le libellé est informatique. Afficher tous les articles
Affichage des articles dont le libellé est informatique. Afficher tous les articles

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 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 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 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.

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

Exercice 1 :

Ecrire un programme Pascal qui permet de former puis d’afficher un entier R de quatre chiffres à partir de deux entiers M et N strictement positifs et formés chacun de deux chiffres et ceci en intercalant le nombre n entre les deux chiffres de m.

Exemple :

Si M=56 et N=21 alors l’entier R sera égal à 5216.

Solution :

program Serie1ex1;

uses wincrt;

var

m,n,a,b,c,d,r : integer;

begin

writeln('Donner les deux entiers m et n ');

readln(m,n);

a:=m div 10;

b:=n div 10;

c:=n mod 10;

d:=m mod 10;

r:=a*1000+b*100+c*10+d;

writeln(r);

end.



Diagonales de la matrice

calculer la somme des element de premier diagonal et la 2eme diagonal puis le transposé d'une matrice en utilisant un methode recursif:


program som_trans;
uses wincrt;
type
mat=array[1..10,1..10] of integer;
var n,j,i:integer; m:mat;
{*******************************************}
procedure remlissage(var m:mat;n:integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
write('M[',i,',',j,']=');
readln (M[i,j]);
end;
end;
{**********************************************}
function som_diag1(m:mat; n,i:integer):integer;
begin
if i=N then som_diag1:=m[n,n]
else
som_diag1:=m[i,i]+som_diag1(m,n,i+1);
end;
{*****************************************}
function som_diag2(m:mat; n,i:integer):integer;

begin
if i=N then som_diag2:=m[n,1]
else
som_diag2:=m[i,n-i+1]+som_diag2(m,n,i+1);
end;

{transposé da la matrice}
procedure trans(var M:mat;n:integer; var i,j:integer);
var aux:integer;
begin
if i<=n then
begin
if j<=i-1 then
begin
aux:=m[i,j];
m[i,j]:=m[j,i];
m[j,i]:=aux;
j:=j+1;
trans(m,n,i,j);
end;
j:=1;
i:=i+1;
trans(m,n,i,j);
end;

end;

{********************************************}

begin
write('nombre des lignes= '); readln(n);
remlissage(m,n);
i:=1;
writeln('somme diago1 = ', som_diag1(m,n,i));
i:=1;
writeln('somme diago2 = ',som_diag2(m,n,i));
i:=1; j:=1;
trans(M,n,i,j);
{affichage de la matrice}
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j],' ');
writeln;
end;

end.

Type de données numériques en Pascal

Types de données ordinaux numériques en Pascal
Taille Signé
Intervalle
Non signé
Intervalle
8 bits ShortInt
-128 .. 127
Byte
0 .. 255
16 bits Integer
-32768 .. 32767
Word
0 .. 65535
32 bits LongInt
-2.147.483.648 .. 2.147.483.647
LongWord (depuis Delphi 4)
0 .. 4.294.967.295
64 bits Int64 qword (depuis FreePascal 2.0)

Utilisation des fichiers type text

Sur Pascal, il est possible d'utiliser d'autres fichiers externes

La décalration

var
nom_de_variable : text;

Les opérations possibles sur ce genre de fichiers sont les suivantes :

assign (f,'path');
permet de dire que le fichier f se trouve dans le "path" donné

reset(f)
Permet d'ouvrir le fichier pour la lecture

rewrite(f)
permet d'ouvrir le fichier pour l'écriture (si le fichier n'existait pas avant, un nouveau fichier est crée, si un fichier porte son nom, il est écrasé)

close(f)
permet de fermer le fichier (indipensable si on utilise rewrite(f)!!);

Enfin, pour pourvoir lire et écrire c'est simple :

readln(f,s) ça veut dire : lire depuis le fichier f la variable s

writeln(f,s) permet d'écrire dans f la varaible s!!

Conseils pour le bac pratique - Programmation Pascal.

Vous trouverez ici des conseils très utiles pour la bac pratique :

1) Correction des erreurs de compilations

L'erreur de compilation s'affiche en bas de votre fenêtre, les cas les plus classiques sont :

* Oubli d'un ; ou ) ou ( dans ce cas corriger votre syntaxe en rajoutant le symbole manquant

* Type mismatch : problème de type, ceci arrive quand vous utiliser la division avec les integer par exemple, dans ce cas utilisez plutôt div ou si vous utilisez mod pour les réels. Faites attention d'utiliser les bons opérateurs avec les bon types

* Unknown identifier : ceci veut dire que vous n'avez pas défini votre variable, ça peut arriver aussi si vous écrivez mal une fonction ou une procédure

2) Erreurs classiques :

* N'oubliez jamais le uses wincrt; il est indispensable pour l'exécution

* Si vous utilisez une boucle For, faites attention de bien mettre le to ou downto selon que votre boucle "monte" ou "descend"

*Quand vous utilisez les integer, faites bien attention de pas dépasser la limite qui est de 32768m et donc ne pas manipuler des grands nombres. Utilisez le type longint si vous devez absolument travailler avec les grands nombres.

3) Autres erreurs

L'erreur 202 de RunTime peut parfois apparaître, cette erreur est dû au fait que vous utilisez une grande capacité de mémoire. Pensez dans ce cas de limiter l'utilisation, par exemple me déclarer pas un :

array [1..100] of string;

mais plutôt

array [1..100] of string[10];

Et puis bon courage à tout le monde de la part de notre blog.

correction bac TP

le but de ce sujet est de bien préparer pour passer l'examen du bac TP toutes vos questions seront les bienvenues.
Je tiens à signaler que ce sujet est consacré pour les élèves du 4ème année scientifiques (sciences expérimentales, mathématiques et sciences techniques)

BAC PRATIQUE 25 MAI 2010 A 10 H

Program bac2010;
uses wincrt;
var
n: integer;

Procedure Saisie (Var a: integer);
begin
repeat
writeln ('donnez un entier supérieur ou égale à10');
readln (a);
until (a >=10);
end;

Function verif (a:integer): boolean;
var m,p,K: integer;
begin
Repeat
m:= a div10;
p:= a mod10;
k := Abs (m-2*p);
until
K In [0..9];
verif := K In [0..7] ;
End;

{P,P**
Begin
Saisie (n);
If (verif (n) = True ) then
Writeln (n, 'est divisible par 7')
else writeln (n' n''est pas divisible par 7') ;
End;
end.



BAC PRATIQUE 25 MAI 2010 A 10 H

Program bac2010;
uses wincrt;
var
n: integer;

Procedure Saisie (Var a: integer);
begin
repeat
writeln ('donnez un entier supérieur ou égale à10');
readln (a);
until (a >=10);
end;

Function verif (a:integer): boolean;
var m,p,K: integer;
begin
Repeat
m:= a div10;
p:= a mod10;
k := Abs (m-2*p);
until
K In [0..9];
verif := K In [0..7] ;
End;

{P,P**
Begin
Saisie (n);
If (verif (n) = True ) then
Writeln (n, 'est divisible par 7')
else writeln (n' n''est pas divisible par 7') ;
End;
end.