Continuando con la saga de resolver todos los problemas del libro de Eloquent JavaScript, el día de hoy les traigo las soluciones a los problemas del Capítulo 3, este trata sobre funciones.
Mínimo
El capítulo anterior introdujo la función estándar Math.min
que devuelve su argumento más pequeño. Nosotros podemos construir algo como eso ahora. Escribe una función min
que tome dos argumentos y retorne su mínimo.
Solución.
Encontrar el mínimo entre dos números es un proceso directo: primero asumimos que cualquiera de las dos entradas es el mínimo, no importa cual. Luego la comparamos con la otra entrada para ver si esta es menor o igual. Si lo es, regresamos la otra entrada. Si no lo es, regresamos la primera entrada que habíamos asumido que era el mínimo. Aquí está el código:
function min(a, b){
minimo=a;
if (b<=a){
return b
}
return a
}
Recursión
Hemos visto que %
(el operador de residuo) se puede usar para probar si un número es par o impar usando %
2 para ver si es divisible entre dos. Aquí hay otra manera de definir si un número entero positivo es par o impar:
Cero es par.
Uno es impar.
Para cualquier otro número N
, su paridad es la misma que N - 2
.
Define una función recursiva esPar
que corresponda a esta descripción. La función debe aceptar un solo parámetro (un número entero, positivo) y devolver un Booleano.
Pruébalo con 50 y 75. Observa cómo se comporta con -1. Por qué? Puedes pensar en una forma de arreglar esto?
Solución.
Resolvamos la primera parte del problema. Definir la función recursiva esPar
es fácil, ya que nos dan la solución en el mismo enunciado. Tenemos los casos base, y que hacer para el caso n-ésimo. Lo anterior se entiende cuando se ve el código:
function esPar(numero){
if (numero===0){
return true
}
else if(numero===1){
return false
}
else{
return esPar(numero -2)
}
}
Como se anticipa en el mismo problema, el código no funciona con la entrada -1, ya que la función se llamará recursivamente pero nunca alcanzará el caso base porque el valor de numero
seguirá siendo negativamente más grande y nunca 0 o 1.
Para hacer que nuestro código funcione correctamente para números negativos debemos simplemente cambiar el signo de los negativos, ya que el código siempre funciona para los números mayores o iguales que cero. Entonces si cambiamos de signo la entrada para el caso negativo podremos usar el programa que ya teníamos. Así quedaría el código:
function esPar(numero){
if (numero===0){
return true;
}
else if(numero===1){
return false;
}
else if(numero < 0){
return esPar(-numero);
}
else{
return esPar(numero -2);
}
}
Conteo de frijoles
Escribe una función contarFs
que tome un string
como su único argumento y devuelva un número que indica cuántos caracteres F
en mayúsculas haya en el string
.
Después, escribe una función llamada contarCaracteres
que se comporte comocontarFs
, excepto que toma un segundo argumento que indica el carácter que debe ser contado (en lugar de contar solo caracteres F
en mayúscula). Reescribe contarFs
para que haga uso de esta nueva función.
Solución.
La verdad en este problema no hice la primera parte ya que la segunda es casi lo mismo, simplemente sustituiríamos la comparación de F's
con la comparación de una letra dado por el usuario. Entonces empecemos resolviendo la segunda parte del problema.
La idea es recibir dos valores, la palabra y la letra a contar. Luego necesitamos inicializar un contador para contar las apariciones, recorremos la palabra con un for
y checamos letra a letra las que coincidan con la letra a contar y aumentamos el contador:
function contarCaracteres(palabra, char){
let counted=0;
for (let i=0; i <= (palabra.length -1); i++){
if (palabra[i] === char){
counted+=1;
}
}
return counted
}
Hasta aquí los problemas de esta sección. Espero hayan disfrutado el post y queden pendientes de las soluciones a los siguientes capítulos :D
Top comments (0)