Está en la página 1de 97

lOMoARcPSD|15364079

Ejercicios Imperativa Y Objetos - Mumuki - Para consulta

Programación 2 (Universidad de la República)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por Emiliano Jacobo (emicueva23@gmail.com)
lOMoARcPSD|15364079

Curso de Introducción a la Programación

Capítulo 1: Fundamentos.

1. Primeros Programas.

Ejercicio 5: Que siga el movimiento.

La sintaxis de un program es bastante simple:

1. Escribimos una línea (renglón) que diga program, seguido de una llave de
apertura: {
2. A continuación, los comandos: uno por línea
3. Y finalmente, una última llave que cierra la que abrimos anteriormente }

Respuesta:

program {
Mover(Norte)
Mover(Norte)
Mover(Norte)
}

Ejercicio 6: Para todos lados.

Respuesta:

program {
Mover(Sur)
Mover(Este)
Mover(Este)
}

Ejercicio 7: El orden de las cosas.

Los humanos, solemos pensar en función del resultado final, es decir, resaltamos
el objetivo del programa. Nos importa más qué hace, y no cómo. Esta manera denotacional
nos llevaría a decir que, simplemente, mueve el cabezal al noreste.

Por eso hay varias formas de resolver un mismo problema: podemos crear varios programas
que hagan lo mismo (el qué), pero que lo hagan de forma diferente (el cómo).

Respuesta:

program {
Mover(Este)
Mover(Norte)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 8: Sí, esto también se puede romper.

Si bien nunca vamos a querer que nuestro programa se rompa, es algo que
definitivamente te va a pasar muchas veces. Pero no es motivo para frustrarse ni mucho
menos, te aseguramos que a todo el mundo le pasó alguna vez (bueno, también 2, 3, 100,
800 veces...).

Respuesta:

program{
Mover(Sur)
}

Ejercicio 9: Nuestras primeras bolitas.

Además de moverse, el cabezal también puede poner bolitas en la celda actual. Para eso
contamos con la operación Poner, que le dice al cabezal que deposite una bolita del color
dado:

Respuesta:

program{
Poner(Rojo)
}

Ejercicio 10: Más y más bolitas.

Respuesta:

program {
Poner(Rojo)
Poner(Rojo)
Poner(Azul)
Poner(Verde)
Poner(Rojo)
}

Ejercicio 11: Poné tus primeras bolitas.

Como te habrás dado cuenta, estos tableros son un poco mágicos, podemos poner en una
celda tantas bolitas como queramos: 2, 4, 12, 50, 1000. ¡No hay ningún límite!

Esto es algo muy interesante que ocurre al programar: podemos trabajar con cantidades tan
grandes como queramos.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Respuesta:

program{
Poner(Rojo)
Poner(Rojo)
Poner(Rojo)
Poner(Rojo)
Poner(Negro)
Poner(Negro)
Poner(Negro)
}

Ejercicio 12: Sacar Bolitas.

De la misma forma que hay un "poner bolita"(Poner), tenemos un "sacar bolita"(Sacar),


que quita exactamente una bolita del color dado.

Respuesta:

program {
Mover(Sur)
Sacar(Rojo)
}

Ejercicio 13: Cuando no hay bolitas.

Respuesta:

program{
Sacar(Verde)
}

Ejercicio 14: Limpiar celda.

Respuesta:

program{
Sacar(Azul)
Sacar(Verde)
Sacar(Negro)
Sacar(Rojo)
}

2. Práctica Primeros Programas.

Ejercicio 1: Calentando motores.

El siguiente programa coloca una bolita roja en la posición inicial y una negra al este.

Respuesta:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

program {
Poner(Rojo)
Mover(Este)
Poner(Negro)
}

Ejercicio 2: Combinando comandos.

Creá un programa que ponga dos bolitas en la posición inicial, y otras dos en la celda de al
lado hacia el Este. Todas las bolitas deben ser rojas.

Respuesta:

program{
Poner(Rojo)
Poner(Rojo)
Mover(Este)
Poner(Rojo)
Poner(Rojo)
}

Ejercicio 3: La fila roja.

Creá un programa que a partir de un tablero vacío con el cabezal en el origen, dibuje una
linea de cuatro celdas hacia el Este. Las bolitas deben ser rojas y debe poner una bolita por
celda.

Respuesta:

program{
Poner(Rojo)
Mover(Este)
Poner(Rojo)
Mover(Este)
Poner(Rojo)
Mover(Este)
Poner(Rojo)
}

Ejercicio 4: Una escalerita.

Usando las herramientas que ya conocés, creá un programa que dibuje una escalera azul
como la que se ve en la imagen. El cabezal empieza en el origen (o sea, en el borde Sur-
Oeste) y debe quedar en el extremo inferior derecho de la escalera.

Respuesta:

program{
Poner(Azul)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Mover(Norte)
Poner(Azul)
Mover(Norte)
Poner(Azul)
Mover(Sur)
Mover(Este)
Poner(Azul)
Mover(Sur)
Poner(Azul)
Mover(Este)
Poner(Azul)
}

Ejercicio 5: Portugal.

Como no nos vamos a poner tan quisquillosos, te vamos a pedir una versión simplificada de
la bandera de Portugal.

Respuesta:

program{
Poner(Verde)
Mover(Norte)
Poner(Verde)
Mover(Este)
Poner(Rojo)
Mover(Sur)
Poner(Rojo)
Mover(Este)
Poner(Rojo)
Mover(Norte)
Poner(Rojo)
}

Ejercicio 6: Y ahora una de más cerquita.

Respuesta:

program{
Poner(Azul)
Mover(Este)
Poner(Azul)
Mover(Este)
Poner(Azul)
Mover(Este)
Poner(Azul)
Mover(Este)
Poner(Azul)
Mover(Norte)
Mover(Norte)
Poner(Azul)
Mover(Oeste)
Poner(Azul)
Mover(Oeste)
Poner(Azul)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Mover(Sur)
Poner(Rojo)
Mover(Norte)
Mover(Oeste)
Poner(Azul)
Mover(Oeste)
Poner(Azul)
Mover(Sur)
Mover(Sur)
}

Ejercicio 7: Limpiando el jardín.

Con el cabezal en el origen, creá un programa que se encargue de "podar" el tablero de la


imagen: sacar todas las bolitas verdes. Al finalizar, el cabezal debe terminar donde empezó.

Respuesta:

program{
Sacar(Verde)
Mover(Este)
Sacar(Verde)
Mover(Este)
Sacar(Verde)
Mover(Norte)
Sacar(Verde)
Mover(Norte)
Sacar(Verde)
Mover(Oeste)
Sacar(Verde)
Mover(Oeste)
Sacar(Verde)
Mover(Sur)
Sacar(Verde)
Mover(Sur)
}

Ejercicio 8: Reemplazar bolitas.

Pasemos a algo un poco más difícil entonces. Te vamos a dar un tablero de 2x2 (o sea, con
4 celdas) donde cada una de ellas tiene una bolita roja.

Tu tarea es crear un programa que reemplace todas las bolitas rojas por verdes.

Respuesta:

program{
Sacar(Rojo)
Poner(Verde)
Mover(Este)
Sacar(Rojo)
Poner(Verde)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Mover(Norte)
Sacar(Rojo)
Poner(Verde)
Mover(Oeste)
Sacar(Rojo)
Poner(Verde)
Mover(Sur)
}

3. Procedimientos.

Ejercicio 1: ¿De qué se trata?.

Debes tratar de descubrir lo que hace el programa.

Respuesta:

 Dibuja un cuadro de bolitas negras

Ejercicio 2: Un programa un poco largo.

Ahora tenés la posibilidad de ver en acción el programa.

Respuesta:

Continuar

Ejercicio 3: Las cosas por su nombre.

Respuesta:

Continuar

Ejercicio 4: Enseñándole tareas a la computadora.

Como viste en el ejemplo del cuadrado, se puede empezar a diferenciar dos tipos de
comandos dentro de un programa:

 los que vienen definidos por el lenguaje y nos sirven para expresar operaciones
básicas, como Mover, Poner y Sacar. A estos los llamaremos comandos primitivos,
o simplemente primitivas;
 y los que definimos nosotros, que nos sirven para expresar tareas más complejas.
Como el nombre de esta lección sugiere, estos son los procedimientos.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Cuando definimos un procedimiento estamos "enseñándole" a la computadora a realizar


una tarea nueva, que originalmente no estaba incluida en el lenguaje.

Prestale atención a la sintaxis del ejemplo para ver bien cómo definimos un procedimiento
y cómo lo invocamos en un program.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 5: Procedimientos en acción.

Completá el código para que además de definir el procedimiento PonerNegroyRojo luego lo


invoque en el program.

Respuesta:

program{
PonerNegroYRojo()
}

Ejercicio 6: Escribiendo procedimientos.

A esta altura ya sabemos que para programar siempre tenemos que tener en cuenta la
sintaxis y que para definir nuevos procedimientos también tenemos reglas:

 Empezamos con la palabra reservada procedure;


 Elegimos un nombre que lo describa y lo escribimos con mayúscula seguido de
paréntesis ( );
 Encerramos las acciones que queremos que haga entre llaves { }.

Y si lo queremos utilizar, tenemos que invocarlo dentro del program escribiendo su nombre
tal cual y sin olvidar los paréntesis ( ) ¡Prestá atención a la sintaxis!

Respuesta:

procedure Poner3Verdes() {
Poner(Verde)
Poner(Verde)
Poner(Verde)
}
program{
Poner3Verdes()
}

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 7: Procedimiento, ¡te invoco!.

Creá un programa que lo haga invocando el procedimiento Poner3Verdes. Recordá que ya


te lo damos definido en la sección Biblioteca ¡no tenés que volver a escribirlo!.

Respuesta:

program{
Poner3Verdes()
Mover(Este)
Poner3Verdes()
}

Ejercicio 8: Una definición, "infinitos" usos.

Creá un programa que ponga 9 bolitas rojas en la celda actual invocando el


procedimiento Poner3Rojas todas las veces que sea necesario.

Respuesta:

program{
Poner3Rojas()
Poner3Rojas()
Poner3Rojas()
}

Ejercicio 9: Procedimientos dentro de otros.

Definí el procedimiento Poner9Rojas que, utilizando Poner3Rojas, ponga nueve bolitas


rojas en una celda. Una vez definido, invocá el nuevo procedimiento en un program.

Respuesta:

procedure Poner9Rojas(){
Poner3Rojas()
Poner3Rojas()
Poner3Rojas()
}
program{
Poner9Rojas()
}

Ejercicio 10: Dibujamos con imaginación.

Definí el procedimiento DibujarPuntaNegra e invocalo dentro de un program. El cabezal


comienza en el origen y debe terminar en el extremo inferior derecho de la punta.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Respuesta:

procedure DibujarPuntaNegra(){
Poner(Negro)
}
program{
DibujarPuntaNegra()
Mover(Norte)
DibujarPuntaNegra()
Mover(Sur)
Mover(Este)
DibujarPuntaNegra()
}

Ejercicio 11: De punta a punta.

Definí el procedimiento DibujarDosPuntas e invocalo dentro un program. Acordate de


utilizar DibujarPuntaNegra.

Respuesta:

procedure DibujarDosPuntas() {
DibujarPuntaNegra()
Mover(Norte)
Mover(Norte)
Mover(Este)
DibujarPuntaNegra()
}
program{
DibujarDosPuntas()
}

Ejercicio 12: Rojo al borde.

Respuesta:

procedure RojoAlBorde() {
IrAlBorde(Norte)
IrAlBorde(Oeste)
Poner(Rojo)
}
program{
RojoAlBorde()
}

Ejercicio 13: Adornando el tablero.

Definí dos procedimientos: el procedimiento PonerGuirnalda que coloque 3 bolitas rojas y 3


bolitas verdes en una celda y el procedimiento DecorarTablero que lo utilice y ponga una

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

guirnalda en cada esquina superior. Invocá DecorarTablero en el program. Tené en


cuenta que no sabemos la posición inicial donde se encontrará el cabezal.

Respuesta:

procedure PonerGuirnalda(){
Poner3Verdes()
Poner3Rojas()
}
procedure DecorarTablero(){
IrAlBorde(Norte)
IrAlBorde(Oeste)
PonerGuirnalda()
IrAlBorde(Norte)
IrAlBorde(Este)
PonerGuirnalda()
}
program{
DecorarTablero()
}

Ejercicio 14: Colores, colores, colores.

Definí un procedimiento DibujarLineaColorida que dibuje una línea multicolor de cuatro


celdas hacia el Este y al finalizarla ubique el cabezal en la celda inicial. Invocá el nuevo
procedimiento en un program.

Respuesta:

procedure Color(){
Poner(Rojo)
Poner(Verde)
Poner(Negro)
Poner(Azul)
}
procedure DibujarLineaColorida(){
Color()
Mover(Este)
Color()
Mover(Este)
Color()
Mover(Este)
Color()
IrAlBorde(Oeste)
}
program{
DibujarLineaColorida()
}

Ejercicio 15: Cuadrado de colores.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Definí un procedimiento DibujarCuadradoColorido que dibuje un cuadrado de 4×4 celdas


en el que cada celda tenga una bolita de cada color e invocalo en el program. El cabezal
debe quedar en la celda inicial.

Respuesta:

procedure DibujarCuadradoColorido(){
DibujarLineaColorida()
Mover(Norte)
DibujarLineaColorida()
Mover(Norte)
DibujarLineaColorida()
Mover(Norte)
DibujarLineaColorida()
IrAlBorde(Sur)
}
program{
DibujarCuadradoColorido()
}

4. Repetición Simple.

Ejercicio 1: MoverOeste10.

Entremos en calor: definí un procedimiento MoverOeste10 que mueva el cabezal 10 veces


hacia el Oeste.

Respuesta:

procedure MoverOeste10(){
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
Mover(Oeste)
}

Ejercicio 2: La computadora repite por nosotros.

Cuando es necesario repetir un comando (como Mover, Poner, DibujarLineaNegra, etc) un


cierto número de veces, en lugar de copiar y pegar como veníamos haciendo hasta ahora,
podemos utilizar la sentencia repeat.

Respuesta:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Copiá, pega y enviá el código

Ejercicio 3: MoverOeste5 usando repeat.

Definí un procedimiento MoverOeste5 que se mueva 5 veces al Oeste.

Respuesta:

procedure MoverOeste5(){
repeat(5){
Mover(Oeste)
}
}

Ejercicio 4: No todo es repetir.

Definí el procedimiento Poner3AlNoreste(), que ponga 3 bolitas negras en la primera


celda al Noreste del cabezal.

Respuesta:

procedure Poner3AlNoreste(){
Mover(Norte)
Mover(Este)
repeat(3){
Poner(Negro)
}
}

Ejercicio 5: También vale después.

Definí el procedimiento PonerAzulLejos(), que coloque una bolita Azul 4 celdas hacia el
Este

Respuesta:

procedure PonerAzulLejos(){
repeat(4){
Mover(Este)
}
Poner(Azul)
}

Ejercicio 6: Repitiendo varios comandos.

Respuesta:

procedure DibujarLineaNegra6(){

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

repeat(6){
Poner(Negro)
Mover(Este)
}
}

Ejercicio 7: ¿Dónde está el error?.

Respuesta:

procedure LineaRoja4() {
repeat(4) {
Poner(Rojo)
Mover(Norte)
}
}

Ejercicio 8: Diagonal con una bolita.

Definí un procedimiento Diagonal4Azul() que dibuje una diagonal de longitud 4 hacia el


Noreste, donde cada celda tenga una bolita azul. El cabezal debe quedar donde muestra la
imagen.

Respuesta:

procedure Diagonal4Azul(){
repeat(4){
Poner(Azul)
Mover(Norte)
Mover(Este)
}
}

Ejercicio 9: Diagonal "pesada".

Definí un procedimiento DiagonalPesada4Azul() que en vez de poner 1 bolita en cada


celda, ahora hay que poner 21.

Respuesta:

procedure Bolitas(){
repeat(21){
Poner(Azul)
}
}
procedure DiagonalPesada4Azul(){
repeat(4){
Bolitas()
Mover(Norte)
Mover(Este)
}

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 10: El caso borde.

Respuesta:

procedure LineaNegra4Este(){
repeat(3){
Poner(Negro)
Mover(Este)
}
Poner(Negro)
}

Ejercicio 11: De lado a lado, dibujamos un cuadrado.

Definí el procedimiento CuadradoNegro4() para dibujar un cuadrado de 4x4 con bolitas


negras. Al empezar, el cabezal se encuentra en la esquina inferior izquierda del cuadrado
(no necesariamente del tablero ) y cuando termine el programa el cabezal deberá quedar en
el extremo superior derecho del cuadrado. No te olvides de
invocar LineaNegra4Este() que está en la sección Biblioteca.

Respuesta:

procedure CuadradoNegro4(){
repeat(3){
LineaNegra4Este()
repeat(3){
Mover(Oeste)
}
Mover(Norte)
}
LineaNegra4Este()
}

5. Parámetros.

Ejercicio 1: Pensando en subtareas.

Definí el procedimiento DibujarLineaNegra3() que, como su nombre lo indica, dibuje una


línea poniendo 3 bolitas negras consecutivas hacia el Este y dejando el cabezal donde
comenzó. Invocalo en un program.

En la Biblioteca vas a encontrar el procedimiento VolverAtras. ¡Eso significa que podés


invocarlo sin tener que definirlo!

Respuesta:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

procedure DibujarLineaNegra3(){
repeat(2){
Poner(Negro)
Mover(Este)
}
Poner(Negro)
VolverAtras()

}
program{
DibujarLineaNegra3()
}

Ejercicio 2: Dibujando un cuadrado con subtareas.

Definí el procedimiento DibujarCuadradoNegroDeLado3() que


usando DibujarLineaNegra3() dibuje un cuadrado negro sobre el tablero. Invocalo en
un program.

Respuesta:

procedure DibujarCuadradoNegroDeLado3(){
repeat(2){
DibujarLineaNegra3()
Mover(Norte)
}
DibujarLineaNegra3()
}
program{
DibujarCuadradoNegroDeLado3()
}

Ejercicio 3: Color esperanza.

Definí el procedimiento DibujarLineaVerde3() para dibujar una linea verde e invocalo en


el program.

Respuesta:

procedure DibujarLineaVerde3(){
repeat(2){
Poner(Verde)
Mover(Este)
}
Poner(Verde)
VolverAtras()
}
program{
DibujarLineaVerde3()
}

Ejercicio 4: Los que faltan.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Definí los procedimientos DibujarLineaRoja3() y DibujarLineaAzul3() para agregar los


colores Rojo y Azul.

Respuesta:

procedure DibujarLineaRoja3(){
repeat(2){
Poner(Rojo)
Mover(Este)
}
Poner(Rojo)
VolverAtras()
}
procedure DibujarLineaAzul3(){
repeat(2){
Poner(Azul)
Mover(Este)
}
Poner(Azul)
VolverAtras()
}

Ejercicio 5: Procedimientos con agujeritos.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 6: Llenando los espacios vacíos.

Creá un programa que ponga tres bolitas verdes pasando como parámetro el color Verde.

Respuesta:

program{
Poner3(Verde)
}

Ejercicio 7: DibujarLinea3.

Definí el procedimiento DibujarLinea3 que reciba un color y dibuje una línea de ese color.
Despreocupate por los programs para invocarlo con cada uno de los colores, van por nuestra
parte.

Respuesta:

procedure DibujarLinea3(color){
repeat(2){

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Poner(color)
Mover(Este)
}
Poner(color)
VolverAtras()
}

Ejercicio 8: DibujarCuadradoDeLado3.

Invocando DibujarLinea3, definí el procedimiento DibujarCuadradoDeLado3 que


recibe un color y dibuja un cuadrado de 3x3 de ese color.

Respuesta:

procedure DibujarCuadradoDeLado3(color){
repeat(2){
DibujarLinea3(color)
Mover(Norte)
}
DibujarLinea3(color)
}

Ejercicio 9: Pasando varios parámetros.

Creá un program que invoque la nueva versión de DibujarLinea3 (no tenés que definirla,
sólo invocarla) y dibuje un cuadrado multicolor, pasando como parámetros el Color y la
dirección.

Respuesta:

program{
DibujarLinea3(Verde, Este)
Mover(Este)
DibujarLinea3(Rojo, Norte)
Mover(Norte)
DibujarLinea3(Negro, Oeste)
Mover(Oeste)
DibujarLinea3(Azul, Sur)
}

Ejercicio 10: La ley, el orden y el BOOM.

Creá un programa cualquiera que invoque DibujarLinea3, pero esta vez intentá invocarlo
con los argumentos invertidos.

Respuesta:

program{
DibujarLinea3(Norte, Sur)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 11: Un argumento para dos parámetros.

¿Qué crees que va a pasar si a un procedimiento le pasamos menos argumentos de los que
necesita?.

Creá un programa que invoque a DibujarLinea3 pero pasándole sólo un argumento.

Respuesta:

program{
DibujarLinea3(Verde)
}

Ejercicio 12: La tercera es la vencida.

Para terminar esta lección vamos a definir un procedimiento llamado Triada ¡que recibe tres
parámetros!

Triada recibe tres colores por parámetro y pone tres bolitas, una al lado de la otra hacia el
Este, en el mismo orden en que se reciben. El cabezal empieza en el origen y debe terminar
sobre la última bolita de la tríada.

Respuesta:

procedure Triada(colorRojo, colorVerde, colorAzul){


Poner(colorRojo)
Mover(Este)
Poner(colorVerde)
Mover(Este)
Poner(colorAzul)
}

6. Práctica Repetición Simple.

Ejercicio 1: Entrando en calor... ¡Volviendo!.

¿Te animás a definir el procedimiento Diagonal4AzulVolviendo? Este procedimiento


debería hacer lo mismo que Diagonal4Azul, pero tiene que dejar el cabezal en la posición
inicial. Recordá que podés invocar todo lo que está en la Biblioteca sin necesidad de volver
a definirlo.

Respuesta:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

procedure Diagonal4AzulVolviendo(){
Diagonal4Azul()
repeat(4){
Mover(Oeste)
Mover(Sur)
}
}

Ejercicio 2: Una diagonal más ancha.

El procedimiento debe llamarse BandaDiagonal4.

Respuesta:

procedure BandaDiagonal4() {
repeat(3) {
Diagonal4AzulVolviendo()
Mover(Norte)
}
IrAlBorde(Sur)
}

Ejercicio 3: Pongamos... ¡Todo lo que queramos!.

Definí el procedimiento PonerN(cantidad, color).

Respuesta:

procedure PonerN(a, b){


repeat(a){
Poner(b)
}
}

Ejercicio 4: Día de la Memoria.

El objetivo, entonces, es definir un procedimiento DiaDeLaMemoria():

 En la celda actual, poné 24 bolitas Azules, que representan el día.


 En la celda inmediatamente al Este, poné 3 bolitas Verdes, que representan el mes.
 En la celda a continuación, poné 1976 bolitas Negras, representando el año.

Respuesta:

procedure DiaDeLaMemoria(){
PonerN(24, Azul)
Mover(Este)
PonerN(3, Verde)
Mover(Este)
PonerN(1976, Negro)
}

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 5: Escribir cualquier fecha.

Definí el procedimiento Fecha(dia, mes, anio), que recibe los tres valores correspondientes,
y escribe la fecha que representan, de esta manera:

 En la celda actual, tantas bolitas azules para representar el día.


 En la celda inmediatamente al Este, tantas bolitas Verdes para representar el mes.
 En la celda a continuación, tantas bolitas Negras para representar el año.

Respuesta:

procedure Fecha(dia, mes, anio){


PonerN(dia, Azul)
Mover(Este)
PonerN(mes, Verde)
Mover(Este)
PonerN(anio, Negro)
}

Ejercicio 6: Movamos... ¡Todo lo que queramos!.

Definí un procedimiento MoverN(cantidad, direccion) que haga que el cabezal se desplace


la cantidad especificada de veces en la dirección indicada.

Resuesta:

procedure MoverN(cantidad, direccion){


repeat(cantidad){
Mover(direccion)
}
}

Ejercicio 7: Los números del reloj.

Definí un procedimiento DibujarReloj(radio) que ponga los números del reloj como se
indica arriba: alrededor del casillero actual. El tamaño del reloj se indica con el radio que
recibís como parámetro: mientras más grande es el radio, más alejados están los números
del centro.

Respuesta:

procedure DibujarReloj(radio){
MoverN(radio,Norte)
PonerN(12,Rojo)
MoverN(radio,Este)
MoverN(radio,Sur)
PonerN(3,Rojo)
MoverN(radio,Oeste)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

MoverN(radio,Sur)
PonerN(6,Rojo)
MoverN(radio,Oeste)
MoverN(radio,Norte)
PonerN(9,Rojo)
MoverN(radio,Este)
}

Ejercicio 8: Una línea heavy.

Definí el procedimiento LineaEstePasada(peso, color, longitud). Tené en cuenta que el


cabezal debe regresar a la posición inicial. Para eso vas a tener que invocar MoverN.

Respuesta:

procedure LineaEstePesada(peso, color, longitud){


repeat(longitud){
PonerN(peso, color)
MoverN(1, Este)
}
MoverN(longitud, Oeste)
}

Ejercicio 9: Guarda con la guarda.

Definí un procedimiento GuardaDe5(), que haga una "guarda" de 5 azulejos (como las que
decoran las paredes). Cada azulejo está conformado por 1 bolita verde, 5 negras y 9 rojas.

Respuesta:

procedure GuardaDe5(){
repeat(4){
PonerN(9, Rojo)
PonerN(5, Negro)
PonerN(1, Verde)
Mover(Este)
}
PonerN(1, Verde)
PonerN(5, Negro)
PonerN(9, Rojo)
}

Ejercicio 10: Una guarda en L.

Definí un procedimiento GuardaEnL() que haga una guarda en L como muestra la figura,
pero dejando el cabezal en la posición inicial.

Respuestas:

procedure MoverAzulejo(num, dir){

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

repeat(num){
Mover(dir)
PonerAzulejo()
}
}
procedure GuardaEnL(){
PonerAzulejo()
MoverAzulejo(2, Este)
MoverN(2, Oeste)
MoverAzulejo(2, Norte)
MoverN(2, Sur)
}

7. Expresiones.

Ejercicio 1: Muchas formas de decir lo mismo.

Con esta idea e invocando PonerN, creá un programa que ponga cinco bolitas negras, PERO
sin escribir el número 5.

Respuesta:

program{
PonerN(3+2, Negro){
}
}

Ejercicio 2: La suma de las partes.

Definí un procedimiento PonerSuma(x, y) que reciba dos parámetros y ponga la cantidad de


bolitas rojas que surge de sumarx ey.

Respuesta:

procedure PonerSuma(x, y){


PonerN(x + y, Rojo)
}

Ejercicio 3: ¿Qué se hace antes?.

Contamos con la información de cuántos micros, autos y bicicletas asistieron y desde allí
podemos hacer un cálculo siguiendo estas reglas:

 En cada micro viajan 40 personas;


 En cada auto viajan 4 personas;
 En cada bicicleta viaja 1 persona.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Definí el procedimiento ContarGente(micros, autos, bicicletas) que a partir de la cantida de


micros, autos y bicicletas que recibe como parámetro, haga las cuentas necesarias y refleje
el resultado con bolitas de color verde.

Respuesta:

procedure ContarGente(micros, autos, bicicletas){


PonerN(40 * micros + 4 * autos + 1 * bicicletas, Verde)
}

Ejercicio 4: La carrera del salmón.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 5: Dos pasos adelante, un paso atrás.

Definí el procedimiento CaminarDesconfiado(pasos) que simule el caminar de Carlos: debe


recibir la cantidad de pasos que debería dar y dar la mitad. Siempre se mueve al Este.

Respuesta:

procedure CaminarDesconfiado(pasos){
MoverN(pasos div 2, Este)
}

Ejercicio 6: Poner al lado.

Queremos definir un procedimiento que nos sirva para poner una bolita al lado de donde se
encuentre el cabezal, dejándolo en la posición original.

Definí el procedimiento PonerAl(direccion, color).

Respuesta:

procedure PonerAl(direccion, color){


Mover(direccion)
Poner(color)
Mover(opuesto(direccion))
}

Ejercicio 7: La línea que vuelve.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Valiéndote de tus nuevos conocimientos sobre expresiones, modificá el


procedimiento Linea para que el cabezal quede en el lugar donde empezó.

Respuesta:

procedure Linea(direccion, color, longitud) {


repeat(longitud) {
Poner(color)
Mover(direccion)
}
MoverN(longitud, opuesto(direccion))
}

Ejercicio 8: Dibujando una L.

Descubrí cuál de las funciones nuevas tenés que invocar y definí el


procedimiento Ele(direccion). No te preocupes por la posición inicial del cabezal, nosotros
nos encargaremos de ubicarlo en el lugar correspondiente para que la L se pueda dibujar.

Respuesta:

procedure Ele(direccion){
Linea(direccion, Azul, 3)
Linea(siguiente(direccion), Azul, 3)
}

Ejercicio 9: Previo a lo siguiente.

Respuesta:

Elegir la opción número 4.

Ejercicio 10: Siga la flecha.

Definí el procedimiento Flecha(direccion) que dibuje una flecha roja en la dirección


correspondiente. El cabezal empieza y debe quedar siempre en el centro, como se ve en los
tableros de ejemplo.

Respuesta:

procedure Flecha(direccion){
Mover(previo(direccion))
Poner(Rojo)
Mover(siguiente(direccion))
Mover(siguiente(direccion))
Poner(Rojo)
Mover(previo(direccion))

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Mover(siguiente(direccion))
Mover(previo(direccion))
Mover(direccion)
Poner(Rojo)
Mover(opuesto(direccion))
}

Ejercicio 11: Copiando bolitas.

na tarea que seguro tenemos que hacer es poner muchas bolitas, y para eso ya sabemos que
existe el procedimiento PonerN que construimos varios ejercicios atrás. El color de las
bolitas que tenemos que poner también lo sabemos: Rojo, pero... ¿cómo sabemos cuántas
poner?

Miremos algunos ejemplos:

 Si hay 4 bolitas verdes, hay que poner 4 bolitas rojas.


 Si hay 2 bolitas verdes, hay que poner 2 bolitas rojas.
 Si no hay bolitas verdes, no hay que poner ninguna roja.

Respuesta:

procedure CopiarVerdesEnRojas() {
PonerN(nroBolitas(Verde), Rojo)
}

Ejercicio 12: Sacando bolitas.

Siguiendo con esto de contar las bolitas, te toca ahora definir un procedimiento que sirva
para sacar todas las bolitas de un color.

Pensemos las subtareas necesarias:

1. Poder sacar muchas bolitas: ya está resuelto con SacarN.


2. Contar cuántas bolitas hay que sacar: se puede hacer con nroBolitas.
3. Sacar todas las bolitas de un color: hay que combinar las 2 anteriores.

Definí SacarTodas(color), que recibe un color y saca todas las bolitas que hay de ese color
(no debe hacer nada con el resto de los colores).

Respuesta:

procedure SacarTodas(color){
SacarN(nroBolitas(color), color)
}

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

8. Alternativa Condicional.

Ejercicio 1: Sacar con miedo.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 2: Sacar con miedo, segundo intento.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 3: Eliminando la bolita roja.

Modificá el procedimiento que te dimos para que saque una bolita roja, sólo si hay alguna.

Respuesta:

procedure SacarRojoConMiedo() {
if(hayBolitas(Rojo)){
Sacar(Rojo)
}
}

Ejercicio 4: Un ejemplo medio rebuscado.

Para ejercitar esto ultimo, te vamos a pedir que definas un


procedimiento CompletarCelda(), si ya hay alguna bolita negra, complete la celda poniendo
una roja, una azul y una verde.

Respuesta:

procedure CompletarCelda(){
if(hayBolitas(Negro)){
Poner(Rojo)
Poner(Azul)
Poner(Verde)
}
}

Ejercicio 5: ¿Y sólo sirve para ver si hay bolitas?.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Creá un programa que se mueva al Este sólo si es posible. Recordá utilizar


puedeMover(direccion).

Respuesta:

program{
if(puedeMover(Este)){
Mover(Este)
}
}

Ejercicio 6: Un poquito de matemática.

Otra cosa que se puede hacer adentro de un if es comparar números, como seguramente
alguna vez hiciste en matemática.

Por suerte, esto se escribe en Gobstones igual que en la matemática tradicional, con
un < para el menor y un > para el mayor. Ejemplo: nroBolitas(Verde) > 5 nos indica si hay
más de 5 bolitas verdes.

Sabiendo esto, intentá crear un programa que ponga 1 bolita negra sólo si hay menos de 5
bolitas negras.

Respuesta:

program{
if(nroBolitas(Negro) < 5){
Poner(Negro)
}
}

Ejercicio 7: Cómo decirle que no...

Definí un procedimiento AsegurarUnaBolitaVerde() que se asegure que en la celda actual


hay al menos una bolita verde. Esto es: si ya hay bolitas verdes no hay que hacer nada, pero
si no hay tendría que poner una.

Respuesta:

procedure AsegurarUnaBolitaVerde(){
if(not hayBolitas(Verde)){
Poner(Verde)
}
}

Ejercicio 8: Dos caminos distintos.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Respuesta:

Copiá, pega y enviá el código

Ejercicio 9: Un tablero de luces.

Definí un procedimiento PrenderOApagarLuz() que se encargue de prender las luces que


estén apagadas o apagar las luces encendidas, según corresponda. Tené en cuenta que en
cada celda solo puede haber bolitas de color verde o negro.

Respuesta:

procedure PrenderOApagarLuz(){
if(hayBolitas(Negro)){
Sacar(Negro)
Poner(Verde)
} else {
Sacar(Verde)
Poner(Negro)
}
}

9. Funciones.

Ejercicio 1: Y esto, ¿con qué se come?.

Tienes que leer por varios minutos e interpretar el código y tratar de entenderlo.

Respuesta:

Copiá, pega y enviá el código

Ejercicio 2: La importancia de nombrar las cosas.

Funciones en Gobstone,

Respuesta:

Copiá, pega y enviá el código

Ejercicio 3: MoverSegunBolitas, versión 2.

Modificá la primera versión de MoverSegunBolitas() para que use la


función nroBolitasTotal() en vez de la expresión larga.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Respuesta:

procedure MoverSegunBolitas() {
if (nroBolitasTotal() > 10) {
Mover(Este)
} else {
Mover(Norte)
}
}

Ejercicio 4: todasExcepto.

Definí la función todasExcepto para que retorne la cantidad de bolitas que no sean del color
que se le pasa por parámetro.

Respuesta:

function todasExcepto(color){
return (nroBolitasTotal()-nroBolitas(color))
}

Ejercicio 5: Una función de otro tipo.

Definí la función rojoEsDominante() que nos diga si la cantidad de bolitas rojas es


mayor que la suma de las bolitas de los otros colores. En
la Biblioteca está todasExcepto(color) lista para ser invocada.

Respuesta:

function rojoEsDominante(){
return (nroBolitas(Rojo)>todasExcepto(Rojo))
}

Ejercicio 6: En libertad.

Existe el operador && que sirve justamente para eso: toma dos expresiones booleanas y
devuelve True solo si ambas son verdaderas. Si sabés algo de lógica, esto es lo que
comunmente se denomina conjunción y se lo suele representar con el símbolo ∧.

Definí la función esLibreCostados() que indique si el cabezal puede moverse tanto al Este
como al Oeste.

Respuesta:

function esLibreCostados(){
return(puedeMover(Este) && puedeMover(Oeste))

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Ejercicio 7: Cualquier bolita nos deja bien.

A diferencia del ejercicio anterior, lo que queremos saber es si alguna de ellas es verdadera,
por lo tanto hay que usar otro operador: la disyunción, que se escribe | | y retorna verdadero
si al menos alguna de las dos preguntas es verdadera.

Tanto && como | | pueden usarse varias veces sin la necesidad de usar paréntesis, siempre y
cuando tengan expresiones booleanas a ambos lados.

Definí la función hayAlgunaBolita() que responda a la pregunta ¿hay alguna bolita en la


celda actual?

Respuesta:

function hayAlgunaBolita(){
return(hayBolitas(Verde) || hayBolitas(Azul) || hayBolitas(Rojo) ||
hayBolitas(Negro))
}

Ejercicio 8: Siempre al borde...

Te recordamos los operadores lógicos que vimos hasta ahora:

 Negación: "da vuelta" una expresión booleana - ejemplo: not hayBolitas(Rojo).


 Conjunción: determina si se cumplen ambas condiciones -
ejemplo: puedeMover(Norte) && puedeMover(Sur).
 Disyunción: determina si se cumple alguna de las condiciones -
ejemplo: esInteligente() || tieneBuenaOnda().

Con la ayuda de esa tablita, definí la función estoyEnUnBorde() que determine si el cabezal
está parado en algún borde.

Respuesta:

function estoyEnUnBorde(){
return(not puedeMover(Norte) || not puedeMover(Sur) || not
puedeMover(Este) || not puedeMover(Oeste))
}

Ejercicio 9: Las compañeras ideales.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Vamos a ver ahora funciones que hacen cosas antes de retornar un resultado. Para
ejemplificar esto, vamos a querer que definas una función que nos diga si hay una bolita de
un color específico, pero en la celda de al lado.

Definí la función hayBolitasAl(direccion, color) que informe si hay alguna bolita del color
especificado en la celda vecina hacia la dirección dada.

Respuesta:

function hayBolitasAl(direccion,color){
Mover(direccion)
return(hayBolitas(color))
}

Ejercicio 10: Lo ideal también se puede romper.

Hagamos la prueba: vamos a probar la función hayBolitasAl del ejercicio anterior con casos
donde no pueda moverse el cabezal. Presioná Enviar y mirá el resultado.

Respuesta:

Presioná Enviar

Ejercicio 11: ¿Hay bolitas lejos?.

Definí la función hayBolitasLejosAl(direccion, color, distancia). La idea de "mover el


cabezal muchas veces" la resolvimos varias lecciones atrás con el procedimiento MoverN.
Podrías usarlo.

Respuesta:

function hayBolitasLejosAl(direccion,color,distancia) {
MoverN(distancia,direccion)
return(hayBolitas(color))
}

Ejercicio 12: Estoy rodeado de viejas bolitas.

Valiéndote de hayBolitasAl, definí la función estoyRodeadoDe(color) que indica si el


cabezal está rodeado de bolitas de ese color.

Decimos que el cabezal "está rodeado" si hay bolitas de ese color en las cuatro direcciones:
Norte, Este, Sur y Oeste.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

Respuesta:

function estoyRodeadoDe(color) {
return (hayBolitasAl(Norte, color) && hayBolitasAl(Este, color) &&
hayBolitasAl(Sur, color) && hayBolitasAl(Oeste, color))
}

Ejercicio 13: Sin límites.

Para cerrar, vamos a definir la función hayLimite(), que determina si hay algún tipo de
límite a la hora de mover el cabezal.

El límite puede ser por alguno de dos factores: porque estoy en un borde y entonces no me
puedo mover en alguna dirección, o porque estoy rodeado de bolitas rojas que me cortan
el paso. Si ocurre alguna de esas dos condiciones, quiere decir que hay un límite.

Usando estoyEnUnBorde y estoyRodeadoDe, definí hayLimite.

Respuesta:

function hayLimite(){
return (estoyEnUnBorde() || estoyRodeadoDe(Rojo))
}

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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"

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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
4
cuatro

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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;

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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"]

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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!

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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!

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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
4
cuatro

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:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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;

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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:

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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.

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

¡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){

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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)

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)


lOMoARcPSD|15364079

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

Descargado por Emiliano Jacobo (emicueva23@gmail.com)

También podría gustarte