0% encontró este documento útil (0 votos)
18 vistas64 páginas

Programacion 2

Cargado por

mariamontuelle
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas64 páginas

Programacion 2

Cargado por

mariamontuelle
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 64

en este artículo haremos una guía para poder resolver los ejercicios dados por Mumuki.

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.

Importante: Si quieres ver la Parte 2 entra al siguiente enlace: Ejercicios: Informatorio -


Mumuki

Capítulo 2: Programación Imperativa.

1. Funciones y tipos de datos.

Ejercicio 2: Funciones, declaració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)
}

Ejercicio 3: Funciones, uso.

Veamos si se entiende; escribí las siguientes funciones:

• anterior: toma un número y devuelve ese número menos uno.


• triple: devuelve el triple de un número.
• anteriorDelTriple: que combina las dos funciones anteriores: multiplica a
un número por 3 y le resta 1.

Respuesta:

function anterior(numero){
return(numero - 1)
}
function triple(numero){
return(numero * 3)
}
function anteriorDelTriple(numero){
return(anterior(triple(numero)))
}

Ejercicio 4: Probando funciones.


Veamos si se entiende, probá en la consola las siguientes expresiones:

• 4 + 5
• Math.round(4.5)
• funcionMisteriosa(1, 2, 3) (ya la declaramos por vos y la podés usar)

Respuesta:

Probá en la consola las expresiones

Ejercicio 5: Haciendo cuentas.

Probá en la consola las siguientes expresiones:

• Math.round(4.4)
• Math.round(4.6)
• Math.max(4, 7)
• Math.min(4, 7)

Respuesta:

Probá en la consola las expresiones anteriores

Ejercicio 6: Poniendo topes.

Respuesta:

function extraer(saldo, monto) {


return Math.max((saldo-monto),0);
}

Ejercicio 7: Libros de la buena memoria.

¡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.

Veamos si se entiende; escribí las siguientes funciones:


• 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:

function estaEntre(num1, num2, num3){


return(num1 > num2 && num1 < num3)
}
function estaFueraDeRango(num1, num2, num3){
return(num1 > num2 && num1 > num3)
}

Ejercicio 9: Palabras, sólo palabras.

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")
}

Ejercicio 10: Operando strings.

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:

function longitudNombreCompleto(nombre, apellido){


return longitud((nombre)+(apellido)+(1));
}

Ejercicio 11: ¡GRITAR!.

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:

function maximo(numero1, numero2) {


if (numero1 >= numero2) {
return numero1;
} else {
return numero2;
}
}

Ejercicio 13: ¿De qué signo sos?.

Necesitamos una función signo, que dado un número nos devuelva:

• 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:

function signo (numero){


if(numero > 0) return 1
if(numero === 0) return 0
if(numero < 0) return - 1
}

Ejercicio 14: El retorno del booleano.

Escribí la función esNumeroDeLaSuerte que dado un número diga si cumple la lógica


anterior. ¡No vale usar if!

Respuesta:

function esNumeroDeLaSuerte(numero) {
return (numero)>0 && (numero)<100 && (numero!=15);
}

Ejercicio 15: Los premios.

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:

• primer puesto: le corresponde "oro".


• segundo puesto: le corresponde "plata".
• tercer puesto: le corresponde "bronce".
• otros puestos: le corresponde "nada".

Respuesta:

function medallaSegunPuesto(lugar){
if(lugar === 1){
return("oro")
} else if(lugar === 2) {
return("plata")
} else if(lugar === 3) {
return("bronce")
} else {
return("nada")
}
}

Ejercicio 16: Tipos de datos.

Como acabamos de ver, en JavaScript existen números, booleanos y strings:

Además, existen operaciones que sirven para todos los tipos de datos, por ejemplo:

• ===: nos dice si dos cosas son iguales.


• !==: nos dice si dos cosas son diferentes.

Probá en la consola las siguientes cosas:

• 5 + 6 (ok, los números se pueden sumar).


• 5 === 6 (ok, todas las cosas se pueden comparar).
• 8 > 6 (ok, los números se pueden ordenar).
• !true (ok, los booleanos se pueden negar).
• false / true (no está bien, ¡los booleanos no se pueden dividir!).

Respuesta:

Probar en la consola

Ejercicio 17: Datos de todo tipo.


Antes de terminar un último desafío: ¿Cuál es el valor de las siguientes expresiones?
¡Marcá todas las correctas!

Respuesta:

4 + 4 vale 8

"4" + "4" vale "44"

"on" + "ce" vale "once"

true && false vale false

5 >= 6 vale false

! true vale false

2. Práctica Funciones y Tipos de Datos.

Ejercicio 1: Comprando Hardware.

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:

function cuantoCuesta(monitor, memoria){


return((monitor * 60) + (memoria * 200) + 1000);
}

Ejercicio 2: ¿Me conviene?.

Ahora que sabemos cuantoCuesta una computadora, queremos saber si una computadora me
conviene. Esto ocurre cuando:

• Sale menos de $6000.


• Tiene al menos un monitor de 32 pulgadas.
• Tiene al menos 8GB de memoria.

Escribí la función meConviene, que nuevamente tome el número de pulgadas y cantidad de


memoria y nos diga si nos conviene comprarla.

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:

• perimetroTriangulo: dado los tres lados de un triángulo, queremos saber cuánto


mide su perímetro.
• areaTriangulo: dada la base y altura de un triángulo, queremos saber cuál es su área.

Desarrollá las funciones perimetroTriangulo y areaTriangulo.

Respuesta:

function perimetroTriangulo(lado1, lado2, lado3){


return (lado1 + lado2 + lado3)
}
function areaTriangulo(lado1, lado3){
return (lado1 * lado3 / 2)
}

Ejercicio 4: Cuadrados.

Y ahora es el turno de los cuadrados; queremos saber

• perimetroCuadrado: dado un lado, queremos saber cuánto mide su perímetro.


• areaCuadrado: dado un lado, queremos saber cuál es su area.

Desarrollá las funciones perimetroCuadrado y areaCuadrado.

Respuesta:

function perimetroCuadrado(lado) {
return (lado * 4)
}
function areaCuadrado(lado) {
return (lado * lado)
}

Ejercicio 5: ¿Está afinado?.

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)
}

Ejercicio 6: ¿Está cerca?.

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.

