Programme en pascal

Résolu/Fermé
GoSub - 25 sept. 2012 à 21:36
 GoSub - 25 sept. 2012 à 23:05
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.
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
25 sept. 2012 à 22:15
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
j'ai beaucoup essayé de régler les boucles de la procédure remplissage mais j'ai pas pu pouvais tu me corriger la procédure ????
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
25 sept. 2012 à 22:35
Syntaxiquement elle est correcte cette procédure. donc s'il y a un problème c'est qu'elle ne fait pas ce que tu veux, mais comme on ne sait pas ce que tu voudrais qu'elle fasse, comment trouver le problème ?
0
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
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
25 sept. 2012 à 22:56
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;
0
que signifie inc (i) ???
0