You are on page 1of 15

Problema 5

:
Desarrolle un programa para imprimir un intervalo de números que sean
capicúas de 3 cifras.
Se pide ingresar por teclado el valor mínimo y máximo donde deben estar los
números capicúas comprendidos en este rango.

a) Diagrama de Flujo:

.

.

c2.u2.&max). min1=min. min=min1. c1=max/100. c2=min/100. min=min%10.u2).} } }while (c2<10 & d2<10 & u2<10). printf("Ingrese el rango minimo: \n").c2. max=max%100. d2=min/10.u2). if(min1>max1) { } else { if(c2==u2 && c2!=0 && u2!=0) {printf("\n %d%d%d".d2. d2=min/10. int u1. u2=min. printf("Ingrese el rango maximo: \n"). d1=max/10. char m.min1. max1=max.&min). do { min1++.c2. max=max%10. u2=min. scanf("%d". scanf("%d". min=min%100. system("pause").c1.h> void main() { int max.d1.min.d2.b) Código en lenguaje C: #include<stdio. if (c2==u2) { printf("\n %d%d%d". min=min%10.d2.max1. } . min=min%100. u1=max. c2=min/100.

offset tex1 int 21h mov ah.'?'. if(min1>max1) { } else { if(c2==u2 && c2!=0 && u2!=0) {printf("\n %d%d%d".'Ingrese el valor maximo$' tex2 db 10. d2=min/10.} } }while (c2<10 & d2<10 & u2<10).d2. min=min%10.13. c2=min/100.else { do { min1++. offset espacio int 21h lea si.'Presione una tecla para comenzar$' inicio: mov ah.9 mov dx.13.13. min=min%100.al .maximo mov cx. min=min1. } } c) Código en lenguaje ensamblador: org 100h jmp inicio maximo db '?'.'?'.'?' minimo db '?'.13.u2).3 max: mov ah.'Ingrese el valor minimo$' tex3 db 10. u2=min.c2.'$' tex1 db 10.1 int 21h mov [si].9 mov dx.'?' espacio db 10.

offset espacio int 21h lea si.minimo mov cx.9 mov dx.1 int 21h mov [di].al inc di loop min mov ah.9 mov dx.ah je mostrar jne ultimo mostrar: mov ah. offset espacio int 21h lea di.9 mov dx.9 mov dx.9 mov dx.9 mov dx.[di] inc di inc di mov ah.maximo lea di.inc si loop max mov ah. offset espacio int 21h lea di.7 int 21h mov ah. offset espacio int 21h mov ah.3 .minimo mov al.[di] cmp al.3 min: mov ah.minimo mov cx. offset tex3 int 21h mov ah. offset tex2 int 21h mov ah.

minimo inc di add [di].1 mov bh.[si] mov al.0Ah add bl.al jbe decenas jne min2 decenas: inc si inc di mov ah.[si] mov al.[di] cmp ah.al jbe centenas jne min2 centenas: inc si inc di mov ah.minimo mov cx.[di] int 21h inc di loop min1 lea di.bl ja sor jb mostrar sor: .[di] cmp ah.2 mov dx.maximo lea di.al jbe fin1 jne min2 loop control min2: lea di.[di] cmp ah.[di] mov bl.30h cmp bh.minimo min1: mov ah.3 control: mov ah.lea si.[si] mov al.

al jbe centenas1 jne hulk centenas1: inc si inc di mov ah.[di] cmp ah.lea di.'0' inc di inc [di] mov al.3 lea si.30h cmp ah.[di] inc di mov [di].[si] mov al.al jbe decenas1 jne hulk decenas1: inc si inc di mov ah.minimo mov cx.0Ah add bl.[di] cmp ah.maximo lea di.minimo mov cx. offset espacio int 21h lea di.[di] mov bl.al jbe fin1 jne hulk .bl jae fin un: cmp ah.9 mov dx.al je mostrar ultimo: mov ah.[si] mov al.3 control1: mov ah.[si] mov al.[di] cmp ah.minimo inc [di] mov ah.

[di] mov bl.bl ja sor12 .0Ah add bl.minimo mov bl.[di] inc di inc di inc [di] mov bh.[di] inc di inc di mov bh.'0' jmp min21 mostrar21: lea di.loop control1 hulk: lea di.bl je mostrar21 jb min21 jne salto salto: lea di.2 mov dx.[di] cmp bh.3 min12: mov ah.minimo mov bl.minimo inc di add [di].1 mov bh.[di] cmp bh.30h cmp bh.[di] int 21h inc di loop min12 lea di.minimo mov cx.bl je mostrar21 min21: lea di.minimo inc di inc di mov [di].

1) EN DFD: .minimo inc [di] mov ah.'0' inc di inc [di] mov al.[di] mov bl.[si] cmp ah.[si] inc si inc si mov al.maximo mostrarx: mov ah.30h cmp ah.al je sid1 jne sid sid1: lea si.jb ultimo sor12: lea di.[di] inc di mov [di].[si] int 21h inc si loop mostrarx sid: ret d) Resultados: d.al je ultimo fin: cmp al.2 mov dx. maximo mov ah.0Ah add bl.bl jae fin1 jb un fin1: lea si.bl jae fin un1: cmp ah.

.

.

d.2) Lenguaje C: .

fue una programación larga (emu8086) por la que al ingresar el dato. yo lo hice ya separado en sus valores.d.3) Lenguaje ensamblador: e) Observaciones y conclusiones:  EL problema número 5. el problema fue en la comparaciones que . el cual realice en c. dfd y emu8086.

realice fueron tantas que tuve que estar creando subrutinas en las cuales cumplían su función como incrementar el valor o incrementar el vector. f) Bibliografía:  El lenguaje de programación C . pero se necesita un análisis mas profundo acerca de lo que realiza cada subrutina y las cuales cumplen una función y realizan un salto hacia otra subrutina. Ritchie  Programación en C Metodología.Kernighan. algoritmos y estructura de datos – Luis Joyanes . esa es la razón por la cual si se usaba el comando call hubiera necesitado un análisis más profundo.  Se pudo haber mejorado usando el comando call. pero la realización fue una de las tantas maneras que logré pensar.