Programme en pascal
Résolu
GoSub
-
GoSub -
GoSub -
j'ai besoin d'aide , pouvez vous me corriger cet programme , la procédure remplissage n'est pas fonctionnelle et je ne sais pas comment faire pou qu'elle soit fonctionnelle
Merci d'avance
program ex;
uses wincrt;
type
tab=array[1..100]of integer;
var
t:tab;
i,a,b:integer;
function palindrome(x:integer):boolean;
var
inv,ch:string;
i:integer;
begin
str(x,ch);
inv:='';
for i:=1 to length(ch) do
inv:=ch[i] + inv ;
if (ch=inv) then
palindrome:=true
else
palindrome:=false;
end;
function premier (y:integer):boolean;
var
divi,i:integer;
begin
divi:=0;
for i:=1 to y div 2 do
if (y mod i = 0) then
divi:=divi +1;
if divi=1 then
premier:=true
else
premier:=false;
end;
procedure saisie(var m,n:integer);
begin
repeat
writeln('Donner Un entier supérieur à 10');
readln(m);
writeln('Donner un autre entier supérieur au précedent');
readln(n);
until(m>10)and(n>m);
end;
procedure remplissage (var t:tab;x,y:integer;var i:integer);
var
c:integer;
begin
i:=1;
for c:=x to y do
begin
while (palindrome(c)) and (premier(c))and (i<y) do
begin
T[i]:=c;
end;
i:=i+1;
end;
end;
procedure affichage(t:tab;i:integer);
var
c:integer;
begin
for c:=1 to i do
write(t[c],' | ');
end;
BEGIN
saisie(a,b);
remplissage(t,a,b,i);
affichage(t,i);
END.
Merci d'avance
program ex;
uses wincrt;
type
tab=array[1..100]of integer;
var
t:tab;
i,a,b:integer;
function palindrome(x:integer):boolean;
var
inv,ch:string;
i:integer;
begin
str(x,ch);
inv:='';
for i:=1 to length(ch) do
inv:=ch[i] + inv ;
if (ch=inv) then
palindrome:=true
else
palindrome:=false;
end;
function premier (y:integer):boolean;
var
divi,i:integer;
begin
divi:=0;
for i:=1 to y div 2 do
if (y mod i = 0) then
divi:=divi +1;
if divi=1 then
premier:=true
else
premier:=false;
end;
procedure saisie(var m,n:integer);
begin
repeat
writeln('Donner Un entier supérieur à 10');
readln(m);
writeln('Donner un autre entier supérieur au précedent');
readln(n);
until(m>10)and(n>m);
end;
procedure remplissage (var t:tab;x,y:integer;var i:integer);
var
c:integer;
begin
i:=1;
for c:=x to y do
begin
while (palindrome(c)) and (premier(c))and (i<y) do
begin
T[i]:=c;
end;
i:=i+1;
end;
end;
procedure affichage(t:tab;i:integer);
var
c:integer;
begin
for c:=1 to i do
write(t[c],' | ');
end;
BEGIN
saisie(a,b);
remplissage(t,a,b,i);
affichage(t,i);
END.
1 réponse
-
Et qu'est-ce que c'était censé faire comme remplissage ?
À mon avis ta condition (palindrome(c)) and (premier(c)) and (i<y) va quasiment toujours renvoyer false, ta boucle est donc arrêtée et le remplissage inexistant.
Remarque : ta fonction "premier" peut-être nettement améliorée ! Si tu calcules y=1000000 par exemple, tu vas faire une boucle sans t'arrêter entre 1 et 500000, alors que dès que tu as essayé i=2, tu savais que de toute façon y ne serait pas premier...-
-
-
-
C'est principalement l'utilisation de ton "i" qui est bancale, en particulier parce qu'il ne devrait pas être incrémenté dans la boucle "for", mais dans la boucle "while" (qui devrait être un if)
procedure remplissage(var t:tab; x,y:integer; var i:integer); var c:integer; begin i:=0; for c:=x to y do if palindrome(c) and premier(c) then begin inc(i); t[i]:=c; end; end; -
-