Se programme affiche des debordements

RAKOTO -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'ai tenté de compiler se programme sous Turbo pascal mais le résultat n'est pas satisfaisant.Je pense que le probleme vient par la disposition de mes boucles ,je suis pas vraiment sûre Que dois-je encore retoucher.
Voilà le programme et ma correction.

Vérifier si le mot tapé est un palindrome.
Un palindrome est un mot qui reste le même quand t'-on fait sa lecture de la gauche à la droite ou de la droite à la gauche (radar, rotor, été, kayak, ici).Cela s'applique aussi pour une phrase (élu par cette crapule). Alors la condition est la suivante: si le mot tapé n'est pas un palindrome afficher la position du premier caractère différent.

program palindrom;
uses crt;
var mot:string[30];
i,j,a:integer;
b,temp,c:real;
begin
clrscr;
write('donnez un mot: ');
readln(mot);
b:=length(mot);
c:=b/2;
for i:=0 to 2 do begin
for j:=5 downto 2 do begin
if(mot[i]=mot[j]) then
temp:=temp+1;
end;
end;
if(temp<>0) then
write(mot,' est un palindrome')
else
write(mot,' pas un palindrome');
readln;
end.

A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
1) Les variables 'a' et 'c' ne sont jamais utilisées.
2) Il n'y a aucune raison d'avoir 'b', 'c' et 'temp' réels.
3) Pourquoi 'i' ne va-t-il que jusqu'à 2 dans la première boucle ?
4) Attention, si 'i' est égal à 0, mot[i]=mot[0]=length(mot) !!!
5) Pourquoi imposer '5' et '2' dans la deuxième boucle ?
6) Est-il vraiment nécessaire d'avoir deux boucles imbriquées ?
7) Tu incrémentes 'temp', pourquoi ? Quelle est sa valeur initiale ?
8) Pourquoi ne pas t'arrêter dès que tu trouves deux caractères différents ?
9) Ne devais tu pas afficher la position du premier caractère différent ?La confiance n'exclut pas le contrôle
1