Escribí la función estaCerca.

Respuesta:

function estaCerca(frecuencia){
return (437 <= frecuencia && frecuencia <= 443 && frecuencia !== 440)
}

Ejercicio 7: Cartelitos.

Escribí la función escribirCartelito, que tome un título, un nombre y un apellido y forme un


único string.

Respuesta:

function escribirCartelito(titulo, nombre, apellido){


return(titulo + " " + nombre + " " + apellido)
}

Ejercicio 8: Más Cartelitos.

Respuesta:

function escribirCartelito(titulo, nombre, apellido, bool){


return (titulo + " " + (!bool?nombre+" "+apellido:apellido))
}

Ejercicio 9: Cartelitos óptimos.

Ahora que ya podemos escribir nuestros cartelitos identificatorios grandes y chicos,


queremos una nueva función que nos dé el cartelito de tamaño óptimo:

• Si nombre y apellido tienen, en total, más de 15 letras, queremos un cartelito corto;


• De lo contrario, queremos un cartelito largo.

Definí la función escribirCartelitoOptimo que tome un título, un nombre y un apellido, y


utilizando escribirCartelito genere un cartelito corto o largo, según las reglas anteriores.
Respuesta:

function escribirCartelitoOptimo(titulo, nombre, apellido){


return escribirCartelito(titulo, nombre, apellido,(longitud(nombre +
apellido) >= 15))
}

Ejercicio 10: Cara o ceca.

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:

function decisionConMoneda(moneda, pizzas, empanadas){


if(moneda === "cara"){
return pizzas;
}else{
return empanadas;
}
}

Ejercicio 11: ¡Envido!.

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}
}

Ejercicio 12: ¡Quiero retruco!.

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.

Utilizando la función valorEnvido (que ya escribimos nosotros por vos), desarrollá la


función puntosDeEnvidoTotales que tome los valores y palos de dos cartas y diga cuánto
envido suman en total.

Respuesta:

function puntosDeEnvidoTotales(n1, p1, n2, p2){


if(p1 === p2){
return (valorEnvido(n1) + valorEnvido(n2) + 20)
}else{
return Math.max(n1, n2)
}
}

Ejercicio 13: ¡Quiero vale cuatro!.

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:

Canto Puntos en juego


truco 2
retruco 3
vale cuatro 4

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)

Ejercicio 2: Impresión por pantalla.

Respuesta:

Probá funcionEgocentrica() en la consola.

Ejercicio 3: Martin Fierro.

Veamos si va quedando claro, escribí una function versosMartinFierro que imprima por
pantalla los primeros versos del Martín Fierro:

Aquí me pongo a cantar


Al compás de la vigüela;
Que el hombre que lo desvela
Una pena extraordinaria

Esta function debe devolver 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");
return 0
}

Ejercicio 4: ¿Y los procedimientos?.

Cuando queremos reutilizar código, podíamos declarar:

• funciones, que siempre devuelven algo y no producen ningún efecto.


• procedimientos, que no devuelven nada, y producen efectos.

Envía esta nueva versión de versosMartinFierro.

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")
}

Ejercicio 7: El círculo de la vida.

Considerando al número pi igual a 3.14159265358979 (no es infinito pero lo


suficientemente preciso para nuestros cáculos):

Definí las funciones perimetroCirculo y areaCirculo que reciben el radio de un círculo y a


partir del mismo nos devuelven su perímetro y su área.

Respuesta:

function perimetroCirculo(radio){
return(3.14159265358979 * 2 * radio)
}
function areaCirculo(radio) {
return(3.14159265358979 * radio * radio)
}

Ejercicio 8: Pienso que así es más fácil.

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)
}

Ejercicio 9: Esto no tiene valor.

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:

Copiar, pegar y probar en la consola

Ejercicio 10: Variables globales.

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.

Sin embargo, las variables declaradas directamente en el programa, conocidas


como variables globales, pueden ser utilizadas desde cualquier function.

Respuesta:

let cargaMaximaEnKilogramos = 300


function ascensorSobrecargado(personas){
return(personas * pesoPromedioPersonaEnKilogramos) >
cargaMaximaEnKilogramos
}

Ejercicio 11: Volviéndonos ricos.

Escribí un procedimiento aumentarFortuna que duplique el valor de la variable


global pesosEnMiBilletera. No declares la variable, ya lo hicimos nosotros por vos (con una
cantidad secreta de dinero).

Respuesta:

function aumentarFortuna(){
pesosEnMiBilletera = pesosEnMiBilletera * 2
}

Ejercicio 12: ¿Y esto cuánto vale?.

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.

Si tengo el booleano representado por tieneHambre, el complemento será !tieneHambre.

Definí el procedimiento usarCierre para que podamos abrir y cerrar el cierre de una
mochila.

Respuesta:

let mochilaAbierta = true;


function usarCierre() {
mochilaAbierta = !mochilaAbierta
}
Ejercicio 2: Negar no cuesta nada.

¡Ahora te toca a vos! Definí esMayorDeEdad, que recibe una edad, y


luego esMenorDeEdad a partir de ella.

Respuesta:

function esMayorDeEdad(edad){
return(edad >= 18)
}
function esMenorDeEdad(edad){
return(!esMayorDeEdad(edad))
}

Ejercicio 3: Los peripatéticos.

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:

function esPeripatetico(profesor, nacionalidad, kms){


return(profesor === "filósofo" && nacionalidad === "griego" && kms > 2)
}

Ejercicio 4: La verdad detrás de la conjunción.

Respuesta:

Probar en consola:

consumePocaEnergia(24, 5)

consumePocaEnergia(24, 0)

consumePocaEnergia(21, 7)

consumePocaEnergia(18, 1)

Ejercicio 5: ¡Juguemos al T.E.G.!.

Respuesta:
Probar en la consola:

gano(true, 25)

gano(false, 30)

gano(false, 20)

gano(true, 31)

Ejercicio 6: Y ahora... ¿quién podrá ayudarnos?.

Sabemos que el banco está cerrado cuando:

• Es feriado, o
• Es fin de semana, o
• No estamos dentro del horario bancario.

Definí las funciones esFinDeSemana y estaCerrado.

Respuesta:

let esFeriado = true;


