104
1 Exercice N°1 Soit la structure personne constituée par : Un nom (chaîne de 30 caractères maximum). Un numéro fiscal (entier). Un numéro de téléphone (chaîne de 10 caractères maximum). Un numéro de carte bancaire (entier non signé). Ecrivez les analyses, les algorithmes des différents modules d’un programme nommée fiche, qui permet la saisie et l’affiche de l’enregistrement d’une personne. Traduisez ce programme en pascal et l’enregistrez sous le nom Eneg_1 sous le dossier c:\4info\g2. program fiche; uses wincrt; type personne=record nom:string[30]; fisc:integer; tel:string[10] ; banc:word end; var p:personne; procedure saisie (var individu:personne); begin with p do begin write ('entrer le nom de personne : '); readln (nom); write('entrer son code fiscal : '); readln(fisc); write('entrer son numéro de téléphone : '); readln(tel); write('entrer le numéro de sa carte bancaire : '); readln(banc); end; end; procedure affichage (individu:personne); begin with p do begin writeln('Nom:',nom); writeln('code fiscal:',fisc); writeln('Numéro de téléphone:',tel); writeln('Numéro de la carte bancaire:',banc); end; end; begin saisie(p); writeln ; affichage(p); © Prof.Abdelkader Barraj

Exercices pascal tous les chapitres

Embed Size (px)

DESCRIPTION

notre page: https://www.facebook.com/the.talented.programmer

Citation preview

Page 1: Exercices pascal tous les chapitres

1

Exercice N°1Soit la structure personne constituée par : Un nom (chaîne de 30 caractères maximum). Un numéro fiscal (entier). Un numéro de téléphone (chaîne de 10 caractères maximum). Un numéro de carte bancaire (entier non signé).

Ecrivez les analyses, les algorithmes des différents modules d’un programme nommée fiche,qui permet la saisie et l’affiche de l’enregistrement d’une personne.Traduisez ce programme en pascal et l’enregistrez sous le nom Eneg_1 sous le dossierc:\4info\g2.

program fiche;uses wincrt;type personne=recordnom:string[30];fisc:integer;tel:string[10] ;banc:wordend;var p:personne;procedure saisie (var individu:personne);beginwith p dobeginwrite ('entrer le nom de personne : ');readln (nom);write('entrer son code fiscal : ');readln(fisc);write('entrer son numéro de téléphone : ');readln(tel);write('entrer le numéro de sa carte bancaire : ');readln(banc);end;end;procedure affichage (individu:personne);beginwith p dobeginwriteln('Nom:',nom);writeln('code fiscal:',fisc);writeln('Numéro de téléphone:',tel);writeln('Numéro de la carte bancaire:',banc);end; end;beginsaisie(p);writeln ;affichage(p);

© Pro

f.Abd

elkad

er B

arra

j

Page 2: Exercices pascal tous les chapitres

2

end.Exercice N°2

Une société veut informatisez la gestion des ses employés. Elle détint pour chacun lesinformations suivantes : Le nom et le prénom (chaîne de caractères). Le grade (G1, G2, G3, G4) ; Le code fiscal (un entier non signé). L’assurance maladie (O pour oui et N pour non).

Le nombre d’employés est N avec 4 ≤ N ≤ 120.Question :

Ecrivez un programme modulaire nommé GESTION, qui permet la saisie de toutes lesfiches d’enregistrement puis d’afficher :

Toutes les fiches un par un.Le nombre d’employés ayant un grade donné et leur pourcentage parRapport au nombre total des employés.

Traduisez ce programme en pascal.program gesstion;uses wincrt;typegr=string[2];fiche=recordnom:string[40];garde:gr;c_fiscal:word;assurrence:char;end;tab=array[1..120]of fiche;

varn:integer;t:tab;nb_g:integer;g:gr;nb:integer;

procedure saisie_n(var n:integer);begin

repeatwrite('N= ');readln(n);

until n in [1..120];end;

procedure saisie_g(var g:gr);begin

repeatwrite ('garde= ');readln(g);

until (g='g1')or(g='g2')or(g='g3')or(g='g4');end;

© Pro

f.Abd

elkad

er B

arra

j

Page 3: Exercices pascal tous les chapitres

3

procedure saisie(var t:tab;n:integer);var i : integer;beginfor i :=1 to n do

with t[i] dobegin

write ('Nom: '); readln (nom);saisie_g(garde);write ('code fiscal: '); readln(c_fiscal);repeat

write('assurrence maladie: '); readln(assurrence);until upcase (assurrence)in ['O','N'];

end;end;

procedure affichage(n:integer;t:tab);var i:integer;beginfor i:=1 to n do

with t[i] dobegin

writeln('Nom & prénom :',nom);writeln('garde :',garde);writeln('code fiscal :',c_fiscal);writeln('assurrance maladie: ',assurrence);writeln('******************************');

end;end;

function occurrence(n:integer;t:tab;g:gr):integer;var i,nb:integer;begin

nb:=0;for i:= 1 to n do

if(t[i].garde=g) then nb:=nb+1;occurrence:=nb;

end;procedure resultat (n,nb_g:integer;g:gr);var p:real;begin

writeln('le nombre d''occurrence de ',g,' est= à: ',nb_g);p:=(nb_g*100)/n;writeln('le pourcentage de ',g, 'est = ',p:0:0,'%');

end;

beginsaisie_n(n);saisie(t,n);affichage(n,t);saisie_g(g);nb_g:=occurrence(n,t,g);resultat(n,nb_g,g);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 4: Exercices pascal tous les chapitres

4

Les Fichiersuses wincrt;type

mot = recordfr: string[10];Ag: string[10];

end;

Dictionnaire = file of mot;

var

D: Dictionnaire;choix : char;

Procedure Saisie(var D: dictionnaire);var

M: mot;Rep : char;

beginRepeat

with m dobegin

write('Mot en français : '); readln(fr);write('Mot en anglais : '); readln(Ag);

end;

Write(D,M);

RepeatWrite('Terminer O/N : '); readln(Rep);

until upcase(Rep) in ['O','N'];until upcase(rep) = 'O';

end;

procedure test (var D: dictionnaire);

begin{$I-}

Reset(D);If IOResult <> 0 then Rewrite(D);

{$I+}end;

Procedure affiche(var D: dictionnaire);var

M: mot;

begintest(D);{$I-}

© Pro

f.Abd

elkad

er B

arra

j

Page 5: Exercices pascal tous les chapitres

5

Read(D,M);If IOResult <> 0 then writeln('Fichier vide')else

with m dobegin

writeln('Mot en français : ',fr);writeln('Mot en anglais : ',Ag);

end;{$I+}Close(D);

end;

Procedure Recherche(var D: dictionnaire);var

M: mot;F:string[10];

begintest(D);

Write('Donner le mot en français:'); Readln(f);

While not(Eof(d)) and (M.Fr <> F) do Read(D,M);

if M.Fr = F then writeln('Mot en anglais : ',M.Ag)else writeln('Mot introuvable');

Close(D);end;

Procedure ajout(var D: dictionnaire);var

M: mot;P: integer;

begintest(D);P:= Filesize(D);Seek(D,P);with m do

beginwrite('Mot en français : '); readln(fr);write('Mot en anglais : '); readln(Ag);

end;Write(D,M);Close(D);

end;

Procedure Supprimer(var D: dictionnaire);var

M: mot;P,N: integer;

begintest(D);P:=filesize(D);Repeat

© Pro

f.Abd

elkad

er B

arra

j

Page 6: Exercices pascal tous les chapitres

6

Write('Donner le nombre d''enregistrements à supprimer entre [0..',P,']:');readln(n);

until n in [0..P];P:=P - n;if P <= 0 then Erase(D)else

BeginSeek(D,P);Truncate(D);

end;Close(D);

end;

beginAssign(D,'C:\dictionnair.dat');Repeat

Clrscr;Writeln('O : Quiter ');Writeln('1 : Saisie ');Writeln('2 : Affichage du premier enregistrement');Writeln('3 : Rechercher un enregistrement ');Writeln('4 ; Ajout d''un enregistrement à la fin du fichier');Writeln('5 ; Supprimer les n derniers enregistrements');Writeln('*******************************************************************');Write('Donner votre choix : '); readln(choix);

Case choix of'0':halt;'1':begin

Rewrite(D);Saisie(D);Close(D);

end;'2': affiche(D);'3': Recherche(D);'4': ajout(D);'5': Supprimer(D);else writeln('Erreur');

end;readln;

until choix = '0';end.

Exercice N°2 Fichier texteuses wincrt;var

f:text;choix:char;

procedure Association(var f:text);var

nom_phy : string[30];begin

write('Nom physique du fichier texte: '); readln(nom_phy);Assign(f,nom_phy);

© Pro

f.Abd

elkad

er B

arra

j

Page 7: Exercices pascal tous les chapitres

7

end;

Procedure Saisie(var f:text);var

ch:string;begin

Rewrite(f);repeat

readln(ch);writeln(f,ch);

until ch[length(ch)] = '.';close(f);

end;

Procedure ajout(var f:text);var

ch:string;begin

{$I-}append(f);If IOResult <> 0 then Rewrite(f);

{$I+}readln(ch);writeln(f,ch);close(f);

end;

procedure test (var F: text);

begin{$I-}

Reset(F);If IOResult <> 0 then Rewrite(F);

{$I+}end;

Procedure affiche(var f:text);var

ch:string;begin

test(F);while not(eof(f)) do

beginreadln(f,ch);writeln(ch);

end;close(f);

end;

Procedure recherche(var f:text);var

ch:string;mot:string[15];

begintest(f);

© Pro

f.Abd

elkad

er B

arra

j

Page 8: Exercices pascal tous les chapitres

8

write('Mot : ');readln(mot);while not(eof(f)) do

beginreadln(f,ch);if pos(mot,ch)<> 0 then writeln(mot,' se trouve dans la ligne : ',ch);

end;

close(f);end;

Procedure Nombre(var f:text);var

c:char;l:integer;

begintest(f);l:=0;while not(seekeof(f)) do

beginread(f,c);if seekeoln(f) then l:=l+1;

end;writeln('Le Nombre de ligne = ',l);close(f);

end;

beginAssociation(f);Repeat

Clrscr;Writeln('O : Quiter ');Writeln('1 : Association d''un nom logique à un nom physique');Writeln('2 : Saisie ');Writeln('3 : Ajout d''une ligne à la fin d''un fichier texte');Writeln('4 : Affichage ');Writeln('5 : Rechercher un mot dans un fichier texte ');Writeln('6 : Nombre de ligne dans un fichier texte');Writeln('*******************************************************************');Write('Donner votre choix : '); readln(choix);

Case choix of'0': halt;'1': Association(f);'2': Saisie(f);'3': Ajout(f);'4': Affiche(f);'5': Recherche(f);'6': Nombre(f);else writeln('Erreur');

end;readln;

until choix = '0';end.

© Pro

f.Abd

elkad

er B

arra

j

Page 9: Exercices pascal tous les chapitres

9

Fichier Texteuses wincrt;var

f:text;choix:char;

procedure Association(var f:text);var

nom_phy : string[30];begin

write('Nom physique du fichier texte: '); readln(nom_phy);Assign(f,nom_phy);

end;Procedure Saisie(var f:text);var

ch:string;begin

Rewrite(f);repeat

readln(ch);writeln(f,ch);

until ch[length(ch)] = '.';close(f);

end;Procedure ajout(var f:text);var

ch:string;begin

{$I-}append(f);If IOResult <> 0 then Rewrite(f);

{$I+}readln(ch);writeln(f,ch);close(f);

end;procedure test (var F: text);begin

{$I-}Reset(F);If IOResult <> 0 then Rewrite(F);

{$I+}end;Procedure affiche(var f:text);var

ch:string;begin

test(F);while not(eof(f)) do

beginreadln(f,ch);writeln(ch);

end;close(f);

end;

© Pro

f.Abd

elkad

er B

arra

j

Page 10: Exercices pascal tous les chapitres

10

Procedure recherche(var f:text);var

ch:string;mot:string[15];

begintest(f);write('Mot : ');readln(mot);while not(eof(f)) do

beginreadln(f,ch);if pos(mot,ch)<> 0 then writeln(mot,' se trouve dans la ligne : ',ch);

end;close(f);

end;Procedure Nombre(var f:text);var

c:char;l:integer;

begintest(f);l:=0;while not(seekeof(f)) do

beginread(f,c);if seekeoln(f) then l:=l+1;

end;writeln('Le Nombre de ligne = ',l);close(f);

end;begin

Association(f);Repeat

Clrscr;Writeln('O : Quiter ');Writeln('1 : Association d''un nom logique à un nom physique');Writeln('2 : Saisie ');Writeln('3 : Ajout d''une ligne à la fin d''un fichier texte');Writeln('4 : Affichage ');Writeln('5 : Rechercher un mot dans un fichier texte ');Writeln('6 : Nombre de ligne dans un fichier texte');Writeln('*******************************************************************');Write('Donner votre choix : '); readln(choix);Case choix of

'0': halt;'1': Association(f);'2': Saisie(f);'3': Ajout(f);'4': Affiche(f);'5': Recherche(f);'6': Nombre(f);else writeln('Erreur');

end;readln;

until choix = '0';end.

© Pro

f.Abd

elkad

er B

arra

j

Page 11: Exercices pascal tous les chapitres

11

La récursivité{Exercice: Factorielle de (n);}

uses wincrt;varn:integer;

procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;

function factorielle(n:integer):longint;beginif n=0 then factorielle:=1else factorielle:=n*factorielle(n-1);end;

beginsaisie(n);writeln(factorielle(n));end.

{Exercice PGCD 1ére methode}

uses wincrt;vara,b:integer;n:integer;procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;function pgcd(a,b:integer):integer;beginif a mod b=0 then pgcd:=belse pgcd:=pgcd(b,a mod b);end;beginsaisie(a);saisie(b);writeln('Le resultat est= ',pgcd(a,b));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 12: Exercices pascal tous les chapitres

12

{Exercice PGCD 2éme methode}uses wincrt;vara,b:integer;n:integer;procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;function pgcd(a,b:integer):integer;beginif a>b then pgcd:=pgcd(a-b,b)else if a<b then pgcd:=pgcd(a,b-a)else pgcd:=a;end;beginsaisie(a);saisie(b);writeln('Le resultat est= ',pgcd(a,b));end.

{Exercice PGCD 3éme methode}uses wincrt;varn,a,b,i:integer;

procedure saisie (var n:integer);beginrepeatwrite('donner un entier>0: ');readln(n);until n>=0;end;

function pgcd(a,b:integer):integer;beginif a=0 then pgcd:=belse if b=0 then pgcd:=a

else if not(odd(a)) and not(odd(b)) then pgcd:=2*Pgcd(a div 2,b div 2)else if not(odd(a)) and (odd(b)) then pgcd:= pgcd(a div 2,b)

