Vous êtes sur la page 1sur 15

Ecrire un programme Pascal qui permet

d’afficher une horloge numérique.

program horloge;
uses wincrt, windos;
var h,m,s,c: word;
begin
repeat; gotoxy (37,12);
gettime (h,m,s,c);
writeln (h:2,':',m:2,':',s:2);
until 1=2
end.

Soit A un entier de deux chiffres non nuls et B


un entier de 3 chiffres identiques.
On se propose d’insérer les chiffres de A entre
les chiffres de B
Exemple : A=35 & B=777 .. B devient 73757

Première méthode:

program insert1;
uses wincrt;
var a,a1,a2: integer; b,c:longint;
begin
writeln ('donner a');
readln (a);
writeln ('donner b');
readln (b);
a1:= a div 10;
a2:= a mod 10;
c:= b div 100;
b:=c*10000+a1*1000+c*100+a2*10+c;
writeln ('b devient', b);
end.

-->

Deuxième méthode:
program insert2;
uses wincrt;
var a,e:integer; b:longint; ch,ph:string;
begin
repeat
writeln ('donner un nbr de 2 chiff');
readln(a);
until (a>=10)and (a<=99);
repeat;
writeln ('donner un nbr de 3 chiff ident');
readln (b);
str (b,ch);
until (ch[1] = ch[2]) and (ch[2] = ch[3])
and (length (ch) = 3);

str (a,ph);
insert(ph[1], ch, 2);
insert (ph[2], ch , 4);
val (ch,b,e);
writeln('b devient',b);
end.

Soit D une date valide.


Ecrire un programme Pascal qui permet de chercher
cette date après 1 jour.

program date;
uses wincrt;
var
d:string;
j,m,a,e:integer;
begin
writeln ('saisir une date valide ');
readln(d);
val(copy(d,1,pos('/',d)-1),j,e);
delete(d,1,pos('/',d));
val(copy(d,1,pos('/',d)-1),m,e);
delete(d,1,pos('/',d));
val(d,a,e);

if (j=31) and (m=12) then


begin
j:=1; m:=1; a:=a+1;
end
else
if (m in [1,3,5,7,8,10]) and (j=31)
or (m in[4,6,9,11]) and (j=30)
or(m=2) and (j=28) and (a mod 4 <> 0)
or(m=2) and (j=29) and (a mod 4 = 0) then
begin
j:=1; m:=m+1;
end
else
j:=j+1;

writeln('la date du lendemain est la suivante :');


writeln('*********' ,j,'/',m,'/',a,'********');
end.

Soit ch une chaine formée par des lettres


alphabétiques et des espaces.
On se propose de calculer le nombre des
voyelles et celui des consonnes.

program chaine ;
uses wincrt ;
var
ch: string;
i,v,c: integer;
b:boolean;

begin
repeat
writeln('donner une chaine qui renferme seulement des lettres ou des espaces ');
readln(ch);
repeat
for i:= 1 to length(ch) do
b:= upcase(ch[i]) in ['A'..'Z',' '];
until not(b) or (i=length(ch))
until b ;
CLRSCR;
v:=0; c:=0;
for i:= 1 to length(ch) do
if upcase(ch[i]) in ['A','E','Y','U','I','O'] then
v:= v+1
else
if ch[i] <> ' ' then
c:=c+1;

writeln('le nombre de voyelles dans ',ch,' est : ',v);


writeln('quant à le nombre de consonnes est : ',c,' :p');
end.

Ecrire un programme Pascal qui Permet de


simuler le je de Motus :
Le premier joueur choisit un mot M formé
seulement par des lettres alphabétiques.
Ce mot M doit être convertit en majuscule.
Le deuxieme joueur est demandé de trouver le
mot M en 2xN essaies, avec N est le nombre de
caractéres du M.
A chaque essaie, le deuxiéme joueur choisit une
lettre majus qui occupe toute les positions dans
ch initialement formé par N tirés.
Le jeu s’arrête soit en trouvant le mot M, soit après 2xN
essaies

program jeu;
uses wincrt;
var ph,m:string;
b:boolean;
f,i,n:integer;
c:char;

begin
repeat
gotoxy(5,3);
writeln('saisir un mot');
gotoxy(20,3);
readln(m);
i:=0;
repeat;
i:=i+1;
b:= m[i] in ['a'..'z','A'..'Z'];
until not(b) or (i=length(m));
until b;
clrscr;
n:=length(m);

for i:= 1 to n do
m[i]:= upcase(m[i]);
ph:='';

for i:= 1 to n do
ph:=ph+'-';
f:=0;
gotoxy(60,8);
writeln(ph);
repeat
repeat
gotoxy(10,5);
writeln('il vous reste ', 2*n-f, ' essais ');
gotoxy(10,7);
write('proposer une lettre majus');
gotoxy(45,7);
readln(c);

until (c) in ['A'..'Z'];


f:=f+1;
for i:= 1 to n do
if m[i]=c then ph[i]:=c;
gotoxy(60,8);
writeln(ph);
until (f=2*n) or (m=ph);
gotoxy(60,18);