function esFinDeSemana(dia){
return(dia === "sabado" || dia === "domingo")
}
function estaCerrado(esFeriado, dia, horario){
return(esFeriado || !dentroDeHorarioBancario(horario) ||
esFinDeSemana(dia))
}

Ejercicio 7: ¡Buen día!.

En la familia Buendía ocurre que:

• Arcadio es hijo de José Arcadio y de Pilar Ternera.


• Aureliano José es hijo del Coronel Aureliano y Pilar Ternera.
• Aureliano Segundo y Remedios son hijos de Arcadio y Sofía De La Piedad.

Para empezar a analizar esta familia, nosotros ya definimos las


funciones madreDe y padreDe.

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:

function tienenLaMismaMadre(hijo1, hijo2){


let madre1 = madreDe(hijo1);
let madre2 = madreDe(hijo2);
return madre1 === madre2;
}
function tienenElMismoPadre(hijo1, hijo2){
let padre1 = padreDe(hijo1);
let padre2 = padreDe(hijo2);
return padre1 === padre2;
}
function sonMediosHermanos(hijo1, hijo2){
return (tienenLaMismaMadre(hijo1, hijo2) !== tienenElMismoPadre(hijo1,
hijo2));
}

Ejercicio 8: La verdad es que no hay una verdad.

Probá tu función sonMediosHermanos con los siguientes valores y comprobá si se comporta


como la tabla:

Respuesta:

sonMediosHermanos(arcadio, aurelianoJose)
sonMediosHermanos(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose, remedios)

Ejercicio 9: ¡Hola! Mi nombre es Xor.

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:

function xor(a, b){


return(a !== b)
}

Ejercicio 10: Precedencia.

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:

Probala en la consola con los valores:

pagaConTarjeta(true, "crédito", 320)

pagaConTarjeta(false, "crédito", 80)

pagaConTarjeta(true, "débito", 215)

pagaConTarjeta(true, "débito", 32)

Ejercicio 11: Un ejercicio sin precedentes.

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:

function puedeJubilarse(edad, sexo, aporte){


return((sexo === "F" && edad >= 60) || (sexo === "M" && edad >= 65)) &&
aporte >= 30
}

Ejercicio 12: ¿Puedo subir?.

Los requisitos para subir a la atracción son:

• 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:

function puedeSubirse(altura, acompanado, afeccion){


return((altura >= 1.5) || (altura >= 1.2 && acompanado)) && !afeccion
}

5. Listas.

Ejercicio 1: Series favoritas.

Para representar a un conjunto de strings, colocamos todos esos strings que nos interesan,
entre corchetes ([ y ]) separados por comas. Fácil, ¿no?.

Respuesta:

Probá en la consola las siguientes consultas:

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.

Y no sólo eso, sino que además, el orden es importante. Por ejemplo, no es lo


mismo ["hola", "mundo"] que ["mundo", "hola"]: ambos tienen los mismos elementos, pero
en posiciones diferentes.

Respuesta:
Probá en la consola las siguientes consultas:

listasIguales(["hola", "mundo"], ["mundo", "hola"])

listasIguales(["hola", "mundo"], ["hola", "mundo"])

listasIguales(["hola", "mundo"], ["hola", "todo", "el", "mundo"])

listasIguales(["hola"], ["hola", "mundo"])

["hola", "mundo"] === ["mundo", "hola"]

personas

["mara", "julian"] === personas

personas === personas

Ejercicio 3: Juegos de azar.

También podemos representar conjuntos de números o booleanos, de igual forma:


escribiéndolos entre corchetes y separados por comas. Podemos tener listas de números, de
strings, de booleanos, etc. ¡Incluso podríamos tener listas de listas!.

Respuesta:

Veamos si queda claro. Probá en la consola las siguientes consultas:

numerosDeLoteria

salioCara

[[1, 2, 3], [4, 5, 6]]

Ejercicio 4: Listas vacías.

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:

Probá escribir en la consola unaListaVacia

Ejercicio 5: ¿Cuántos elementos tenés?.

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:

Realizá las siguientes consultas en la consola:

longitud([])

longitud(numerosDeLoteria)

longitud([4, 3])

Ejercicio 6: Agregando sabor.

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?.

Averigualo vos mismo: inspeccioná en la consola qué elementos contiene pertenencias,


agregale una "ballesta" y volvé a inspeccionar pertenencias.
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

agregar(pertenencias, "amuleto mágico")

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:

function trasladar(unaLista, otraLista){


agregar(otraLista, remover(unaLista))
}

Ejercicio 8: ¿Y dónde está?.

¿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:

function contiene(array, buscar){


return(posicion(array, buscar) >- 1)
}

Ejercicio 10: Enésimo elemento.

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.

Para averiguarlo podemos usar el operador de indexación, escribiendo después de la


colección y entre corchetes [] la posición que queremos para averiguar.

Respuesta:

let lista =[]

lista[0]

Ejercicio 11: Más premios.

Si le pedís un elemento en una posición igual o mayor al tamaño de la lista, vas a


obtener undefined. No parece algo terrible, pero el problema es que con undefined no podés
hacer nada realmente útil.

Así que la advertencia es: ¡no te pases de índice!

Teniendo esto en cuenta, va un desafío: escribí nuevamente la función medallaSegunPuesto,


pero esta vez usando como máximo un único if. Quizás las listas te pueden ser útiles acá .

Te recordamos qué hace la función: tiene que devolver la medalla que le corresponde a los
primeros puestos de una competencia.

Respuesta:

let medalla = ["nada", "oro", "plata", "bronce"]

function medallaSegunPuesto(puesto){
if(puesto <= 3){
return(medalla[puesto])
} else {
return(medalla[0])
}
}

Ejercicio 12: No te olvides de saludar.

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.

Ejercicio 1: Los primeros registros.

Respuesta:

Copia y pega el código en la consola

estatuaDeLaLibertad
cristoRedentor
torreEiffel
tajMahal
coliseo

Ejercicio 2: Tu propio monumento.

¡Es tu momento del monumento! Guardá en las


variables torreAzadi y monumentoNacionalALaBandera registros de esos monumentos,
oriundos de las ciudades de Teherán,Irán y Rosario,Argentina respectivamente. ¿Te
animás a investigar en qué año se terminaron de construir para completar ese campo?

Respuesta:

