Pregunta: | 50023 - CANTIDAD DE VOCALES EN UNA CADENA |
Autor: | david alujes |
necesito saber como contar la cantidad de vocales que tiene una cadena,y la cantidad de cada vocal |
Respuesta: | Chaco Chaquito |
Aqui esta, sufri mucho por esto...XD
.model small .stack .data pide db 'Teclea una palabra',10,13,'$' cad db 80 dup(' '),'$' msg1 db 10,13,'a: $' msg2 db 10,13,'e: $' msg3 db 10,13,'i: $' msg4 db 10,13,'o: $' msg5 db 10,13,'u: $' Aa db 0 Ee db 0 Ii db 0 Oo db 0 Uu db 0 .code mov ax,@data mov ds,ax mov ah,00h mov al,03h int 10h lea dx,pide mov ah,09h int 21h lea si,cad mov cx,0 lee: mov ah,01h int 21h cmp al,'$' je termina mov [si],al inc si inc cx jmp lee termina: lea si,cad mov bl,0 ciclo: mov al,[si] mov dl,al cmp dl,'a' je sumaAs cmp dl,'A' je SumaAs cmp dl,'e' je SumaEs cmp dl,'E' je SumaEs cmp dl,'i' je SumaIs cmp dl,'I' je SumaIs cmp dl,'o' je SumaOs cmp dl,'O' je SumaOs cmp dl,'u' je SumaUs cmp dl,'U' je SumaUs cmp dl,'$' je FinCiclo Sigue: inc si jmp ciclo SumaAs: inc Aa jmp Sigue SumaEs: inc Ee jmp Sigue SumaIs: inc Ii jmp Sigue SumaOs: inc Oo jmp Sigue SumaUs: inc Uu jmp Sigue FinCiclo: lea dx,msg1 mov ah,09h int 21h mov dl,Aa add dl,30h mov ah,02h int 21h lea dx,msg2 mov ah,09h int 21h mov dl,Ee add dl,30h mov ah,02h int 21h lea dx,msg3 mov ah,09h int 21h mov dl,Ii add dl,30h mov ah,02h int 21h lea dx,msg4 mov ah,09h int 21h mov dl,Oo add dl,30h mov ah,02h int 21h lea dx,msg5 mov ah,09h int 21h mov dl,Uu add dl,30h mov ah,02h int 21h mov ah,4ch int 21h end |
Respuesta: | Francisco Carrillo |
Bueno, pues lo primero que tienes que hacer es contar con cinco variables declaradas, cada una funcionará como acumulador de cada letra. Luego incializa dichas variables a 0 e inicias un ciclo donde vayas leyendo caracter por caracter la cadena mediante el uso del registro di o si(por ejemplo mov al, cadena[si]), previamente incializado en cero y compares si cadena[si] es igual a 'a' o a 'A'(
ciclo_cuenta_vocales: ... ... ... cmp al, 'a' je sumaAs cmp al, 'A' je sumaAs cmp al, 'e' je sumaEs . .. .. .. cmp al, '$' je salir sumaAS: inc cuentaAs .... .... inc di jmp ciclo_cuenta_vocales salir: ), luego si es cierto das un salto hacia una etiqueta que sea para incrementar el contador de a's(ver el ejemplo anterior), luego despues de de las comparaciones de las a`s pones la comparaciones y los saltos correspondientes a la 'e' o 'E' y haces lo mismo con todas las demás vocales , y al final pones un salto hacia el inicio del ciclo.El ciclo terminará cuando el caracter sea el que predefinas(en el ejemplo es el '$') el cual lo tendrás que insertar en la cadena al final ya sea al declararla o antes de inciar el ciclo. Espero y la informacion te haya servido de algo |