1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| PROGRAM Compt_NombrPremiers_Jumeaux;
USES crt;
VAR aux : string;
borninf, bornsup, taille : integer;
TabJum : array of integer; // déclaration d'un tableau dynamique
rep : char;
FUNCTION fixborninf(aux : string): integer; //Saisir un naturel > 2
Var auxconv, code : integer;
Begin
val(aux,auxconv,code);
while((code <> 0)or((code = 0)and(auxconv <= 2)))do
begin
writeln();
write('Saisie Invalide - Entrez un ENTIER NATUREL plus grand que 2 : ');
readln(aux);
val(aux,auxconv,code);
end;
if((code = 0)and(auxconv > 2))then fixborninf := auxconv;
End;
FUNCTION fixbornsup(aux : string): integer; //Saisir un naturel > borne inférieure
Var auxconv, code : integer;
Begin
val(aux,auxconv,code);
while((code <> 0)or((code = 0)and(auxconv <= borninf)))do
begin
writeln();
write('Saisie Invalide - Entrez un ENTIER NATUREL plus grand que ', borninf, ' : ');
readln(aux);
val(aux,auxconv,code);
end;
if((code = 0)and(auxconv > borninf))then fixbornsup := auxconv;
End;
FUNCTION comptprem(borninf,bornsup : integer):integer; // Fonction OK
var i, d, compteur : integer; // d pour diviseur
begin
compteur := 0;
for i := borninf to bornsup do
begin
d := 2;
while(((i MOD d)<>0)and(d<=sqrt(i)))do d := d + 1;
if((i MOD d)<>0)
then compteur := compteur + 1; // ce nombre est premier
end;
comptprem := compteur;
end;
FUNCTION testprem(nombre : integer):integer; // Fonction OK
var i, d, code : integer; // d pour diviseur
begin
for i := borninf to bornsup do
begin
d := 2;
while(((i MOD d)<>0)and(d<=sqrt(i)))do d := d + 1;
if((i MOD d)<>0)
then code := 1; // ce nombre est premier
end;
testprem := code;
end;
PROCEDURE premjum(borninf,bornsup,taille : integer);
Var i, j, d, code : integer; // d pour diviseur
TabJum : array of integer;// déclaration d'un tableau dynamique
Begin
SetLength(TabJum, taille); // définition de la taille du tableau
//remplissage du tableau
for i := 0 to (taille - 1)do
begin
for j := borninf to bornsup do
begin
if(testprem(j)= 1)
then (TabJum[i]):= testprem(j);
end;
end;
//recherche et affichage des nombres premiers jumeaux
for i:=0 to (taille-1) do
begin
if((TabJum[i] - TabJum[i+1]) = -2)
then write(' ','( ', TabJum[i], ' ; ', TabJum[i+1], ' )');
end;
SetLength(TabJum, 0); // libération de la mémoire allouée
End;
BEGIN
Repeat
clrscr;
writeln();
writeln(' ************************************************************');
writeln(' * RECHERCHE DE NOMBRES PREMIERS JUMEAUX DANS UN INTERVALLE *');
writeln(' ************************************************************');
writeln();
write(' Entrez la Borne Inferieure : ');
readln(aux);
borninf := fixborninf(aux);
writeln();
writeln();
write(' Entrez la Borne Superieure : ');
readln(aux);
bornsup := fixbornsup(aux);
taille := comptprem(borninf,bornsup);
clrscr;
writeln();
writeln(' ************************************************************');
writeln(' * RECHERCHE DE NOMBRES PREMIERS JUMEAUX DANS UN INTERVALLE *');
writeln(' ************************************************************');
writeln();
writeln();
writeln();
writeln(' ***** Affichage du Resultat *****');
writeln();
writeln(' == Borne Inferieure : ', borninf);
writeln();
writeln(' == Borne Superieure : ', bornsup);
writeln();
writeln();
write(' == Effectif de Nombres Premiers : ', taille);
writeln();
writeln();
writeln(' == Liste des Couples de Nombres Premiers Jumeaux entre ', borninf, ' et ', bornsup, ' :');
writeln();
writeln();
//recherche et affichge des nombres premiers jumeaux
premjum(borninf,bornsup,taille);
writeln();
writeln();
write('Autre recherche (O/N) ? : ');
readln(rep);
Until(rep='N')or(rep='n');
END. |
Partager