Exercice 1. La pyramide des chiffres Un nombre est appelé pyramide de chiffres si : Le plus grand chiffre, apparait une seule fois, et au milieu du nombre. En partant du milieu, les chiffres de droite sont ordonnés dans le sens décroissant. De même pour les chiffres de gauche Ecrire un programme qui permet de saisir un entier de n chiffres (n impair et >3) puis de vérifier si ce nombre est une pyramide de chiffres. Exemple1. Nombre = 12854 Le programme affiche 12854 est une pyramide de chiffres Exemple2. Nombre = 12734 Le programme affiche 12734 n’est pas une pyramide de chiffres program pyramide; uses wincrt; var n:longint; procedure saisie (var n:longint); var ch:string; begin repeat writeln('Donner un entier :'); readln(n); str(n,ch); until (length(ch)>3) and (length(ch) mod 2 = 1); end; function verif (n:longint): boolean; var pm,i:integer; ch:string; v1,v2:boolean; begin str(n,ch); pm:=length(ch) div 2 +1; v1:= true; i:=0; repeat i:=i+1; v1:=ch[i]<ch[i+1]; until (i=pm-1) or (v1=false); v2:=true; infoatlps.jimdo.com 1 i:=length(ch)+1; repeat i:=i-1; v2:=ch[i]<ch[i-1]; until(i=pm+1) or (v2=false); verif:=v1 and v2; end; begin saisie(n); if verif(n) then write(n,' est une pyramide de chiffres') else write(n,' n''est pas une pyramide de chiffres'); end. Exercice 2. NB : un entier est dit sublime si la somme de ses diviseurs, y compris lui-même, et le nombre de ses diviseurs sont deux nombres parfaits. Un entier est dit parfait s’il est égal à la somme de ses diviseurs sauf lui-même. Exemple : Pour n=12 La somme des diviseurs de 12 est sd=1+2+3+4+6+12=28 Le nombre des diviseurs de 12 est nd=1,2,3,4,6,12=6 28 et 6 sont les deux parfaits, donc 12 est un nombre sublime Ecrire un programme qui permet de chercher et d’afficher tous les nombres sublimes inférieurs ou égaux à 1000. program sublime; uses wincrt; var n,nd,sd:integer; procedure diviseur (n:integer; var nd,sd:integer); var i:integer; begin nd:=2; sd:=n+1; for i:=2 to n div 2 do if n mod i =0 then begin nd:=nd+1; sd:=sd+i; infoatlps.jimdo.com 2 end; end; function parfait(n:integer):boolean; var s,i:integer; begin s:=1; for i:=2 to n div 2 do if n mod i =0 then s:=s+i; parfait:=s=n; end; begin for n:=1 to 1000 do begin diviseur(n,nd,sd); if parfait(nd) and parfait(sd) then writeln(n); end; end. Exercice 3. Pour qu’un nombre soit divisible par 11, il faut et il suffit que la différence entre la somme de ses chiffres de rang impair et la somme de ses chiffres de rang pair soit égal à 0 ou 11. Exemple : 18282 est divisible par 11 car (1+2+2)-(8+8)=5-16=-11 qui est divisible par 11 En fait 18282=11*1662 Ecrire un programme qui permet de saisir un entier n>11 puis de verifier et d’afficher s’il est divisible par 11 ou non. program div11; uses wincrt; var n:longint; procedure saisie(var n:longint); begin repeat writeln('Saisir un entier :'); readln(n); until n>11; end; infoatlps.jimdo.com 3 function divis11(n:longint):boolean; var ch:string; s1,s2,e,x,d,i:integer; begin repeat str(n,ch); s1:=0; s2:=0; for i:=1 to length(ch) do begin val(ch[i],x,e); if i mod 2 = 1 then s1:=s1+x else s2:=s2+x; end; d:=abs(s1-s2); n:=d; until (d<=11); divis11:=(d=0) or (d=11); end; begin saisie(n); if divis11(n) then write(n,' est divisible par 11') else write(n,' n''est pas divisible par 1'); end. Exercice 4. Un entier naturel ayant un nombre pair de chiffres comme par exemple n1n2n3n4n5n6 est dit ordonné si la différence entre l’entier n1n2n3 et n4n5n6 est égale à 1 ou -1. (on suppose que n1 est non nul). Un entier carré parfait s’il est le carré d’un entier parfait. Il est dit ordonné parfait s’il est en même temps carré parfait et ordonné. Exemple : 8281 est un entier ordonné parfait car 82-81=1 et 8281=91² Ecrire un programme qui cherche et affiche tous les entiers ordonnés parfaits de chiffres (n étant un entier naturel pair non nul inférieur ou égal à 8) program ordparfait; uses wincrt; var infoatlps.jimdo.com 4 n:integer; k:longint; procedure saisie(var n: integer); begin repeat writeln('saisir le nombre de chiffre:'); readln(n); until n in [2,4,6,8]; end; procedure affiche (k:longint); var m,x,y:longint; ch:string; l,e:integer; begin for m:=k to k*10-1 do begin str(m,ch); l:=length(ch) div 2; val(copy(ch,1,l),x,e); val(copy(ch,l+1,l),y,e); if (abs(x-y)=1) and (frac(sqrt(m))=0) then writeln(m); end; end; begin saisie(n); case n of 2:k:=10; 4:k:=1000; 6:k:=100000; 8:k:=10000000; end; affiche(k); end. infoatlps.jimdo.com 5