else if (odd(a)) and not(odd(b)) then pgcd:=pgcd(a,b div 2)else if (odd(a)) and (odd(b)) then if a>b then pgcd:=pgcd(a-b,b)

else pgcd:=pgcd(a,b-a);

end;beginsaisie(a);saisie(b);writeln('le resultat est= ',pgcd(a,b));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 13: Exercices pascal tous les chapitres

13

{Exercice PPCM (a,b)}

uses wincrt;varn,a,b,max,min,i:integer;procedure saisie (var n:integer);beginrepeatwrite('donner un entier>0: ');readln(n);until n>=0;end;

function ppcm(max,min:integer):integer;beginif max mod min=0 then ppcm:=maxelse begin max:=max+(a+b-min);ppcm:=ppcm(max,min) ;end;

end;beginsaisie(a);saisie(b);if a>b then begin max:=a; min := b;end else begin max:=b;min := a;end;

writeln(ppcm(min,max));end.

{Exercice Produit (x exposon n) de (n); }

uses wincrt;varn:integer;x:real;procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;

function produit(n:integer):real;beginif n=0 then produit:=1else produit:=produit(n-1)*x;end;beginsaisie(n);write('x= '); readln(x);writeln('Le resultat est= ',produit(n):0:0);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 14: Exercices pascal tous les chapitres

14

{Exercice somme de (n) }

uses wincrt;varn:integer;

procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;

function somme(n:integer):real;var x:real;beginif n=0 then somme:=0else begin

write('x= ');readln(x);

somme:=x+somme(n-1);end;end;beginsaisie(n);writeln(somme(n):0:0);end.

{Exercice Fabonacci F0=1 ;F1=1 ; Fn=Fn-1+Fn-2 }

uses wincrt;varn:integer;procedure saisie(var n:integer);beginrepeatwrite('donner n>0: ');readln(n);until n>=0;end;

function fabonacci(n:integer):integer;beginif n=0 then fabonacci:=1else if n=1 then fabonacci:=1else fabonacci:=fabonacci(n-1)+fabonacci(n-2);end;beginsaisie(n);writeln('Le resultat est= ',fabonacci(n));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 15: Exercices pascal tous les chapitres

15

Exercice 6program ex6;uses wincrt ;varn,p:integer;

procedure saisie (var n:integer);beginrepeatwrite('donner n: ');readln(n);until n>=0;end;

function com(n,p:integer):integer;

beginif p>n then com:=0else if p=0 then com:=1else if p=n then com:=1else if p=1 then com:=nelse com:=com(n-1,p-1)+com(n-1,p);end;beginsaisie(n);saisie(p);writeln('le resultat= ',com(n,p));end.

Exercice 7{Ecrire une fonction recursive palandrom permettant de vérifier si une chaine est palandrom}program ex7;uses wincrt ;varch:string;

procedure saisie (var ch:string);beginwrite('donner une chaine: ');readln(ch);end;

function palindrome(ch:string):boolean;

beginif length(ch)<2 then palindrome:=trueelse if ch[1]=ch[length(ch)] thenpalindrome:=palindrome(copy(ch,2,length(ch)-2))else palindrome:=false;end;beginsaisie(ch);writeln('le resultat= ',palindrome(ch));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 16: Exercices pascal tous les chapitres

16

