Documentos de Académico
Documentos de Profesional
Documentos de Cultura
5) // redondea
funcionMisteriosa(1, 2, 3)
Math.max(4,7)
Math.min(4,7)
function estaEntre(num1,num2,num3){
return num1>num2 && num1<num3;
}
function estaFueraDeRango(num1,num2,num3){
return num1<num2 || num1>num3;
}
if(moneda==="cara"){
return pizzas;
}else{
return empanadas;
}
}
function valorEnvido(nroCarta){
if(nroCarta>=1 && nroCarta<=7){
return nroCarta;
}else{
if(nroCarta>=10 && nroCarta<=12){
return nroCarta===0;
}
}
}
}
}
function valorCantoTruco(canto){
if (canto==="truco"){
return 2;
}else{
if(canto==="retruco"){
return 3;
}else{
if(canto==="vale cuatro"){
return 4;
}
}
}
}
function funcionEgocentrica() {
imprimir("soy una función que imprime por pantalla");
imprimir("y estoy por devolver el valor 5");
return 5;
}
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;
}
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");
}
//afuera de la funcion//
imprimir("Tirando dados");
imprimir("La primera tirada dio " + tirarDado());
imprimir("La segunda tirada dio " + tirarDado());
imprimir("La tercera tirada dio " + tirarDado());
function elefantesEquilibristas(nro){
return nro + " elefantes se balanceaban";
}
function perimetroCirculo(radio){
return radio*2*3.14159265358979;
}
function areaCirculo(radio){
return radio*radio*3.14159265358979;
function perimetroCirculo(radio){
return radio*2*pi;
}
function areaCirculo(radio){
return radio*radio*pi;
x += y; //equivalente a x = x + y;
x *= y; //equivalente a x = x * y;
x -= y; //equivalente a x = x - y;
x++; //equivalente a x = x + 1;
//inicialmente la variable numero vale 8
al hacer numero *= 2 la variable pasa a tener su valor multiplicado por 2,
es decir, 16;
al hacer numero += 4 le sumamos 4 a 16 y lo guardamos en número, por ende
la función cuentaExtravagante retorna 20
function cuentaExtravagante() {
let numero = 8;
numero *= 2;
numero += 4;
return numero;
}
function esMayorDeEdad(edad){
return edad>=18;
}
function esMenorDeEdad(edad){
return !esMayorDeEdad(edad);
}
otra version
function sePuedeConcentrar(bebida,temperatura, estáProgramando){
return (((bebida==="té" && temperatura>=95) || (bebida ==="mate" &&
temperatura===80)) && estáProgramando) ;
}
Como ves, para representar a un conjunto de strings, colocamos todos esos strings
que nos interesan, entre corchetes ([ y ]) separados por comas.
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 = []
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.
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. Por ejemplo:
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. Por ejemplo:
pertenencias
=> ["espada","escudo","antorcha"]
> agregar(pertenencias, "ballesta")
=> undefined
> pertenencias
=> ["espada","escudo","antorcha","ballesta"]
> remover(pertenencias, "ballesta")
=> undefined
> pertenencias
=> ["espada","escudo","antorcha"]
>
Ejemplo:
¿Tenés dudas sobre cómo quitar y agregar elementos? Repasemos agregar y remover:
Otra cosa que queremos hacer con las listas es saber en qué posición se encuentra
un elemento. Para ello utilizamos la función posicion de la siguiente manera:
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:
> mesesDelAnio[0]
"enero"
> ["ese", "perro", "tiene", "la", "cola", "peluda"][1]
"perro"
OOOOOO
function medallaSegunPuesto(puesto){
if (puesto>=1 && puesto<=3){
return ["oro", "plata", "bronce"][puesto-1];//loque esta al lado es la posicion
}
else
{
return "nada";
}
}
Vamos a conocer una manera de recorrer los elementos de una lista con un nuevo
amigo: el for.
Imaginémonos que tenemos una lista con los precios de los productos que compramos
en el supermercado y queremos restar cada uno de ellos a plataEnBilletera . Usando
for podemos hacerlo así:
Si teníamos $500 en nuestra billetera, después del for nos van a quedar $303
porque:
function saludar(personas) {
for(let persona of personas) {
imprimir ("hola" + " " + persona)
}
}
registros///////
nombreEstatuaDeLaLibertad = "Estatua de la Libertad";
locacionEstatuaDeLaLibertad = "Nueva York";
anioDeConstruccionEstatuaDeLaLibertad = "1886";
nombreCristoRedentor = "Cristo Redentor";
locacionCristoRedentor = "Rio De Janeiro";
anioDeConstruccionCristoRedentor = "1931";
en consola::
estatuaDeLaLibertad
cristoRedentor
torreEiffel
tajMahal
coliseo
estatuaDeLaLibertad
=> {nombre:"Estatua de la Libertad",locacion:"Nueva York, Estados Unidos de
América",anioDeConstruccion:1886}
> cristoRedentor
=> {nombre:"Cristo Redentor",locacion:"Rio de Janeiro,
Brasil",anioDeConstruccion:1931}
> tajMahal
{ nombre: "Taj Mahal", locacion: "Agra, India", anioDeConstruccion: 1653 }
Esa consulta era porque estábamos viendo al registro tajMahal completo, incluyendo
todos sus campos. ¡Pero también se puede consultar por un campo particular! Mirá :
> tajMahal.locacion
"Agra, India"
> tajMahal.anioDeConstruccion
1653
La sintaxis para modificar campos de registros es muy similar a lo que hacemos para
cambiar los valores de las variables. Por ejemplo, para cambiar la temperatura de
un planeta:
saturno.temperaturaPromedio = -140;
Ahora imaginá que tenemos un registro para representar un archivo, del que sabemos
su ruta (dónde está guardado) y su fecha de creación. Si queremos cambiar su ruta
podemos hacer...
> leeme
{ ruta: "C:\leeme.txt", creacion: "23/09/2004" }
> leeme
{ ruta: "C:\documentos\leeme.txt", creacion: "23/09/2004" }
El registro se llama auto; marca y modelo, son sus campos (que representan su
característica.
Como sería un registro que represente un pais?
let pais={idioma: “castellano”, nombre: “Argentina”, superficie: 2700000}
Por último, también podemos definir una lista de registros, donde cada elemento de
la lista es un registro.
Por ejemplo:
let listaAutos = [{marca: "Toyota”, modelo: "Yaris"},
{marca:”Ford”,modelo:”Focus”}]
Esta lista tiene dos elementos, cada uno formado por un registro.
function esDelMilenioPasado(archivo){
return anio(archivo.creacion) <2000
}
> anio("04/11/1993")
1993
function esDelMilenioPasado(archivo)
{
//acá va el código
}
Ahora veamos de qué se trata un archivo.
El archivo es en realidad un registro que representa un archivo. Tiene dos campos:
ruta (que contiene un string con la ubicación del archivo) y creacion (que contiene
un string con la fecha de alta del archivo).
Ahora bien, por otro lado tenemos una función anio que recibe un string
representando una fecha y devuelve la parte correspondiente al año.
Es decir, que si hacés: anio("14/09/1989") te devuelve 1989.
Es decir, que de acuerdo al ejemplo anterior, si pusieras anio(archivo.creacion) te
devolvería 1989
function esDelMilenioPasado(archivo)
{
return //anio de archivo.creacion es menor a 2000//
}
Lo que está a la derecha del return lo puse entre // para indicar que es
pseudocódigo. Vos tendrías que escribir esa condición en lenguaje javascript.
/////
Unos ejercicios atrás te contamos la diferencia entre listas y registros. ¡Pero eso
no significa que no podamos usar ambas estructuras a la vez!
Por ejemplo, una lista puede ser el campo de un registro. Mirá estos registros de
postres, de los cuales sabemos cuántos minutos de cocción requieren y sus
ingredientes:
En el ejercicio anterior te mostramos que un registro puede tener una lista entre
sus campos. ¿Y al revés? ¿Podemos tener una lista de registros?
¡Sí! 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 [].
Consola
Biblioteca
> postresFavoritos
=> [{ingredientes:["galletitas","dulce de leche","crema"],tiempoDeCoccion:20},
{ingredientes:["huevos","leche","azúcar","vainilla"],tiempoDeCoccion:50},
{ingredientes:["queso crema","frambuesas"],tiempoDeCoccion:80},{ingredientes:["jugo
de limón","almidón de maíz","leche","huevos"],tiempoDeCoccion:65}]
> monumentosDeAmerica
=> [{nombre:"Monumento Nacional a la Bandera",locacion:"Rosario,
Argentina",anioDeConstruccion:1957},{nombre:"Estatua de la
Libertad",locacion:"Nueva York, Estados Unidos de
América",anioDeConstruccion:1886},{nombre:"Cristo Redentor",locacion:"Rio de
Janeiro, Brasil",anioDeConstruccion:1931}]
///////
Definí el procedimiento agregarAPostresRapidos, que toma 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.
/////
el siguiente es un menú con bife de lomo como plato principal, una ensalada de
papa, zanahoria y arvejas como acompañamiento y un cheesecake de postre. Como el
registro es un poco extenso, y para que sea más legible, lo vamos a escribir de la
siguiente forma:
let menuDelDia = {
platoPrincipal: "bife de lomo",
ensalada: ["papa", "zanahoria", "arvejas"],
postre: { ingredientes: ["queso crema", "frambuesas"], tiempoDeCoccion: 80 }
};
Averiguá qué devuelve el campo ingredientes del campo postre del registro
menuInfantil. ¡Está un registro adentro del otro! La sintaxis es la siguiente:
menuInfantil.postre.ingredientes
menuInfantil.postre.ingredientes
=> ["galletitas","dulce de leche","crema"]
>
//////
Recordá que cada menú tiene un postre y que cada postre tiene ingredientes
77777
Ana, contadora de una conocida empresa , tiene registros para representar los
balances de cada mes y una lista para guardarlos. Por ejemplo, para el último
semestre del año pasado registró los siguientes:
"Obvio, solo tenemos que sumar las ganancias de todos los balances", dijimos, y
escribimos el siguiente código:
function gananciaSemestre(balances) {
return balances[0].ganancia + balances[1].ganancia +
balances[2].ganancia + balances[3].ganancia +
balances[4].ganancia + balances[5].ganancia;
}
"Gracias ", nos dijo Ana, y se fue calcular las ganancias usando la función que le
pasamos. Pero un rato más tarde, volvió contándonos que también había registrado
los balances del primer trimestre de este año:
Es muy repetitiva y tediosa de escribir. ¡Tenemos que hacer muchas sumas a mano!
No es genérica, como bien dice su nombre, sólo sirve para sumar las ganancias de 6
balances:
si la lista tiene más de seis balances, sólo suma los primeros;
si tiene menos, no funciona (¿te acordás cuando te dijimos que si te ibas de índice
cosas malas podían ocurrir? )
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!
> gananciaTotal([
{ mes: "enero", ganancia: 2 },
{ mes: "febrero", ganancia: 3 }
])
> gananciaTotal([
{ mes: "enero", ganancia: 2 },
{ mes: "febrero", ganancia: 3 },
{ mes: "marzo", ganancia: 1 },
{ mes: "abril", ganancia: 8 },
{ mes: "mayo", ganancia: 8 },
{ mes: "junio", ganancia: -1 }
])
> gananciaTotal([])
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;
}
function gananciaTotal(balancesDeUnPeriodo) {
let sumatoria = 0;
for (let balance of balancesDeUnPeriodo) {
sumatoria = sumatoria + balance.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.
////
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".
function cantidadDeBalancesPositivos(balancesDeUnPeriodo) {
let cantidad = 0;
for (let balance of balancesDeUnPeriodo) {
if(balance.ganancia >0)
cantidad = cantidad + 1
}
return cantidad;
}
////
> gananciaPromedio([
{ mes: "marzo", ganancia: 8 },
{ mes: "agosto", ganancia: 10 }
])
9
Bien, dicha función tiene que retornar la ganancia promedio de los balances.
Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia
promedio de los balances positivos.
Como podés ver todos los promedios se basan en el mismo principio . Sumar una
cantidad determinada elementos y dividir el resultado por esa cantidad. Si
quisiéramos realizar una función promedio genérica sería algo así:
function promedio(listaDeNumeros) {
return sumatoria(listaDeNumeros) / longitud(listaDeNumeros);
}
function sumatoria(listaDeNumeros) {
let sumatoria = 0;
for (let numero of listaDeNumeros) {
sumatoria = sumatoria + numero;
}
return sumatoria;
}
Te acordás de las listas? Bueno, en estos ejercicios estás trabajando con listas
más complejas porque son registros, es decir, cada elemento de la lista tiene 2
partes, una parte es el mes y la otra parte es la ganancia. Hagamos un repasito de
cómo se trabaja una lista. Las palabras clave son lista que es la variable que
contiene varios elementos. Elemento que es cada una de las palabras agrupadas en la
lista. Indice que es la posición de cada elemento dentro de la lista. Veamos un
ejemplo:
Cada elemento de la lista tiene una posición dentro de la lista, comenzando desde
cero. A saber:
0. "mate",
1. "cafe",
2. "harina",
3. "palmitos",
4. "yerba",
5. "mermelada"
listaDeCompras[3]
que es equivalente a "palmitos".
listaDeCompras[1]
que es equivalente a "cafe".
y así...
Ahora bien, tratádose de registros, ahora las listas en lugar de tener un elemento
simple por índice, tiene un elemento con 2 cualidades:
Imaginate que al producto se le agrega la marca, entonces quedaría así:
let listaDeCompras = [
{nombre: "mate" , marca: "marolio"},
{nombre: "cafe", marca: "marolio"}
{nombre:"harina", marca: "marolio"},
{nombre: "palmitos", marca: "marolio"},
{nombre: "yerba", marca: "marolio"},
{nombre:"mermelada", marca: "marolio"}
]
Entonces si querés averiguar la marca del 3er elemento del registro, sería de la
siguiente manera:
listaDeCompras[2].marca
//te devuelve "marolio"
Ahora bien, el recorrido for lo que hace es evitar tener que usar el índice
[numero], sino que recorre elemento por elemento, y a cada elemento vos le
pones un nombre, en el caso de este ejercicio vos lo llamaste balances, en el
caso de este ejemplo que te di de compras quizas seria apropiado productos.
Por cada elemento, el recorrido se encarga de hacer una operación. Entonces,
dentro del recorrido, tenés que operar sobre balances, no sobre
BalancesDeUnPeriodo,
porque en mi ejemplo, sería como operar sobre listaDeCompras en lugar de sobre
productos.
Después, cuando agregas los elementos que cumplen, tenés que agregar balances,
no el registro balancesDeUnPeriodo, y lo tenés que agregar a la lista ganancias,
no a la lista nuevaLista porque no está definida. Revisá esas cuestiones y volvé
a intentar.
//////
ganancias tiene que ser una lista que va a almacenar solo las ganancias
de los balances es decir que tenés que inicializarla de esta manera
Por otro lado, para asignarle los valores de las ganancias la función agregar se
encarga de ello. Por ejemplo tenemos la lista
fruta=["manzana","banana"], para agregarle el elemento "durazno" hay que hacer
agregar(fruta, "durazno")
fruta=agregar("durazno", fruta) No es correcto
para acceder a las ganancias de cada balance se usa la notación por punto:
balance.ganancia, entonces cada elemento que tenes que agregarle a la lista
ganancias es balance.ganancia, por lo que tenés que usar la función así:
agregar(ganancias,balance.ganancia
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.
> ganancias([
{ mes: "enero", ganancia: 40 },
{ mes: "febrero", ganancia: 12 },
{ mes: "marzo", ganancia: 8}
])
[40, 12, 8]
function ganancias(balancesDeUnPeriodo) {
let ganancias = [];
for (let balance of balancesDeUnPeriodo) {
agregar(ganancias,balance.ganancia)
}
return ganancias;
}
para acceder a las ganancias de cada balance se usa la notación por punto:
balance.ganancia, entonces cada elemento que tenes que agregarle a la lista
ganancias es
balance.ganancia, por lo que tenés que usar la función así:
agregar(ganancias,balance.ganancia
//////
balances es una lista vacia que definimos en esta linea ---> let balances = [];
Esta es la lista que queremos retornar al final de nuestro ejercicio
.
El objetivo del ejercicio es retornar una lista de aquellos balances que son
positivos
.
balancesDeUnPeriodo es una lista de registros
Los registros los vimos en la leccion 6.Registros ---> 2. Programación
Imperativa/6. Registros/3. Accediendo al campo
.
Podemos tener una lista de cualquier valor, por ejemplo lista de numeros --->
[1,2,3,4]
Lista de strings ---> ["hola", "manzana", "pera"]
Lista de registros ---> [ { mes: "enero", ganancia: 40 }, { mes: "febrero",
ganancia: 12 }, { mes: "marzo", ganancia: 8} ]
Cada registro es lo que tenemos entre llaves ---> { mes: "marzo", ganancia: 8}
.
Ahora bien, en los ejercicios de esta Leccion, estamos trabajando con balances. Un
balance equivale a un registro: { mes: "marzo", ganancia: 8}. El balance lo compone
su mes y su ganancia.
.
Los balances de un periodo equivale a la lista de registros (lista de balances) ---
> [ { mes: "enero", ganancia: 40 }, { mes: "febrero", ganancia: 12 }, { mes:
"marzo", ganancia: 8} ]
.
Lo que hacemos cuando definimos el for es recorrer todos los elementos de nuestra
lista de registros --> for (let balance of balancesDeUnPeriodo)
En el ejercicio 2. Programación Imperativa/7. Recorridos/4. Nos visita un viejo
amigo vemos que utilizamos el for para poder "visitar" cada elemento de nuestra
lista de registros. De esta manera por cada elemento podemos realizar una accion.
En let balance definimos como vamos a llamar a cada elemento de esta lista de
registros.
En este caso se llama balance.
.
Recordemos el objetivo del ejercicio. Si la ganancia del balance es positiva, vamos
a guardar el balance en la lista que definimos al principio. ¿Como sabemos si la
ganancia es positiva? Accedemos al campo del balance y preguntamos si es mayor a
0. Esto lo hacemos en un if. En tu solucion:
if(balancesDeUnPeriodo.ganancia > 0)
Recordemos que balancesDeUnPeriodo tiene esta forma ---> [ { mes: "enero",
ganancia: 40 }, { mes: "febrero", ganancia: 12 }, { mes: "marzo", ganancia: 8} ]
.
Estamos haciendo ---> [ { mes: "enero", ganancia: 40 }, { mes: "febrero",
ganancia: 12 }, { mes: "marzo", ganancia: 8} ] . ganancia
.
No podemos acceder a la ganancia de la lista de balances. Tenemos que tomar de a un
elemento. Para ello usamos balance
Podemos acceder al campo ganancia de balance. Recordemos que balance tiene esta
forma ---> { mes: "marzo", ganancia: 8}
.
Ahora bien, si la ganancia del balance es positiva. Queremos guardar este balance
en nuestra lista.
La lista se llama balances
La funcion que utilizamos para agregar un elemento a la lista es agregar --->
https://seprogramar.inti.gob.ar/inti/chapters/2-programacion-imperativa/
appendix#agregarunalista-unelemento
El primer parametro que recibe la funcion agregar es una lista. En nuestro caso
esta lista es balances. El segundo parametro es el elemento que queremos agregar a
la lista, en nuestro caso es el balance. En tu solucion:
agregar(balance, balancesDeUnPeriodo.ganancia)
.
Agregas balancesDeUnPeriodo.ganancia a balance (tiene que ser balances para
referirse a la lista).
.
Recordemos que la forma que tiene balancesDeUnPeriodo es ---> [ { mes: "enero",
ganancia: 40 }, { mes: "febrero", ganancia: 12 }, { mes: "marzo", ganancia: 8} ]
No queremos guardar esta lista entera. Queremos quedarnos solamente con aquellos
balances cuya ganancia es positiva.
Sabemos cual balance es positivo por el if. Luego, vamos a agregar a nuestra lista
el balance
.
Para encarar estos ejercicios es bueno identificar cada elemento que nos pide usar
el ejercicio. Sabemos que siempre vamos a partir con una lista de registros que
tendrá esta forma ---> [ { mes: "enero", ganancia: 40 }, { mes: "febrero",
ganancia: 12 }, { mes: "marzo", ganancia: 8} ]
A partir de esta lista, vamos a querer extraer informacion de ella.
/////
function balancesPositivos(balancesDeUnPeriodo) {
let balances = [] ;
for (let balance of balancesDeUnPeriodo) {
if(balance.ganancia > 0){
agregar( balances, balance)
}
}
return balances;
}
Como ves, lo curioso de esta función es que pareciera devolver siempre uno menos de
lo esperado. Por ejemplo, la palabra "grande" aparece tercera, no segunda; y
"lunes" es el primer día laboral, no el cero. ¿Es que los creadores de JavaScript
se equivocaron?
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.
> mesesDelAnio[0]
"enero"
> ["ese", "perro", "tiene", "la", "cola", "peluda"][1]
"perro"
¡Ojo! El número que le pases, formalmente llamado índice, debe ser menor a la
longitud de la lista, o cosas malas pueden suceder
> tajMahal
{ nombre: "Taj Mahal", locacion: "Agra, India", anioDeConstruccion: 1653 }
Esa consulta era porque estábamos viendo al registro tajMahal completo, incluyendo
todos sus campos. ¡Pero también se puede consultar por un campo particular! Mirá :
> tajMahal.locacion
"Agra, India"
> tajMahal.anioDeConstruccion
1653
Por ejemplo, una lista puede ser el campo de un registro. Mirá estos registros de
postres, de los cuales sabemos cuántos minutos de cocción requieren y sus
ingredientes:
¿Te acordás cuando vimos que una lista podía estar compuesta por otras listas? ¡Con
los registros aplica la misma idea! Si tenemos alguna estructura de datos compleja,
puede ocurrir que no alcance con representarla únicamente mediante strings,
números, booleanos y listas, sino que necesitemos otro registro dentro.
¡No se puede vivir a base de postres! Bueno, quizás sí, pero mantengamos una
alimentación saludable . Mediante un registro queremos modelar un menú completo:
consiste en un plato principal , los vegetales de la ensalada que acompaña , y un
postre como lo veníamos trabajando, es decir, sigue siendo un registro.
Por ejemplo, el siguiente es un menú con bife de lomo como plato principal, una
ensalada de papa, zanahoria y arvejas como acompañamiento y un cheesecake de
postre. Como el registro es un poco extenso, y para que sea más legible, lo vamos a
escribir de la siguiente forma:
let menuDelDia = {
platoPrincipal: "bife de lomo",
ensalada: ["papa", "zanahoria", "arvejas"],
postre: { ingredientes: ["queso crema", "frambuesas"], tiempoDeCoccion: 80 }
};
Averiguá qué devuelve el campo ingredientes del campo postre del registro
menuInfantil. ¡Está un registro adentro del otro! La sintaxis es la siguiente:
menuInfantil.postre.ingredientes
Ana, contadora de una conocida empresa , tiene registros para representar los
balances de cada mes y una lista para guardarlos. Por ejemplo, para el último
semestre del año pasado registró los siguientes:
"Obvio, solo tenemos que sumar las ganancias de todos los balances", dijimos, y
escribimos el siguiente código:
function gananciaSemestre(balances) {
return balances[0].ganancia + balances[1].ganancia +
balances[2].ganancia + balances[3].ganancia +
balances[4].ganancia + balances[5].ganancia;
}
Viendo que podemos hacer todo lo que nos pide, Ana quiere saber la ganancia
promedio de los balances positivos.
Como podés ver todos los promedios se basan en el mismo principio . Sumar una
cantidad determinada elementos y dividir el resultado por esa cantidad. Si
quisiéramos realizar una función promedio genérica sería algo así:
function promedio(listaDeNumeros) {
return sumatoria(listaDeNumeros) / longitud(listaDeNumeros);
}
function sumatoria(listaDeNumeros) {
let sumatoria = 0;
for (let numero of listaDeNumeros) {
sumatoria = sumatoria + numero;
}
return sumatoria;
}
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.
> ganancias([
{ mes: "enero", ganancia: 40 },
{ mes: "febrero", ganancia: 12 },
{ mes: "marzo", ganancia: 8}
])
[40, 12, 8]
function ganancias(balancesDeUnPeriodo) {
let ganancias = [];
for (let balance of balancesDeUnPeriodo) {
agregar(ganancias,balance.ganancia)
}
return ganancias;
}
balances es una lista que contiene justamente eso, balances . Pero no todos, tienen
que cumplir una condición.
function balancesPositivos(balancesDeUnPeriodo) {
let balances = [] ;
for (let balance of balancesDeUnPeriodo) {
if(balance.ganancia > 0){
agregar( balances, balance)
}
}
return balances;
}
Muy bien! Ahora ya sabemos cómo filtrar una lista. En criollo, aprendimos a obtener
los elementos de una lista que cumplen una condición determinada. En este caso
obtuvimos una nueva lista con los balances que presentaban una ganancia positiva
function gananciasDeBalancesPositivos(balancesDeUnPeriodo){
let ganancias=[];
for
(let balance of balancesPositivos(balancesDeUnPeriodo)){
agregar(ganancias,balance.ganancia );
}
return ganancias;
}
function promedioDeBalancesPositivos(balancesDeUnPeriodo){
return promedio(gananciasDeBalancesPositivos(balancesDeUnPeriodo));
}
mi function : xdddd
function gananciasDeBalancesPositivos (balancesDeUnPeriodo){
let ganancias = []
for (let balance of balancesPositivos(balancesDeUnPeriodo)){
agregar(ganancias, balance.ganancia)
}
return ganancias;
}
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. Por ejemplo:
> maximaGanancia([
{ mes: "enero", ganancia: 87 },
{ mes: "febrero", ganancia: 12 },
{ mes: "marzo", ganancia: 8}
])
87
return maximo(ganancias(balanceDeUnPeriodo)) ;
}
Definí la función minimaGananciaPositiva que nos diga cuál es la ganancia más baja
de todos los balances positivos.
> minimaGananciaPositiva([
{ mes: "enero", ganancia: -40 },
{ mes: "febrero", ganancia: 42 },
{ mes: "marzo", ganancia: 8},
{ mes: "abril", ganancia: -5}
])
8
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.
> meses([
{ mes: "enero", ganancia: 870 },
{ mes: "febrero", ganancia: 1000 },
{ mes: "marzo", ganancia: 1020 },
{ mes: "abril", ganancia: 2300 },
{ mes: "mayo", ganancia: -10 }
])
["enero", "febrero", "marzo", "abril", "mayo"]
> afortunados([
{ mes: "enero", ganancia: 870 },
{ mes: "febrero", ganancia: 1000 },
{ mes: "marzo", ganancia: 1020 },
{ mes: "abril", ganancia: 2300 },
{ mes: "mayo", ganancia: -10 }
])
[ { mes: "marzo", ganancia: 1020 }, { mes: "abril", ganancia: 2300 }]
> mesesAfortunados([
{ mes: "enero", ganancia: 870 },
{ mes: "febrero", ganancia: 1000 },
{ mes: "marzo", ganancia: 1020 },
{ mes: "abril", ganancia: 2300 },
{ mes: "mayo", ganancia: -10 }
])
["marzo", "abril"]
Definí las funciones meses, afortunados, mesesAfortunados.
function meses(mes){
let meses = []
for (let estemes of mes){
agregar(meses, estemes.mes)
}
return meses;
}
function afortunados(mes){
let ganancias = []
for (let mesAfortunado of mes ){
if(mesAfortunado.ganancia > 1000){
agregar(ganancias, mesAfortunado)
}
}
return ganancias;
}
function mesesAfortunados(mes){
let mesesAfortunados = [];
for (let mesConSuerte of meses(afortunados(mes))){
agregar(mesesAfortunados, mesConSuerte)
}
return mesesAfortunados;
}
////OTRA VERSION
function meses(regMeses){
let meses=[];
for(let estemes of regMeses){
agregar(meses,estemes.mes);
}
return meses;
}
function afortunados(regMeses){
let afortunados=[];
for (let mesrico of regMeses){
if (mesrico.ganancia>1000){
agregar(afortunados,mesrico);
}
}
return afortunados;
}
function mesesAfortunados(regMeses){
let mesesAfortunados=[];
for (let supermes of meses(afortunados(regMeses))){
agregar(mesesAfortunados,supermes);
}
return mesesAfortunados;
}
function ganancias(balancesDeUnPeriodo) {
let ganancias = [];
for (let balance of balancesDeUnPeriodo) {
agregar(ganancias,balance.ganancia)
}
return ganancias;
}
function balancesPositivos(balancesDeUnPeriodo) {
let balances = [] ;
for (let balance of balancesDeUnPeriodo) {
if(balance.ganancia > 0){
agregar( balances, balance)
}
}
return balances;
}
function perimetroCuadrado(lado){
return lado*4;
}
function areaCuadrado (lado){
return lado*lado;
}
function gritar(grito){
return "¡" + convertirEnMayuscula(grito) + "!";
}
function signo(num){
if (num>0){
return 1;
}else
if(num===0){
return 0;
}
else{
return -1;
}
function esNumeroDeLaSuerte(num){
return num>0 && num<100 && num!==15;
}
function medallaSegunPuesto(medalla){
if (medalla===1){
return "oro";
}else
if (medalla===2){
return "plata";
}else
if(medalla===3){
return "bronce";
}
else
return "nada";
}
/**/
/**/
/**/
/**/
/**/
/**/
function listasIguales(unArray, otroArray) /* ... */
// Retorna un booleano que nos dice si dos listas son iguales
//
// Por ejemplo:
//
// > listasIguales([1, 2, 3], [1, 2, 3])
// true
// > listasIguales([1, 2, 3], [4, 5, 3])
// false