Palindrome

Signaler
Messages postés
17
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
4 avril 2006
-
Messages postés
17
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
4 avril 2006
-
Bonjour,

Je désire faire un palindrome qui, demande d'entrer au clavier une chaine de caractere et indique si c'est un palindrome ou non et si oui affiche la symetrie.

EX: kayak => palindrome => symetrie: kay

Le probleme vient que je voudrais bien convertir les minuscules et les "é, è.." en majuscule.
Pour l'affichage de la symetrie, probleme egalement.

Si vous pouvez m'aider ?

Merci

3 réponses

Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour RootASM,



Un exemple de traitement de palindrome existe sur ce site

http://www.asmfr.com/code.aspx?ID=15273



Il te faut déterminer la longueur de ta chaine et comparer le début
avec la fin et progresser de gauche à droite dans un cas et de droite à
gauche dans l'autre.

La conversion minuscule majuscule ne pose pas de pb particulier:

Si la valeur hexa du code est comprise entre 61h et 7Ah alors il suffit
de retirer 20h ("A"=41h, "a"=61h). Pour les é, è, ê et autre caractères
accentués, je ne vois que des test au cas par cas ou de passer par une
table du type:



code ascii caractère caractère de remplacement

0
vide ?

"
"
"

41
A
A

42
B
B

"
"
"

5A
Z
Z

61
a
A

62
b
B

7A
z
Z

C9
É
E

E9
é
E



Bonne prog
Messages postés
17
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
4 avril 2006

Salut,

Voila ce que j ai commencer a faire. Pour l'instant il ne regarde que si c'est des minuscules et il les transforme

.MODEL SMALL
.STACK
.DATA

carintro db "Veuillez entrer la chaine de caractères à tester : $"
carjuste DB 0ah, 0dh, "La chaine que vous avez entré est un palindrome !$"
carfaux DB 0ah, 0dh, "La chaine que vous avez entré n'est pas un palindrome !$"
recommencer db 'Appuyer sur ENTER pour recommencer ou sur ESC pour arreter$'
vecteur DB 250, ?, 251 dup ('$')


.CODE


MOV AX, @DATA
MOV DS, AX

MOV AX, 0900h
LEA DX, carintro
INT 21h
mov bx, 0
main:
mov ah, 01h
int 21h


cmp al, 61h
jb vec
cmp al, 7ah
ja vec


sub al, 20h
vec:
mov vecteur[bx], al
inc bx
jmp main


mov dx, bx
mov bx, 0
palin :
cmp bx, dx
jae fin1
cmp vecteur[bx], 20h
je bx_space
cmp vecteur[dx], 20h
je dx_space
mov cx, vecteur[dx]
cmp vecteur[bx], cx
jne fin2
dec dx
inc bx
jmp palin

bx_space :
inc si
jmp palin

dx_space :
dec di
jmp palin


fin1 :
mov ax, 0900h ; affichage du message de succès
lea dx, carjuste
int 21h
mov ax, 0900h
lea dx, vecteur
int 21h
jmp RECOMMENCE

fin2 :
mov ax, 0900h ; affichage du message d'échec
lea dx, carfaux
int 21h


RECOMMENCE:


MOV dh,22
MOV dl,10
MOV ah,02h
INT 10h


MOV dx,offset recommencer
PUSh AX
MOV AX, 0900h
INT 21h
POP AX


MOV ah,1
INT 21h
CMP al,1Bh

quit :
mov ax, 4c00h
int 21h

end
Messages postés
17
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
4 avril 2006

Resalut,


J'aurais aimer savoir si en utilisant la fonction "0ah" pour la saisie des caracteres, j'ai possibilité de comparer chaque lettre entrer par l'utilisateur pour pouvoir les transformées en majuscule si besoin est ?
Dans le Norton Guide je n'ai rien trouvé.

Merci