if (ph=m) then
writeln ('Bravo')
else
writeln('Echec: ',m)
end.

Ecrire un programme Pascal qui permet de


saisir chaine (de longueur impair) formée par
des lettres alphabétiques, et de la convertir en
majuscule puis d’afficher le sablier comme le
montre l’exemple :

Si ch=Sablier

program sablier;
uses wincrt;
var i:integer; ch,ph:string; b:boolean;
begin
repeat

writeln('saisir un mot');
readln(ch);
clrscr;

i:=0;
repeat

i:=i+1;
b:= upcase(ch[i]) in ['A'..'Z'];
until not(b) or (i=length(ch));

for i:=1 to length(ch) do


ch[i]:= upcase(ch[i]);
until b and (length (ch) mod 2=1);

ph:=ch;

writeln('voici votre mot sous la forme d un sablier');

writeln;
for i:=1 to length(ch) div 2 do
begin

writeln(ch);

ch[i]:= ' ';

ch[length (ch) -i+1]:= ' ';


end;

writeln(ch);

for i:=length(ch) div 2 downto 1 do


begin

ch[i]:= ph[i];
ch[length(ch)-i+1]:= ph [length(ch) -i+1];
writeln(ch);
end;
end.

Soit T un tableau contenant N entiers > 0 avec


(5 < N < 20)
Ecrire le programme Pascal qui permet de
calculer la somme des elements de T, la
moyenne arithmetique et d’afficher le plus petit
et le plus grand élément.

program tableau;
uses wincrt;
var t:array [1..20] of integer;
max,min,i,s,n:integer;

begin

repeat
write('n=?');
readln(n);
until (n>=5) and (n<=20);

for i:=1 to n do

repeat

write('donner t[',i,']');
readln(t[i]);
until t[i]>0;

s:=0;

for i:=1 to n do

s:=s+t[i];
min:=t[1];

for i:=2 to n do

if t[i] < min then


min:=t[i];

max:= t[1];

for i:=2 to n do

if t[i] > max then


max:= t[i];

writeln('la somme est ',s);


writeln('la moyenne est ', s/n:6:2);
writeln('le max est ',max);
writeln('le min est ',min);

end.

Soit T un tableau contenant n lettres


alphabétiques.
On se propose de ranger les voyelles dans un
tableau V et les consonnes dans un tableau C.

program eclate;
uses wincrt;
var t,v,c: array[1..20]of char;
n,nv,nc,i:integer;

begin

repeat
write('n=?');
readln(n);
until (n>=5) and (n<=20);

for i:=1 to n do
repeat
write('donner t[',i,']');
readln(t[i]);
until (upcase(t[i])) in ['A'..'Z'];

nv:=0;
nc:=0;

for i:=1 to n do
if (upcase(t[i])) in ['A','E','Y','U','I','O'] then
begin

nv:=nv+1;
v[nv]:=t[i];
end

else

begin
nc:=nc+1;
c[nc]:=t[i];
end;

write('les voyelles sont: ');


for i:=1 to nv do
write(v[i], ' ');

writeln;

write('les consonnes sont: ');


for i:=1 to nc do
write(c[i], ' ');

end.

Ecrire un programme Pascal qui permet de


saisir un caractére et d’afficher sa nature (lettre
alphabétique, signe de ponctuation …)

Première Méthode:

program nature;
uses wincrt;
var c:char;

begin

writeln('saisir un caractere');
readln(c);

if (upcase(c)) in ['A'..'Z'] then


writeln('ce caractere est une lettre alphabetique')

else
if c in ['0'..'9'] then
writeln('ce caractere est un chiffre')

else
if c in [',',';',':','!','?','.'] then
writeln('ce caractere est un signe de ponctuation')

else
writeln('ce caractere est un symbole');

end.

-->
Deuxième Méthode:

program nature;
uses wincrt;
var c:char;

begin

writeln('saisir un caractere');
readln(c);

case c of

'A'..'Z' , 'a'..'z': writeln('ce caractere est une lettre alphabetique');


'0'..'9': writeln('ce caractere est un chiffre');
'+','-','*','/': writeln('ce caractere est un operateur arithmetique');
',',';',':','!','?','.': writeln('ce caractere est un signe de ponctuation')

else
writeln('ce caractere est un symbole');

end;

end.

Ecrire un programme Pascal qui permet de


saisir un date de la forme jj/mm/aaaa puis
d’afficher le nombre de jours du mois de cette
date.

program nbr_jrs;
uses wincrt;
var d:string;
m,a,e:integer;

begin

repeat
writeln('saisir un date sous la forme de jj/mm/aaaa');
readln(d);
until (d[3]='/') and (d[6]='/') and (length(d)=10);

val(copy(d,4,2),m,e);
val(copy(d,7,4),a,e);

case m of

2: if (a mod 4=0) then writeln('29 jrs')


else writeln('28 jrs');

1,3,5,7,8,10,12: writeln('31 jrs');

4,6,9,11: writeln('30 jrs');

else write('invalide');
end;

end.

Soit N un entier compris entre 5 et 20.


On se propose d’afficher l’histogramme ci-
dessous.
Exemple, si N=6
1
23
456
7891
23456
789123