Exercice 8{Ecrire un procédure inverse permettant d'inverser une chaine CH}

program ex8;uses wincrt ;

procedure inverse;varc:char;beginread(c);if ord(c)<>13 then inverse;write(c);end;begininverseend.

Exercice 9{Ecrire une procédure récursive saisie_n permettant de saisir un entier dans l'intervalle [x..y]}procedure saisie_n(var n:integer;x,y:integer);beginwrite('donner un entier dans[',x,'..',w,'] : '); readln(n);if not (n in [x..y]) then saisie_n (n,x,y);end;

Saisie_n (n,x,y) ;Saisie_n (n,2,30) ;

Exercice 10{Ecrire une procédure récursive saisie_vect permettant de saisie un tableau T de réels}

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;procedure saisie_vect(var t:tab;deb,fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie_vect(t,deb+1,fin);

end;end;

© Pro

f.Abd

elkad

er B

arra

j

Page 17: Exercices pascal tous les chapitres

17

Exercice 11{Ecrire une procédure récursive Affichage permettant d’afficher les éléments d’un tableau T}

procedure affichage (t:tab;n:integer);beginif n<>0 then

beginaffichage (t,n-1);writeln('t[',n,']=',t[n]);end;

end;

procedure affichage(t:tab;deb,fin:integer);begin

if deb <= fin thenbegin

writeln('T[',deb,'] = ',T[deb]);affichage(t,deb+1,fin);

end;end;program tableau;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;begin

saisie_n(n,1,100);saisie_vect(t,n);affichage(t,n);

program tableau;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie_vect(var t:tab;deb,fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie_vect(t,deb+1,fin);

end;end;procedure affichage(t:tab;deb,fin:integer);begin

if deb <= fin thenbegin

writeln('T[',deb,'] = ',T[deb]);affichage(t,deb+1,fin);

end;end;begin

saisie_n(n,1,100);saisie_vect(t,1,n);affichage(t,1,n);

© Pro

f.Abd

elkad

er B

arra

j

Page 18: Exercices pascal tous les chapitres

18

end. end.Exercice 12{Ecrire une fonction récursive recherche permettantde vérifier l’existence d’un réel x dans un tableau Tde réel en utilisant la technique de la rechercheséquentielle.}

Méthode itérative:function Recherche ( T : vect; n: integer ; X : real) :boolean;Vari : integer;begin

i:= 1;while (T[i] <> X) and (i <=n) doi:= i+1;

If T[i] = X then Recherche := TrueElse Recherche := false ;

end;

function Recherche ( T : vect; n: integer ; X : real) :boolean;Vari : integer;begin

i:= 0;Repeati:= i+1;until (T[i] <> X)or (i <=n) ;If T[i] = X then Recherche := TrueElse Recherche := false ;

end;

Méthode récursive:function recherche (t:tab;n:integer;x:real):boolean;begin

if n = 0 then recherche := falseelse

if x = t[n] then recherche := trueelse recherche := recherche(t,n-1,x);

end;

program recherche_seq;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;x:real;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function recherche (t:tab;n:integer;x:real):boolean;begin

if n = 0 then recherche := falseelse

if x = t[n] then recherche := trueelse recherche := recherche(t,n-1,x);

end;

beginsaisie_n(n,1,100);saisie_vect(t,n);write('donner un réel : '); readln(x);if recherche(t,n,x) then writeln(x,' Exite dans le

tableau')else writeln(x,' N''Existe pas dans le tableau ');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 19: Exercices pascal tous les chapitres

19

Exercice 13{Ecrire une fonction récursive recherche permettantde vérifier l’existence d’un réel x dans un tableau Tde réel en utilisant la technique de la recherchedichotomique}

Méthode itérative :function recherche (t:tab;c:char;n:integer):boolean;var i: integer;beginpremier:=1;dernier:=n;repeati:=(premier + dernier) div 2;if c< t[i] then dernier := i-1;if c>t[i] then premier :=i+1;until (c=t[i]) or (premier>dernier);if t[i]=c then recherche:= true else recherche:= false;end;

Méthode récursive :function recherche(t:tab;deb,fin:integer;x:real):boolean;var

m:integer;begin

M := (deb + fin) div 2;if x = T[m] then recherche := trueelse

if (x < T[m]) and (deb < m) then recherche :=recherche(t,deb,m-1,x)

elseif (x > T[m]) and (fin > m) then recherche :=

recherche(t,m+1,fin,x)else recherche := false;

end;

program recherche_seq;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;x:real;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function recherche (t:tab;deb,fin:integer;x:real):boolean;var

m:integer;begin

M := (deb + fin) div 2;if x = T[m] then recherche := trueelse

if (x < T[m]) and (deb < m) then recherche :=recherche(t,deb,m-1,x)

elseif (x > T[m]) and (fin > m) then recherche :=

recherche(t,m+1,fin,x)else recherche := false;

end;

beginsaisie_n(n,1,100);saisie_vect(t,n);write('donner un réel : '); readln(x);if recherche(t,1,n,x) then writeln(x,' Exite dans le

tableau')else writeln(x,' N''Existe pas dans le tableau ');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 20: Exercices pascal tous les chapitres

20

Exercice 14{Ecrire une fonction récursive maximum permettantde déterminer le maximum d’un tableau de réel}

Méthode Itérative :Fonction maximum (elément) :function maximum( n:integer;t:tab):real;beginmax:=t[1];for i := 2 to n dobeginif t[i]>max thenmax := t[i];end;maximum := max;end;

Méthode récursive :function maximum (t:tab;n:integer):real;var

max:real;begin

if n=1 then maximum := t[1]else

beginmax:= maximum(t,n-1);if max < t[n] then maximum := t[n]else maximum :=max;

end;end;

program tab_max_elem;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function maximum (t:tab;n:integer):real;var

max:real;begin

if n=1 then maximum := t[1]else

beginmax:= maximum(t,n-1);if max < t[n] then maximum := t[n]else maximum :=max;

end;end;

beginsaisie_n(n,1,100);saisie_vect(t,n);writeln('Maximum = ',Maximum(t,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 21: Exercices pascal tous les chapitres

21

Exercice 14{Ecrire une fonction récursive maximum permettantde déterminer le maximum d’un tableau de réel}

Méthode Itérative :

Fonction maximum (position):function maximum( n:integer;t:tab):integer;beginmax:=1;for i := 2 to n dobeginif t[i]>t[max] thenmax := i;end;maximum := max;end;

Méthode récursive :function maximum (t:tab;n:integer):integer;var

max:integer;begin

if n=1 then maximum := nelse

beginmax:= maximum(t,n-1);if t[max] < t[n] then maximum := nelse maximum :=max;

end;end;

program tab_max_indice;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;function maximum (t:tab;n:integer):integer;var

max:integer;begin

if n=1 then maximum := 1else

beginmax:= maximum(t,n-1);if t[max] < t[n] then maximum := nelse maximum :=max;

end;end;begin

saisie_n(n,1,100);saisie_vect(t,n);writeln('Maximum = ',t[Maximum(t,n)]);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 22: Exercices pascal tous les chapitres

22

Exercice 15{Ecrire une fonction récursive maximum permettantde déterminer le maximum d’un tableau de réel entredeux bornes [bi..bf]}

Méthode itérative :function maximum (t:tab;bi,bs:integer):integer;var i,max:integer;beginmax:=bi;for i:= bi +1 to bs doif t[i]>t[max] then max:=i;

maximum:=max;end;

Méthode récursive :function maximum (t:tab;bi,bf:integer):integer;var

max:integer;begin

if bf = bi then maximum:=bielse

beginmax:= maximum(t,bi,bf-1);if t[max] < t[bf] then maximum := bfelse maximum :=max;

end;end;

program tab_max_indice;uses wincrt;type

tab = array[1..100] of real;var

T:tab;bi,bf,n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function maximum (t:tab;bi,bf:integer):integer;var

max:integer;begin

if bf = bi then maximum:=bielse

beginmax:= maximum(t,bi,bf-1);if t[max] < t[bf] then maximum := bfelse maximum :=max;

end;end;

beginSaisie_n(n,1,100);saisie_n(bi,1,n);Saisie_n(bf,bi,n);saisie_vect(t,n);writeln('Maximum = ',t[Maximum(t,bi,bf)]);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 23: Exercices pascal tous les chapitres

23

Exercice 14{Ecrire une fonction récursive minimum permettantde déterminer le minimum d’un tableau de réel}

Méthode Itérative :

Fonction minimum (position):function minimum( n:integer;t:tab):integer;beginmin:=1;for i := 2 to n dobeginif t[i]<t[min] thenmin := i;end;minimum := min;end;

Méthode récursive :function minimum (t:tab;n:integer):integer;var

min:integer;begin

if n=1 then minimum := nelse

beginmin:= minimum(t,n-1);if t[min] >t[n] then minimum := nelse minimum :=min;

end;end;

program tab_min_indice;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;function minimum (t:tab;n:integer):integer;var

min:integer;begin

if n=1 then minimum := 1else

beginmin:= minimum(t,n-1);if t[min] > t[n] then minimum := nelse minimum :=min;

end;end;begin

saisie_n(n,1,100);saisie_vect(t,n);writeln('Minimum = ',t[Minimum(t,n)]);

end.© Pro

f.Abd

elkad

er B

arra

j

Page 24: Exercices pascal tous les chapitres

24

Exercice 15{Ecrire une fonction récursive minimum permettantde déterminer le minimum d’un tableau de réel entredeux bornes [bi..bf]}

Méthode itérative :function minimum (t:tab;bi,bs:integer):integer;var i,min:integer;beginmin:=bi;for i:= bi +1 to bs doif t[i]<t[min] then min:=i;

minimum:=min;end;

Méthode récursive :function minimum (t:tab;bi,bf:integer):integer;var

min:integer;begin

if bf = bi then minimum:=bielse

beginmin:= minimum(t,bi,bf-1);if t[min] > t[bf] then minimum := bfelse minimum :=min;

end;end;

program tab_min_indice;uses wincrt;type

tab = array[1..100] of real;var

T:tab;bi,bf,n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function minimum (t:tab;bi,bf:integer):integer;var

min:integer;begin

if bf = bi then minimum:=bielse

beginmin:= minimum(t,bi,bf-1);if t[min] > t[bf] then minimum := bfelse minimum:=min;

end;end;

beginSaisie_n(n,1,100);saisie_n(bi,1,n);Saisie_n(bf,bi,n);saisie_vect(t,n);writeln('Minimum = ',t[Minimum(t,bi,bf)]);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 25: Exercices pascal tous les chapitres

25

Exercice 14{Ecrire une fonction récursive minimum permettantde déterminer le minimum d’un tableau de réel}

Méthode Itérative :Fonction minimum (elément) :function minimum( n:integer;t:tab):real;beginmin:=t[1];for i := 2 to n dobeginif t[i]<min thenmin:= t[i];end;minimum := min;end;

Méthode récursive :function minimum (t:tab;n:integer):real;var

min:real;begin

if n=1 then minimum := t[1]else

beginmin:= minimum(t,n-1);if min >t[n] then minimum:= t[n]else minimum :=min;

end;end;

program tab_min_elem;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;function minimum (t:tab;n:integer):real;var

min:real;begin

if n=1 then minimum := t[1]else

beginmin:= minimum(t,n-1);if min > t[n] then minimum := t[n]else minimum :=min;

end;end;begin

saisie_n(n,1,100);saisie_vect(t,n);writeln('Minimum = ',Minimum(t,n));

end.© Pro

f.Abd

elkad

er B

arra

j

Page 26: Exercices pascal tous les chapitres

26

Algorithme de TRITRI à Bulle

Itérativeprogram tri_bull;uses wincrt;type

tab = array[1..100] of char;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

repeatwrite('Donner un entier dans [',x,'..',y,'] : ');readln(n);

until n in [x..y];end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;

procedure permutation(var a,b:char);var

c:char;begin

c:=a;a:=b;b:=c;

end;

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

trouve : boolean;i:integer;

beginRepeat

trouve := false;

Recursiveprogram tri_bulle;uses wincrt;type

tab = array[1..100] of char;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;

procedure permutation(var a,b:char);var

c:char;begin

c:=a;a:=b;b:=c;

end;

procedure tri(var t:tab; deb,fin:integer);var

trouve : boolean;begin

trouve := false;if deb < fin then

© Pro

f.Abd

elkad

er B

arra

j

Page 27: Exercices pascal tous les chapitres

27

for i := 1 to n-1 doif T[i] > T[i+1] then

beginpermutation(T[i],T[i+1]);trouve := true;

end;until not(trouve);

end;

beginSaisie_n(n,1,100);Saisie_vect(T,n);tri(t,n);affichage(t,n);

end.

beginif T[deb] < T[deb + 1] then

beginpermutation(T[deb],T[deb+1]);trouve := true;

end;tri(T,deb+1,fin);

end;if trouve then tri(T,deb,fin);

end;

beginSaisie_n(n,1,100);Saisie_vect(T,n);tri(t,1,n);affichage(t,n);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 28: Exercices pascal tous les chapitres

28

TRI par SélectionIterativeprogram tri_selection;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function maximum (t:tab;bi,bf:integer):integer;var

max:integer;begin

if bf = bi then maximum := bielse

beginmax:= maximum(t,bi,bf-1);if t[max] < t[bf] then maximum := bfelse maximum :=max;

end;end;

procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;

procedure permutation(var a,b:real);var

c:real;begin

Récursiveprogram tri_selection;uses wincrt;type

tab = array[1..100] of real;var

T:tab;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;

function maximum (t:tab;bi,bf:integer):integer;var

max:integer;begin

if bf = bi then maximum := bielse

beginmax:= maximum(t,bi,bf-1);if t[max] < t[bf] then maximum := bfelse maximum :=max;

end;end;

procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;

procedure permutation(var a,b:real);var

c:real;begin

© Pro

f.Abd

elkad

er B

arra

j

Page 29: Exercices pascal tous les chapitres

29

c:=a;a:=b;b:=c;

end;

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

M,i : integer;begin

for i := 1 to n dobegin

M:=maximum(T,i,n);if i<>M then permutation(t[i],T[m]);

end;end;

beginSaisie_n(n,1,100);Saisie_vect(T,n);tri(t,n);affichage(t,n);

end.

c:=a;a:=b;b:=c;

end;

procedure tri(var t:tab;deb,fin:integer);var

M : integer;begin

M:=maximum(T,deb,fin);if deb<>m then permutation(t[deb],T[m]);if deb+1 <> fin then tri(T,deb+1,fin);

end;

beginSaisie_n(n,1,100);Saisie_vect(T,n);tri(t,1,n);affichage(t,n);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 30: Exercices pascal tous les chapitres

30

TRI par Insertionprogram tri_insertion;uses wincrt;type

Vect = array[1..100] of char;var

T:Vect;N: integer;

procedure saisie (Var x : integer;bi,bf:integer);begin

repeatwrite('Donner un entier dans [',bi,'..',bf,'] : ');readln(n);

until n in [bi..bf];end;Procedure saisie_vect(Var T:Vect;n:integer);vari : integer;beginfor i := 1 to n do

beginwrite('T[',i,'] = ');readln(T[i]);

end; end;Procedure affichage(T:Vect;n:integer);vari : integer;beginfor i := 1 to n do

writeln('T[',i,'] = ',T[i]);end;Procedure tri(var T:vect;n:integer);var

i,j:integer;value : char;

beginfor i:=2 to n do

beginvalue := T[i];j:=i;while(T[j-1] < value) and (j > 1) do

beginT[j]:=T[j-1];j:=j-1;

end;T[j]:=value;

end;end;Begin

Saisie(n,2,100);Saisie_vect(T,n);tri(T,n);writeln('*****************************');affichage(T,n);

© Pro

f.Abd

elkad

er B

arra

j

Page 31: Exercices pascal tous les chapitres

31

end.

TRI Shelluses wincrt;typetab=array[1..40]of char;var t:tab;

n:integer;procedure saisie_n (var n:integer);beginwrite('donner n= ');readln(n);end;procedure saisie_vect(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie_vect(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;procedure tri(var t:tab;n:integer);varh,i,j:integer;value:char;beginh:=0;repeath:=3*h+1;until h>n;repeatbeginh:=h div 3;for i := h+1 to n dobeginvalue:=t[i];j:=i;while (t[j-h]<value) and (j>h) do

begint[j]:=t[j-h];j:=j-h;

end;t[j]:=value;end;end;until h=1;end;procedure affichage(t:tab;n:integer);begin

if n <>0 thenbegin

affichage(t,n-1);writeln('T[',n,'] = ',T[n]);

end;end;beginsaisie_n(n);saisie_vect(t,n);tri(t,n);affichage(t,n);

© Pro

f.Abd

elkad

er B

arra

j

Page 32: Exercices pascal tous les chapitres

32

end.

ClassementIterativeuses wincrt;Const

N= 2;type

ch = string[40];Fiche = record

nom: ch;DCP,DCT,DS,Moy:Real;Rang:Byte;

end;

Eleve = array[1..N] of fiche;

var

tab_elev:Eleve;

Procedure saisie_note(mes :ch; var X: real);begin

repeatWrite(Mes);readln(x);

until (x >= 0) and (x <=20);end;

Procedure Saisie(var tab_elev:Eleve);var

i:integer;begin

for i := 1 to n dowith tab_elev[i] do

beginwrite('Nom : '); readln(Nom);Saisie_note('Devoir de contrôle Pratique

: ',DCP);Saisie_note('Devoir de contrôle

théorique : ',DCT);Saisie_note('Devoir de synthése : ',DS);Moy := (DCP + DCT + 2*DS)/4;

end;end;

Procedure affichage(tab_elev:Eleve);var

i:integer;begin

for i := 1 to n dowith tab_elev[i] do

beginwriteln(Nom,' ', Moy:2:2,' ',Rang);

end;

Recursiveuses wincrt;Const

N= 2;type

ch = string[40];Fiche = record

nom: ch;DCP,DCT,DS,Moy:Real;Rang:Byte;

end;

Eleve = array[1..N] of fiche;

var

tab_elev:Eleve;

Procedure saisie_note(mes :ch; var X: real);begin

Write(Mes);readln(x);if not((x >= 0) and (x <=20)) then saisie_note(mes,

x);end;Procedure Saisie(var tab_elev:Eleve;n:integer);begin

if n <>0 thenbegin

saisie(tab_elev,n-1);with tab_elev[n] do

beginwrite('Nom : '); readln(Nom);Saisie_note('Devoir de contrôle Pratique

: ',DCP);Saisie_note('Devoir de contrôle

théorique : ',DCT);Saisie_note('Devoir de synthése : ',DS);Moy := (DCP + DCT + 2*DS)/4;

end;end;

end;

Procedure affichage(tab_elev:Eleve;n:integer);begin

if n <>0 thenbegin

affichage(tab_elev,n-1);with tab_elev[n] do

beginwriteln(Nom,' ', Moy:2:2,' ',Rang);

end;

© Pro

f.Abd

elkad

er B

arra

j

Page 33: Exercices pascal tous les chapitres

33

end;

Procedure Calcul_Rang(var tab_elev:Eleve);var

i,j:integer;begin

for i := 1 to n dobegin

tab_elev[i].Rang := 1;for j := 1 to n do

if tab_elev[i].Moy < tab_elev[j].Moythen

tab_elev[i].Rang := tab_elev[i].Rang +1;

end;end;begin

Saisie(Tab_elev);Calcul_Rang(Tab_elev);Affichage(tab_elev);

end.

end;end;

Procedure Calcul_Rang(vartab_elev:Eleve;x,y:integer);begin

if x <> 0 thenbegin

tab_elev[x].Rang := 1;if y<>0 then

beginCalcul_rang(tab_elev,x,y-1);if tab_elev[x].Moy < tab_elev[y].Moy

thentab_elev[x].Rang := tab_elev[x].Rang

+ 1;end;

if y = 0 then Calcul_rang(tab_elev,x-1,n);end;

end;begin

Saisie(Tab_elev,n);Calcul_Rang(Tab_elev,n,n);Affichage(tab_elev,n);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 34: Exercices pascal tous les chapitres

34

ItérativeProgram tri_fusion;uses wincrt;type Tab = array[1..40] of string[10];var A,B,Fus : tab;

N,M : integer;procedure Remplir(var T: Tab; var x : integer);var

i : integer;begin

repeatwrite('Donner un entier dans [3..20] : ');

readln(x);until x in [3..20];write('T[',1,']= '); readln(T[1]);for i := 2 to x do

repeatwrite('T[',i,']= '); readln(T[i]);

until T[i] <= T[i - 1];end;Procedure Fusion (Var Fus : Tab; A, B : Tab;N,M :integer);var IA, IB, Ifus,i: integer;begin

IA := 1;Ib := 1;IFus:= 0;Repeat

IFus := IFus + 1;If A[IA] > B[IB] Then

beginFus[Ifus] := A[iA];iA := iA + 1;

endelse

beginFus[Ifus] := B[IB];IB := IB + 1;

end;until (IA > N) or (IB > M);

If IA > N thenfor i := IB to M do

beginIFus:= IFus + 1;Fus[IFus] := B[i];

end;If IB > M then

for i := IA to N dobegin

IFus:= IFus + 1;Fus[IFus] := A[i];

end;

RécursiveProgram tri_fusion;uses wincrt;type tab = array[1..20] of string[10];var A,B,Fus : tab;

N,M : integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);

if not(n in [x..y]) then saisie_n(x,1,20);end;procedure Saisie(var T: Tab;deb,fin : integer);begin

if (deb <= fin) thenbegin

write('T[',deb,'] = '); readln(T[deb]);if (deb <> 1 ) and (t[deb] >= T[deb-1]) then

Saisie(T,deb,fin)else Saisie(T,deb+1,fin);

end;end;Procedure Fusion (Var Fus : Tab; A, B :Tab;IA,IB,IFUS,N,M : integer);begin

if (IA <= n) and (IB <= m) thenbegin

If A[IA] > B[IB] Thenbegin Fus[Ifus] := A[iA];

Fusion(Fus,A,B,IA+1,IB,IFUS+1,N,M); endelse

begin Fus[Ifus] := B[iB];Fusion(Fus,A,B,IA,IB+1,IFUS+1,N,M); end;

end;If IA > N then

if IB <= M thenbegin Fus[IFus] := B[IB];

Fusion(Fus,A,B,IA,IB+1,IFUS+1,N,M); end;If IB > M then

if IA <= N thenbegin Fus[IFus] := A[IA];

Fusion(Fus,A,B,IA+1,IB,IFUS+1,N,M); end;end;Procedure affichage(T:Tab; deb,fin : integer);var i : integer;begin

if deb <= fin thenbegin writeln('T[',deb,'] = ',T[deb]);

affichage(T,deb+1,fin); end;end;beginSaisie_n(n,1,20); Saisie(A,1,n);Saisie_n(m,1,20); Saisie(B,1,m);

© Pro

f.Abd

elkad

er B

arra

j

Page 35: Exercices pascal tous les chapitres

35

end;

Procedure affichage(T:Tab; x : integer);var i : integer;begin

for i := 1 to x dowriteln('T[',i,'] = ',T[i]);

end;beginRemplir(A,n);Remplir(B,M);Fusion(Fus, A, B, N, M);affichage(Fus, N+M);end.

Fusion(Fus, A, B,1, 1, 1, n, m);affichage(Fus,1,n+m);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 36: Exercices pascal tous les chapitres

36

Les Algorithme RécurrentsExercice N°1

Ecrire un programme qui met à zéro les éléments de la diagonale d’une matrice carrée A donnée.

uses wincrt;typemat=array[1..20,1..20]of integer;varn:integer;a:mat;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;n:integer);vari,j:integer;beginfor i:=1 to n dofor j:=1 to n dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;

procedure diagonale (var a:mat;n:integer);var i:integer;beginfor i:= 1 to n doA[i,i]:=0;end;

procedure affichage (a:mat;n:integer);vari,j:integer;beginfor i:=1 to n dofor j:=1 to n dowriteln('A[',i,',',j,']= ',A[i,j]);end;

beginsaisie_n(n,1,20);saisie(a,n);diagonale(a,n);affichage (a,n);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 37: Exercices pascal tous les chapitres

37

Exercice N°2Ecrire un programme qui construit et affiche une matrice carrée unitaire U de dimension N.Une matrice Unitaire est une matrice, telle que:Uij= 1 si i=j

0 si i # j

uses wincrt;typemat=array[1..20,1..20]of 0..1;varn:integer;u:mat;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure affichage (U:mat;n:integer);vari,j:integer;beginfor i:=1 to n dofor j:=1 to n dowriteln('U[',i,',',j,']= ',U[i,j]);end;

procedure remplir (var u:mat;n:integer);var i,j:integer;beginfor i:= 1 to n dofor j:=1 to n doBeginif i=j then U[i,j]:=1else U[i,j]:=0end;end;

beginsaisie_n(n,1,20);remplir(U,n);affichage (u,n);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 38: Exercices pascal tous les chapitres

38

Exercice N°3

uses wincrt;typemat=array[1..20,1..20]of char;varl,c:integer;a,b:mat;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;procedure affichage (a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dowriteln('A[',i,',',j,']= ',A[i,j]);end;

Procedure transposition (var A,B:mat;l,c:integer);var i,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginB[j,i]:=A[i,j];end;end;

beginsaisie_n(l,1,20);saisie_n(c,1,20);saisie(a,l,c);transposition (a,b,l,c);affichage (a,l,c);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 39: Exercices pascal tous les chapitres

39

Exercice N°4

Ecrire un programme qui réalise la multiplication d’une matrice A par un réel X.a) Le résultat de la multiplication sera mémorisé dans une deuxième matrice B qui sera ensuite affichée.b) Les éléments de la matrice A seront multipliés par X.uses wincrt;typemat=array[1..20,1..20]of real;varl,c:integer;a,b:mat;x:real;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie (var a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;procedure affichage (a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dowriteln('A[',i,',',j,']= ',A[i,j]:2:2);end;Procedure multiplication (var A,B:mat;l,c:integer);var i,j:integer;beginfor i:=1 to l dofor j:=1 to c dobegina[i,j]:=A[i,j]*x;end;end;beginsaisie_n(l,1,20);saisie_n(c,1,20);saisie(a,l,c);write('donner un réel: '); readln(x);multiplication(a,b,l,c);affichage (a,l,c);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 40: Exercices pascal tous les chapitres

40

Exercice N°5Ecrire un programme qui réalise l’addition de deux matrice A et B de mêmes dimensions N et M.

a) Le résultat de l’addition sera mémorisé dans une troisième matrice S qui sera ensuite affichée.b) La matrice B est ajoutée à A.

uses wincrt;typemat=array[1..20,1..20]of real;varl,c:integer;a,b:mat;x:real;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;

procedure affichage (a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobegingotoxy (4*j,i+2);writeln('A[',i,',',j,']= ',A[i,j]:2:2);end;end;Procedure somme (var A,B:mat;l,c:integer);var i,j:integer;beginfor i:=1 to l dofor j:=1 to c dobegina[i,j]:=A[i,j]+b[i,j];end;end;

uses wincrt;typemat=array[1..20,1..20]of real;varl,c:integer;a,s,b:mat;x:real;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;

procedure affichage (s:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobegingotoxy (4*j,i+2);writeln('S[',i,',',j,']= ',S[i,j]:2:2);end;end;Procedure somme (var s,A,B:mat;l,c:integer);var i,j:integer;beginfor i:=1 to l dofor j:=1 to c dobegins[i,j]:=A[i,j]+b[i,j];end;end;

© Pro

f.Abd

elkad

er B

arra

j

Page 41: Exercices pascal tous les chapitres

41

beginsaisie_n(l,1,20);saisie_n(c,1,20);saisie(a,l,c);saisie_n(l,1,20);saisie_n(c,1,20);saisie(b,l,c);somme(a,b,l,c);writeln('***********************');clrscr;affichage (a,l,c);end.

beginsaisie_n(l,1,20);saisie_n(c,1,20);saisie(a,l,c);saisie_n(l,1,20);saisie_n(c,1,20);saisie(b,l,c);somme(s,a,b,l,c);writeln('***********************');clrscr;affichage (s,l,c);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 42: Exercices pascal tous les chapitres

42

Exercice N°6

uses wincrt;typemat=array[1..20,1..20]of integer;vara,c,b:mat;x:real;m,n,p:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;n,m:integer);vari,j:integer;beginfor i:=1 to n dofor j:=1 to m dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;

Procedure multiplication (var c:mat;A,B:mat;n,m,p:integer);var i,j,k:integer;beginfor i:=1 to n dofor j:=1 to p dobeginc[i,j]:=0;for k:=1 to m doc[i,j]:=c[i,j]+a[i,k]*b[k,j];

end;end;

procedure affichage (a:mat;n,p:integer);vari,j:integer;beginfor i:=1 to n dofor j:=1 to p dowriteln('A[',i,',',j,']= ',A[i,j]);end;

beginsaisie_n(n,1,20);saisie_n(m,1,20);saisie(a,n,m);

saisie_n(m,1,20);saisie_n(p,1,20);saisie(b,m,p);

multiplication ( c,a,b,n,m,p);writeln('******');affichage(c,n,p);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 43: Exercices pascal tous les chapitres

43

Exercice N°7

uses wincrt;typemat=array[1..20,1..20]of integer;varl,c,j,i:integer;a,min,max:mat;x:real;m,n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure saisie (var a:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginwrite('A[',i,',',j,']= ');readln (A[i,j]);end;end;

function maximum (a:mat;l,c:integer):integer;var i:integer;beginm:=1;for i :=2 to c doif a[l,i]> a[l,m] thenm:=i ;maximum:= m;

end;

function minimum(a:mat;l,c:integer):integer;var i:integer;beginm:=1;for i :=2 to l doif a[i,c]< a[m,c] thenm:=i ;minimum:= m;

end;

procedure mat_max (var max:mat;a:mat;l,c:integer);var j,k:integer;beginfor j:=1 to l dobeginm:=maximum(a,j,c);for k:=1 to c doif m=k then max[j,k]:=1else max[j,k]:=0;end;end;

procedure mat_min (var min:mat;a:mat;l,c:integer);var j,k:integer;beginfor j:=1 to c dobeginm:=minimum(a,l,j);for k:=1 to l doif m=k then min[k,j]:=1else min[k,j]:=0;end;end;

procedure affiche (a,min,max:mat;l,c:integer);vari,j:integer;beginfor i:=1 to l dofor j:=1 to c dobeginif (max[i,j]=1) and (min[i,j]=1) thenwrite('a[',i,';',j,']= ',a[i,j]);end;end;

beginsaisie_n(l,1,20);saisie_n(c,1,20);saisie(a,l,c);mat_max(max,a,l,c);mat_min(min,a,l,c);writeln('******');affiche(a,min,max,l,c);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 44: Exercices pascal tous les chapitres

44

Exercice N°8 1ére méthode

uses wincrt;typemat=array[0..50,0..50]of byte;vart:mat;n,l,c:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure Remplir (Var t : Mat ; N : integer);var l,c:integer;begint [0,0]:= 1;t [1,0]:= 1 ;t [1,1]:=1 ;for L := 2 to N do

begint [L, 0]:=1;

t [L, L]:=1;for C := 1 to L-1 do

t [L, C]:= t [L-1, C] +t [L-1, C-1];end;end;

procedure affichage (t:mat;n:integer);beginfor l:=0 to n dobeginwriteln;for c:=0 to l dowrite(t[l,c]:5);end;end;

beginSaisie_n (n, 0, 50);Remplir (t, n);Affichage (t, n);end.

Exercice N°8 2éme méthode

uses wincrt;typemat=array[0..50,0..50]of byte;varp:mat;n,l,c:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure Remplir (Var p : Mat ;l,c ,N : integer);

beginp [0,0]:= 1; p [1,0]:= 1 ; p [1,1]:=1 ;if l<=n then

beginp[l,0]:=1; p[l,l]:=1;if c<=l-1 then

beginp[l,c]:=p[l-1,c]+p[l-1,c-1];remplir(p,l,c+1,n);

endelse remplir (p,l+1,0,n);

end;end;procedure affichage (var p:mat;l,c,n:integer);beginif l<=n then

if c<=l thenbegin

write(p[l,c]:5);affichage(p,l,c+1,n);

endelse begin writeln;affichage(p,l+1,0,n); end;

end;

beginSaisie_n (n, 0, 50);Remplir (p,0,0, n);Affichage (p,0,0, n);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 45: Exercices pascal tous les chapitres

45

Exercice N°9

uses wincrt;var

n:integer;c:char;

procedure saisie_n(var n:integer;x,y:integer);begin

repeatwrite('Donner un entier dans [',x,',',y,'] = ');readln(n);

until n in [x..y];end;procedure saisie_c(var c:char;x,y:char);begin

repeatwrite('Donner un caractère dans [',x,',',y,'] = ');readln(c);

until c in [x..y];end;Procedure thue_morse(c:char;n:integer);var

i,j:integer;ch:string;

beginch:=c;writeln(ch);for i :=1 to n do

beginj:=1;repeat

if ch[j]='1' then insert('0',ch,j+1)else insert('1',ch,j+1);j:=j+2;

until j > length(ch);writeln(ch);

end;end;begin

saisie_n(n,2,50);Saisie_c(c,'0','1');Thue_Morse(c,n);

end.

Exercice N°9

uses wincrt;var

n:integer;c:char;

procedure saisie_n(var n:integer;x,y:integer);begin

repeatwrite('Donner un entier dans [',x,',',y,'] = ');readln(n);

until n in [x..y];end;procedure saisie_c(var c:char;x,y:char);begin

repeatwrite('Donner un caractère dans [',x,',',y,'] = ');readln(c);

until c in [x..y];end;function inverse_ch(ch:string):string;var

j:integer;ch1:string;

beginch1:='';for j := 1 to length(ch) do

if ch[j]='0' then ch1:=concat(ch1,'1')else ch1:=concat(ch1,'0');

inverse_ch:=ch1;end;Procedure thue_morse(c:char;n:integer);var

i,j:integer;ch:string;

beginch:=c;writeln(ch);for i :=1 to n do

beginch:=concat(ch,inverse_ch(ch));writeln(ch);

end;end;begin

saisie_n(n,2,50);Saisie_c(c,'0','1');Thue_Morse(c,n);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 46: Exercices pascal tous les chapitres

46

Exercice N°10

uses wincrt;typefibo=array[1..100] of integer;var f:fibo;n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure fibonacci (var f:fibo;n:integer);var i:integer;beginf[1]:=1;f[2]:=1;f[3]:=1;for i:= 4 to n do

beginf[i]:=f[i-3]+f[i-2]+f[i-1];write(f[i]);

end;end;

beginsaisie_n(n,4,100);fibonacci(f,n);end.

Exercice N°10

uses wincrt;var

n:integer;

Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;

procedure fibonacci (n:integer);var i,f1,f2,f3,f:integer;beginf1:=1;f2:=1;f3:=1;for i:= 4 to n do

beginf:=f3+f2+f1;write(f);f1:=f2;f2:=f3;f3:=f;

end;end;

beginsaisie_n(n,4,100);fibonacci(n);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 47: Exercices pascal tous les chapitres

47

Exercice N°11

uses wincrt;type

Tab_E = array[1..100] of integer;Tab_R = array[1..100] of real;

vare:real;

Procedure saisie_e(var e:real);begin

repeatWrite('Donner un réel très proche de zéro :');readln(e);

until (e >=0) and (e <= 1);end;Procedure nombre_or(e:real);var

n :integer;U:Tab_E;V:Tab_R;

beginU[1]:=1;U[2]:=2;n:=2;Repeat

n:=n+1;U[n]:=U[n-1]+U[n-2];V[n]:=U[n] / U[n-1];

Until abs(V[n]-V[n-1]) < e;Writeln('V[',n,'] = ',V[n]);

end;beginSaisie_e(e);nombre_or(e);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 48: Exercices pascal tous les chapitres

48

Exercice N°3 page 145

uses wincrt;varn:integer;procedure saisie_n (var n:integer;x,y:integer);beginwrite ('donner un entier ');readln (n);if not (n in [x..y]) then saisie_n(n,x,y);end;

procedure triangle (var n:integer);var i,j,k:integer;beginfor i := 1 to n dobegink:=2*i-1;for j:= 1 to k dobegingotoxy (n*2-(k div 2)+j ,i+4);write('*');end;end;

end;beginsaisie_n(n,1,100);triangle(n);

end.

Exercice N°4 page 145

uses wincrt;varn:integer;a,x0,x:real;

procedure saisie_n (var n:integer;x,y:integer);beginwrite ('donner un entier ');readln (n);if not (n in [x..y]) then saisie_n(n,x,y);end;

procedure suite ( n:integer;a:real);var i:integer;beginx0:=a;for i:= 1 to n do

beginx:=4*x0*(1-x0);writeln(x:0:0);x0:=x;

end;end;

beginsaisie_n(n,1,100);write('donner a: '); readln(a);suite(n,a);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 49: Exercices pascal tous les chapitres

49

Exercice N°7 page 146

uses wincrt;varn:integer;a,u,u0,v,v0:real;

procedure saisie_n (var n:integer;x,y:integer);beginwrite ('donner un entier ');readln (n);if not (n in [x..y]) then saisie_n(n,x,y);end;

function suite ( n:integer):real;var i:integer;beginu0:=1;v0:=2;for i:= 1 to n do

beginu:=(u0+v0)/2;writeln('u[',i,']= ',u);v:=sqrt(u*v0);writeln('v[',i,']= ',v);u0:=u;v0:=v;

end;suite:=v;end;

beginsaisie_n(n,1,100);writeln('pi=',sqrt(27)/suite(n));

end.

Exercice N°8 page 148

program suites;uses wincrt;var N:Real;procedure suite(var n : Real;x:Real);var

U1,U2,U:Real;begin

U1:=1; U2:=1; n:=2;Repeat

n:=n+1;U:=U1+U2;U1:=U2;U2:=U;

until U > x;writeln('N= ',N-1:2:0,' Un= ',U1:10:0);

end;Begin

Suite(n,32767);Suite(n,2147483647);

End.

© Pro

f.Abd

elkad

er B

arra

j

Page 50: Exercices pascal tous les chapitres

50

***Algorithmes Récurrents***

Saisie_Mat Itérative Saisie_Mat ItérativeProcedure lecture(Var T:Mat;n:integer);var

i,j : integer;beginfor i := 1 to n do

for j := 1 to n dobegin

write('T[',i,',',j,'] = ');readln(T[i, j]);

end;end;begin

Saisie_n(n,1,20);Lecture(T,n);

end.

Procedure lecture(Var T:Mat; l, c:integer);var

i,j : integer;beginfor i := 1 to l do

for j := 1 to c dobegin

write('T[',i,',',j,'] = ');readln(T[i, j]);

end;end;begin

Saisie_n(l,1,20);Saisie_n(c,1,20);Lecture(T,l,c);

end.

Saisie_Mat Récursive Saisie_Mat Récursiveuses wincrt;type

Mat = array[1..20,1..20] of char;var

T:Mat;n:integer;

Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : ');readln(n);If not(n in [x..y]) then Saisie_n(n, x, y);

end;Procedure lecture(Var T:Mat;i,j,n:integer);beginif i <= n then

if j <= n thenbegin

write('T[',i,',',j,'] = ');readln(T[i, j]);lecture(T,i,j+1,n);

endelse lecture(T,i+1,1,n);

end;begin

Saisie_n(n,1,20);Lecture(T,1,1,n);

end.

uses wincrt;type

Mat = array[1..20,1..20] of real;var

T:Mat;l,c:integer;

Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : ');readln(n);If not(n in [x..y]) then Saisie_n(n, x, y);

end;Procedure lecture(Var T:Mat;i,j,l,c:integer);beginif i <= l then

if j <= c thenbegin

write('T[',i,',',j,'] = ');readln(T[i, j]);lecture(T,i,j+1,l,c);

endelse lecture(T,i+1,1,l,c);

end;begin

Saisie_n(l,1,20);Saisie_n(c,1,20);Lecture(T,1,1,l,c);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 51: Exercices pascal tous les chapitres

51

Affichage Itérative Affichage ItérativeProcedure Affichage(T:Mat;n:integer);var

i,j : integer;beginfor i := 1 to n do

for j := 1 to n dowriteln('T[',i,',',j,'] = ', T[i, j]);

end;begin

Saisie_n(n,1,20);Affichage(T,n);

end.

Procedure affichage(T:Mat; l, c:integer);var

i,j : integer;beginfor i := 1 to l do

for j := 1 to c dowrite('T[',i,',',j,'] = ', T[i, j]);

end;begin

Saisie_n(l,1,20);Saisie_n(c,1,20);Affichage(T,l,c);

end.

Affichage Récursive Affichage RécursiveProcedure Affichage(T:Mat;i,j,n:integer);beginif i <= n then

if j <= n thenbegin

write('T[',i,',',j,'] = ', T[i, j]);Affichage(T,i,j+1,n);

endelse Affichage(T,i+1,1,n);

end;begin

Saisie_n(n,1,20);Affichage(T,1,1,n);

end.

Procedure Affichage(T:Mat;i,j,l,c:integer);beginif i <= l then

if j <= c thenbegin

write('T[',i,',',j,'] = ', T[i, j]);affichage(T,i,j+1,l,c);

endelse affichage(T,i+1,1,l,c);

end;begin

Saisie_n(l,1,20);Saisie_n(c,1,20);Affichage(T,1,1,l,c);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 52: Exercices pascal tous les chapitres

52

Maximum_Note ItérativeFunction Maximum(n:integer):real;var

M,note : real;i:integer;

beginWrite('Note = '); readln(note);M:=Note;for i:=1 to n do

beginWrite('Note = '); readln(note);if Note > M Then M:=note;

end;Maximum := M;

end;begin

saisie_n(n,1,50);Writeln(Maximum(n));

end.

Maximum_Note Récursive Maximum_Note Récursiveuses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Maximum(n:integer):real;var

note,M : real;begin

Write('Note = '); readln(note);

if n=1 then Maximum := Noteelse

beginM:=Maximum(n-1);if Note > M then Maximum:=Noteelse Maximum := M;

end;end;begin

saisie_n(n,1,50);Writeln(Maximum(n));

end.

uses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Maximum(deb,fin:integer):real;var

note,M : real;begin

Write('Note = '); readln(note);

if deb=fin then Maximum := Noteelse

beginM:=Maximum(deb,fin-1);if Note > M then Maximum:=Noteelse Maximum := M;

end;end;begin

saisie_n(n,1,50);Writeln(Maximum(1,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 53: Exercices pascal tous les chapitres

53

Maximum Elément Itérative Maximum Position ItérativeProcedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Maximum(T: Tab;n:integer):real;var M:real;

i:integer;begin

M:=T[1];for i:=2 to n do

If T[i] > M Then M:=T[i];Maximum := M;

end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Maximum(T,n));

end.

Procedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Maximum(T: Tab;n:integer):integer;var i,M:integer;begin

M:=1;for i:=2 to n do

If T[i] > t[M] Then M:=i;Maximum := M;

end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(T[Maximum(T,n)]);

end.

Maximum Elément entre deux bornes Itérative Maximum Position entre deux bornes ItérativeProcedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Maximum(T: Tab;bi,bf:integer):real;var M:real;

i:integer;begin

M:=T[bi];for i:=bi+1 to bf do

if T[i] > M Then M:=T[i];Maximum := M;

end;begin

saisie_n(n,1,50);Saisie(T,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(Maximum(T,bi,bf));

end.

Procedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Maximum(T: Tab;bi,bf:integer):integer;var i,M:integer;begin

M:=bi;for i:=bi+1 to bf do

if T[i] > T[M] Then M:=i;Maximum := M;

end;begin

saisie_n(n,1,50);Saisie(T,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(T[Maximum(T,bi,bf)]);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 54: Exercices pascal tous les chapitres

54

Maximum Elément Récursive (n) Maximum Position Récursive (n)procedure saisie(var t:tab;n:integer);begin

if n <>0 thenbegin

saisie(t,n-1);write('T[',n,'] = '); readln(T[n]);

end;end;Function Maximum(T:Tab;n:integer):real;var M : real;begin

if n=1 then Maximum := T[1]else begin

M:=Maximum(T,n-1);if T[n] > M then Maximum:=T[n]else Maximum := M;

end;end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Maximum(T,n));

end.

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

if n <>0 thenbegin

saisie(t,n-1);write('T[',n,'] = '); readln(T[n]);

end;end;Function Maximum(T:Tab;n:integer):integer;var M : integer;begin

if n=1 then Maximum := 1else begin

M:=Maximum(T,n-1);if T[n] > T [M] then Maximum:=nelse Maximum := M;

end;end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(T[Maximum(T,n)]);

end.

Maximum Elément Récursive (deb/fin) Maximum Position Récursive (deb/fin)procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = '); readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Maximum(T:Tab;deb,fin:integer):real;var M : real;begin

if deb=fin then Maximum := T[deb]else begin

M:=Maximum(T,deb,fin-1);if T[fin] > M then Maximum:=T [fin]else Maximum := M;

end;end;begin

saisie_n(n,1,50);Saisie(T,1,n);Writeln(Maximum(T,1,n));

end.

procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = '); readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Maximum(T:Tab;deb,fin:integer):integer;var M : integer;begin

if deb=fin then Maximum := debelse begin

M:=Maximum(T,deb,fin-1);if T[fin] > T[M] then Maximum:=finelse Maximum := M;

end;end;begin

saisie_n(n,1,50);Saisie(T,1,n);Writeln(T[Maximum(T,1,n)]);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 55: Exercices pascal tous les chapitres

55

Maximum Elément entre deux bornes Récursive Maximum Position entre deux bornes Itérativeuses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = '); readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Maximum(T:Tab;deb,fin:integer):real;var M : real;begin

if deb=fin then Maximum := T[deb]else begin

M:=Maximum(T,deb,fin-1);if T[fin] > M then Maximum:=T[fin]else Maximum := M;

end;end;begin

saisie_n(n,1,50); Saisie(T,1,n);Saisie_n(bf,1,n); Saisie_n(bi,1,bf);Writeln(Maximum(T,bi,bf));

end.

uses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = '); readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Maximum(T:Tab;deb,fin:integer):integer;var M : integer;begin

if deb=fin then Maximum := debelse begin

M:=Maximum(T,deb,fin-1);if T[fin] > T[M] then Maximum:=finelse Maximum := M;

end;end;begin

saisie_n(n,1,50); Saisie(T,1,n);Saisie_n(bf,1,n); Saisie_n(bi,1,bf);Writeln(T[Maximum(T,bi,bf)]);

end.© Pro

f.Abd

elkad

er B

arra

j

Page 56: Exercices pascal tous les chapitres

56

Maximum Matrice Itérative Maximum Matrice Récursiveuses wincrt;type

Mat = array[1..20,1..20] of real;var

T:mat;l,c:integer;

Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');

readln(n);until n in [x..y];

end;Procedure lecture(Var T:Mat; l,c: integer);var i,j:integer;begin

for i:=1 to l dofor j:=1 to c do

begin write('T[',i,',',j,'] : '); readln(T[i, j]); end;end;Function Maximum(T: Mat; l,c:integer):real;var M:real;

i,j:integer;begin

M:=T[1,1];for i:=1 to l do

for j:=1 to c doif T[i,j] > M Then M:=T[i,j];

Maximum := M;end;begin

saisie_n(l,1,50);saisie_n(c,1,50);lecture(T,l,c);Writeln(Maximum(T,l,c));

end.

uses wincrt;type Mat = array[1..5,1..5] of real;var T:Mat; l,c:integer;Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : ');readln(n);

If not(n in [x..y]) then Saisie_n(n, x, y);end;Procedure lecture(Var T:Mat;i,j,l,c:integer);beginif i <= l then

if j <= c thenbegin

write('T[',i,',',j,'] = '); readln(T[i, j]);lecture(T,i,j+1,l,c);

endelse lecture(T,i+1,1,l,c);

end;Function Maximum(T: Mat; l,c,n:integer):real;Var M: Real;begin

if l = 1 then Maximum := T[1,1]else if c <> 0 Then begin

M:=Maximum(T,l,c-1,n);if T[l,c] > M then Maximum:=

T[l,c];else Maximum := M;

endelse M:=Maximum(T,l-1,n,n);

end;begin

Saisie_n(l,1,5); Saisie_n(c,1,5);Lecture(T,1,1,l,c); Writeln(Maximum(T,l,c,c));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 57: Exercices pascal tous les chapitres

57

Moyenne Note : ItérativeFunction Moyenne(n:integer):real;var

S,note : real;i:integer;

beginS:=0;for i:=1 to n do

beginWrite('Note = ');readln(note);S:=S+note

end;Moyenne := S/N;

end;begin

saisie_n(n,1,50);Writeln(Moyenne(n));

end.

Moyenne Note : Récursive Moyenne Note : Récursiveuses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Moyenne(n:integer):real;var

note : real;begin

if n <> 0 thenbegin

Write('Note = ');readln(note);Moyenne:=Moyenne(n-1)+note/N;

end;end;begin

saisie_n(n,1,50);Writeln(Moyenne(n));

end.

uses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Moyenne(deb, fin:integer):real;var

note : real;begin

if deb <= fin thenbegin

Write('Note = ');readln(note);Moyenne:=Moyenne(deb+1,fin)+note/N;

end;end;begin

saisie_n(n,1,50);Writeln(Moyenne(1,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 58: Exercices pascal tous les chapitres

58

Moyenne Tab : ItérativeProcedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Moyenne(T: Tab;n:integer):real;var S:real;

i:integer;begin

S:=0;for i:=1 to n do S:=S+T[i];Moyenne := S/N;

end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Moyenne(T,n));

end.

Moyenne Tab : Récursive (n) Moyenne Tab Récursive : (deb/fin)uses wincrt;Type

Tab = array[1..50] of real;Var T:tab; n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

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

if n <>0 thenbegin

saisie(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;Function Moyenne(T: Tab; n, x:integer):real;begin

if n <> 0 then Moyenne:= Moyenne(T,n-1,x)+T[n]/x;end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Moyenne(T,n,n));

end.

uses wincrt;type

Tab = array[1..50] of real;Var T:Tab; n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Moyenne(T:Tab; deb, fin:integer):real;begin

if deb <= fin thenMoyenne:=Moyenne(T,deb+1,fin)+T[deb]/N;end;begin

saisie_n(n,1,50);Saisie(T,1,n);Writeln(Moyenne(T,1,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 59: Exercices pascal tous les chapitres

59

Moyenne entre deux bornes : Itérative Moyenne entre deux bornes : Récursiveuses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');

readln(n);until n in [x..y];

end;Procedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Moyenne(T: Tab;bi,bf:integer):real;var S:real;

i:integer;begin

S:=0;for i:=bi to bf do S:=S+T[i];Moyenne := S/(bf-bi+1);

end;begin

saisie_n(n,1,50);Saisie(T,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(Moyenne(T,bi,bf));

end.

uses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Moyenne(T:Tab; deb, fin,x:integer):real;begin

if deb <= fin thenMoyenne:=Moyenne(T,deb+1,fin,x)+T[deb]/xend;begin

saisie_n(n,1,50);Saisie(T,1,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(Moyenne(T,bi,bf,bf-bi+1));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 60: Exercices pascal tous les chapitres

60

Moyenne Matrice : Itérative Moyenne Matrice : Récursiveuses wincrt;type

Mat = array[1..20,1..20] of real;var

T:mat;l,c:integer;

Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');

readln(n);until n in [x..y];

end;Procedure lecture(Var T:Mat; l,c: integer);var i,j:integer;begin

for i:=1 to l dofor j:=1 to c do

begin write('T[',i,',',j,'] : '); readln(T[i, j]); end;end;Function Moyenne(T: Mat; l,c:integer):real;var S:real;

i,j:integer;begin

S:=0;for i:=1 to l do

for j:=1 to c do S:=S+T[i,j];Moyenne := S/(l*c);

end;begin

saisie_n(l,1,50);saisie_n(c,1,50);lecture(T,l,c);Writeln(Moyenne(T,l,c));

end.

uses wincrt;type

Mat = array[1..5,1..5] of real;var

T:Mat;l,c:integer;

Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : ');readln(n);If not(n in [x..y]) then Saisie_n(n, x, y);

end;Procedure lecture(Var T:Mat;i,j,l,c:integer);beginif i <= l then

if j <= c thenbegin

write('T[',i,',',j,'] = ');readln(T[i, j]);lecture(T,i,j+1,l,c);

endelse lecture(T,i+1,1,l,c);

end;Function Moyenne(T: Mat; l,c,n,x:integer):real;begin

if l<> 0 thenbegin

if c <> 0 then Moyenne := T[l,c]/x +Moyenne(T,l,c-1,n,x)

else Moyenne:= Moyenne(T,l-1,n,n,x);end;

end;begin

Saisie_n(l,1,5);Saisie_n(c,1,5);Lecture(T,1,1,l,c);Writeln(Moyenne(T,l,c,c,l*c));

end.© P

rof.A

bdelk

ader

Bar

raj

Page 61: Exercices pascal tous les chapitres

61

Somme Note : Itérativeuses wincrt;var n:integer;Function Somme(n:integer):real;var

S,note : real;i:integer;

beginS:=0;for i:=1 to n do

beginWrite('Note = ');readln(note);S:=S+note

end;Somme := S; end;

beginsaisie_n(n,1,50);Writeln(Somme(n));

end.

Somme Note : Récursive (n) Somme Note : Récursive (deb/fin)uses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Somme(n:integer):real;var

note : real;begin

if n <> 0 thenbegin

Write('Note = ');readln(note);Somme:=Somme(n-1)+note

end;end;begin

saisie_n(n,1,50);Writeln(Somme(n));

end.

uses wincrt;var

n:integer;procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;Function Somme(deb, fin:integer):real;var

note : real;begin

if deb <= fin thenbegin

Write('Note = ');readln(note);Somme:=Somme(deb+1,fin)+note

end;end;begin

saisie_n(n,1,50);Writeln(Somme(1,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 62: Exercices pascal tous les chapitres

62

Somme tab : ItérativeProcedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Somme(T: Tab;n:integer):real;var S:real;

i:integer;begin

S:=0;for i:=1 to n do S:=S+T[i];Somme := S;

end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Somme(T,n));

end.

Somme tab : Récursive (n) Somme tab : Récursive (deb/fin)uses wincrt;Type

Tab = array[1..50] of real;Var T:tab;

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

if n <>0 thenbegin

saisie(t,n-1);write('T[',n,'] = ');readln(T[n]);

end;end;Function Somme(T: Tab; n:integer):real;begin

if n <> 0 then Somme:=Somme(T,n-1)+T[n];end;begin

saisie_n(n,1,50);Saisie(T,n);Writeln(Somme(T,n));

end.

uses wincrt;type

Tab = array[1..50] of real;Var T:Tab;

n:integer;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Somme(T:Tab; deb, fin:integer):real;begin

if deb <= fin thenSomme:=Somme(T,deb+1,fin)+T[deb];end;begin

saisie_n(n,1,50);Saisie(T,1,n);Writeln(Somme(T,1,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 63: Exercices pascal tous les chapitres

63

Somme tab entre deux bornes : Itérative Somme tab entre deux bornes : Récursiveuses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');

readln(n);until n in [x..y];

end;Procedure saisie(Var T:Tab; n: integer);var i:integer;begin

for i:=1 to n dobegin write('T[',i,'] : '); readln(T[i]); end;

end;Function Somme(T: Tab;bi,bf:integer):real;var S:real;

i:integer;begin

S:=0;for i:=bi to bf do S:=S+T[i];Somme := S;

end;begin

saisie_n(n,1,50);Saisie(T,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(Somme(T,bi,bf));

end.

uses wincrt;type

Tab = array[1..50] of real;var

T:Tab;bi,bf,n:integer;

procedure saisie_n(var n:integer;x,y:integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y);

end;procedure saisie(var t:tab; deb, fin:integer);begin

if deb <= fin thenbegin

write('T[',deb,'] = ');readln(T[deb]);saisie(t,deb+1, fin);

end;end;Function Somme(T:Tab; deb, fin:integer):real;begin

if deb <= fin thenSomme:=Somme(T,deb+1,fin)+T[deb]end;begin

saisie_n(n,1,50);Saisie(T,1,n);Saisie_n(bf,1,n);Saisie_n(bi,1,bf);Writeln(Somme(T,bi,bf));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 64: Exercices pascal tous les chapitres

64

Somme Matrice : Itérative Somme Matrice : Récursiveuses wincrt;type

Mat = array[1..20,1..20] of real;var

T:mat;l,c:integer;

Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');

readln(n);until n in [x..y];

end;Procedure lecture(Var T:Mat; l,c: integer);var i,j:integer;begin

for i:=1 to l dofor j:=1 to c do

begin write('T[',i,',',j,'] : '); readln(T[i, j]); end;end;Function Somme(T: Mat; l,c:integer):real;var S:real;

i,j:integer;begin

S:=0;for i:=1 to l do

for j:=1 to c do S:=S+T[i,j];Somme := S;

end;begin

saisie_n(l,1,50);saisie_n(c,1,50);lecture(T,l,c);Writeln(Somme(T,l,c));

end.

uses wincrt;type

Mat = array[1..5,1..5] of real;var

T:Mat;l,c:integer;

Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : ');readln(n);If not(n in [x..y]) then Saisie_n(n, x, y);

end;Procedure lecture(Var T:Mat;i,j,l,c:integer);beginif i <= l then

if j <= c thenbegin

write('T[',i,',',j,'] = ');readln(T[i, j]);lecture(T,i,j+1,l,c);

endelse lecture(T,i+1,1,l,c);

end;Function Somme(T: Mat; l,c,n:integer):real;begin

if l<> 0 thenbegin

if c <> 0 then Somme := T[l,c] +Somme(T,l,c-1,n)

else Somme:= Somme(T,l-1,n,n);end;

end;begin

Saisie_n(l,1,5);Saisie_n(c,1,5);Lecture(T,1,1,l,c);Writeln(Somme(T,l,c,c));

end.© Pro

f.Abd

elkad

er B

arra

j

Page 65: Exercices pascal tous les chapitres

65

Les Algorithme Arithmétique

PGCD 1ére MéthodeMéthode Itérative

program PGCD_difference;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

RepeatWrite('Donner un entier >= 0 : '); readln(n);

until n >=0;end;function pgcd (a, b: integer): integer;

beginRepeat

if a > b then a := a - b;if b > a then b := b - a;

until a = b;pgcd := a;

end;beginSaisie_n(A); Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

PGCD 1éme MéthodeMéthode récursive

program PGCD_Difference;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function pgcd (a, b: integer): integer;

beginif a > b then pgcd := pgcd(a - b, b)else

if b > a then pgcd := pgcd(b - a, a)else pgcd := a;

end;beginSaisie_n(A);Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

PGCD 3ére MéthodeMéthode Itérative

program PGCD_Euclide;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

RepeatWrite('Donner un entier >= 0 : '); readln(n);

until n >=0;end;function pgcd (a, b: integer): integer;Var x : integer;

beginRepeat

X:= A mod B;A:= B;B:= X;

until B = 0;PGCD := A;

end;beginSaisie_n(A); Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

PGCD 3éme MéthodeMéthode récursive

program PGCD_Euclide;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function pgcd (a, b: integer): integer;

beginif a mod b = 0 then pgcd := belse pgcd := pgcd(b, a mod b)

end;beginSaisie_n(A);Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 66: Exercices pascal tous les chapitres

66

PGCD 2ére MéthodeMéthode Itérative

program PGCD1;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

RepeatWrite('Donner un entier >= 0 : '); readln(n);

until n >=0;end;function pgcd (a, b: integer): integer;Var x : integer;begin

x:=1;while a*b <> 0 do

case (a mod 2) + (b mod 2) of0: begin

x:=x*2;a:=a div 2;b:=b div 2;

end;1: if a mod 2 = 0 then a:=a div 2

else b:=b div 2;2: if a > b then a:= a-b

else b:= b-a;end;

if a = 0 then PGCD := b*xelse PGCD := a*x;

end;beginSaisie_n(A); Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 67: Exercices pascal tous les chapitres

67

PGCD 2éme MéthodeMéthode récursive

program PGCD1;uses wincrt;var A, B: integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function pgcd (a, b: integer): integer;begin

if a=0 then PGCD:=belse

if b=0 then PGCD:=aelse

if (a mod 2 = 0) and (b mod 2 = 0) then PGCD := PGCD(a div 2, b div 2) * 2else

if(a mod 2 = 0) and (b mod 2 <> 0) then PGCD := PGCD(a div 2 , b)else

if (a mod 2 <> 0) and ( b mod 2 = 0) then PGCD := PGCD(a, b div 2)else

if (a mod 2 <> 0) and ( b mod 2 <> 0) thenif a > b then PGCD := PGCD(a - b, b)else PGCD := PGCD(a, b - a);

end;beginSaisie_n(A);Saisie_n(B);writeln('Leur pgcd est ', pgcd(A, B));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 68: Exercices pascal tous les chapitres

68

PPCMMéthode Itérative

program Calcul_PPCM;uses wincrt;var

A, B, max, min: integer;Procedure saisie_n(Var n : integer);begin

RepeatWrite('Donner un entier >= 0 : '); readln(n);

until n >=0;end;function ppcm (A,B: integer): integer;var

Max,Min:integer;begin

if A > B then begin max:=A; min:=B;endelse begin max:=B; min:=A; end;

while max mod min <> 0 do max := max + (A+B-min);

PPCM := max;end;

beginsaisie_n(a);Saisie_n(b);writeln('Leur ppcm est ', ppcm(A,B));end.

PPCMMéthode Récursive

program Calcul_PPCM;uses wincrt;var

A, B, max, min: integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function ppcm (max,min: integer): integer;begin

if max mod min = 0 then ppcm := maxelse begin max:=max+(A+B-min);

ppcm:=ppcm(max,min); end;end;beginsaisie_n(a);Saisie_n(b);

if A > B then begin max:=A; min:=B;endelse begin max:=B; min:=A; end;

writeln('Leur ppcm est ', ppcm(max,min));end.

ProduitMéthode Itérativeuses wincrt;var

n:integer; x: real;function Produit(n : integer; x:real):real;var

i:integer;p:real;

beginp:=1;for i := 1 to abs(n) do P:=p*x;if n >= 0 then produit:=pelse produit:=1/p;

end;begin

write('N = ');readln(n);write('X = ');readln(x);writeln(produit(n,x):4:2);

end.

ProduitMéthode Récursive

uses wincrt;var

n:integer;x:real;

function Produit(n : integer;x : real):real;begin

if n = 0 then Produit:=1else Produit:=Produit(n-1,x) * x;

end;begin

write('N = ');readln(n);write('X = '); readln(x);if n >= 0 then writeln(Produit(abs(n),x):4:2)else writeln(1/Produit(abs(n),x):4:2);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 69: Exercices pascal tous les chapitres

69

ParfaitMéthode Itérative

uses wincrt;Var n :integer;Procedure saisie_n(Var n : integer);begin

RepeatWrite('Donner un entier >= 0 : ');readln(n);

until n >=0;end;function Parfait(n:integer): integer;var

i,S:integer;begin

S:=0;for i := 1 to n div 2 do

if n mod i = 0 then S:=S+i;Parfait:=S;

end;begin

Saisie_n(n);if n=Parfait(n) then writeln(n,' est un nombre

parfait')else writeln(n,' n''est pas un nombre parfait');

end.

ParfaitMéthode Récursive

uses wincrt;Var n :integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function Parfait(n,m:integer): integer;beginif n = 0 then parfait :=0elseif n <= m div 2 thenif m mod n = 0 then Parfait:=Parfait(n-1,m)+nelse Parfait := Parfait(n-1,m);

end;begin

Saisie_n(n);if n=Parfait(n div 2, n) then writeln(n,' est un

nombre parfait')else writeln(n,' n''est pas un nombre parfait');

end.

PremierMéthode Itérative

uses wincrt;var n:integer;procedure saisie_n(var n : integer);begin

repeat Write('Donner un entier > 1 : ');readln(n) until n > 1;end;function premier(n : integer):boolean;var i: integer;begin

i:=2;While (n mod i <> 0) and (i <= (n div 2)) do

i := i + 1;if (n mod i = 0) and (n<>i) then premier := falseelse premier := true;

end;begin

saisie_n(n);if premier(n) then writeln(n, ' est un nombre premier')else writeln(n,' n''est pas un nombre premier');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 70: Exercices pascal tous les chapitres

70

PremierMéthode Récursiveuses wincrt;var n:integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier > 1 : '); readln(n);If not(n > 1) then Saisie_n(n);

end;function premier (n,m: integer): boolean;begin

if m = 1 then premier := trueelse

if (n mod m = 0) and (n<>m) then premier := falseelse premier := premier(n,m-1);

end;begin

saisie_n(n);if premier(n, n div 2) then writeln(n, ' est un nombre premier')else writeln(n,' n''est pas un nombre premier');

end.

Premier entre deux bornesMéthode Itérativeuses wincrt;var bi,bf:integer;Procedure saisie_n(Var n : integer; x, y: integer);begin

RepeatWrite('Donner un entier dans [',x, ',',y, '] : ');readln(n);

until n in [x..y]; end;function premier(n : integer):boolean;var i: integer;begin

i:=2;While (n mod i <> 0) and (i <= (n div 2)) do

i := i + 1;if (n mod i = 0) and (n<>i) then premier := falseelse premier := true;

end;Procedure affichage(bi,bf:integer);var

n:integer;begin

for n:= bi to bf doif premier(n) then writeln(n);end;

beginsaisie_n(bf,2,1000);Saisie_n(bi,2,bf);Affichage(bi,bf);

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 71: Exercices pascal tous les chapitres

71

Premier entre deux bornesMéthode Récursiveuses wincrt;var bi,bf:integer;Procedure saisie_n(Var n : integer; x,y : integer);begin

Write('Donner un entier dans [', x ,',',y, '] : '); readln(n);If not(n in [x..y]) then Saisie_n(n, x, y); end;

function premier (n,m: integer): boolean;begin

if m = 1 then premier := trueelse

if (n mod m = 0) and (n<>m) then premier := falseelse premier := premier(n,m-1); end;

Procedure affichage(bi,bf:integer);var

n:integer;begin

if bi <= bf thenbegin

if premier(bi, bi div 2) then writeln(bi);affichage(bi+1,bf);

end;end;begin

saisie_n(bf,2,1000);Saisie_n(bi,2,bf);Affichage(bi,bf);

end.

FactorielleMéthode Itérativeprogram factoriel;uses wincrt;var n:integer;Procedure saisie_n(var n : integer; x,y : integer);begin

write('Donner un entier dans [',x,'..',y,'] : ');readln(n);if not(n in [x..y]) then saisie_n(n,x,y); end;

function fact(n:integer):longint;var i:integer;

f:longint;beginf:=1;for i:=1 to n dof:=f*i;fact:=f; end;beginsaisie_n(n,1,10);write(n,'!= ',fact(n));end.

FactorielleMéthode Récursive

program factoriellee;uses wincrt;var

n:integer;Procedure saisie_n(Var n : integer);begin

Write('Donner un entier >= 0 : '); readln(n);If not(n >=0) then Saisie_n(n);

end;function factorielle(n : integer):longint;begin

if n = 0 then factorielle:= 1else factorielle:=factorielle(n-1) * n;

end;begin

saisie_n(n);writeln(factorielle(n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 72: Exercices pascal tous les chapitres

72

Exercice N°4 page 183uses wincrt;var a,b:real; n:integer;Procedure saisie_n(Var n : integer;x:integer);begin

Write('Donner un entier >',x,' : '); readln(n);If not(n >x) then Saisie_n(n,x);

end;function C (n, p: integer): integer;

beginif p > n then C := 0else

if (p = 0) or (p = n) then C := 1else

if p = 1 then c:=nelse C := C(n - 1, p - 1) + C(n - 1, p)

end;function Produit(n : integer;x : real):real;begin

if n = 0 then Produit:=1else Produit:=Produit(n-1,x) * x;

end;function polynome(a,b: real; n: integer):real;var i:integer; S:real;begin

s:=0;for i := 0 to n do

S:= S +C(n,i)*produit(n-i,a)*produit(i,b);polynome := S;

end;begin

write('Donner a: ');readln(a);write('Donner b: ');readln(b);Saisie_n(n,0);writeln(a:2:3,' + ',b:2:3,' à la puissance ',n,' =

',Polynome(a,b,n):2:3);end.

Exercice N°5 page 183uses wincrt;varn:integer;

Procedure saisie_n(Var n : integer;x:integer);begin

Write('Donner un entier >',x,' : '); readln(n);If not(n >x) then Saisie_n(n,x);

end;function C (n, p: integer): integer;

beginif p > n then C := 0else

if (p = 0) or (p = n) then C := 1else

if p = 1 then c:=nelse C := C(n - 1, p - 1) + C(n - 1, p)

end;function polynome(n: integer):integer;var

i,S:integer;begin

s:=0;for i := 0 to n do

if i mod 2 = 0 then S:= S + C(n,i)else S:= S - C(n,i);

polynome := S;end;begin

Saisie_n(n,0);writeln(Polynome(n));

end.

Exercice N° 7 page 183uses wincrt;var n,m,u:longint;

ch:string;Function Somme(ch:string):integer;var

i,S,nbr,e:integer;begin

S:=0;for i:=1 to length(ch) do

beginVal(ch[i],nbr,e);S:=S+nbr;

end;Somme:=S;end;

Function divisible(n,m:integer):boolean;begin

if n mod m = 0 then divisible := trueelse divisible:=false;

end;begin

for m:=1 to 9 dofor u:=1 to 9 dobegin

n:=m*1000+970+u;str(n,ch);if (Somme(ch) mod 9 = 0) and

(divisible(n*2,10)) then writeln(n);end;

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 73: Exercices pascal tous les chapitres

73

Exercice divisible par 2 :uses wincrt;var n:longint;begin

write('Donne un entier : ');readln(n);if ((abs(n) mod 10) mod 2 = 0) then writeln(n,' est divisible par 2')else writeln(n,' n''est pas divisible par 2');

end.

Exercice divisible par 3 :

uses wincrt;var

n:longint;function somme_div(n:longint):integer;var

i,x,e,s:integer;ch:string;

beginstr(n,ch);S:=0;for i :=1 to length(ch) do

beginval(ch[i],x,e);S:=S+x;

end;Somme_div:=s;

end;begin

write('n = ');readln(n);if Somme_div(abs(n)) mod 3 = 0 then writeln(n,' est divisible par 3 ')else writeln(n,' n''est pas divisible par 3');

end.

Exercice divisible par 4:uses wincrt;var n:longint;Function divisible(n,m:integer):boolean;begin

if n mod m = 0 then divisible := trueelse divisible:=false;

end;begin

write('n= ');readln(n);if divisible(n mod 100, 4) then writeln(n,' est divisible par 4')else writeln(n,' n''est pas divisible par 4');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 74: Exercices pascal tous les chapitres

74

Exercice divisible par 5:uses wincrt;var n:longint;Function divisible(n,m:integer):boolean;begin

if n mod m = 0 then divisible := trueelse divisible:=false;

end;begin

write('n= ');readln(n);if divisible(n*2,10) then writeln(n,' est divisible par 5')else writeln(n,' n''est pas divisible par 5');

end.

Exercice divisible par 6:uses wincrt;var

n:longint;function somme_div(n:longint):integer;var

i,x,e,s:integer;ch:string;

beginstr(n,ch);S:=0;for i :=1 to length(ch) do

beginval(ch[i],x,e);S:=S+x;

end;Somme_div:=s;

end;begin

write('n = ');readln(n);if (Somme_div(abs(n)) mod 3 = 0) and ((n mod 10) mod 2 = 0) then

writeln(n,' est divisible par 6 ')else writeln(n,' n''est pas divisible par 6');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 75: Exercices pascal tous les chapitres

75

Exercice divisible par 7:uses wincrt;var n:longint;function Divisible(n:longint):boolean;var ch:string; m,p,e:integer;begin

while n div 100 <> 0 dobegin

str(n,ch);val(ch[length(ch)],m,e);delete(ch,length(ch),1);val(ch,p,e);n:= p-2*m;

end;if n mod 7 = 0 then divisible:=trueelse divisible:=false;

end;begin

write('Donne un entier : ');readln(n);if divisible(abs(n)) then writeln(n,' est divisible par 7')else writeln(n,' n''est pas divisible par 7');

end.

Exercice divisible par 9:uses wincrt;var

n:longint;function somme_div(n:longint):integer;var

i,x,e,s:integer;ch:string;

beginstr(n,ch);S:=0;for i :=1 to length(ch) do

beginval(ch[i],x,e);S:=S+x;

end;Somme_div:=s;

end;begin

write('n = ');readln(n);if Somme_div(abs(n)) mod 9 = 0 then writeln(n,' est divisible par 9 ')else writeln(n,' n''est pas divisible par 9');

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 76: Exercices pascal tous les chapitres

76

Exercice divisible par 11:uses wincrt;var n:longint;function Divisible(n:longint):boolean;var ch:string; m,e,s1,s2,i:integer;begin

str(n,ch); S1:=0; S2:=0;for i:=1 to length(ch) do

beginval(ch[i],m,e);if i mod 2 = 0 then S1:=S1+melse S2:=S2+m;

end;if (S1-S2) mod 11 = 0 then divisible:=trueelse divisible:=false;

end;begin

write('Donne un entier : ');readln(n);if divisible(abs(n)) then writeln(n,' est divisible par 11')else writeln(n,' n''est pas divisible par 11');

end.

Exercice divisible par 2,10,4,5,25uses wincrt;var

n:longint;begin

write('n = '); readln(n);if (n mod 10) mod 2 = 0 then writeln(n,' est divisible par 2')else writeln(n,' n''est pas divisible par 2');if (n mod 10) = 0 then writeln(n,' est divisible par 10')else writeln(n,' n''est pas divisible par 10');if (n mod 100) mod 4 = 0 then writeln(n,' est divisible par 4')else writeln(n,' n''est pas divisible par 4');if (2*n mod 10) = 0 then writeln(n,' est divisible par 5')else writeln(n,' n''est pas divisible par 5');if (n mod 100) mod 25 = 0 then writeln(n,' est divisible par 25')else writeln(n,' n''est pas divisible par 25');

end. © Pro

f.Abd

elkad

er B

arra

j

Page 77: Exercices pascal tous les chapitres

77

Exercice Facteurs premiers Itérative :

program facteurs_premiers;uses wincrt;type Tab = array[1..50] of byte;var Fact:Tab; n,f:integer;Procedure saisie_n(Var n : integer; x:integer);begin

Write('Donner un entier dans > ', x ,' : ');readln(n);If not(n > x) then Saisie_n(n, x);

end;Procedure remplir(var Fact:Tab;var f :integer;n:integer);var i:integer;begin

i:=2; f:=0;repeat

if n mod i = 0 thenbegin

f:=f+1;fact[f]:=i;n:= n div i;

endelse i := i + 1;

until n = 1;end;Procedure affichage(T:Tab;n: integer);var i:integer;begin

for i :=1 to n dowrite(T[i]:4);

end;begin

Saisie_n(n,1);remplir(Fact,f,n);affichage(Fact,f);

end.

Exercice Facteurs premiers Récursive :

program facteurs_premiers;uses wincrt;type Tab = array[1..50] of byte;var Fact:Tab; n,f:integer;procedure saisie_n(var n : integer;x:integer);begin

repeatwrite('donner un entier dans > ',x,' : ');

readln(n);until n > x;

end;Procedure remplir(var Fact:Tab;var f :integer;i,n:integer);begin

if n <>1 thenif n mod i = 0 then

beginf:=f+1;fact[f]:=i;remplir(Fact,f,i, n div i);

endelse remplir(Fact,f,i+1,n);

end;procedure affichage (t:tab; deb, fin:integer);begin

if deb <= fin thenbegin write(T[deb]:4); affichage(t,deb+1, fin);

end;end;begin

Saisie_n(n,1); f:=0; remplir(Fact,f,2,n);affichage(Fact,1,f);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 78: Exercices pascal tous les chapitres

78

Exercice Facteurs premiers Itérative sans tableau:program facteurs_premiers;uses wincrt;var n:integer;Procedure saisie_n(Var n : integer; x:integer);begin

Write('Donner un entier dans > ', x ,' : ');readln(n);If not(n > x) then Saisie_n(n, x);

end;

procedure remplir (n:integer);var i:integer;begini:=2;repeat

if n mod i=0 thenbeginwrite(i:4);n:=n div i;end

else i:=i+1;until n=1;end;

beginsaisie_n (n,1);remplir(n);end.

Exercice Facteurs premiers Récursive sans table:program facteurs_premiers;uses wincrt;var n:integer;Procedure saisie_n(Var n : integer; x:integer);begin

Write('Donner un entier dans > ', x ,' : ');readln(n);If not(n > x) then Saisie_n(n, x);

end;

procedure remplir (i,n:integer);beginif n<>1 then

if n mod i=0 thenbeginwrite(i:4);remplir(i,n div i);end

else remplir(i+1,n);end;

beginsaisie_n (n,1);remplir(2,n);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 79: Exercices pascal tous les chapitres

79

Exercice base 10 vers base 2, 8, 16

uses wincrt;type

tab = array[1..50]of byte;var

Rest:tab;n,b,c:word;

procedure saisie_n(var n : word;x:word);begin

repeatwrite('donner un entier dans > ',x,' : '); readln(n);

until n > x;end;procedure saisie_b(var b : word);begin

repeatwrite('donner une base dans [2,8,16] : '); readln(b);

until b in [2,8,16];end;Procedure remplir(var Rest : tab;var c:word;N,B:word);begin

c:=0;Repeat

c:=c+1;

© Pro

f.Abd

elkad

er B

arra

j

Page 80: Exercices pascal tous les chapitres

80

Rest[c]:=n mod b;n:= n div b;

until n = 0;end;Procedure affichage(T:tab;n:word);var

i:integer;begin

for i := c downto 1 doif rest[i] in [0..9] then write(Rest[i]:4)else write(chr(ord('A')+ Rest[i] - 10):4);

end;begin

Saisie_n(n,0);Saisie_b(b);remplir(Rest,c,n,b);Affichage(Rest,c);

end.

Base 10 à l’autre base Récursive :program base10_base;uses wincrt;varn:integer;b:byte;

procedure saisie_base(var b : byte);begin

repeatwrite('donner une base dans [2..36] : '); readln(b);

until b in [2..36];end;

procedure saisie_n(var n : integer;x:integer);begin

repeatwrite('donner un entier dans > ',x,' : '); readln(n);

until n > x;end;

Procedure affichage(x:byte);begin

if x in [0..9] then write(x)else write(chr(ord('A')+ x - 10));

© Pro

f.Abd

elkad

er B

arra

j

Page 81: Exercices pascal tous les chapitres

81

end;

procedure remplir (n:integer;b:byte);beginif n<>0 then

beginremplir(n div b,b);affichage(n mod b);

end;end;

beginsaisie_n(n,0);saisie_base(b);remplir(n,b);end.

Autre base à la base 10 :program base_base10;uses wincrt;typech=string[46];var n:string;

b:byte;p,s:integer;

procedure saisie_base(var b : byte);begin

repeatwrite('donner une base dans [2..36] : '); readln(b);

until b in [2..36];end;

procedure base (var ch1:ch;b:byte);var k:integer;

x:string[1];beginif b<=10 then

beginch1:='';for k:=0 to b-1 dobegin str(k,x); ch1:=concat(ch1,x);end;

endelse

© Pro

f.Abd

elkad

er B

arra

j

Page 82: Exercices pascal tous les chapitres

82

beginch1:='0123456789';for k:=10 to b-1 doch1:=concat(ch1,chr(ord('A')+k-10));

end;writeln(ch1);end;

function recherche (n:string;ch1:ch):boolean;vari:integer;begini:=0;repeati:=i+1;until (pos(upcase(n[i]),ch1)=0) or(i>length(n));if i>length(n) then recherche:=trueelse recherche:=false;end;

procedure saisie_ch(var n:string);var ch1:ch;beginbase (ch1,b);repeat

write('donner un nombre dans la base: ');readln(n);

until recherche (n,ch1);end;

function puis (b,r:integer):integer;var i:integer;beginp:=1;for i:= 1 to r dop:=p*b;puis:=p;end;

function conver(b:byte; n:string):integer;vari,e:integer;y:integer;x:string[1];begins:=0;for i:=1 to length(n) dobegin

if n[i] in ['0'..'9'] then val(n[i],y,e)else y:= (ord(upcase(n[i]))-ord('A') + 10);

s:=s+y*puis(b,length(n)-i);end;conver:=s;

© Pro

f.Abd

elkad

er B

arra

j

Page 83: Exercices pascal tous les chapitres

83

end;beginsaisie_base(b);saisie_ch(n);writeln(conver(b,n));end.

Base 2 vers base 8, 16 :program test;uses wincrt;constch1='01';type

ch=string[46];chv=string[4];ch2=string[1];bits=3..4;

varn,ph:string;b:byte;bit:bits;k:integer;v:chv;

procedure saisie_base(var B : byte);begin

repeatwrite('donner une base dans [8,16] : ');readln(B);

until B in [8,16];end;

function recherche(n:string):boolean;var

© Pro

f.Abd

elkad

er B

arra

j

Page 84: Exercices pascal tous les chapitres

84

i:integer;begin

i:=0;repeat

i:=i+1;until (pos(upcase(n[i]),ch1)=0) or (i > length(n));if i > length(n) then recherche:=trueelse recherche:=false;

end;procedure saisie_ch(var n : string);begin

repeatwrite('donner un nombre dans la base :');readln(n);

until Recherche(n);end;

function puissance (b,r:integer):integer;

beginif r=0

then puissance:=1elsepuissance:=puissance(b,r-1)*b;

end;

function convert (v:chv):ch2;var

s,e,x,i:integer;u:string;

begins:=0;for i:=1 to length (v) dobegin

val(v[i],x,e);s:=s+x*puissance(2,length(v)-i);

end;if s in[0..9] then str(s,u)else u:=chr(ord('a')+s-10);convert:=u;

end;

{function converssion (n:string;b:byte):string;beginif b=8 then bit:=3else bit:=4;while length(n) mod bit <>0 don:=concat('0',n);k:=length(n);ph:='';repeatv:=copy(n,k-bit+1,bit);ph:=concat(convert(v),ph);k:=k-bit;

© Pro

f.Abd

elkad

er B

arra

j

Page 85: Exercices pascal tous les chapitres

85

until k=0;converssion:=ph;end;}

function converssion (n:string;b:byte):string;beginif b=8 then bit:=3else bit:=4;while length(n) mod bit <>0 don:=concat('0',n);k:=0;ph:='';repeatv:=copy(n,k+1,bit);ph:=concat(ph,convert(v));k:=k+bit;until k=length(n);converssion:=ph;end;

beginSaisie_ch(n);saisie_base(b);write(converssion(n,b));

end.

Base 8, 16 vers base2 :program test;uses wincrt;type

ch=string[46];ch0=string[4];

varn,v:string;b:byte;ph:string;

u:string;r:integer;

procedure saisie_base(var B : byte);begin

repeatwrite('donner une base dans [8,16] : ');readln(B);

until B in [8,16];end;procedure base(var ch1:ch;B:byte);var

k:integer;x:string[1];

beginif b <= 10 then

© Pro

f.Abd

elkad

er B

arra

j

Page 86: Exercices pascal tous les chapitres

86

beginch1:='';for k:=0 to b-1 do begin str(k,x);ch1:=concat(ch1,x); end;

endelse

beginch1:='0123456789';for k:= 10 to b-1 do ch1:=concat(ch1,chr(ord('A')+k-10));

end;end;function recherche(n:string;ch1:ch):boolean;var

i:integer;begin

i:=0;repeat

i:=i+1;until (pos(upcase(n[i]),ch1)=0) or (i > length(n));if i > length(n) then recherche:=trueelse recherche:=false;

end;procedure saisie_ch(var n : string);var

ch1:ch;begin

Base(ch1,B);repeat

write('donner un nombre dans la base :');readln(n);

until Recherche(n,ch1);end;

function convert(c:char;b:byte):ch0;var j,x,e,r:integer;

v:string[1];beginif c in ['0'..'9'] then val(c,x,e)

else x:=ord(upcase(c))-ord('A')+10;

if b=8 then beginu:='000';j:=3;endelsebeginu:='0000';j:=4;end;

repeatr:=x mod 2;str(r,v);u[j]:=v[1];j:=j-1;x:=x div 2;until x=0;

© Pro

f.Abd

elkad

er B

arra

j

Page 87: Exercices pascal tous les chapitres

87

convert:=u;end;

function conversion (n:string):string;

var i:integer;beginph:='';for i:=1 to length(n) doph:=concat(ph,convert(n[i],b));conversion:=ph;end;

beginsaisie_base(b);Saisie_ch(n);

write(conversion(n));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 88: Exercices pascal tous les chapitres

88

Les Algorithme d’approximationCalcul de valeurs approchées de constantes connues

Exercice -1-La racine carrée approchée d’un nombre réel R par la méthode de Newton, définit de la façonsuivante : U0 = R Un+1 = (Un+ R / Un) / 2

Cette suite converge vers R le calcul est arrêté lorsque R - Un2 < e, où e est un réel positif

saisi au clavier.uses wincrt;vare:real;R:real;Procedure saisie_r(var R :real);beginrepeatWrite('Donner un real > 0 :');readln(R);until R > 0;end;

Procedure saisie_e(var e : real);beginrepeatWrite('Donner e dans[0..0,1] :');readln(e);until (e>0) and (e <=0.1);end;

function racine:real;varU0,U:real;beginU0:=R;RepeatU:=(U0 + R/U0)/2;U0:=U;until abs(R-sqr(U)) < e;racine:=U;end;beginSaisie_r(r);saisie_e(e);writeln(racine);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 89: Exercices pascal tous les chapitres

89

Exercice -2-

Calculer la racine cubique d’un nombre réel R en utilisant la suite convergente définie par : U0 = 1

)(

212

3

1

UUU

n

Rnn

Cette suite converge vers 3 R le calcul s’arrête lorsque enR U )( 13

, où e est un réel positif

saisi au clavier.

uses wincrt;vare:real;R:real;Procedure saisie_r(var R :real);beginrepeatWrite('Donner un real > 0 :');readln(R);until R > 0;end;

Procedure saisie_e(var e : real);beginrepeatWrite('Donner e dans[0..0,1] :');readln(e);until (e>0) and (e <=0.1);end;

function racine:real;varU0,U:real;beginU0:=R;RepeatU:=(2*U0 + R/sqr(U0))/3;U0:=U;until abs(R-sqr(U)*u)< e;racine:=U;end;beginSaisie_r(r);saisie_e(e);writeln(racine);end.

© Pro

f.Abd

elkad

er B

arra

j

Page 90: Exercices pascal tous les chapitres

90

1) Algorithme0) Début Fonction Pi (E : Réel) : Réel1) I …2) S2 …3) Répéter

S1 S 2S2 ……..I I + 1

Jusqu’à …4) Pi …5) Fin

Exercice -3-Soit l’expression mathématique suivante :

...*12

2*12

2*.......*98*

78*

76*

56*

54*

34*

32*

12

2

i

i

i

i

Calculer Pi en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égale à e, où e est unréel positif saisi au clavier.La dernière somme calculée est une valeur approchée de Pi.uses wincrt ;vare:real ;procedure saisie (var e:real );beginrepeatwrite ('donner e dans [0..0,1] :') ;readln(e);until(e>0) and (e <=0.1) ;end;function pi(e :real):real ;vars1,s2 :real ;i:longint ;begini:=1;s2:=1;repeats1:=s2;if i mod 2=0 then s2:=s2*(i/(i+1))else s2:=s2*((i+1)/i);i:=i+1;until abs(2*s2-2*s1)<=e;writeln(i);pi:=2*s2; end;beginsaisie(e);writeln(pi(0.1));writeln(pi(0.01));writeln(pi(0.001)); writeln(pi(0.0001));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 91: Exercices pascal tous les chapitres

91

Exercice -4-Soit l’expression mathématique suivante :

...1.....51

41

31

211

6

222222

n

Calculer Pi en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de Pi.uses wincrt ;vare:real ;procedure saisie (var e:real );beginrepeatwrite ('donner e dans [0..0,1] :') ;readln(e);until(e>0) and (e <=0.1) ;end;

function pi(e :real):real ;vars1,s2 :real ;i:longint ;

begini:=2;s2:=1;repeats1:=s2;s2:=s2+1/sqr(i);i:=i+1;until sqrt (6*s2)-sqrt (6*s1)<e;pi:=sqrt(6*s2);end;beginsaisie(e);writeln(pi(0.1));writeln(pi(0.01));writeln(pi(0.001));writeln(pi(0.0001));writeln(pi(0.00001));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 92: Exercices pascal tous les chapitres

92

Exercice -5-

Soit l’expression mathématique suivante : ......)12(

)1(.......91

71

51

311

4 i

i

Calculer Pi en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de Pi.uses wincrt ;vare:real ;procedure saisie (var e:real );beginrepeatwrite ('donner e dans [0..0,1] :') ;readln(e);until(e>0) and (e <=0.1) ;end;

function pi(e :real):real ;vars1,s2 :real ;i:longint ;

begini:=0;s2:=0;repeats1:=s2;if i mod 2=0 then s2:=s2+(1/(2*i+1))else s2:=s2-(1/(2*i+1));i:=i+1;until abs(4*s2-4*s1)<=e;writeln(i);pi:=4*s2;

end;beginsaisie(e);writeln(pi(0.1));writeln(pi(0.01));writeln(pi(0.001));writeln(pi(0.0001));writeln(pi(0.00001));end.

© Pro

f.Abd

elkad

er B

arra

j

Page 93: Exercices pascal tous les chapitres

93

Exercice -6-

Pour x très proche de zéro on a : ......!2

2)1(.........!6

6

!4

4

!2

21)cos(

n

x nnxxxx

Calculer cos (x) en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de cos (x).

uses wincrt;vare:real;x:real;Procedure saisie_r(var x :real);beginrepeatWrite('Donner un real > 0 :');readln(x);until x > 0;end;

Procedure saisie_e(var e : real);beginrepeatWrite('Donner e dans[0..0,1] :');readln(e);until (e>0) and (e <=0.1);end;

function fact(n:integer):real;var j:integer; F:longint;begin

F:=1;for j:=2 to n do F:=F*j;fact:=F;

end;function puis(X:real;n:integer):real;

var j:integer; S:real;begin

S:=1;for j:=1 to n do S:=S*X;puis:=S;

end;

function cos(x,e:real):real;var

i:integer;s1,s2:real;

begini :=0;s2:=0;

Repeat

s1:= s2;

if i mod 2 = 0 then s2:=s2+ puis(x,2*i)/fact(2*i)else s2:=s2- puis(x,2*i)/fact(2*i);

i := i+1;

until abs(s2-s1)<= e;cos:=s2;end;

beginSaisie_r(x);saisie_e(e);writeln(cos(x,e));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 94: Exercices pascal tous les chapitres

94

Exercice -7- Pour x très proche de zéro on a :

.....)!12(

)12()1(.........!9

9

!7

7

!5

5

!3

3

!1

1)(sin

i

x iixxxxxxs

Calculer sinus (x) en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de sinus (x).

uses wincrt;vare:real;x:real;Procedure saisie_r(var x :real);beginrepeatWrite('Donner un real > 0 :');readln(x);until x > 0;end;

Procedure saisie_e(var e : real);beginrepeatWrite('Donner e dans[0..0,1] :');readln(e);until (e>0) and (e <=0.1);end;

function fact(n:integer):real;var j:integer; F:longint;begin

F:=1;for j:=2 to n do F:=F*j;fact:=F;

end;function puis(X:real;n:integer):real;

var j:integer; S:real;begin

S:=1;for j:=1 to n do S:=S*X;puis:=S;

end;

function sin(x:real):real;var

i:integer;s1,s2:real;

begini :=0;s2:=0;

Repeat

s1:= s2;

if i mod 2 = 0 then s2:=s2+puis(x,2*i+1)/fact(2*i+1) else s2:=s2-puis(x,2*i+1)/fact(2*i+1);

i := i+1;until abs(s2-s1)<= e;sin:=s2;end;

beginSaisie_r(x);saisie_e(e);writeln(sin(x));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 95: Exercices pascal tous les chapitres

95

Exercice -8-

Pour x un réel ....!

.........!4

4

!3

3

!2

2

!11

ixixxxxxe

Calculer ex en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de ex.

uses wincrt;vare:real;x:real;Procedure saisie_r(var x :real);beginrepeatWrite('Donner un real > 0 :');readln(x);until x > 0;end;

Procedure saisie_e(var e : real);beginrepeatWrite('Donner e dans[0..0,1] :');readln(e);until (e>0) and (e <=0.1);end;

function fact(n:integer):real;var j:integer; F:longint;begin

F:=1;for j:=2 to n do F:=F*j;fact:=F;

end;function puis(X:real;n:integer):real;

var j:integer; S:real;begin

S:=1;for j:=1 to n do S:=S*X;puis:=S;

end;

function ex(x:real):real;var

i:integer;s1,s2:real;

begini :=1;s2:=1;

Repeat

s1:= s2;

s2:=s2+ puis(x,i)/fact(i);i := i+1;

until abs(s2-s1)<= e;ex:=s2;end;

beginSaisie_r(x);saisie_e(e);writeln(ex(x));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 96: Exercices pascal tous les chapitres

96

Exercice -9-

Pour x un réel dans]-1..1[ )(1

)1log( )1( 1nxn

nx n

Calculer log (1+x) en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de log (1+x).

uses wincrt;var

e,x:real;procedure saisie_x(var x:real);begin

repeatwrite('x='); readln(x);

until (x >-1) and (x < 1);end;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function puissance(x:real;n:integer):real;var

j:integer;p:real;

beginp:=1;for j:=1 to n do p:=p*x;puissance:=p;

end;

function log(E,X:real):real;var i:integer;s2,s1:real;begini:=1;s2:=0;repeats1:=s2;if (i-1) mod 2=0 then s2:=s2+puissance(x,i)/i

else s2:=s2-puissance(x,i)/i;i:=i+1;until abs(s2-s1)<e;

log:=s2;end;begin

Saisie_X(X);Saisie_E(E);writeln(log(e,x));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 97: Exercices pascal tous les chapitres

97

Exercice -10-

Pour x un réel dans]-1..1[ )(1

)1log( nxn

nx

Calculer log (1-x) en utilisant la formule ci-dessus.Le calcul s’arrête quand la différence entre deux termes consécutifs devient inférieure ou égaleà e, où e est un réel positif saisi au clavier.La dernière somme calculée est une valeur approchée de log (1-x).

uses wincrt;var

e,x:real;procedure saisie_x(var x:real);begin

repeatwrite('x='); readln(x);

until (x >-1) and (x < 1);end;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function puissance(x:real;n:integer):real;var

j:integer;p:real;

beginp:=1;for j:=1 to n do p:=p*x;puissance:=p;

end;

function log(E,X:real):real;var i:integer;s2,s1:real;begini:=1;s2:=0;repeats1:=s2;if (i+1) mod 2=0 then s2:=s2+puissance(x,i)/i

else s2:=s2-puissance(x,i)/i;i:=i+1;until abs(s2-s1)<e;

log:=-s2;end;begin

Saisie_X(X);Saisie_E(E);writeln(log(e,x));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 98: Exercices pascal tous les chapitres

98

Recherche du point fixe d’une fonctionEn mathématiques, pour une application ƒ d’un ensemble E, un élément x de E est un point fixede f si f(x) = x.

Résoudre l’équation cos(x) = x1ère Méthode :

uses wincrt;var

e,x:real;procedure saisie_x(var x:real);begin

repeatwrite('x='); readln(x);

until (x >-1) and (x < 1);end;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function f(x:real):real;beginf:=cos(x);end;

procedure pt_fixe(e:real);var i:longint;s2,s1:real;begini:=0;s2:=0;repeats1:=s2;s2:=f(s2);i:=i+1;until abs(s2-s1)<e;writeln('le point fixe est: ',s2,'trouvé aprés ',i,' itération.');end;begin

Saisie_E(E);pt_fixe(e);;

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 99: Exercices pascal tous les chapitres

99

2ème Méthode : Cos(x) - x = 0

uses wincrt;var

a,b,m,e,x:real;procedure saisie_x(var x:real);begin

repeatwrite('x='); readln(x);

until (x >-1) and (x < 1);end;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function f(x:real):real;beginf:=cos(x)-x;end;

function pt_fixe(a,b,e:real):real;beginm:=(a+b)/2;while ((a-b)<e) and (f(m)<>0) dobeginif f(a)*f(m)>0 then a:=m

else b:=m;m:=(a+b)/2;end;pt_fixe:=m;end;begin

Saisie_E(E);writeln( pt_fixe(0,1,e));

end. © Pro

f.Abd

elkad

er B

arra

j

Page 100: Exercices pascal tous les chapitres

100

Résoudre l’équation √x+11ère Méthode :uses wincrt;var

e,x:real;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function f(x:real):real;beginf:=sqrt(x+1);end;

procedure pt_fixe(e:real);var i:longint;s2,s1:real;begini:=0;s2:=0;repeats1:=s2;s2:=f(s2);i:=i+1;until abs(s2-s1)<e;writeln('le point fixe est: ',s2,'trouvé aprés ',i,' itération.');end;begin

Saisie_E(E);pt_fixe(e);;

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 101: Exercices pascal tous les chapitres

101

2ème Méthode :uses wincrt;var

a,b,m,e,x:real;procedure saisie_x(var x:real);begin

repeatwrite('x='); readln(x);

until (x >-1) and (x < 1);end;procedure saisie_E(var E:real);var

ch:string[17];begin

repeatwrite('E='); readln(E);Str(E,ch);

until pos('1.0000000000E-',ch) <> 0;end;

function f(x:real):real;beginf:=sqrt(x+1)-x;end;

function pt_fixe(a,b,e:real):real;beginm:=(a+b)/2;while ((a-b)<e) and (f(m)<>0) dobeginif f(a)*f(m)>0 then a:=m

else b:=m;m:=(a+b)/2;end;pt_fixe:=m;end;begin

Saisie_E(E);writeln( pt_fixe(1,2,e));

end. © Pro

f.Abd

elkad

er B

arra

j

Page 102: Exercices pascal tous les chapitres

102

Calcul d’airesEn mathématiques,

b

adxxf )( d’une fonction continue croissante et positive dans l’intervalle [a,

b] est la valeur de l’air du domaine délimité par l’axe des abscisses et la courbe représentativede la fonction.

Méthode de rectangle :Sur chaque intervalle [ai, ai+1] est représenté un rectangle de largeur ai – ai+1 et de hauteur :

Calculer l’air de x sur l’intervalle [a, b] en utilisant la méthode des rectangles :

1ère Méthode :uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air (a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=a;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;

beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

1ère Méthode 2ème Méthode 3ème Méthode

© Pro

f.Abd

elkad

er B

arra

j

Page 103: Exercices pascal tous les chapitres

103

2ème Méthode :uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air (a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=a+h;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

3ème Méthode :uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air (a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=(a+h)/2;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

© Pro

f.Abd

elkad

er B

arra

j

Page 104: Exercices pascal tous les chapitres

104

Calculer l’air de x sur l’intervalle [a, b] en utilisant la méthode des trapèzes :uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air(a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=a;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air(a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=a+h;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

uses wincrt;var a,b,x:real;

n:integer;

function f(x:real):real;beginf:=sqrt(x);end;

function air(a,b:real;n:integer):real;var h,s:real;

i:integer;beginh:=(b-a)/n;s:=0;x:=(a+h)/2;for i:= 1 to n dobegins:=s+f(x)*h;x:=x+h;end;air:=s;end;beginwrite('A= '); readln(a);

repeatwrite('B= '); readln(b);until b>a;

repeatwrite('N= '); readln(n);until n>0;

writeln(air(a,b,n));

end.

© Pro

f.Abd

elkad

er B

arra

j