let torreAzadi = {nombre: "Torre Azadi", locacion: "Teherán, Irán",


anioDeConstruccion: 1971}
let monumentoNacionalALaBandera = {nombre: "Monumento Nacional A La Bandera",
locacion: "Rosario, Argentina", anioDeConstruccion: 1957 }

Ejercicio 3: Accediendo al campo.


Declaramos los planetas mercurio, marte y saturno como registros con la siguiente
información: nombre, temperaturaPromedio y si tieneAnillos. ¡Probalos en la consola!

Respuesta:

Declaramos los planetas mercurio, marte y saturno como registros ¡Problos en la


consola!

Ejercicio 4: Temperatura de plane.

Desarrollá una función temperaturaDePlaneta que reciba por parámetro un registro de


planeta y devuelva un string que indica su nombre y su temperatura promedio. ¡Tiene que
funcionar para cualquier planeta!

Respuesta:

function temperaturaDePlaneta(planeta){
return(planeta.nombre + " tiene una temperatura promedio de " +
planeta.temperaturaPromedio + " grados")
}

Ejercicio 5: Moviendo archivos.

Desarrollá el procedimiento moverArchivo, que recibe un registro y una nueva ruta y


modifica el archivo con la nueva ruta.

Respuesta:

function moverArchivo(registro, rutaNueva){


let leeme = registro.ruta = rutaNueva
}

Ejercicio 6: Registros de dos milenios.

En el ejercicio anterior modificamos la ruta del registro, pero no utilizamos su fecha de


creación. ¡Usémosla! Queremos saber si un archivo es del milenio pasado, lo que ocurre
cuando su año es anterior a 2000.

Desarrollá la función esDelMilenioPasado, que recibe un archivo y devuelve un booleano.

Respuesta:

function esDelMilenioPasado(archivo){
return(anio(archivo.creacion) < 2000)
}

Ejercicio 7: Postres complejos.

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:

function masDificilDeCocinar(postre1, postre2){


if(longitud(postre1.ingredientes) < longitud(postre2.ingredientes)){
return postre2;
}
if(longitud(postre1.ingredientes) >= longitud(postre2.ingredientes)){
return postre1;
}
}

Ejercicio 8: Listas de registro.

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 [ ].

Probá en la consola las listas postresFavoritos y monumentosDeAmerica. Hay un postre que


no mostramos antes, ¿te das cuenta cuál es solamente leyendo sus ingredientes?

Respuesta:

Probar en consola:

postresFavoritos

monumentosDeAmerica

Ejercicio 9: 60 dulces minutos.

Desarrollá el procedimiento agregarAPostresRapidos, que recibe una lista con postres


rápidos y un postre por parámetro. Si el tiempo de cocción es de una hora o menos, se
agrega el registro a la lista.
Respuesta:

function agregarAPostresRapidos(lista, postre){


if(postre.tiempoDeCoccion <= 60){
agregar(lista, postre)
}
}

Ejercicio 10: Hay un registro en mi registro.

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

Ejercicio 11: ¡Azúcar!.

Definí un procedimiento endulzarMenu, que recibe un registro menú y le agrega azúcar a


los ingredientes de su postre. Si ya tiene azúcar, no importa... ¡le agrega más!

Respuesta:

function endulzarMenu(menu){
agregar(menu.postre.ingredientes, "azúcar")
return menu.postre
}

7. Recorridos.

Ejercicio 1: Las ganancias semestrales.

¿Tiene algún problema la función gananciaSemestre que escribimos anteriormente?


¿Funcionará con los balances trimestrales? ¿Y con los cuatrimestrestrales?

¡Probala en la consola!

Respuesta:

Probar en la consola:
gananciaSemestre

Ejercicio 2: ¿Y el resto de las ganancias?.

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 }
])

Ejercicio 3: Todas las ganancias, la ganancia.

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
}

Ejercicio 4: Nos visita un viejo amigo.

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 }
])

Ejercicio 5: Cuentas claras.

¡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".

Completá la función cantidadDeBalancesPositivos. Si prestás atención, notarás que tiene


una estructura similar al problema anterior.

Respuesta:

function cantidadDeBalancesPositivos(balancesDeUnPeriodo){
let cantidad = 0
for(let balance of balancesDeUnPeriodo){
cantidad = cantidad + ((balance.ganancia) > 0)
}
return cantidad;
}

Ejercicio 6: La ganancia promedio.

Pasemos al siguiente requerimiento de Ana. Ya podemos calcular una sumatoria de


ganancias y también crear contadores, ahora vamos a calcular promedios.

Ana quisiera saber dado un conjunto cualquiera de balances cuál es su gananciaPromedio.

Respuesta:

function gananciaPromedio(gananciaTotal){
let sumatoria = 0
for(let balance of gananciaTotal){
sumatoria = (sumatoria + balance.ganancia)
}
return sumatoria / longitud (gananciaTotal)
}

Ejercicio 7: Quién gana, quién pierde.

Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia promedio de
los balances positivos.

Definí las funciones:


• gananciaPositiva, que es la suma de las ganancias de los balances positivos.
• promedioGananciasPositivas invocando gananciaPositiva y cantidadDeBalancesPos
itivos.

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)
}

Ejercicio 8: Soy el mapa, soy el mapa.

Lamentablemente no se puede usar la función promedio con nuestra lista de registros. Lo


que necesitamos es una lista que tenga solo las ganancias de cada balance. Para ello
debemos transformar, o mapear, cada elemento de la lista.

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
}

Ejercicio 9: A filtrar, a filtrar cada cosa en su lugar.

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
}

Ejercicio 10: Un promedio más positivo.

Ahora que tenemos la función ganancias y balancesPositivos podemos utilizar la


función promedio genérica para saber cuál es el promedio de ganancia de los balances
positivos.

Definí la función gananciasDeBalancesPositivos y luego usala junto a promedio para


definir promedioDeBalancesPositivos.

Respuesta:

function gananciasDeBalancesPositivos(balancesDeUnPeriodo){
return ganancias(balancesPositivos(balancesDeUnPeriodo))
}
function promedioDeBalancesPositivos(balancesDeUnPeriodo){
return promedio(gananciasDeBalancesPositivos(balancesDeUnPeriodo))
}

Ejercicio 11: Esto es lo máximo.

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))
}

Ejercicio 12: Como mínimo.

Suponemos que adivinaste el nombre. En caso que no, es minimo.


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));
}