program histogramme;
uses wincrt;
var n,k,j,i:integer;
begin

repeat
writeln('saisir un entier naturel compris entre 5 et 20');
readln(n);
until (n>=5) and (n<=20);

clrscr;

k:=1;

for i:=1 to n do

begin
for j:=1 to i do

begin
write(k);
k:=k+1;

if k=10 then
k:=1;
end;

writeln;

end;

end.

Soit T un tableau contenant N entiers > 0, avec


( 5 < N < 20)
On se propose d’afficher les sequences
strictement croissants ainsi que leur nombre
Exemple : Si T = | 3 | 12 | 41 | 5 | 5 | 8 | 10 |3 | 6 |
(3,12,41); (5); (5,8,10); (3,6).

program sequences;
uses wincrt;
var i,f,n:integer;
t:array [1..20]of integer;

begin
repeat
write('n=?');
readln(n);
until (n>=5) and (n<=20);

for i:=1 to n do
repeat
writeln('t[',i,']');
readln(t[i]);
until t[i] > 0;
write ('(',t[1]); f:=1;
for i:= 2 to n do
if t[i] > t[i-1] then
write(',' , t[i])
else
begin
write(');(' , t[i]);
f:=f+1;
end;
writeln(').');
write(f , ' sequences');
end.
Soit T un tableau contenant N chaines formées
par des lettres alphabétiques et V un tableau
contenant M entiers > 0 avec N et M sont
compris entre 3 et 20.
On se propose d’afficher les chaines
symétriques dans T et les non symétriques
dans V.

program symetrique;
uses wincrt ;
var t:array [1..30]of string;
v:array [1..30]of integer;
n,m,i:integer;
ch:string;

function verif(ch:string):boolean;
var i:integer;
b:boolean;
begin
i:=0 ;
repeat
i:=i+1;
b:=upcase(ch[i]) in ['A'..'Z'] ;
until not (b) or (i=length (ch));
verif:=b;
end;
function sym(ch:string):boolean ;
var b: boolean;
i:integer;
begin
i:=0;
repeat
i:=i+1;
b:= upcase (ch[i])=upcase(ch[length (ch)-i+1]);
until not (b) or (i=length (ch)div 2) ;
sym:=b ;
end;

begin
repeat
writeln ('donnere la valeur n ');readln (n);
until (n>=3)and (n<=20);
for i:=1 to n do
repeat
writeln ('donner t[',i,']');readln (t[i]);
until verif(t[i]);
repeat
writeln ('donnere la valeur m ');readln (m);
until (m>=3)and (m<=20);
for i:=1 to m do
repeat
writeln ('donner v[',i,']');readln (v[i]);
until (v[i]>0);

write ('les chaines symetrique dans t sont:');


for i:=1 to n do
if sym (t[i]) then writeln (t[i] );

write ('les nombres non symetriques sont') ;


for i:=1 to m do
begin
str(v[i],ch);
if not (sym(ch)) then writeln (v[i] );
end;
end.

Soit T un tableau contenant N entiers > 0 avec


( 5 < N < 20) et N est pair.
On se propose de verifier si T est
(identique,symetrique,reversible,croissant,norm
al).

program verification;
uses wincrt;
type tab=array[1..30] of integer;
var i,n:integer; t:tab;

procedure saisie(var n:integer;var t:tab);


var i:integer;
begin
repeat
writeln('donner n');
readln(n);
until (n<=20) and (n>=3);

for i:=1 to n do
repeat
writeln('donner t[',i,']');
readln (t[i]);
until (t[i]>0)
end;

function ident(n:integer;t:tab):boolean;
var i:integer;b:boolean;
begin
i:=0;
repeat
i:=i+1;
b:=t[i] =t[i+1];
until not(b) or (i=n-1);
ident:=b;
end;
function sym(n:integer;t:tab):boolean;
var i:integer;b:boolean;
begin
i:=0;
repeat
i:=i+1;
b:=t[i]=t[n-i+1];
until not(b) or (i=n div 2);
sym:=b ;
end;

function croiss(n:integer;t:tab):boolean;
var i:integer;b:boolean;
begin
i:=0;
repeat
i:=i+1;
b:=t[i]<t[i+1]
until not(b) or (i=n-1);
croiss:=b;
end;

function inverse(x:integer):integer;
var b:boolean;ph,ch:string;v,i,e:integer;
begin
str(x,ch);
ph:='';
for i:=1 to length (ch) do
ph:=ch[i]+ph;
val(ph,v,e);
inverse:=v;
end;

function revers(n:integer;t:tab):boolean;
var i:integer;b:boolean;
begin
i:=0;
repeat
i:=i+1;
b:=t[i]=inverse(t[n-i+1]);
until not(b) or (i=n div 2);
revers:=b;
end;

begin
saisie(n,t);
if ident (n,t) then write ('le tableau t est identique')
else if revers(n,t) then write ('le tableau est reversible')
else if croiss(n,t) then write ('le tableau est croissant')
else if sym(n,t) then write('le tableau est symetrique')
else write('le tableau est normale')
end.