Programacion 2
Programacion 2
com
en el Capítulo 2 para el Informatorio Chaco, trataremos de abarcar todas las respuestas.
Recordemos que la idea es que ustedes mismos puedan resolver estos ejercicios ya que es
para aprender, obtener conocimientos y mejorar la lógica de programación.
Veamos si se va entendiendo: escribí ahora una función JavaScript mitad, que tome un
número y devuelva su mitad. Tené en cuenta que el operador de división en JavaScript es /.
Respuesta:
function mitad(numero){
return(1/2*numero)
}
Respuesta:
function anterior(numero){
return(numero - 1)
}
function triple(numero){
return(numero * 3)
}
function anteriorDelTriple(numero){
return(anterior(triple(numero)))
}
• 4 + 5
• Math.round(4.5)
• funcionMisteriosa(1, 2, 3) (ya la declaramos por vos y la podés usar)
Respuesta:
• Math.round(4.4)
• Math.round(4.6)
• Math.max(4, 7)
• Math.min(4, 7)
Respuesta:
Respuesta:
¡Ahora te toca a vos! Dani también dice que a alguien leGustaLeer, cuando la cantidad de
libros que recuerda haber leído es mayor a 20.
Respuesta:
function leGustaLeer(unNumero){
return(unNumero > 20)
}
Ejercicio 8: Booleanos.
Respuesta:
Veamos si queda claro: escribí la función esFinDeSemana que tome un string que
represente el nombre de un día de la semana, y nos diga si es "sábado" o "domingo".
Respuesta:
function esFinDeSemana(dia){
return(dia === "sábado" || dia === "domingo")
}
Veamos si queda claro: escribí una función longitudNombreCompleto, que tome un nombre
y un apellido, y devuelva su longitud total, contando un espacio extra para separar a ambos.
Respuesta:
Escribí la función gritar. Te dejamos para que uses la función convertirEnMayuscula, que,
ehm... bueno... básicamente convierte en mayúsculas un string .
Respuesta:
function gritar(palabra){
return("¡" + convertirEnMayuscula(palabra) + "!")
}
Ejercicio 12: ¿Y qué tal si...?.
Ninguna introducción al lenguaje JavaScript estaría completa sin mostrar al menos una
estructura de control que ya conocemos: la alternativa condicional.
Veamos si se entiende: escribí una función maximo, que funcione como Math.max (¡no vale
usarla!) y devuelva el máximo entre dos números. Por ejemplo, el máximo entre 4 y 5 es 5,
y el máximo entre 10 y 4, es 10.
Respuesta:
• 1 si el número es positivo.
• 0 si el número es cero.
• -1 si el número es negativo.
Respuesta:
Respuesta:
function esNumeroDeLaSuerte(numero) {
return (numero)>0 && (numero)<100 && (numero!=15);
}
El jurado de un torneo nos pidió que desarrollemos una función medallaSegunPuesto que
devuelva la medalla que le corresponde a los primeros puestos, según la siguiente lógica:
Respuesta:
function medallaSegunPuesto(lugar){
if(lugar === 1){
return("oro")
} else if(lugar === 2) {
return("plata")
} else if(lugar === 3) {
return("bronce")
} else {
return("nada")
}
}
Además, existen operaciones que sirven para todos los tipos de datos, por ejemplo:
Respuesta:
Probar en la consola
Respuesta:
4 + 4 vale 8
Escribí una función cuantoCuesta que tome el número de pulgadas del monitor y la cantidad
de memoria, y calcule el costo estimado de nuestra computadora.
Respuesta:
Ahora que sabemos cuantoCuesta una computadora, queremos saber si una computadora me
conviene. Esto ocurre cuando:
Respuesta:
function meConviene(pulgada,memoria){
return (cuantoCuesta(pulgada,memoria) < 6000 && pulgada >= 32 && memoria >=
8);
}
Ejercicio 3: Triangulos.
¡Hora de hacer un poco de geometría! Queremos saber algunas cosas sobre un triángulo:
Respuesta:
Ejercicio 4: Cuadrados.
Respuesta:
function perimetroCuadrado(lado) {
return (lado * 4)
}
function areaCuadrado(lado) {
return (lado * lado)
}
Desarrollá una función estaAfinado, que reciba la frecuencia (un número) del la central, y
diga si dicha frecuencia es igual a 440Hz.
Respuesta:
function estaAfinado(frecuencia){
return (frecuencia === 440)
}
Ahora queremos saber si el la central del piano está cerca de estar afinado. Esto ocurre
cuando está entre 437Hz y 443Hz, pero NO es exactamente 440Hz.
Respuesta:
function estaCerca(frecuencia){
return (437 <= frecuencia && frecuencia <= 443 && frecuencia !== 440)
}
Ejercicio 7: Cartelitos.
Respuesta:
Respuesta:
Escribí una función decisionConMoneda, que toma tres parámetros y devuelve el segundo
si el primero es "cara", o el tercero, si sale "ceca".
Respuesta:
Queremos saber el valor de las cartas de truco cuando jugamos al envido. Sabemos que:
Escribí una función valorEnvido, que tome un número de carta y devuelva su valor de
envido.
Respuesta:
function valorEnvido(carta){
if(carta >= 1 && carta <= 7)
{return carta}
if(carta >= 10 && carta <= 12)
{return 0}
}
Bueno, ehm, no, pará, primero queremos calcular cuántos puntos de envido suma un
jugador. Sabemos que:
• Si las dos cartas son del mismo palo, el valor del envido es la suma de sus valores
de envido más 20.
• De lo contrario, el valor del envido es el mayor valor de envido entre ellas.
Respuesta:
Cuando se juega al truco, los equipos oponentes alternativamente pueden subir la apuesta.
Por ejemplo, si un jugador canta truco, otro jugador puede cantarle retruco. Obviamente,
los puntos que están en juego son cada vez mayores:
Escribí la función valorCantoTruco, que tome el canto y devuelva cuántos puntos vale.
Respuesta:
function valorCantoTruco(canto){
if(canto === "truco"){
return(2)
}
if(canto === "retruco"){
return(3)
}
if(canto === "vale cuatro"){
return(4)
}
}
3. Variables y Procedimientos.
Ejercicio 1: ¿Y el tablero?.
Respuesta:
funcionMisteriosa(2, 1)
Respuesta:
Veamos si va quedando claro, escribí una function versosMartinFierro que imprima por
pantalla los primeros versos del Martín Fierro:
Respuesta:
function versosMartinFierro() {
imprimir("Aquí me pongo a cantar");
imprimir("Al compás de la vigüela;");
imprimir("Que el hombre que lo desvela");
imprimir("Una pena extraordinaria");
return 0
}
Respuesta:
function versosMartinFierro() {
imprimir("Aquí me pongo a cantar");
imprimir("Al compás de la vigüela;");
imprimir("Que el hombre que lo desvela");
imprimir("Una pena extraordinaria");
}
Ejercicio 5: ¿Y el program?.
En JavaScript todo lo que escribamos fuera de una function será, implícitamente, dicho
punto de entrada. Por ejemplo, si queremos un programa que imprime por pantalla el
clásico "Hola, mundo!", lo podremos escribir así:
imprimir("¡Hola Mundo!");
Respuesta:
imprimir("Tirando dados");
imprimir("La primera tirada dio " + tirarDado());
imprimir("La segunda tirada dio " + tirarDado());
imprimir("La tercera tirada dio " + tirarDado());
Ejercicio 6: Coerciones.
Veamos si queda claro, escribí una función elefantesEquilibristas, que tome un número de
elefantes y devuelva una rima de una conocida canción "3 elefantes se balanceaban".
Respuesta:
function elefantesEquilibristas(numero){
return(numero + " " + "elefantes se balanceaban")
}
Respuesta:
function perimetroCirculo(radio){
return(3.14159265358979 * 2 * radio)
}
function areaCirculo(radio) {
return(3.14159265358979 * radio * radio)
}
let pi = 3.14159265358979;
Cambiá los lugares donde aparece 3.14159265358979 por la variable pi en las funciones
que tenemos definidas.
Respuesta:
let pi = 3.14159265358979;
function perimetroCirculo(radio){
return(pi * 2 * radio)
}
function areaCirculo(radio) {
return(pi * radio * radio)
}
Ya que vas entendiendo cómo se asignan las variables, te traemos algo para pensar: ¿qué
pasa si intento usar una variable a la que nunca le asigné un valor?
Respuesta:
Las variables declaradas dentro de una function, conocidas como variables locales, no
presentan mayor misterio. Sin embargo, hay que tener un particular cuidado: sólo se pueden
utilizar desde dentro de la function en cuestión.
Respuesta:
Respuesta:
function aumentarFortuna(){
pesosEnMiBilletera = pesosEnMiBilletera * 2
}
Vimos que una variable solo puede tener un valor, entonces cada vez que le asignamos uno
nuevo, perdemos el anterior.
Respuesta:
20
4. Lógica booleana.
Empecemos por algo sencillo, ¿te acordás del operador ! ? Se lo denomina negación, not o
complemento lógico y sirve para negar un valor booleano.
Definí el procedimiento usarCierre para que podamos abrir y cerrar el cierre de una
mochila.
Respuesta:
Respuesta:
function esMayorDeEdad(edad){
return(edad >= 18)
}
function esMenorDeEdad(edad){
return(!esMayorDeEdad(edad))
}
Definí una función esPeripatetico que tome la profesión de una persona, su nacionalidad y
la cantidad de kilómetros que camina por día. Alguien es peripatético cuando es un filósofo
griego y le gusta pasear (camina más de 2 kilómetros por día).
Respuesta:
Respuesta:
Probar en consola:
consumePocaEnergia(24, 5)
consumePocaEnergia(24, 0)
consumePocaEnergia(21, 7)
consumePocaEnergia(18, 1)
Respuesta:
Probar en la consola:
gano(true, 25)
gano(false, 30)
gano(false, 20)
gano(true, 31)
• Es feriado, o
• Es fin de semana, o
• No estamos dentro del horario bancario.
Respuesta:
Ahora te toca a vos definir la función sonMediosHermanos. Recordá que los medios
hermanos pueden compartir madre o padre pero no ambos porque... ¡en ese caso serían
hermanos!
Respuesta:
Respuesta:
sonMediosHermanos(arcadio, aurelianoJose)
sonMediosHermanos(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose, remedios)
A diferencia del and, or y not, el xor no suele estar definido en los lenguajes. Sin embargo,
ahora que sabés cómo funciona, si alguna vez lo necesitás podés definirlo a mano.
Veamos si se entiende: definí la función genérica xor, que tome dos booleanos y devuelva
el valor de verdad correspondiente.
Respuesta:
Cuando una expresión matemática tiene varios operadores, sabemos que las
multiplicaciones y divisiones se efectuarán antes que las sumas y las restas:
5 * 3 + 8 / 4 - 3 = 14
Al igual que en matemática, cuando usamos operadores lógicos las expresiones se evalúan
en un orden determinado llamado precedencia.
Respuesta:
Escribí la función puedeJubilarse que recibe la edad y el sexo de una persona, además de los
años de aportes jubilatorios que posee.
El mínimo de edad para realizar el trámite para las mujeres es de 60 años, mientras que para
los hombres es 65. En ambos casos, se deben contar con al menos 30 años de aportes.
¡Intentá resolverlo en una única función! Después vamos a ver cómo quedaría si delegamos.
Respuesta:
• Alcanzar la altura mínima de 1.5m (o 1.2m si está acompañada por una persona
adulta).
• No tener ninguna afección cardíaca.
Definí la función de 3 parámetros puedeSubirse que recibe una altura de una persona en
metros, si está acompañada y si tiene alguna afección cardíaca.
Respuesta:
5. Listas.
Para representar a un conjunto de strings, colocamos todos esos strings que nos interesan,
entre corchetes ([ y ]) separados por comas. Fácil, ¿no?.
Respuesta:
seriesFavoritasDeAna
seriesFavoritasDeHector
["hola","mundo!"]
["hola","hola"]
Lo que acabamos de ver es cómo modelar fácilmente conjuntos de cosas. Mediante el uso
de[], en JavaScript contamos con una manera simple de agrupar esos elementos en listas.
¿Acaso hay una cantidad máxima de elementos? ¡No, no hay límite! Las listas pueden tener
cualquier cantidad de elementos.
Respuesta:
Probá en la consola las siguientes consultas:
personas
Respuesta:
numerosDeLoteria
salioCara
Genial, ¡parece que una lista puede contener cualquier tipo de elemento! Podemos tener
listas de booleanos, de números, de strings, de listas...
Y no sólo eso, sino que además pueden contener cualquier cantidad de elementos: uno, dos,
quince, cientos.
¿Podremos entonces tener listas vacías, es decir, que no tengan elementos? ¡Por supuesto!
let unaListaVacia = []
Respuesta:
Por el momento ya sabemos qué cosas podemos representar con listas, y cómo hacerlo.
Pero, ¿qué podemos hacer con ellas?
Empecemos por lo fácil: saber cuántos elementos hay en la lista. Esto lo podemos hacer
utilizando la función longitud, de forma similar a lo que hacíamos con los strings.
Respuesta:
longitud([])
longitud(numerosDeLoteria)
longitud([4, 3])
Las listas son muy útiles para contener múltiples elementos. ¡Pero hay más! También
podemos agregarle elementos en cualquier momento, utilizando la función agregar, que
recibe dos parámetros: la lista y el elemento.
Como vemos, agregar suma un elemento a la lista, lo cual hace que su tamaño aumente.
¿Pero en qué parte de la lista lo agrega? ¿Al principio? ¿Al final? ¿En el medio?.
Respuesta:
Probar en la consola
Ejercicio 7: Trasladar.
Declará un procedimiento trasladar, que tome dos listas, saque el último elemento de la
primera y lo agregue a la segunda.
Respuesta:
¿Y qué sucede si le pasás por parámetro a posicion un elemento que no tiene? ¡Averigualo
vos mismo!
Respuesta:
posicion(diasLaborales, "osvaldo")
Ejercicio 9: Contiene.
Escribí la función contiene que nos diga si una lista contiene un cierto elemento.
Si venís prestando atención a los ejemplos de consulta, habrás notado que las listas también
pueden tener elementos duplicados: [1, 2, 1], ["hola", "hola"], etc.
Por tanto, posicion en realidad devuelve la posición de la primera aparición del elemento
en la lista.
Respuesta:
Así como existe una función para averiguar en qué posición está un elemento, también
puede ocurrir que queramos saber lo contrario: qué elemento está en una cierta posición.
Respuesta:
lista[0]
Te recordamos qué hace la función: tiene que devolver la medalla que le corresponde a los
primeros puestos de una competencia.
Respuesta:
function medallaSegunPuesto(puesto){
if(puesto <= 3){
return(medalla[puesto])
} else {
return(medalla[0])
}
}
Vamos a conocer una manera de recorrer los elementos de una lista con un nuevo amigo: el
bucle for.
Respuesta:
function saludar(personas){
for(let persona1 of personas){
imprimir("hola" + " " + persona1);
}
}
6. Registros.
Respuesta:
estatuaDeLaLibertad
cristoRedentor
torreEiffel
tajMahal
coliseo
Respuesta:
Respuesta:
Respuesta:
function temperaturaDePlaneta(planeta){
return(planeta.nombre + " tiene una temperatura promedio de " +
planeta.temperaturaPromedio + " grados")
}
Respuesta:
Respuesta:
function esDelMilenioPasado(archivo){
return(anio(archivo.creacion) < 2000)
}
Creá una función masDificilDeCocinar, que recibe dos registros de postres por parámetros y
devuelve el que tiene más ingredientes de los dos.
Respuesta:
Así como trabajamos con listas de números, booleanos, strings o más listas, también
podemos listar registros. Se puede hacer todo lo que hacías antes, como por
ejemplo remover, saber su longitud o preguntar por el elemento de cierta posición
utilizando los corchetes [ ].
Respuesta:
Probar en consola:
postresFavoritos
monumentosDeAmerica
Averiguá qué devuelve el campo ingredientes del campo postre del registro menuInfantil.
¡Está un registro adentro del otro!
Respuesta:
Probar en consola
menuInfantil.postre.ingredientes
Respuesta:
function endulzarMenu(menu){
agregar(menu.postre.ingredientes, "azúcar")
return menu.postre
}
7. Recorridos.
¡Probala en la consola!
Respuesta:
Probar en la consola:
gananciaSemestre
Lo que nos gustaría es poder sumar las ganancias de todos los balances de una lista, sin
importar cuántos haya realmente; queremos una función gananciaTotal, que pueda sumar
balances de cualquier período de meses: semestres, cuatrimestres, trimestres, etc. ¡Qué
difícil!
Respuesta:
gananciaTotal([
{ mes: "enero", ganancia: 2 },
{ mes: "febrero", ganancia: 3 }
])
Respuesta:
function gananciaTotal4(balancesDeUnPeriodo){
let sumatoria = 0
sumatoria = sumatoria + balancesDeUnPeriodo[0].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[1].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[2].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[3].ganancia
return sumatoria
}
Lo que tenemos que hacer, entonces, es repetir la operación de acumular varias veces, una
por cada elemento de la lista. ¡Digamos hola (nuevamente) al for...of!
Como ves, el for...of nos permite visitar y hacer algo con cada elemento de una lista; en este
caso, estaremos visitando cada balance de balancesDeUnPeriodo.
Respuesta:
gananciaTotal([
{ mes: "marzo", ganancia: 8 },
{ mes: "agosto", ganancia: 10 }
])
¡Ana tiene nuevos requirimientos! Ahora nos pidió lo siguiente: "Quiero saber cuántos
balances fueron positivos, es decir, aquellos en los que la ganancia fue mayor a cero".
Respuesta:
function cantidadDeBalancesPositivos(balancesDeUnPeriodo){
let cantidad = 0
for(let balance of balancesDeUnPeriodo){
cantidad = cantidad + ((balance.ganancia) > 0)
}
return cantidad;
}
Respuesta:
function gananciaPromedio(gananciaTotal){
let sumatoria = 0
for(let balance of gananciaTotal){
sumatoria = (sumatoria + balance.ganancia)
}
return sumatoria / longitud (gananciaTotal)
}
Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia promedio de
los balances positivos.
Respuesta:
function gananciaPositiva(balancesDeUnPeriodo){
let sumatoria = 0
for(let balance of balancesDeUnPeriodo){
if(balance.ganancia > 0){
sumatoria = sumatoria + (balance.ganancia)
}
}
return sumatoria
}
function promedioGananciasPositivas(balancesDeUnPeriodo){
return gananciaPositiva(balancesDeUnPeriodo) /
cantidadDeBalancesPositivos(balancesDeUnPeriodo)
}
Completá la función ganancias que toma una lista de balances y devuelve una lista que solo
posea solo las ganancias de cada uno.
Respuesta:
function ganancias(balancesDeUnPeriodo){
let ganancias = []
for(let balance of balancesDeUnPeriodo){
agregar(ganancias, balance.ganancia)
}
return ganancias
}
Con la programación se puede hacer cualquier cosa, o casi . Ya hicimos una función para
poder saber la cantidad de balances positivos (cantidadDeBalancesPositivos), ahora vamos
a ver cómo podemos hacer para saber cuáles son esos balances.
Completá la función balancesPositivos que toma los balances de un período y devuelve una
lista con aquellos cuya ganancia fue mayor a cero.
Respuesta:
function balancesPositivos(balancesDeUnPeriodo){
let balances = []
for(let balance of balancesDeUnPeriodo){
if(balance.ganancia > 0){
agregar(balances, balance)
}
}
return balances
}
Respuesta:
function gananciasDeBalancesPositivos(balancesDeUnPeriodo){
return ganancias(balancesPositivos(balancesDeUnPeriodo))
}
function promedioDeBalancesPositivos(balancesDeUnPeriodo){
return promedio(gananciasDeBalancesPositivos(balancesDeUnPeriodo))
}
Vamos a conocer una nueva función, maximo, que nos permite conocer cuál es el mayor
valor en una lista de números.
Usando esta nueva función, definí la función maximaGanancia que nos diga cuál es la
ganancia más alta entre los balances de un período de tiempo.
Respuesta:
function maximaGanancia(balancesDeUnPeriodo){
return maximo(ganancias(balancesDeUnPeriodo))
}
Respuesta:
function minimaGananciaPositiva(balancesDeUnPeriodo){
return minimo(gananciasDeBalancesPositivos(balancesDeUnPeriodo));
}
• meses, la cual dada una lista con registros devuelve una lista de meses;
• afortunados, que filtra aquellos registros que tuvieron una ganancia mayor a $1000;
• mesesAfortunados, devuelve aquellos meses que fueron afortunados.
Respuesta:
Veamos si se va entendiendo: escribí ahora una función JavaScript mitad, que tome un
número y devuelva su mitad. Tené en cuenta que el operador de división en JavaScript es /.
Respuesta:
function mitad(numero){
return(1/2*numero)
}
Respuesta:
function anterior(numero){
return(numero - 1)
}
function triple(numero){
return(numero * 3)
}
function anteriorDelTriple(numero){
return(anterior(triple(numero)))
}
• 4 + 5
• Math.round(4.5)
• funcionMisteriosa(1, 2, 3) (ya la declaramos por vos y la podés usar)
Respuesta:
• Math.round(4.4)
• Math.round(4.6)
• Math.max(4, 7)
• Math.min(4, 7)
Respuesta:
Respuesta:
function extraer(saldo, monto) {
return Math.max((saldo-monto),0);
}
¡Ahora te toca a vos! Dani también dice que a alguien leGustaLeer, cuando la cantidad de
libros que recuerda haber leído es mayor a 20.
Respuesta:
function leGustaLeer(unNumero){
return(unNumero > 20)
}
Ejercicio 8: Booleanos.
• estaEntre, que tome tres números y diga si el primero es mayor al segundo y menor
al tercero.
• estaFueraDeRango: que tome tres números y diga si el primero es menor al segundo
o mayor al tercero.
Respuesta:
Veamos si queda claro: escribí la función esFinDeSemana que tome un string que
represente el nombre de un día de la semana, y nos diga si es "sábado" o "domingo".
Respuesta:
function esFinDeSemana(dia){
return(dia === "sábado" || dia === "domingo")
}
Respuesta:
Escribí la función gritar. Te dejamos para que uses la función convertirEnMayuscula, que,
ehm... bueno... básicamente convierte en mayúsculas un string .
Respuesta:
function gritar(palabra){
return("¡" + convertirEnMayuscula(palabra) + "!")
}
Ninguna introducción al lenguaje JavaScript estaría completa sin mostrar al menos una
estructura de control que ya conocemos: la alternativa condicional.
Veamos si se entiende: escribí una función maximo, que funcione como Math.max (¡no vale
usarla!) y devuelva el máximo entre dos números. Por ejemplo, el máximo entre 4 y 5 es 5,
y el máximo entre 10 y 4, es 10.
Respuesta:
• 1 si el número es positivo.
• 0 si el número es cero.
• -1 si el número es negativo.
Escribí la función signo. Quizás necesites más de un if.
Respuesta:
Respuesta:
function esNumeroDeLaSuerte(numero) {
return (numero)>0 && (numero)<100 && (numero!=15);
}
El jurado de un torneo nos pidió que desarrollemos una función medallaSegunPuesto que
devuelva la medalla que le corresponde a los primeros puestos, según la siguiente lógica:
Respuesta:
function medallaSegunPuesto(lugar){
if(lugar === 1){
return("oro")
} else if(lugar === 2) {
return("plata")
} else if(lugar === 3) {
return("bronce")
} else {
return("nada")
}
}
Respuesta:
Probar en la consola
Respuesta:
4 + 4 vale 8
Escribí una función cuantoCuesta que tome el número de pulgadas del monitor y la cantidad
de memoria, y calcule el costo estimado de nuestra computadora.
Respuesta:
Ahora que sabemos cuantoCuesta una computadora, queremos saber si una computadora me
conviene. Esto ocurre cuando:
Respuesta:
function meConviene(pulgada,memoria){
return (cuantoCuesta(pulgada,memoria) < 6000 && pulgada >= 32 && memoria >=
8);
}
Ejercicio 3: Triangulos.
¡Hora de hacer un poco de geometría! Queremos saber algunas cosas sobre un triángulo:
Respuesta:
Ejercicio 4: Cuadrados.
Respuesta:
function perimetroCuadrado(lado) {
return (lado * 4)
}
function areaCuadrado(lado) {
return (lado * lado)
}
Desarrollá una función estaAfinado, que reciba la frecuencia (un número) del la central, y
diga si dicha frecuencia es igual a 440Hz.
Respuesta:
function estaAfinado(frecuencia){
return (frecuencia === 440)
}
Ahora queremos saber si el la central del piano está cerca de estar afinado. Esto ocurre
cuando está entre 437Hz y 443Hz, pero NO es exactamente 440Hz.
Respuesta:
function estaCerca(frecuencia){
return (437 <= frecuencia && frecuencia <= 443 && frecuencia !== 440)
}
Ejercicio 7: Cartelitos.
Respuesta:
Respuesta:
Respuesta:
Escribí una función decisionConMoneda, que toma tres parámetros y devuelve el segundo
si el primero es "cara", o el tercero, si sale "ceca".
Respuesta:
Queremos saber el valor de las cartas de truco cuando jugamos al envido. Sabemos que:
• Todas las cartas del 1 al 7, inclusive, valen su numeración.
• Las cartas del 10 al 12, inclusive, valen 0.
• No se juega con 8s ni con 9s.
Escribí una función valorEnvido, que tome un número de carta y devuelva su valor de
envido.
Respuesta:
function valorEnvido(carta){
if(carta >= 1 && carta <= 7)
{return carta}
if(carta >= 10 && carta <= 12)
{return 0}
}
Bueno, ehm, no, pará, primero queremos calcular cuántos puntos de envido suma un
jugador. Sabemos que:
• Si las dos cartas son del mismo palo, el valor del envido es la suma de sus valores
de envido más 20.
• De lo contrario, el valor del envido es el mayor valor de envido entre ellas.
Respuesta:
Cuando se juega al truco, los equipos oponentes alternativamente pueden subir la apuesta.
Por ejemplo, si un jugador canta truco, otro jugador puede cantarle retruco. Obviamente,
los puntos que están en juego son cada vez mayores:
Escribí la función valorCantoTruco, que tome el canto y devuelva cuántos puntos vale.
Respuesta:
function valorCantoTruco(canto){
if(canto === "truco"){
return(2)
}
if(canto === "retruco"){
return(3)
}
if(canto === "vale cuatro"){
return(4)
}
}
3. Variables y Procedimientos.
Ejercicio 1: ¿Y el tablero?.
Respuesta:
funcionMisteriosa(2, 1)
Respuesta:
Veamos si va quedando claro, escribí una function versosMartinFierro que imprima por
pantalla los primeros versos del Martín Fierro:
function versosMartinFierro() {
imprimir("Aquí me pongo a cantar");
imprimir("Al compás de la vigüela;");
imprimir("Que el hombre que lo desvela");
imprimir("Una pena extraordinaria");
return 0
}
Respuesta:
function versosMartinFierro() {
imprimir("Aquí me pongo a cantar");
imprimir("Al compás de la vigüela;");
imprimir("Que el hombre que lo desvela");
imprimir("Una pena extraordinaria");
}
Ejercicio 5: ¿Y el program?.
En JavaScript todo lo que escribamos fuera de una function será, implícitamente, dicho
punto de entrada. Por ejemplo, si queremos un programa que imprime por pantalla el
clásico "Hola, mundo!", lo podremos escribir así:
imprimir("¡Hola Mundo!");
Respuesta:
imprimir("Tirando dados");
imprimir("La primera tirada dio " + tirarDado());
imprimir("La segunda tirada dio " + tirarDado());
imprimir("La tercera tirada dio " + tirarDado());
Ejercicio 6: Coerciones.
Veamos si queda claro, escribí una función elefantesEquilibristas, que tome un número de
elefantes y devuelva una rima de una conocida canción "3 elefantes se balanceaban".
Respuesta:
function elefantesEquilibristas(numero){
return(numero + " " + "elefantes se balanceaban")
}
Respuesta:
function perimetroCirculo(radio){
return(3.14159265358979 * 2 * radio)
}
function areaCirculo(radio) {
return(3.14159265358979 * radio * radio)
}
let pi = 3.14159265358979;
Cambiá los lugares donde aparece 3.14159265358979 por la variable pi en las funciones
que tenemos definidas.
Respuesta:
let pi = 3.14159265358979;
function perimetroCirculo(radio){
return(pi * 2 * radio)
}
function areaCirculo(radio) {
return(pi * radio * radio)
}
Ya que vas entendiendo cómo se asignan las variables, te traemos algo para pensar: ¿qué
pasa si intento usar una variable a la que nunca le asigné un valor?
Respuesta:
Las variables declaradas dentro de una function, conocidas como variables locales, no
presentan mayor misterio. Sin embargo, hay que tener un particular cuidado: sólo se pueden
utilizar desde dentro de la function en cuestión.
Respuesta:
Respuesta:
function aumentarFortuna(){
pesosEnMiBilletera = pesosEnMiBilletera * 2
}
Vimos que una variable solo puede tener un valor, entonces cada vez que le asignamos uno
nuevo, perdemos el anterior.
Respuesta:
20
4. Lógica booleana.
Ejercicio 1: ¡Que el último apague la luz!.
Empecemos por algo sencillo, ¿te acordás del operador ! ? Se lo denomina negación, not o
complemento lógico y sirve para negar un valor booleano.
Definí el procedimiento usarCierre para que podamos abrir y cerrar el cierre de una
mochila.
Respuesta:
Respuesta:
function esMayorDeEdad(edad){
return(edad >= 18)
}
function esMenorDeEdad(edad){
return(!esMayorDeEdad(edad))
}
Definí una función esPeripatetico que tome la profesión de una persona, su nacionalidad y
la cantidad de kilómetros que camina por día. Alguien es peripatético cuando es un filósofo
griego y le gusta pasear (camina más de 2 kilómetros por día).
Respuesta:
Probar en consola:
consumePocaEnergia(24, 5)
consumePocaEnergia(24, 0)
consumePocaEnergia(21, 7)
consumePocaEnergia(18, 1)
Respuesta:
Probar en la consola:
gano(true, 25)
gano(false, 30)
gano(false, 20)
gano(true, 31)
• Es feriado, o
• Es fin de semana, o
• No estamos dentro del horario bancario.
Respuesta:
Ahora te toca a vos definir la función sonMediosHermanos. Recordá que los medios
hermanos pueden compartir madre o padre pero no ambos porque... ¡en ese caso serían
hermanos!
Respuesta:
Respuesta:
sonMediosHermanos(arcadio, aurelianoJose)
sonMediosHermanos(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose, remedios)
Veamos si se entiende: definí la función genérica xor, que tome dos booleanos y devuelva
el valor de verdad correspondiente.
Respuesta:
Cuando una expresión matemática tiene varios operadores, sabemos que las
multiplicaciones y divisiones se efectuarán antes que las sumas y las restas:
5 * 3 + 8 / 4 - 3 = 14
Al igual que en matemática, cuando usamos operadores lógicos las expresiones se evalúan
en un orden determinado llamado precedencia.
Respuesta:
Escribí la función puedeJubilarse que recibe la edad y el sexo de una persona, además de los
años de aportes jubilatorios que posee.
El mínimo de edad para realizar el trámite para las mujeres es de 60 años, mientras que para
los hombres es 65. En ambos casos, se deben contar con al menos 30 años de aportes.
¡Intentá resolverlo en una única función! Después vamos a ver cómo quedaría si delegamos.
Respuesta:
• Alcanzar la altura mínima de 1.5m (o 1.2m si está acompañada por una persona
adulta).
• No tener ninguna afección cardíaca.
Definí la función de 3 parámetros puedeSubirse que recibe una altura de una persona en
metros, si está acompañada y si tiene alguna afección cardíaca.
Respuesta:
5. Listas.
Para representar a un conjunto de strings, colocamos todos esos strings que nos interesan,
entre corchetes ([ y ]) separados por comas. Fácil, ¿no?.
Respuesta:
seriesFavoritasDeAna
seriesFavoritasDeHector
["hola","mundo!"]
["hola","hola"]
Ejercicio 2: Y esto, es una lista.
Lo que acabamos de ver es cómo modelar fácilmente conjuntos de cosas. Mediante el uso
de[], en JavaScript contamos con una manera simple de agrupar esos elementos en listas.
¿Acaso hay una cantidad máxima de elementos? ¡No, no hay límite! Las listas pueden tener
cualquier cantidad de elementos.
Respuesta:
personas
Respuesta:
Veamos si queda claro. Probá en la consola las siguientes consultas:
numerosDeLoteria
salioCara
Genial, ¡parece que una lista puede contener cualquier tipo de elemento! Podemos tener
listas de booleanos, de números, de strings, de listas...
Y no sólo eso, sino que además pueden contener cualquier cantidad de elementos: uno, dos,
quince, cientos.
¿Podremos entonces tener listas vacías, es decir, que no tengan elementos? ¡Por supuesto!
let unaListaVacia = []
Respuesta:
Por el momento ya sabemos qué cosas podemos representar con listas, y cómo hacerlo.
Pero, ¿qué podemos hacer con ellas?
Empecemos por lo fácil: saber cuántos elementos hay en la lista. Esto lo podemos hacer
utilizando la función longitud, de forma similar a lo que hacíamos con los strings.
Respuesta:
longitud([])
longitud(numerosDeLoteria)
longitud([4, 3])
Las listas son muy útiles para contener múltiples elementos. ¡Pero hay más! También
podemos agregarle elementos en cualquier momento, utilizando la función agregar, que
recibe dos parámetros: la lista y el elemento.
Como vemos, agregar suma un elemento a la lista, lo cual hace que su tamaño aumente.
¿Pero en qué parte de la lista lo agrega? ¿Al principio? ¿Al final? ¿En el medio?.
Además existe un procedimiento remover, que sólo recibe la lista por parámetro. Investigá
en la consola qué hace.
Respuesta:
Probar en la consola
Ejercicio 7: Trasladar.
Declará un procedimiento trasladar, que tome dos listas, saque el último elemento de la
primera y lo agregue a la segunda.
Respuesta:
¿Y qué sucede si le pasás por parámetro a posicion un elemento que no tiene? ¡Averigualo
vos mismo!
Respuesta:
Copia y pega en la consola
posicion(diasLaborales, "osvaldo")
Ejercicio 9: Contiene.
Escribí la función contiene que nos diga si una lista contiene un cierto elemento.
Si venís prestando atención a los ejemplos de consulta, habrás notado que las listas también
pueden tener elementos duplicados: [1, 2, 1], ["hola", "hola"], etc.
Por tanto, posicion en realidad devuelve la posición de la primera aparición del elemento
en la lista.
Respuesta:
Así como existe una función para averiguar en qué posición está un elemento, también
puede ocurrir que queramos saber lo contrario: qué elemento está en una cierta posición.
Respuesta:
lista[0]
Te recordamos qué hace la función: tiene que devolver la medalla que le corresponde a los
primeros puestos de una competencia.
Respuesta:
function medallaSegunPuesto(puesto){
if(puesto <= 3){
return(medalla[puesto])
} else {
return(medalla[0])
}
}
Vamos a conocer una manera de recorrer los elementos de una lista con un nuevo amigo: el
bucle for.
Respuesta:
function saludar(personas){
for(let persona1 of personas){
imprimir("hola" + " " + persona1);
}
}
6. Registros.
Respuesta:
estatuaDeLaLibertad
cristoRedentor
torreEiffel
tajMahal
coliseo
Ejercicio 2: Tu propio monumento.
Respuesta:
Declaramos los planetas mercurio, marte y saturno como registros con la siguiente
información: nombre, temperaturaPromedio y si tieneAnillos. ¡Probalos en la consola!
Respuesta:
Respuesta:
function temperaturaDePlaneta(planeta){
return(planeta.nombre + " tiene una temperatura promedio de " +
planeta.temperaturaPromedio + " grados")
}
Respuesta:
function moverArchivo(registro, rutaNueva){
let leeme = registro.ruta = rutaNueva
}
Respuesta:
function esDelMilenioPasado(archivo){
return(anio(archivo.creacion) < 2000)
}
Creá una función masDificilDeCocinar, que recibe dos registros de postres por parámetros y
devuelve el que tiene más ingredientes de los dos.
Respuesta:
Así como trabajamos con listas de números, booleanos, strings o más listas, también
podemos listar registros. Se puede hacer todo lo que hacías antes, como por
ejemplo remover, saber su longitud o preguntar por el elemento de cierta posición
utilizando los corchetes [ ].
Respuesta:
Probar en consola:
postresFavoritos
monumentosDeAmerica
Respuesta:
Averiguá qué devuelve el campo ingredientes del campo postre del registro menuInfantil.
¡Está un registro adentro del otro!
Respuesta:
Probar en consola
menuInfantil.postre.ingredientes
Respuesta:
function endulzarMenu(menu){
agregar(menu.postre.ingredientes, "azúcar")
return menu.postre
}
7. Recorridos.
Ejercicio 1: Las ganancias semestrales.
¡Probala en la consola!
Respuesta:
Probar en la consola:
gananciaSemestre
Lo que nos gustaría es poder sumar las ganancias de todos los balances de una lista, sin
importar cuántos haya realmente; queremos una función gananciaTotal, que pueda sumar
balances de cualquier período de meses: semestres, cuatrimestres, trimestres, etc. ¡Qué
difícil!
Respuesta:
gananciaTotal([
{ mes: "enero", ganancia: 2 },
{ mes: "febrero", ganancia: 3 }
])
Respuesta:
function gananciaTotal4(balancesDeUnPeriodo){
let sumatoria = 0
sumatoria = sumatoria + balancesDeUnPeriodo[0].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[1].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[2].ganancia
sumatoria = sumatoria + balancesDeUnPeriodo[3].ganancia
return sumatoria
}
Como ves, el for...of nos permite visitar y hacer algo con cada elemento de una lista; en este
caso, estaremos visitando cada balance de balancesDeUnPeriodo.
Respuesta:
gananciaTotal([
{ mes: "marzo", ganancia: 8 },
{ mes: "agosto", ganancia: 10 }
])
¡Ana tiene nuevos requirimientos! Ahora nos pidió lo siguiente: "Quiero saber cuántos
balances fueron positivos, es decir, aquellos en los que la ganancia fue mayor a cero".
Respuesta:
function cantidadDeBalancesPositivos(balancesDeUnPeriodo){
let cantidad = 0
for(let balance of balancesDeUnPeriodo){
cantidad = cantidad + ((balance.ganancia) > 0)
}
return cantidad;
}
Respuesta:
function gananciaPromedio(gananciaTotal){
let sumatoria = 0
for(let balance of gananciaTotal){
sumatoria = (sumatoria + balance.ganancia)
}
return sumatoria / longitud (gananciaTotal)
}
Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia promedio de
los balances positivos.
Respuesta:
function gananciaPositiva(balancesDeUnPeriodo){
let sumatoria = 0
for(let balance of balancesDeUnPeriodo){
if(balance.ganancia > 0){
sumatoria = sumatoria + (balance.ganancia)
}
}
return sumatoria
}
function promedioGananciasPositivas(balancesDeUnPeriodo){
return gananciaPositiva(balancesDeUnPeriodo) /
cantidadDeBalancesPositivos(balancesDeUnPeriodo)
}
Completá la función ganancias que toma una lista de balances y devuelve una lista que solo
posea solo las ganancias de cada uno.
Respuesta:
function ganancias(balancesDeUnPeriodo){
let ganancias = []
for(let balance of balancesDeUnPeriodo){
agregar(ganancias, balance.ganancia)
}
return ganancias
}
Con la programación se puede hacer cualquier cosa, o casi . Ya hicimos una función para
poder saber la cantidad de balances positivos (cantidadDeBalancesPositivos), ahora vamos
a ver cómo podemos hacer para saber cuáles son esos balances.
Completá la función balancesPositivos que toma los balances de un período y devuelve una
lista con aquellos cuya ganancia fue mayor a cero.
Respuesta:
function balancesPositivos(balancesDeUnPeriodo){
let balances = []
for(let balance of balancesDeUnPeriodo){
if(balance.ganancia > 0){
agregar(balances, balance)
}
}
return balances
}
Respuesta:
function gananciasDeBalancesPositivos(balancesDeUnPeriodo){
return ganancias(balancesPositivos(balancesDeUnPeriodo))
}
function promedioDeBalancesPositivos(balancesDeUnPeriodo){
return promedio(gananciasDeBalancesPositivos(balancesDeUnPeriodo))
}
Vamos a conocer una nueva función, maximo, que nos permite conocer cuál es el mayor
valor en una lista de números.
Usando esta nueva función, definí la función maximaGanancia que nos diga cuál es la
ganancia más alta entre los balances de un período de tiempo.
Respuesta:
function maximaGanancia(balancesDeUnPeriodo){
return maximo(ganancias(balancesDeUnPeriodo))
}
Definí la función minimaGananciaPositiva que nos diga cuál es la ganancia más baja de
todos los balances positivos.
Respuesta:
function minimaGananciaPositiva(balancesDeUnPeriodo){
return minimo(gananciasDeBalancesPositivos(balancesDeUnPeriodo));
}
• meses, la cual dada una lista con registros devuelve una lista de meses;
• afortunados, que filtra aquellos registros que tuvieron una ganancia mayor a $1000;
• mesesAfortunados, devuelve aquellos meses que fueron afortunados.
Respuesta:
function meses(gananciasPeriodo){
let mes = []
for(let periodo of gananciasPeriodo){
agregar(mes, periodo.mes)
}
return mes
}
function afortunados(gananciasPeriodo){
let afortunados = []
for(let periodo of gananciasPeriodo){
if(periodo.ganancia > 1000){
agregar(afortunados, periodo);
}
}
return afortunados;
}
function mesesAfortunados(gananciasPeriodo){
return meses(afortunados(gananciasPeriodo));
}