Ejercicio 13: Los mejores meses del año.

Para eso vamos a hacer las siguientes funciones:

• 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.

Definí las funciones meses, afortunados, mesesAfortunados.

Respuesta:

Capítulo 2: Programación Imperativa.

1. Funciones y tipos de datos.

Ejercicio 2: Funciones, declaració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)
}

Ejercicio 3: Funciones, uso.


Veamos si se entiende; escribí las siguientes funciones:

• anterior: toma un número y devuelve ese número menos uno.


• triple: devuelve el triple de un número.
• anteriorDelTriple: que combina las dos funciones anteriores: multiplica a
un número por 3 y le resta 1.

Respuesta:

function anterior(numero){
return(numero - 1)
}
function triple(numero){
return(numero * 3)
}
function anteriorDelTriple(numero){
return(anterior(triple(numero)))
}

Ejercicio 4: Probando funciones.

Veamos si se entiende, probá en la consola las siguientes expresiones:

• 4 + 5
• Math.round(4.5)
• funcionMisteriosa(1, 2, 3) (ya la declaramos por vos y la podés usar)

Respuesta:

Probá en la consola las expresiones

Ejercicio 5: Haciendo cuentas.

Probá en la consola las siguientes expresiones:

• Math.round(4.4)
• Math.round(4.6)
• Math.max(4, 7)
• Math.min(4, 7)

Respuesta:

Probá en la consola las expresiones anteriores

Ejercicio 6: Poniendo topes.

Respuesta:
function extraer(saldo, monto) {
return Math.max((saldo-monto),0);
}

Ejercicio 7: Libros de la buena memoria.

¡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.

Veamos si se entiende; escribí las siguientes funciones:

• 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:

function estaEntre(num1, num2, num3){


return(num1 > num2 && num1 < num3)
}
function estaFueraDeRango(num1, num2, num3){
return(num1 > num2 && num1 > num3)
}

Ejercicio 9: Palabras, sólo palabras.

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")
}

Ejercicio 10: Operando strings.


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:

function longitudNombreCompleto(nombre, apellido){


return longitud((nombre)+(apellido)+(1));
}

Ejercicio 11: ¡GRITAR!.

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:

function maximo(numero1, numero2) {


if (numero1 >= numero2) {
return numero1;
} else {
return numero2;
}
}

Ejercicio 13: ¿De qué signo sos?.

Necesitamos una función signo, que dado un número nos devuelva:

• 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:

function signo (numero){


if(numero > 0) return 1
if(numero === 0) return 0
if(numero < 0) return - 1
}

Ejercicio 14: El retorno del booleano.

Escribí la función esNumeroDeLaSuerte que dado un número diga si cumple la lógica


anterior. ¡No vale usar if!

Respuesta:

function esNumeroDeLaSuerte(numero) {
return (numero)>0 && (numero)<100 && (numero!=15);
}

Ejercicio 15: Los premios.

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:

• primer puesto: le corresponde "oro".


• segundo puesto: le corresponde "plata".
• tercer puesto: le corresponde "bronce".
• otros puestos: le corresponde "nada".

Respuesta:

function medallaSegunPuesto(lugar){
if(lugar === 1){
return("oro")
} else if(lugar === 2) {
return("plata")
} else if(lugar === 3) {
return("bronce")
} else {
return("nada")
}
}

Ejercicio 16: Tipos de datos.

Como acabamos de ver, en JavaScript existen números, booleanos y strings:


Además, existen operaciones que sirven para todos los tipos de datos, por ejemplo:

• ===: nos dice si dos cosas son iguales.


• !==: nos dice si dos cosas son diferentes.

Probá en la consola las siguientes cosas:

• 5 + 6 (ok, los números se pueden sumar).


• 5 === 6 (ok, todas las cosas se pueden comparar).
• 8 > 6 (ok, los números se pueden ordenar).
• !true (ok, los booleanos se pueden negar).
• false / true (no está bien, ¡los booleanos no se pueden dividir!).

Respuesta:

Probar en la consola

Ejercicio 17: Datos de todo tipo.

Antes de terminar un último desafío: ¿Cuál es el valor de las siguientes expresiones?


¡Marcá todas las correctas!

Respuesta:

4 + 4 vale 8

"4" + "4" vale "44"

"on" + "ce" vale "once"

true && false vale false

5 >= 6 vale false

! true vale false

2. Práctica Funciones y Tipos de Datos.

Ejercicio 1: Comprando Hardware.

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:

function cuantoCuesta(monitor, memoria){


return((monitor * 60) + (memoria * 200) + 1000);
}

Ejercicio 2: ¿Me conviene?.

Ahora que sabemos cuantoCuesta una computadora, queremos saber si una computadora me
conviene. Esto ocurre cuando:

• Sale menos de $6000.


• Tiene al menos un monitor de 32 pulgadas.
• Tiene al menos 8GB de memoria.

Escribí la función meConviene, que nuevamente tome el número de pulgadas y cantidad de


memoria y nos diga si nos conviene comprarla.

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:

• perimetroTriangulo: dado los tres lados de un triángulo, queremos saber cuánto


mide su perímetro.
• areaTriangulo: dada la base y altura de un triángulo, queremos saber cuál es su área.

Desarrollá las funciones perimetroTriangulo y areaTriangulo.

Respuesta:

function perimetroTriangulo(lado1, lado2, lado3){


return (lado1 + lado2 + lado3)
}
function areaTriangulo(lado1, lado3){
return (lado1 * lado3 / 2)
}

Ejercicio 4: Cuadrados.

Y ahora es el turno de los cuadrados; queremos saber


• perimetroCuadrado: dado un lado, queremos saber cuánto mide su perímetro.
• areaCuadrado: dado un lado, queremos saber cuál es su area.

Desarrollá las funciones perimetroCuadrado y areaCuadrado.

Respuesta:

function perimetroCuadrado(lado) {
return (lado * 4)
}
function areaCuadrado(lado) {
return (lado * lado)
}

Ejercicio 5: ¿Está afinado?.

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)
}

Ejercicio 6: ¿Está cerca?.

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.

Escribí la función estaCerca.

Respuesta:

function estaCerca(frecuencia){
return (437 <= frecuencia && frecuencia <= 443 && frecuencia !== 440)
}

Ejercicio 7: Cartelitos.

