Topicos Avanzados de Programacion - Unidad 5 programacion movil
Programacion visual.doc
-
Upload
daniel-javier -
Category
Documents
-
view
212 -
download
0
Transcript of Programacion visual.doc
7/17/2019 Programacion visual.doc
http://slidepdf.com/reader/full/programacion-visualdoc 1/5
Ejercicios de la clase del 1 de septiembre
Ejercicio 1: invertir dígitos
Escriba un programa que invierta los dígitos de un número entero ingresado por el
usuario.
Ingrese un numero entero142857 El numero invertido es 758241 Ingrese un numero entero2010 El numero invertido es 102
Para resolver este problema, lo que hay que lograr hacer es extraer los dígitos del
número uno por uno para poder ir construyendo el número invertido:
142857 → 0 14285 → 7 1428 → 75 142 → 758 14 → 7582 1 → 75824 0 → 758241
El último dígito de un número entero puede ser obtenido calculando el resto de su
división por 1! los dígitos "altantes pueden ser obtenidos dividiendo el número por 1:
n = 142857print *, n / 10 ! 14285print *, mod(n, 10 ! 7
#$u%ntas veces debe hacerse este paso& El computador no sabe cu%ntos dígitos tiene el
número. 'o m%s simple es ir dividiendo n hasta llegar a . Por lo tanto, hay que usar un
ciclo do "ile y no un ciclo do con contador.
$ada ve( que el último dígito de n es calculado, hay que ponerlo al "inal del número
invertido. 'a manera de hacerlo es la siguiente:
invertido = invertido * 10 # ultimo$digito
El programa queda así:
progr%m invertir impli&it none integer '' n, invertido, ultimo$digito
print *, Ingrese un numero entero re%d *, n
invertido = 0
do "ile (n /= 0 ultimo$digito = mod(n, 10
7/17/2019 Programacion visual.doc
http://slidepdf.com/reader/full/programacion-visualdoc 2/5
invertido = invertido * 10 # ultimo$digito n = n / 10 end do
print *, El numero invertido es, invertidoend progr%m invertir
)i ruteamos el programa con la entrada 142857, el resultado es *ste:
n u_d inv Salida estándar
1+-/
/
/
1+-
/
1+-
-
/-
1+
/-
1+
+
/-+
1
1
/-+1
El número invertido es /-+1
Ejercicio 2: palíndromos
Escriba un programa que reciba un número entero e indique si es palíndromo o no.
Ingrese un numero entero14241 14241 si es p%lindromo Ingrese un numero entero24007 24007 no es p%lindromo
7/17/2019 Programacion visual.doc
http://slidepdf.com/reader/full/programacion-visualdoc 3/5
0n palíndromo es un número que se lee igual de i(quierda a derecha y de derecha a
i(quierda.
abiendo hecho el e2ercicio anterior, este problema es trivial: basta con comparar el
número original con su versión invertida. )i 3y sólo si4 son iguales, entonces el número
es un palíndromo.
'a única precaución que hay que tener es la de guardar una copia del número ingresado
para poder compararla al "inal, pues el proceso de invertir n hace que el valor se pierda.
El programa es el siguiente:
progr%m p%lindromo impli&it none integer '' n, origin%l, invertido
print *, Ingrese un numero entero
re%d *, n
origin%l = n invertido = 0 do "ile (n /= 0 invertido = invertido * 10 # mod(n, 10 n = n / 10 end do
i) (origin%l == invertido t"en print *, origin%l, si es p%lindromo else print *, origin%l, no es p%lindromo
end i)end progr%m p%lindromo
Ejercicio 3: números de Fibonacci
'os números de 5ibonacci son una secuencia que comien(a con los valores y 1, y a
continuación todos los valores son la suma de los dos anteriores:
55156771756895681,6
Escriba un programa que pregunte al usuario cu%ntos números de 5ibonacci desea, y losmuestre por pantalla:
u%ntos numeros de +ion%&&i dese%-10 0 1 1 2 . 5 8 1.
21 .4
7/17/2019 Programacion visual.doc
http://slidepdf.com/reader/full/programacion-visualdoc 4/5
'a regla para generar los números de 5ibonacci requiere siempre sumar los dos últimos
valores. Por lo tanto, en cada etapa del procedimiento es necesario recordar los dos
últimos números. ;os re"eriremos a ellos como el número %&tu%l y el número
%nterior.
'os dos primeros valores son siempre y 1. Por lo tanto, podemos comen(ardirectamente imprimi*ndolos:
print *, 0print *, 1
Por simplicidad, supondremos que el usuario siempre ingresa una cantidad n mayor que
dos. )i queremos que el programa est* correcto en todos los casos, deberíamos hacer lo
siguiente:
i) (n 0 t"en
print *, 0end i)i) (n 1 t"en print *, 1end i)
Para generar el resto de los números, debemos describir el proceso en que %nterior
pasa a tomar el valor que tenía %&tu%l, y %&tu%l pasa a tener la suma de ambos.
0na aproximación ingenua sería la siguiente:
%nterior = %&tu%l
%&tu%l = %nterior # %&tu%l
Este cambio es incorrecto, ya que despu*s de la primera asignación %nterior pierde el
valor que tenía previamente, por lo que la segunda asignación ya no hace lo que
esperamos.
)i cambiamos el orden de las asignaciones, ocurre lo mismo:
%&tu%l = %nterior # %&tu%l%nterior = %&tu%l
<hora es el valor de %&tu%l el que se pierde antes de usarlo. Esta con"usa situaciónocurre siempre que se desea intercambiar el valor de dos variables. 'a manera de
solucionarlo es introduciendo una variable adicional para guardar el resultado
intermedio. < esta variable la denominaremos sum%:
sum% = %nterior # %&tu%l%nterior = %&tu%l%&tu%l = sum%
El programa completo es el siguiente:
progr%m )ion%&&i impli&it none integer '' %nterior, %&tu%l, sum%, , n
7/17/2019 Programacion visual.doc
http://slidepdf.com/reader/full/programacion-visualdoc 5/5
print *, u%ntos numeros de +ion%&&i dese%- re%d *, n
print *, 0 print *, 1
%nterior = 0 %&tu%l = 1 do = ., n sum% = %nterior # %&tu%l %nterior = %&tu%l %&tu%l = sum% print *, %&tu%l end doend progr%m )ion%&&i
El ciclo do parte desde = porque los primeros dos valores ya "ueron mostrados antes.