Exercice 1. La pyramide des chiffres Un nombre est appelé

publicité
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
Téléchargement