Escribí la función escribirCartelito, que tome un título, un nombre y un apellido y forme un


único string.

Respuesta:

function escribirCartelito(titulo, nombre, apellido){


return(titulo + " " + nombre + " " + apellido)
}

Ejercicio 8: Más Cartelitos.

Respuesta:

function escribirCartelito(titulo, nombre, apellido, bool){


return (titulo + " " + (!bool?nombre+" "+apellido:apellido))
}

Ejercicio 9: Cartelitos óptimos.

Ahora que ya podemos escribir nuestros cartelitos identificatorios grandes y chicos,


queremos una nueva función que nos dé el cartelito de tamaño óptimo:

• Si nombre y apellido tienen, en total, más de 15 letras, queremos un cartelito corto;


• De lo contrario, queremos un cartelito largo.

Definí la función escribirCartelitoOptimo que tome un título, un nombre y un apellido, y


utilizando escribirCartelito genere un cartelito corto o largo, según las reglas anteriores.

Respuesta:

function escribirCartelitoOptimo(titulo, nombre, apellido){


return escribirCartelito(titulo, nombre, apellido,(longitud(nombre +
apellido) >= 15))
}

Ejercicio 10: Cara o ceca.

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:

function decisionConMoneda(moneda, pizzas, empanadas){


if(moneda === "cara"){
return pizzas;
}else{
return empanadas;
}
}

Ejercicio 11: ¡Envido!.

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}
}

Ejercicio 12: ¡Quiero retruco!.

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.

Utilizando la función valorEnvido (que ya escribimos nosotros por vos), desarrollá la


función puntosDeEnvidoTotales que tome los valores y palos de dos cartas y diga cuánto
envido suman en total.

Respuesta:

function puntosDeEnvidoTotales(n1, p1, n2, p2){


if(p1 === p2){
return (valorEnvido(n1) + valorEnvido(n2) + 20)
}else{
return Math.max(n1, n2)
}
}

Ejercicio 13: ¡Quiero vale cuatro!.

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:

Canto Puntos en juego


truco 2
retruco 3
vale cuatro 4

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)

Ejercicio 2: Impresión por pantalla.

Respuesta:

Probá funcionEgocentrica() en la consola.

Ejercicio 3: Martin Fierro.

Veamos si va quedando claro, escribí una function versosMartinFierro que imprima por
pantalla los primeros versos del Martín Fierro:

Aquí me pongo a cantar


Al compás de la vigüela;
Que el hombre que lo desvela
Una pena extraordinaria

Esta function debe devolver 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");
return 0
}

Ejercicio 4: ¿Y los procedimientos?.

Cuando queremos reutilizar código, podíamos declarar:

• funciones, que siempre devuelven algo y no producen ningún efecto.


• procedimientos, que no devuelven nada, y producen efectos.

Envía esta nueva versión de versosMartinFierro.

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")
}

Ejercicio 7: El círculo de la vida.

Considerando al número pi igual a 3.14159265358979 (no es infinito pero lo


suficientemente preciso para nuestros cáculos):

Definí las funciones perimetroCirculo y areaCirculo que reciben el radio de un círculo y a


partir del mismo nos devuelven su perímetro y su área.

Respuesta:

function perimetroCirculo(radio){
return(3.14159265358979 * 2 * radio)
}
function areaCirculo(radio) {
return(3.14159265358979 * radio * radio)
}

Ejercicio 8: Pienso que así es más fácil.

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)
}

Ejercicio 9: Esto no tiene valor.

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:

Copiar, pegar y probar en la consola

Ejercicio 10: Variables globales.

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.

Sin embargo, las variables declaradas directamente en el programa, conocidas


como variables globales, pueden ser utilizadas desde cualquier function.

Respuesta:

let cargaMaximaEnKilogramos = 300


function ascensorSobrecargado(personas){
return(personas * pesoPromedioPersonaEnKilogramos) >
cargaMaximaEnKilogramos
}

Ejercicio 11: Volviéndonos ricos.

Escribí un procedimiento aumentarFortuna que duplique el valor de la variable


global pesosEnMiBilletera. No declares la variable, ya lo hicimos nosotros por vos (con una
cantidad secreta de dinero).

Respuesta:

function aumentarFortuna(){
pesosEnMiBilletera = pesosEnMiBilletera * 2
}

Ejercicio 12: ¿Y esto cuánto vale?.

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.

Si tengo el booleano representado por tieneHambre, el complemento será !tieneHambre.

Definí el procedimiento usarCierre para que podamos abrir y cerrar el cierre de una
mochila.

Respuesta:

let mochilaAbierta = true;


function usarCierre() {
mochilaAbierta = !mochilaAbierta
}

Ejercicio 2: Negar no cuesta nada.

¡Ahora te toca a vos! Definí esMayorDeEdad, que recibe una edad, y


luego esMenorDeEdad a partir de ella.

Respuesta:

function esMayorDeEdad(edad){
return(edad >= 18)
}
function esMenorDeEdad(edad){
return(!esMayorDeEdad(edad))
}

Ejercicio 3: Los peripatéticos.

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:

function esPeripatetico(profesor, nacionalidad, kms){


return(profesor === "filósofo" && nacionalidad === "griego" && kms > 2)
}

Ejercicio 4: La verdad detrás de la conjunción.


Respuesta:

Probar en consola:

consumePocaEnergia(24, 5)

consumePocaEnergia(24, 0)

consumePocaEnergia(21, 7)

consumePocaEnergia(18, 1)

Ejercicio 5: ¡Juguemos al T.E.G.!.

Respuesta:

Probar en la consola:

gano(true, 25)

gano(false, 30)

gano(false, 20)

gano(true, 31)

Ejercicio 6: Y ahora... ¿quién podrá ayudarnos?.

Sabemos que el banco está cerrado cuando:

• Es feriado, o
• Es fin de semana, o
• No estamos dentro del horario bancario.

Definí las funciones esFinDeSemana y estaCerrado.

Respuesta:

let esFeriado = true;


function esFinDeSemana(dia){
return(dia === "sabado" || dia === "domingo")
}
function estaCerrado(esFeriado, dia, horario){
return(esFeriado || !dentroDeHorarioBancario(horario) ||
esFinDeSemana(dia))
}

Ejercicio 7: ¡Buen día!.

En la familia Buendía ocurre que:

