Programme en pascal

[Résolu/Fermé]
Signaler
-
 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.

1 réponse

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
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...
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

elle doit remplir un tableau T de taille inconnue par des entiers premiers palindromes compris entre x et y ( x et y sont deux entiers saisis au clavier) et l'afficher
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
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;
que signifie inc (i) ???
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 860
Ça incrémente i, c'est pareil que faire i+=1, ou encore i:=i+1, dans d'autres langages on aurait i++
Merciiiiiiiiiiiiii beaucouuuup ^^