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.
A voir également:
- Programme en pascal
- Turbo pascal - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Dev pascal - Télécharger - Édition & Programmation
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
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...
À 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...
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;