Programacion visual.doc

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 entero 142857  El numero invertido es 758241  Ingrese un numero entero 2010  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 = 142857 print *, n / 10 ! 14285 print *, 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

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.