ecrivez un programme qui permet d'identifier les entiers premiers circulaires saisis dans un tableau de taille n. 311 est un premier circulaire car toutes les
combinaisons à 2 ou 3 de ses chiffres sont premiers.
Pouvez-vous me dire ou est la faute dan mon travail?
program ex1;
uses wincrt;
type
tab1= array [1..30] of integer;
tab2= array [1..6] of integer;
var
c,n,p,i,e,j: integer;
Tp: array [1..12] of integer;
T: array [1..30] of integer;
ch,ch2,ch1,ch3: string;
test: boolean;
procedure saisie (var n: integer);
begin
repeat
writeln ('donner n entre 5 et 30');
readln (n);
until n in [5..30];
end;
procedure remplissage (n: integer; var T: tab1);
begin
for i:=1 to n do
repeat
writeln ('donner T[',i,'] entier > 0 et de 3 chiffres');
readln (T[i]);
until (T[i] > 100) and (T[i] < 999);
end;
function verif (c: integer): boolean;
begin
i:= 0; p:=0;
test:= false;
repeat
i:= i+1;
p:= c mod i;
until
(p<>1) or (i = c div 2);
if p<>1 then
test:= false
else
test:= true;
verif:= test;
end;
procedure scrambler (c: integer; var Tp: tab2);
begin
str (c,ch);
ch1:= copy (ch,1,1);
ch2:= copy (ch,2,1);
ch3:= copy (ch,3,1);
val(ch1+ch3+ch2,Tp[1],e);
val(ch3+ch2+ch1,Tp[2],e);
val(ch3+ch1+ch2,Tp[3],e);
val(ch2+ch1+ch3,Tp[4],e);
val(ch2+ch3+ch1,Tp[5],e);
val(ch,Tp[6],e);
val(ch1+ch2,Tp[7],e);
val(ch2+ch1,Tp[8],e);
val(ch1+ch3,Tp[9],e);
val(ch3+ch1,Tp[10],e);
val(ch2+ch3,Tp[11],e);
val(ch3+ch2,Tp[12],e);
end;
begin
saisie (n);
remplissage (n,T);
for i:= 1 to n do
begin
scrambler (T[i],Tp);
j:=0;
repeat
j:=j+1;
until (not verif (T[j])) or (j=6);
if test = false then
T[i]:= 0;
end;
writeln ('les nombre premiers circulaires sont');
for i:=1 to n do
write(T[i]);
end.
Message édité par mehdi1456 le 20-12-2015 à 12:22:07