Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Break
Relaciones de
recurrencia
Función recursiva
Bucles
Sintaxis:
➤ for - end
➤ While-end
⟳ Bucles Simples
Permite repetir un número determinado de veces
un conjunto de instrucciones
for while
las iteraciones se realizan mientras el índice las iteraciones se realizan basándose en
recorre una serie de valores y no necesita ni condiciones que pueden ser más complejas que
debe ser actualizado dentro del bucle un simple índice
Tiene una sintaxis muy sencilla y fácil de La sintaxis puede ser muy complicada
entender
Es muy potente ya que permite iterar con
Es adecuada para el trabajo con vectores y condiciones que el programador puede
matrices combinar
Es muy e ciente al incorporar en una sola Se corre el riesgo de tener “bugs” difíciles de
sentencia el incremento del bucle y la encontrar ó bucles in nitos o nulos
condición de salida del bucle
Si el programa entra en un bucle in nito.
Siempre tiene un nal Ctrl+C corta el bucle
fi
fi
fi
fi
Ejemplo
Suma de los números naturales entre 1 y un valor genérico n
% t3_forsuma t3_whilesuma
% Suma de naturales de 1 a n con for % Suma de naturales d%e 1 a n con while
function suma=t3_forsuma(n) function suma=t3_whilesuma(n)
suma=0; suma=0;
for i=1:n i=1;
suma=suma+i; while i<=n
end suma=suma+i;
end i=i+1;
El índice i se inicia en 1 y llega hasta n
end
Cuando pasa otra vez por el principio del bucle,
toma el siguiente valor que le corresponde en la end
secuencia
Bucles
Break
Relaciones de
recurrencia
Función recursiva
Uso del comando pause
Ejemplo
El comando break interrumpe la
ejecución de un bucle cuando función que recibe un número natural
en el cuerpo del mismo se y devuelve el mayor número divisor
cumpla una determinada exacto del número dado
condición y no sea necesario % t3_fdivisor
seguir ejecutando dicho bucle
% máximo divisor de num
% ejemplo de uso de break
function div=t3_fdivisor(num)
rompe el bucle for ó while y sale div = num - 1;
del mismo while div>=1
if mod(num,div)==0
break;
El bucle recorre todos los end
posibles divisores del número. Basta
con que la condición se cumpla una vez para div=div-1;
que no haga falta continuar el bucle, y
podamos asegurar que div es el mayor
end
divisor end
Siempre hay un divisor máximo: uno
Ejemplo El bucle recorre todos los posibles
divisores del número
función que devuelve un valor 1 ó 0 Basta con que la condición se
dependiendo de que el número que cumpla una vez para que no haga
introducimos como argumento sea o falta continuar el bucle y podamos
no primo asegurar que el número no es
primo devolviendo por tanto un
cero
% t3_fesprimo
% devuelve 1 si el número es
% primo y 0 si no
% uso de break Los divisores de un número no
function primo son menores o iguales que
primo=t3_fesprimo(numero) su raíz cuadrada. Si un número no
primo=1; los tiene, es porque es primo
i=2;
while i<=sqrt(numero)
if mod(numero,i)==0
primo=0; MATLAB tiene la función específica
break; isprime que
end devuelve un 1 si el número es
i=i+1; primo y un 0 si no lo es
end
end
Ejercicios
1. Codifica una función que reciba dos números naturales, m y n, con m < n por
<latexit sha1_base64="03hNlDn5IsIfvvNHnyItr7L28Pk=">AAAG+nictVXLTlNBGP5BW7HeQJduTqQmELBpiyALSYhsXGIil4QSMmc6pUfOzTNziE3tE/gWujLqzsfwBVz6DO5c+c1/ptBScOdpzsx/nf/7L3Pqp2GgTb3+c2r62vVS+cbMzcqt23fu3pudu7+rkzyTakcmYZLt+0KrMIjVjglMqPbTTInID9Wef7Jl9XunKtNBEr82vVQdRuI4DjqBFAaiZG76A7UopoQCrG1SWA151IfUpw6oBtVogH0LNm1YdfBKEpDksLV7hykJ+W/sHr0Fr7BnWK3UZ6s2/DX2mP5QBE12xgtEzMELCiHXtAxpFTZV7D2mY7xWKuETO+1zlnqUQpZh7yJSCgSGzwjcOT2OrOiUMYXYLZaQVw1Z5LApll6FyHN1ydjucmwB1yCEX4+tbb6Fn8d1k0A4HlVcelYN1LbLSdEbvBHystiW2TtwXhu0Mua5QavM2yyL2ttIIVALh0Vz1X+x/Qot0VO8q/BrUJPjtvCr4PfveVj5z/Ngrc7rXgVt8/Y5t/P+C/Tfd5XPWTZ6zsUejs+QlUiuTdHNLmrQAmprK5GpD+kT7s8AXIx1WOfJSapAV4V3e8S/xV2KaQH8Imo8yi8h2qSseSYNuS4G2os2C6CeoFeLEyf44AukS9APGFGF8YVujmxdbK8SzirlGr0DH53NRtvNjeaODyf3fOLFyKwN625gZ08YznrVIShuZc7+RU9TWGVu5sejZ4yx5uYpclqfK1nMz+jUC3Sq7qJbHBs8uaN3oOm0V98Cm6l/dhOKO2G960CxSuuY7zV7G45m5+u1Oj/eJNFwxDy5Z/to9kerncg8UrGRodD6oFFPzWFfZCaQoRpUWrlWqZAn4lgdgIxFpPRhnz/gA+9xJ8k801Ue86O2fRFp3Yt82ETCdPVFnRVepjvITWf9sB/EaW5ULGECXScPPZN49n/AaweZkibsgRAyC4DSk12RCWnwb1FB+o2LyU4Su81aY6229qo5v/nCFWKGHtIjDGWDntEmvcSnbIdkaVD6VPpa+lZ+X/5Y/lz+UphOTzmfBzT2lL//BS9NZRs=</latexit>
3. Codifica una función que reciba dos números reales a, b con a < b, un número
natural n, calcule h = b na y devuelva
7. Codifica una función que reciba un número natural n y devuelva una variable
f lag que valga 0 si n es par y 1 si n es impar. No se podrá usar la orden mod,
ni llamar a ninguna función.
Ejemplo
La variable que se
Bucles con otras operaciones modifica dentro del
función que calcula el factorial de un bucle lo hace a
número n través de productos
en vez de sumas, con
lo que su valor inicial
ha de ser 1
% t3_ffactorial
function fact=t3_ffactorial(n) El índice recorre
fact=1; % factorial de 0 es 1 por valores decrecientes
definición
i=n; MATLAB dispone de su
while i>=2 propio comando
fact=fact*i; para calcular el
i=i-1; factorial de un
end número; la orden es
end factorial
Ejercicios
8. Codifica una función que reciba los valores x y n con n natural y devuelva
<latexit sha1_base64="Bw1T4ccs/MXNRCj86c5sucz2ALQ=">AAAIHHicvVXLTlNBGB5AW6w30KUuTgQTDdC0RQFNSIjExCUmckkokOl0So+cmzNzCE3Dq+jL6MrbzsSlz8DOld/8M4UWGuLCeJoz89/vf08ji0JtKpWfI6NjV64WiuPXStdv3Lx1e2LyzoZOcyXkukijVG01uJZRmMh1E5pIbmVK8rgRyc3Gwarlbx5KpcM0eWM6mdyJ+X4StkLBDUjp5Nh9VmcJS1mIs8kkTsMC1gW1wVqAlliZHeNehUwTUi28gnFQcsjau0WQAP0Ed8DeAZe4FU5LbZBUBH2N+xCYhS3X4tPsCG/AOgQnBAvwkz7c+jGwqkjXydpYD8lTRDadpV3SmAWWgaZOPVubuddOCNcUY0ZZKfaL8tGkE5DNAJwMkLXRpHgD1GQXp72tfugt9fJ1Ftvks3laAWvDQFZRJHzA7lnNbOzWriBftgNHfVgdmg7S52RsdWJYs53h1DvpOxOg7jlkI6JIn/lvklYUt4vxkLrketGfCSf5Hs/WJYRWGdQ1Xw3J3uKNkY2t8Kyvictlmc0PdHWZPSHcxeF6nwM2vrqDddMUo9VcYlWcZWRdZyX8Lp/VKry6aX05JN9pyGXQnfaxuv7nVD1JfWlQ/RLv/WJdIz/vJ+DHFD9HTNZyz7bNs041b0HnESKaA94E5vrdBeUY5zzOmaGcpziH6yx6HXE6CzPwMAfuY8xlOFSnBvoMwYOadernPqpuoG3jL/2DHXdzN1j187vb2+nhO+wqzFFLq30Ey/HAnrhOnXVyeJdS/8+SUO7T1GdFtlxUmvqfk+2EaqJPbbsIJHxnfk57vnse3Caov9yFxO/CbF9kF313Lt0NTf+Hz//zrA3OyDJmqYx9fAatmo1ib2KqUq7QE1wEqh6YYv5Z25v4Um+mIo9lYkTEtd6uVjKz0+XKhCKSx6V6rmXGxQHfl9sAEx5LvdOlT9xx8LCVqsC0ZUB4v2yXx1p34gZkYm7a+jzPEofxtnPTWtrphkmWG5kIiIDXyqPApIH9UgbNUElhog4ALlSIKAPR5ooLg+9pCelXzyd7EdiolasL5YXXtamVF74Q4+wee0DtWmQr7BVGaJ2JwofCp8K3wvfi++LH4ufiVyc6OuJ17rKBp/jjD1Xoox8=</latexit>
1 1 1 1
⇡/4 1+ + = 0.0495
3 5 7 9
La alternancia de signo se debe conseguir sin utilizar ˆ . No se podrá llamar a
ninguna función.
Bucles
Break
Relaciones de
recurrencia
Función recursiva
Bucles y relaciones de recurrencia
% t3_fnewton
% Entradas: a y n
En una fórmula recurrente tipo % Salida: término n-ésimo
xi+1 = f (xi, xi-1, …) el valor de una
function x=t3_fnewton(a,n)
variable depende de su valor en
los pasos anteriores, i, i-1, i-2,… x=a;
i=2;
El índice del bucle se irá while i<=n
actualizando en el cuerpo del
x=x-(x^2-81)/(2*x);
bucle, y el valor de la variable; xi+1
irá a su vez cambiando en cada i=i+1;
uno de esos pasos end
end
Ejercicios
15. Codifica una función que reciba un número natural n y devuelva el término
<latexit sha1_base64="Lbn7OaMH5XINOSRzI5RSsUB4rZo=">AAAHHnicvVXLTxNBGP9AW7G+QI9eNlITE7Bpl1AIiRElMZ4MRnkktCHb6Wy7so+yM21smv4pJvqXeNOLRr3pkSNnb578zbfLUqDgzU3mm+/9nrbR8T2ly+VfE5OXLufyV6auFq5dv3Hz1vTM7U0VdWMhN0TkR/F2w1HS90K5oT3ty+1OLJ2g4cutxt6akW/1ZKy8KHyt+x1ZD5xW6LmecDRY0czkO6pRSBF5gE2SgJosGoDbIBdYhRapRENga9BqQs/FEeSA04W2uV3GBPi/cVu0D1rijgENt5FpWzh/KAA/hjeL7TUkMW4fdBGcIu4+jsmmx5583MaDZB1Nh9APOOMos3kIrgIvYF6T4/tspeBDgFZpfitUYKsivaVdVOrRHKoc0iPUrJB7jAgDslnqgT8P7RqOB+hxDTVEMXm3UVkDui9GtIxVBb4W0LVFWuI4BXoFyyRTIymy9nEG9jnRk6xseKrCkw16NMoAnsbb2ZndAmwqWRbr0DL9TOYh0ClTTY97H/G0VNa7o0kEdMDcFs8o2REFzxZ9pCfprA9PeLGoAzyZvczi9HjmLYbnTcbodtMo0UgOGnKZxrbYspjOwoWsD+ox6BoqLPxzm5f++zbPj/TacGrchX3eA9OrpGdteO4gok77odjuoncwbu9Pv42L3sGR9BnXFHH2gitcAbeQ7afZ2WTfQkQzOzk3Qtsjuz+6/2ZXayxJNtJwjrYwqVjSG5wAVZu9mecMj19JNe2ckakzlal/1qayjievJoE2wwWGiwyXs98bf+z0k+5H3Hsz5wP2aaxKu9Oz5VKZP+ssUkmRWUq/9d3pL7VmJLqBDLXwHaV2KuWOrg+cWHvCl8NCratkxxF7TkvuAA2dQKr6gH/kh9Z9N4ot3ZYW06O6AydQqh80oBM4uq1OywxznGynq93l+sALO10tQwEVyNyub+nIMv8VVtOLpdB+H4gjYg9ZWqLtxI7Q+EcpoPzK6WLPIpt2qVItVV/as6tP00ZM0V26Rw/4Ma7ScyzEBonch9zn3Pfcj/z7/Kf81/y3RHVyIrW5Qye+/M+/U/Vy1g==</latexit>
n-ésimo de la sucesión:
p
xi+1 = 2xi , i 2 N, x1 = 3.57
Si n = 3, p p
x2 = 2x1 = 2.6721, x3 = 2x2 = 2.3117
Prueba con valores de n más grandes. ¿A qué valor parece converger la sucesión
cuando n tiende a 1?
17. Codifica una función que reciba un número natural n, con n 3 por
hipótesis, y devuelva el n-ésimo término de la sucesión de Fibonacci:
xn = xn 1 + xn 2, x1 = 1, x2 = 1
Ejemplo
Se combina bucle con función para contar los divisores de un
condicional cuando se número natural n
necesita distinguir, de entre un
conjunto de potenciales % t3_fcuentadiv
candidatos, los que cumplan
una cierta condición. function cont= t3_fcuentadiv(n)
cont=0;
i=1;
while i<=n
if mod(n,i)==0
Implica que dentro del bucle cont=cont+1;
end mod devuelve el resto
while-end o for-end nos
de la división entera entre dos
encontremos con un i=i+1;
números:
condicional if-end end
end >> mod(14,6)
ans=2
>> mod(14,7)
ans=0
Ejercicios
29. Codifica una función que reciba dos números naturales m y n, y devuelva
<latexit sha1_base64="hG0L+kEFQWJMaHp4mgk62eS6YTE=">AAAEkniczVNNbxMxEJ00C5TwlfJx4mKRIHFAUZJKoYCQCgGJA4cikaZSElVex9uYej+wvRFR1H/IH+DID+DErSeeN1tU2gouHPDKnpk3z+PxWznMtLKu3f5aWasGly5fWb9au3b9xs1b9Y3buzbNjZADkerU7IXcSq0SOXDKabmXGcnjUMtheNj3+eFcGqvS5INbZHIS84NERUpwByjdqAxpTAmlpLBOSWJ1xGgJNKQIXpeeUouO4PXBmoIXYQriQHKwvY0KTwD/AcvoE2IJa7B6NCxYU+y3sAkdU4yM+RVznJkj5qSBe6wJRhN2UfgJ5uMy8j3Oi/oa1te1iBj43+gzzopRleHUFN5x0Y3veY5pgZmytgDaxL0Y7ZSopI+YMWWomxanWexZsV9QBzqc7scjW2VXJ/UYUEa9ou4YXw3fn7XdpPZ/oe3flP0O1kXKeqtRX5WqnWgR/2NtPWtzpex+vdFutYvBzjud0mlQOXb261/G01TksUyc0NzaUaeducmSG6eElke1cW5lxsUhP5AjuAmPpZ0si4d1xB5GqWFuJlkRn+YueWztIg7Bibmb2bM5D16UG+Uu2posVZLlTiYCFOSiXDOXMv8+2VQZKZxewOHCKHTJxIwbLhxecQ3X75y97Hlnt9vq9Fq9993G9qtSiHW6Tw/oEaR9Qtv0Fr9mQKJ6r/q8+rr6JrgbPAteBv0Vda1S7rlDv43g3U+r3/1w</latexit>
30. Codifica una función que reciba dos números naturales m y n y devuelva
su mı́nimo común múltiplo mcm. Por ejemplo, si m = 12 y n = 18, mcm = 36.
Ejercicios
31. Codifica una función que reciba 3 naturales m, n y p y devuelva una vari-
<latexit sha1_base64="NwK5pbH8W+tV0gWcYhrR0Y0/FpQ=">AAAHEnicrVVNbxMxEHULCSV8tXDksqJF4hCipJFaEEKq6IVjkeiH1ESV13GabXfXy9obNYr6L0D8Fzgh4NY/wLFHDpy4ceJ51kk2aRESYqO1xzPjN2/G46yfhIE29fq3ufkrV0vlawvXKzdu3rp9Z3Hp7o5WWSrktlChSvd8rmUYxHLbBCaUe0kqeeSHctc/3rT23b5MdaDi12aQyHbED+OgGwhuoFJL8+9Zi8VMsQBjh0mMhnlsCK3PupCarMFq7BTSJrw68OviFYxDk8Hbzl2SBPQ/MXvsDdYSc4rRan3yauK1/gbWFHMIq4ZuhUWsSrYVjAO8VpeMV5ZVnxBDzMW4dpUCnyNCSBFXwCXE+pB2G4oy4TOxPkdW1kNjt0fIHlj8AG6AWbmoHvSKOEbsnJ04m10LzBHxyHOwdenj1dCnTpfXMiWcjtuXo36HbJwmZr+AJOE3QU4dRgI5dns4sbFjQllLdkSrYvWezeS4WsjxX3En51BEbk5VLz/FeOxfQ/e0WAW/v/VW8z/1Vka2Yi1ney1n+Oee0ljNnuPovPqEkGuKnVCl7E/AI8TuAWXYodh5xISYJPBW4/g1SFsOy9ZaAikh9Oq4otbTnt46pOo/chudy1MXkVMd8l6fRJO0S9HJWI/zcS19zMLdqlHNOXUQh32kkeRr+T52N2rgOA0omj2dI9qR16UHWVMsbwpDkDy5LzmHyzPO61ilHlBUvaBQ+fwuF9nnHGUh28jFUlPdoKgXprH0TI1rB4vL9VqdHu+i0HDCMnPP1sHiWaujRBbJ2IiQa73fqCemPeSpCUQoTyutTMuEi2N+KPchxjySuj2kP/ZT72FXpZ7pSY/WRd8hj7QeRD58Im56etZmlZfZ9jPTfdIeBnGSGRkLuMDWzULPKM9+H7xOkEphwgEELtIALD3R4ykXBl+RCtJvzCZ7UdhZrTXWamuvVpc3XrhCLLD77AF7hCZZZxvsJRpym4nSu9LH0pfS1/Lb8ofyp/Ln3HV+zu25x6ae8tlvuoB1AA==</latexit>
able f lag tal que f lag = 1 si el mı́nimo de los máximos comunes divisores entre
dos de éstos números corresponde a la pareja m, n; f lag = 2 si corresponde a la
pareja m, p y f lag = 3 si es n, p.
33. Codifica una función que reciba un número natural n y devuelva su divisor
de valor máximo, excluyendo al propio n. Por ejemplo, si n = 27, su divisor
de valor máximo es 9. Para ello, se montará un bucle que arranque en n 1 y
vaya bajando hasta que encuentre un divisor de n, rompiendo el bucle en ese
momento y devolviendo ese valor.
Ejercicios
42. Codifica una función que reciba dos naturales estrictamente positivos, m y
<latexit sha1_base64="Rzp90fj3PAQqZenAElIx5snYNns=">AAAJ8HictVbLjhw1FHVCCN3DawJLWFhMkIKYtLp7khmQGCkiQmKDNIhMEmlmFLld7m4zrgdl10it1vwHrBCw4wf4CX6AZT6ABWLHinNvubqr57mBblXZvr6+j3OP7RoVzvrQ7/9x4+Yrt169/Vqnu/b6G2++9fb6nXee+rwqtdnXucvL5yPljbOZ2Q82OPO8KI1KR848Gx0/pvlnJ6b0Ns+ehFlhjlI1yezYahUgyu/cui0ORSZyYfFOhME7CCnmkI7EGL0HYih64hS9x9BKoDfGo4WCpII2tWPuacj/RivFdxgbtCXeJB2xVoL1Hi2tCdAo0TpokIzeARKyHCBPYyRkpeB1FiMrTri/CakUd6F1F+2M+xkekmtoZHH2M5bWFkq0U1goEGNgfzZamnFsBrYpaoeWonX89pClMXrD0iaHfzjGMo4Ljj2Nozr2kldcHCVlOIralrFz8OQ5QwO8pdiLMRvxLZ4UHsi3ZJ3a6q4YiJ0V27uo1U704K6NrB2Dj6iRxU1uP412h2Ir4lphvIpJXbuH0O2BL4diDf/r2LT9H7Gp4rl2HTYjClUL8fN1bbzQiJBRsOdipcZc9QmvbrxOW9U/iYwtGaFlLZY+PesljAwxMWXuZSw1HHHBsSZYQUzPF7aTC+tFOfQXnjLWr1FXeP95BVM22ZbiXbYa4y6e7dhuid9Q4QannFGi/F7GDGdXWtnBk18gH1xqs99iyvVc2YlckeIesmyi+HhRCbs4Jbz46H/hVLNnL2MT9STvhlmswrJ+Mp5itTznnT7BasVrmgga+4E9poyGYjY0jNni2dVVtd+2LxWRIEntsW1xyb+mqmctushzQs8wLjVe6spTw/D88BoeLvfJLk6Lh4sTSsUKeOhW8Q5Q0W7NlwfInmx/0+L/lNGmEWU24arVfi5jnATXvmDrZhFfydlpRqu5f16K+jSmeCyzrV0Htzjz6PYqWJqwjPyfcE2WZ8VXzNdj9L5kOwmfA4hSvi+eIAfS0XwLUgRV6yawrd2Q804IUZ9sTKLeUpoxr6YY3+c7klj3Qdz/FZ9u9W5IFrVs+KPEX5zfECj1CekX6xv9Xp9/8nxnEDsbIv72Xqz/fpjkukpNFrRT3h8M+kU4mqsyWO3M6dph5U2h9LGamAN0M5UafzTnz5ZT+eE4L2WYGsnjtu5cpd7P0hF0UhWm/uwcCS+aO6jC+JOjuc2KKphMQwVz48rJkEv6+pGJLY0OboaO0qVFlFJPVal0wDfSGtIfnE32fOfpsDfY7m1/Pdx49HkEoiPeA+T3+Pp8hILviX2hO77zQ+fnzi/dsvt998fuT7XqzRtxzbti5df99V+nHOyT</latexit>
n, con m < n por hipótesis, y devuelva la suma de los números primos entre m
y n, ambos inclusive. Por ejemplo si m = 17 y n = 27, los primos entre ambos
son 17, 19 y 23, cuya suma es 59.
46. Codifica una función que reciba un número, num y devuelva una variable
f lag que ha de valer 1 si num se descompone en producto de dos primos y 0
si no es ası́. Por ejemplo, para num = 6 = 3·2 devolverá 1 y para num = 7 o
num = 12 devolverá 0.
47. (Para + valientes) Codifica una función que reciba un número n y devuelva
el mayor primo menor o igual que n terminado en 3 tal que el primo anterior
termine en 1 y tal que la diferencia entre ambos sea 2. Por ejemplo, si n = 55, la
respuesta será 43. Si no hay ninguno, devolverá 0. Este ejercicio está inspirado
en la estupenda novela de Mark Haddon, “The curious incident of the dog in
the night-time”, publicada en el año 2003.
Bucles
Break
Relaciones de
recurrencia
Función recursiva
Ejemplo de bucle en el que la condición no se re ere a un índice
% t3_ffibonacci
% Entradas: x1,x2 >0 y x1<r, x2<r
% Salida: nº de términos menores El problema se resuelve
que r implementando esa
function cont=t3_ffibonacci(x1,x2,r) condición directamente en el
x3=x1+x2; while del bucle
cont=2;
while x3<r
cont=cont+1;
x1=x2; El bucle estará ejecutándose
x2=x3; mientras que los elementos
x3=x1+x2; de la sucesión sean menores
end que r
end
Ejercicios
49. Escribe una función que reciba un número natural n, con n 2 por
<latexit sha1_base64="E77d4cjgtuOotnsWTg59cDaxs8k=">AAAJvnictVZLbxs3EGaSPiT15TTHXojaBVrUVbVSlCYFArgNUvToAnUSwDIMiuJKbPZlkitEEPwP8wfyE3LoKbee+nFISSslTR0UXWHJ2eHMcL7hN7saV5m2rtd7ce36jffe/+DDVrvz0ceffPrZ3s3PH9myNlKdyDIrzZOxsCrThTpx2mXqSWWUyMeZejx++sCvP54rY3VZ/O4WlTrLxbTQqZbCQVXevPEnG7GClUxjnDCF0THOltCOWQrpNrvHuuwS0kNmmWQGlmPYcVbDVmBOSZLQv8LM2QWe/brBKMlaRGuO+y+WQ2+wIyd/hxWDOcPzATQH7BCSxHoRNSM2hccF6+OJsworBvMMkSvs6LBmIVvyW5CvjyYRN6M8Mtrf7zqBnZcFoXDQvcSoyYMTem9dIhaH7L3zWJGgmzTiWcSXce+AO6z+QohLwiYJP2dfN/A8Y+csYfdxH8R8g64fdd80KmijV8iipIr6PF7h1qhKTUiDbuUTatiFdBwrpdgfhKQibIcUV0dLv+cw1vz/QL6b+SpLv+sGX0L7h7FP44DGIY13Y50SaIPkM9g+UR/9R8I0wO979gOQee52ISWYB1STEX4d/N7O+CE8AuOPiSk+/pwqraO1382f0wNE8Rmkaw69W0+4dV2afWEjHkcslZjF+jRU7ABL/NXIK9gfQHtI+2xYZeK5LuIJzSmHjLBsMp3HbhDIKYsMSumkpxRrlfms0SPzyDtDp7Lhk4kd6lccZayIKZx83509/oQ0yQJWotH9Hu8G6QZ1j2pXxLeApbdM6D1HJ+mRltQdD9e89vENsWfVi74v/LyE9B0QXrJvG899PO++pVZdHbLa7esLYl/nCh1ZwboHW98Fo3iiQTPcOtn7xNH+unNF5JZFhDqyZ9UXq87K1/w1VJvme0ZvxR3+a9wmG2xkQo/qetUeG8Qe+689dJXvyps7QNHatmdAJBud2OT/Ys2ul/B9+zs22A1QldsN7zpyM8TftvsnK97YN4lvzoL0K/uC6jwFkqZf93xvv9ft0cVfF5Io7LN4HZ/vPR9NSlnnqnAyE9aeJr3KnS2FcVpm6rIzqq2qhHwqpuoUYiFyZc+W9Cfkkn+Vloa7meL03LRditzaRT6GTS7czO6ueeWb1k5rl949W+qiqp0qJEywltYZdyX3/2X4RBslXbaAIKTRyJLLmTBCOvzj6QB+sgv2deFRv5vc6d75rb9/9HMsRIt9wb7ERzvBx+OI/YpDPmGy9VNr2qpaF+2jdtrO22UwvX4t+txiW1f72d85rttt</latexit>
51. Para valientes) Codifica una función que reciba tres números estrictamente
positivos p, q y r, y devuelva una variable f lag que ha de valer 1 si r pertenece
a la sucesión de Fibonacci iniciada por p y q y 0 en caso contrario. Es decir:
xn = xn 1 + xn 2 , con x1 = p y x2 = q. Por ejemplo, si p = 0.2, q = 0.5 y
r = 1.2, la respuesta es 1, mientras que si r = 1.5, la respuesta ha de ser 0.
53. Codifica una función que reciba un número natural y devuelva el número
de ceros que hay en él. Por ejemplo, en 304 hay un cero, en 30 hay un cero y
en 115 no hay ningún cero.
Ejercicios
<latexit sha1_base64="urqcADrya6TTWO8eYSSjIDCDMN4=">AAAEKnicjVNLbxMxEJ5keZTwSuHIxSJFAglFu4XyOFSq6IUDhyCRtlISVV7HSZZ6H9jeSFGUfwT/hBOcKuCAxJUTN058692m0OaAI9ufv/lmPDMbh5mKjPX941rdu3Dx0uW1K42r167fuNlcv7Vn0lwL2RWpSvVByI1UUSK7NrJKHmRa8jhUcj882i3s+1OpTZQmb+wsk4OYj5NoFAluQaXrtRbNqU8hjYjRFn5tWgDdpw5x0piMplgVRSQpIYvV0AOwu5TibMBoymHV4HIwhcfIIQH2F3ZG73CW2DXWgg2daogIBvtJXF2dNyjGZDRzOMF8CCTcfafW0ku7uH6lfo7JYQ+rSJHLQuF2AzyFtg321coch7BO4aecTtN3d4fCmtBvxCzzK3XMaYTrxWl1nDLXs9KyOlNVZTaknzTG3XZ5lstqixw74LXzfYsZI3LhWfShqKRUbtMjVP646s+sunEb3MYyd+1yzIEtchu6CsyyvsB5ZsvaTmIXUZ5Wcf8njk/tw2bLb/tusPMgqECLqtE5bH7sD1ORxzKxQnFjeoGf2cGcaxsJJReNfm5kxsURH8seYMJjaQZz94dfsHujVDM7kcyd/9bOeWzMLA6hibmdmLO2glxl6+V29Gwwj5IstzIRkMA2yhWzKSveDRtGWgqrZgBc6AhZMjHhmguL19VA+cHZYs+Dvc128KS99XqztfOiasQa3aG7eG4BGr5DL/HhuyTqH+qf61/r37z33ifv2PtSSuu1yuc2/TO8H38AJvfw4A==</latexit>
55. (Para valientes) Construir una función que reciba dos enteros m y n,
con m entre 0 y 9 ambos inclusive. La función devolverá el número de veces que
aparece m entre los dı́gitos de n. Por ejemplo, si n = 304, y m = 0 el resultado
será 1, pero si m = 7, el resultado será 0.
56. Hay números de 5 dı́gitos del tipo abbbb tales que cuando los elevas al
<latexit sha1_base64="dWKAT9Zba/PJF6jgK1xPWCrMAGU=">AAAFcnicbVRLT9tAEB4gaWn6gvZWLm4JEpUgcijPSpVQufRIpfKQSIrW601wWT+wN5GiiN/XS/9Af0RPtJee+u14k4aALWdm55v3TDbIdFQY3/85MztXqT54OP+o9vjJ02fPFxZfHBdpL5fqSKY6zU8DUSgdJerIREar0yxXIg60OgkuDyx+0ld5EaXJFzPIVDsW3STqRFIYiNLFme80pBYF1CGPtmibGnQN7hMJGoAm9JdiUpRTSgXOIXirZ7lf1KWIzASiQQ1kGWQe1eEjcG+dEQENxdpX1GNPElQgSsgW2vlSrNcHYk+C/ZaaITIRTnvAFqW/Amjs9C2Ws9w4SXMcMYTEA5dM1fY/I5u/AqbYzr+nUkvDcdUROqc4XgJEufwtn7OPAtYN0ENY5Ix9wxejR7ba91RDb+q0Srvoavm+pa+0QeuI/oF26B3oHuayBQ0f8k34aE18q0B33DtpucfT9GG/ifMO5LscqUYHnL/NO0JXR/2wtMOchPyGOzTqia3ESgPWCsdTKise7Yadd93NxZ7s1Nd4cil7qyObFk/siqdqsWAs2XPaA2dhO5Rz/DJqgfie27Hbk5veMzWxqZYfTdVu5ZpD+uA1fstZl/s06oLduxyI9arZuo7OaJy77H/UlT5vZpdt7Ibd4POd/8z5nfRfZjSy1iyz2Qm3swl+G+cLy37D58e7yzQds0zuOTxf+NEKU9mLVWKkFkVx1vQz0x6K3ERSq+taq1eoTMhL0VVnYBMRq6I95Ivj2lvppLlnLpTH50ndoYiLYhAH0ImFuSimMSu8Dzvrmc5uexglWc+oREIFWKenPZN69v7xwihX0ugBGCHzCFl68kLkQhrcUjWU35wu9i5zvNFobje2Pm8s7390jZinJXqDP4Nd9X1cX4d0RHLuT2WpUq+sVH5XX1VfV13XZmeczUu69VTX/gFsbCFe</latexit>
cuadrado y les sumas o restas 1 queda un número que tiene 10 dı́gitos todos
diferentes entre sı́. Por ejemplo:
x2i A
xi+1 = xi , x1 = a, i 1
2xi
y devuelva el primer xi para la que |xi xi 1 | < prec.
Por ejemplo, si A = 225, a = 100 y prec = 0.5, en la siguiente tabla se mues-
tran los valores de xi para i = 1, . . ., y de los correspondientes |xi xi 1 |. La
primera vez que |xi xi 1 | < 0.5 es para i = 6, ası́ que la función ha de devolver
x6 = 15.0019. <latexit sha1_base64="BSaJ2wwXPrlIKDMs9gii2x9EyYY=">AAADAHicbVLLbtNAFB2bVzGPprCExYgEi00tj13b8a6CDcsikbZSHEWTySQZ1S/NjKtGTjbwM7BCwI5v4Af4G64TE0HL3cy555w7uvfOTMpUKO26vwzz1u07d+/t3bcePHz0eL9z8ORUFZVkfMCKtJDnE6p4KnI+0EKn/LyUnGaTlJ9NLt40+tkll0oU+Xu9LPkoo/NczASjGqjxgfE8mfC5yGtNoWRttRnjueZyl4JYpVSua7liK7a2hN27Goue3UtSPtMrwPjwalyLQ7JOpJgv9KqXJFayaLqyCLYxcV0bA+UBDohDvADyo77TjwIXaB9oL3Ki0Afa8x0/9Br6qKmMnNj3IxvHTt+LfWADbJPA8fw4Bq8Txn4EZNhYA8d1CbAuqH3SdHA5LbQCaQv+nI3C8+lurG22m7mVYB3jTteFO5vANwFpQRe1cTLu/EymBasyuIqlVKkhcUs9qqnUgm3WWyleUnZB53wIMKcZV6N684xr/HJWSKwXHG/yv701zZRaZhPwZFQv1HWtIf+nDSs9649qkZeV5jkDC2izKsW6wM1vwFMhOdPpEgBlUkCXmC2opAw2oSwYn1wf9iY49RwSOuE7r3v8ul3EHnqGXqBXiKAIHaO36AQNEDM+Gp+Nb8Z384P5yfxift1aTaOteYr+CfPHbx23324=</latexit>
i xi |xi xi 1 |
1 100
2 51.1250 48.8750
3 27.7630 23.3620
4 17.9337 9.8293
5 15.2399 2.6937
6 15.0019 0.2381
.. .. ..
. . .
Ejercicios
64. (Para valientes) El algoritmo de Euclides permite hallar el máximo común
divisor de dos números naturales m y n dividiendo primero el mayor de los
dos entre el otro y después recursivamente el divisor entre el resto. El último
resto que no es cero es el máximo común divisor. (Si la primera división ya
tuviera resto 0, entonces es que el máximo común divisor es el menor de los dos
números). Por ejemplo, si m = 21 y n = 15 el máximo común divisor calculado
mediante el algoritmo de Euclides es el siguiente:
21 = 1 · 15 + 6
15 = 2·6+3
6 = 2·3+0
Break
Relaciones de
recurrencia
Función recursiva
Función recursiva en MATLAB
% t3_potencia
function xn=t3_fibo2(n)
if n==2 || n==1
xn=1;
else
xn=t3_fibo2(n-1)+t3_fibo2(n-2);
end
end
Funciones auxiliares en el mismo archivo
% Entrada: un número natural % Entrada: un número natural
% Salida: número de ceros que % Salida: número de ceros que
contiene contiene
function nceros=t3_f53(n) function nceros=t3_f53conaux(n)
nceros=0; nceros=0;
dig=t3_fdigitos(n); dig=t3_fdigitos2(n);
i=1; i=1;
p=n; p=n;
while i<=dig while i<=dig
if mod(p,10)==0 if mod(p,10)==0
nceros=nceros+1; nceros=nceros+1;
end end
p=floor(p/10); p=floor(p/10);
i=i+1; i=i+1;
end end
end end