• Arcadio es hijo de José Arcadio y de Pilar Ternera.


• Aureliano José es hijo del Coronel Aureliano y Pilar Ternera.
• Aureliano Segundo y Remedios son hijos de Arcadio y Sofía De La Piedad.

Para empezar a analizar esta familia, nosotros ya definimos las


funciones madreDe y padreDe.

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:

function tienenLaMismaMadre(hijo1, hijo2){


let madre1 = madreDe(hijo1);
let madre2 = madreDe(hijo2);
return madre1 === madre2;
}
function tienenElMismoPadre(hijo1, hijo2){
let padre1 = padreDe(hijo1);
let padre2 = padreDe(hijo2);
return padre1 === padre2;
}
function sonMediosHermanos(hijo1, hijo2){
return (tienenLaMismaMadre(hijo1, hijo2) !== tienenElMismoPadre(hijo1,
hijo2));
}

Ejercicio 8: La verdad es que no hay una verdad.

Probá tu función sonMediosHermanos con los siguientes valores y comprobá si se comporta


como la tabla:

Respuesta:

sonMediosHermanos(arcadio, aurelianoJose)
sonMediosHermanos(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose, remedios)

Ejercicio 9: ¡Hola! Mi nombre es Xor.


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:

function xor(a, b){


return(a !== b)
}

Ejercicio 10: Precedencia.

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:

Probala en la consola con los valores:

pagaConTarjeta(true, "crédito", 320)

pagaConTarjeta(false, "crédito", 80)

pagaConTarjeta(true, "débito", 215)

pagaConTarjeta(true, "débito", 32)

Ejercicio 11: Un ejercicio sin precedentes.

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:

function puedeJubilarse(edad, sexo, aporte){


return((sexo === "F" && edad >= 60) || (sexo === "M" && edad >= 65)) &&
aporte >= 30
}

Ejercicio 12: ¿Puedo subir?.

Los requisitos para subir a la atracción son:

• 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:

function puedeSubirse(altura, acompanado, afeccion){


return((altura >= 1.5) || (altura >= 1.2 && acompanado)) && !afeccion
}

5. Listas.

Ejercicio 1: Series favoritas.

Para representar a un conjunto de strings, colocamos todos esos strings que nos interesan,
entre corchetes ([ y ]) separados por comas. Fácil, ¿no?.

Respuesta:

Probá en la consola las siguientes consultas:

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.

Y no sólo eso, sino que además, el orden es importante. Por ejemplo, no es lo


mismo ["hola", "mundo"] que ["mundo", "hola"]: ambos tienen los mismos elementos, pero
en posiciones diferentes.

Respuesta:

Probá en la consola las siguientes consultas:

listasIguales(["hola", "mundo"], ["mundo", "hola"])

listasIguales(["hola", "mundo"], ["hola", "mundo"])

listasIguales(["hola", "mundo"], ["hola", "todo", "el", "mundo"])

listasIguales(["hola"], ["hola", "mundo"])

["hola", "mundo"] === ["mundo", "hola"]

personas

["mara", "julian"] === personas

personas === personas

Ejercicio 3: Juegos de azar.

También podemos representar conjuntos de números o booleanos, de igual forma:


escribiéndolos entre corchetes y separados por comas. Podemos tener listas de números, de
strings, de booleanos, etc. ¡Incluso podríamos tener listas de listas!.

Respuesta:
Veamos si queda claro. Probá en la consola las siguientes consultas:

numerosDeLoteria

salioCara

[[1, 2, 3], [4, 5, 6]]

Ejercicio 4: Listas vacías.

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:

Probá escribir en la consola unaListaVacia

Ejercicio 5: ¿Cuántos elementos tenés?.

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:

Realizá las siguientes consultas en la consola:

longitud([])

longitud(numerosDeLoteria)
longitud([4, 3])

Ejercicio 6: Agregando sabor.

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?.

Averigualo vos mismo: inspeccioná en la consola qué elementos contiene pertenencias,


agregale una "ballesta" y volvé a inspeccionar pertenencias.

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

agregar(pertenencias, "amuleto mágico")

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:

function trasladar(unaLista, otraLista){


agregar(otraLista, remover(unaLista))
}

Ejercicio 8: ¿Y dónde está?.

¿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:

function contiene(array, buscar){


return(posicion(array, buscar) >- 1)
}

Ejercicio 10: Enésimo elemento.

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.

Para averiguarlo podemos usar el operador de indexación, escribiendo después de la


colección y entre corchetes [] la posición que queremos para averiguar.

Respuesta:

let lista =[]

lista[0]

Ejercicio 11: Más premios.

Si le pedís un elemento en una posición igual o mayor al tamaño de la lista, vas a


obtener undefined. No parece algo terrible, pero el problema es que con undefined no podés
hacer nada realmente útil.

Así que la advertencia es: ¡no te pases de índice!


Teniendo esto en cuenta, va un desafío: escribí nuevamente la función medallaSegunPuesto,
pero esta vez usando como máximo un único if. Quizás las listas te pueden ser útiles acá .

Te recordamos qué hace la función: tiene que devolver la medalla que le corresponde a los
primeros puestos de una competencia.

Respuesta:

let medalla = ["nada", "oro", "plata", "bronce"]

function medallaSegunPuesto(puesto){
if(puesto <= 3){
return(medalla[puesto])
} else {
return(medalla[0])
}
}

Ejercicio 12: No te olvides de saludar.

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.

Ejercicio 1: Los primeros registros.

Respuesta:

Copia y pega el código en la consola

estatuaDeLaLibertad
cristoRedentor
torreEiffel
tajMahal
coliseo
Ejercicio 2: Tu propio monumento.

¡Es tu momento del monumento! Guardá en las


variables torreAzadi y monumentoNacionalALaBandera registros de esos monumentos,
oriundos de las ciudades de Teherán,Irán y Rosario,Argentina respectivamente. ¿Te
animás a investigar en qué año se terminaron de construir para completar ese campo?

Respuesta:

let torreAzadi = {nombre: "Torre Azadi", locacion: "Teherán, Irán",


anioDeConstruccion: 1971}
let monumentoNacionalALaBandera = {nombre: "Monumento Nacional A La Bandera",
locacion: "Rosario, Argentina", anioDeConstruccion: 1957 }

Ejercicio 3: Accediendo al campo.

Declaramos los planetas mercurio, marte y saturno como registros con la siguiente
información: nombre, temperaturaPromedio y si tieneAnillos. ¡Probalos en la consola!

Respuesta:

Declaramos los planetas mercurio, marte y saturno como registros ¡Problos en la


consola!

Ejercicio 4: Temperatura de plane.

Desarrollá una función temperaturaDePlaneta que reciba por parámetro un registro de


planeta y devuelva un string que indica su nombre y su temperatura promedio. ¡Tiene que
funcionar para cualquier planeta!

Respuesta:

function temperaturaDePlaneta(planeta){
return(planeta.nombre + " tiene una temperatura promedio de " +
planeta.temperaturaPromedio + " grados")
}

Ejercicio 5: Moviendo archivos.

Desarrollá el procedimiento moverArchivo, que recibe un registro y una nueva ruta y


modifica el archivo con la nueva ruta.

Respuesta:
function moverArchivo(registro, rutaNueva){
let leeme = registro.ruta = rutaNueva
}

Ejercicio 6: Registros de dos milenios.

En el ejercicio anterior modificamos la ruta del registro, pero no utilizamos su fecha de


creación. ¡Usémosla! Queremos saber si un archivo es del milenio pasado, lo que ocurre
cuando su año es anterior a 2000.

Desarrollá la función esDelMilenioPasado, que recibe un archivo y devuelve un booleano.

Respuesta:

function esDelMilenioPasado(archivo){
return(anio(archivo.creacion) < 2000)
}

Ejercicio 7: Postres complejos.

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:

function masDificilDeCocinar(postre1, postre2){


if(longitud(postre1.ingredientes) < longitud(postre2.ingredientes)){
return postre2;
}
if(longitud(postre1.ingredientes) >= longitud(postre2.ingredientes)){
return postre1;
}
}

Ejercicio 8: Listas de registro.

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 [ ].

Probá en la consola las listas postresFavoritos y monumentosDeAmerica. Hay un postre que


no mostramos antes, ¿te das cuenta cuál es solamente leyendo sus ingredientes?

Respuesta:
Probar en consola:

postresFavoritos

monumentosDeAmerica

Ejercicio 9: 60 dulces minutos.

Desarrollá el procedimiento agregarAPostresRapidos, que recibe una lista con postres


rápidos y un postre por parámetro. Si el tiempo de cocción es de una hora o menos, se
agrega el registro a la lista.

Respuesta:

function agregarAPostresRapidos(lista, postre){


if(postre.tiempoDeCoccion <= 60){
agregar(lista, postre)
}
}

Ejercicio 10: Hay un registro en mi registro.

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

Ejercicio 11: ¡Azúcar!.

Definí un procedimiento endulzarMenu, que recibe un registro menú y le agrega azúcar a


los ingredientes de su postre. Si ya tiene azúcar, no importa... ¡le agrega más!

Respuesta:

function endulzarMenu(menu){
agregar(menu.postre.ingredientes, "azúcar")
return menu.postre
}

7. Recorridos.
Ejercicio 1: Las ganancias semestrales.

¿Tiene algún problema la función gananciaSemestre que escribimos anteriormente?


¿Funcionará con los balances trimestrales? ¿Y con los cuatrimestrestrales?

¡Probala en la consola!

Respuesta:

Probar en la consola:

gananciaSemestre

Ejercicio 2: ¿Y el resto de las ganancias?.

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 }
])

Ejercicio 3: Todas las ganancias, la ganancia.

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
}

Ejercicio 4: Nos visita un viejo amigo.


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 }
])

Ejercicio 5: Cuentas claras.

¡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".

Completá la función cantidadDeBalancesPositivos. Si prestás atención, notarás que tiene


una estructura similar al problema anterior.

Respuesta:

function cantidadDeBalancesPositivos(balancesDeUnPeriodo){
let cantidad = 0
for(let balance of balancesDeUnPeriodo){
cantidad = cantidad + ((balance.ganancia) > 0)
}
return cantidad;
}

Ejercicio 6: La ganancia promedio.

Pasemos al siguiente requerimiento de Ana. Ya podemos calcular una sumatoria de


ganancias y también crear contadores, ahora vamos a calcular promedios.

Ana quisiera saber dado un conjunto cualquiera de balances cuál es su gananciaPromedio.

Respuesta:

function gananciaPromedio(gananciaTotal){
let sumatoria = 0
for(let balance of gananciaTotal){
sumatoria = (sumatoria + balance.ganancia)
}
return sumatoria / longitud (gananciaTotal)
}

Ejercicio 7: Quién gana, quién pierde.

Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia promedio de
los balances positivos.

Definí las funciones:

• gananciaPositiva, que es la suma de las ganancias de los balances positivos.


• promedioGananciasPositivas invocando gananciaPositiva y cantidadDeBalancesPos
itivos.

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)
}

Ejercicio 8: Soy el mapa, soy el mapa.

Lamentablemente no se puede usar la función promedio con nuestra lista de registros. Lo


que necesitamos es una lista que tenga solo las ganancias de cada balance. Para ello
debemos transformar, o mapear, cada elemento de la lista.

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
}

Ejercicio 9: A filtrar, a filtrar cada cosa en su lugar.

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
}

Ejercicio 10: Un promedio más positivo.

Ahora que tenemos la función ganancias y balancesPositivos podemos utilizar la


función promedio genérica para saber cuál es el promedio de ganancia de los balances
positivos.

Definí la función gananciasDeBalancesPositivos y luego usala junto a promedio para


definir promedioDeBalancesPositivos.

Respuesta:

function gananciasDeBalancesPositivos(balancesDeUnPeriodo){
return ganancias(balancesPositivos(balancesDeUnPeriodo))
}
function promedioDeBalancesPositivos(balancesDeUnPeriodo){
return promedio(gananciasDeBalancesPositivos(balancesDeUnPeriodo))
}

Ejercicio 11: Esto es lo máximo.

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))
}

Ejercicio 12: Como mínimo.

Suponemos que adivinaste el nombre. En caso que no, es minimo.

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));
}

Ejercicio 13: Los mejores meses del año.

Para eso vamos a hacer las siguientes funciones:

• 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.

Definí las funciones meses, afortunados, mesesAfortunados.

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));
}

¡No olvides compartir!

También podría gustarte