Ejemplos funciones con doc y casos de prueba

/* Ejemplo 1: Una función que dados dos números, me devuelva el mayor */

// Nombre de la función: mayor
// ¿Tengo parámetros? : Dos números
// ¿Devuelvo algo? : El número mayor

/**
 * 
 * @param {Number} a 
 * @param {Number} b 
 * @returns El mayor de los dos números
 */
function mayor(a, b) {
    if (b < a) {
        return a;
    } else {
        return b;
    }
}

// Casos de prueba
console.log(mayor(2, 8)); // 8
console.log(mayor(7, 2)); // 7
console.log(mayor(2, 2)); // 2

// Más o menos lo que hacen los test unitarios
if (mayor(2, 8) == 8 && mayor(7, 2) == 7 && mayor(2, 2) == 2) {
    console.log("Todo ok")
}

// Una función a la que le pasamos un nombre y un apellido y nos devuelve el nombre completo (nombra + apellido)

// Nombre: nombreCompleto
// Parámetros?: dos cadenas nombre y apellido
// Devuelvo algo?: Una cadena

/**
 * 
 * @param {String} nombre 
 * @param {String} apellido 
 * @returns El nombre completo
 */
function nombreCompleto(nombre, apellido) {
    return nombre + " " + apellido;
}

let n=nombreCompleto("Ana","Pi");
console.log(n); // Ana Pi
console.log(nombreCompleto("Pepe","Pérez")); // Pepe Pérez

// Una función que nos calcule la suma de los números hasta el que le pasemos

// Nombre: sumaNumeros
// Parámetro: El número límite
// Retorno: El total

/**
 * 
 * @param {number} limite 
 * @returns La suma desde 1 hasta límite
 */
function sumaNumeros(limite){
    let suma=0;
    for(let i=1;i<=limite;i++){
        suma+=i;
    }
    return suma;
}

// Casos de prueba
console.log(sumaNumeros(50)); // 1275
console.log(sumaNumeros(100)); // 5050

Funciones puras

https://www.geeksforgeeks.org/pure-functions-in-javascript/

/* Vamos a trabajar el concepto de funciones 'puras' */

let nombre="Juan";

function saludo(){
    console.log("Hola ",nombre); // Las variables definidas dentro de este bloque son visibles dentro de la función
}

saludo();

nombre="Ana";

saludo();

// Es mejor que la otra
function saludoOk(nombre){
    console.log("Hola",nombre);
}

saludoOk("Pep");


// Todavía mejor
function saludoPuro(nombre){
    return "Hola "+nombre;
}

console.log(saludoPuro("Eva"));
let s=saludoPuro("Juan");
alert(s);

Ejemplos funciones

/* Las funciones son entre otras muchas cosas una manera de encapsular un código
que luego podemos reutilizar en cualquier parte */



let tirada = tiradaMoneda();

console.log(tirada);

for (let i = 0; i < 10; i++) {
    console.log(tiradaMoneda())
}

/* Sintaxis de las funciones (clásica)
function nombreDeLaFuncion([parámetros opcionales]){
    // Código a ejecutar
    // opcionalmente
    return valor;
}
*/

// Esta función no tiene parámetros y nos devuelve un valor (1 o 2)
function tiradaMoneda() {
    return Math.trunc(Math.random() * 2) + 1;
}

// Esta función tiene un parámetro y no devuelve nada
function saludo(nombre) {
    console.log("Hola " + nombre);
    console.log("Bienvenido a la página de las funciones")
}

// Esta función tiene un parámetro y nos devuelve un valor
function doble(numero) {
    return numero * 2;
}

// Para usar una función simplemente ponemos su nombre, paréntesis y los parámetros
saludo("Ana");
saludo("Pepe");
saludo("Antonio Federico de todos los santos")

// Si la función devuelve algo tendremos que hacer con algo con ese valor. Guardarlo, imprimirlo, compararlo

let numero = doble(5); // let numero=10
console.log(numero);
console.log(doble(8)); //console.log(16)
if (doble(7) > 10) {       // if (14>10)
    console.log("El doble de 7 es mayor de 0");
}

// Voy a hacer una función que me diga si un número es primo o no
// ¿Necesita algún parámetro? Claro, el número
// Devuelve algún valor? Sí, un booleano
function esPrimo(numero) {
    for (let i = 2; i < numero; i++) {
        if (numero % i == 0) {
            return false;
        }
    }
    return true;
}

console.log(esPrimo(80));
console.log(esPrimo(101));

// Dime los números primos entre 2 y 20
for(let i=2;i<=20;i++){
    if (esPrimo(i)){
        console.log(i);
    }
}

Solución ejercicios for

/*Tenemos una variable 'nombre' con el valor 'Pep' y otra 'cantidad' con el valor 5.
 Escribid un código que nos muestre por la consola ese nombre la cantidad de veces que valga cantidad.
  Probad a poner otros valores. */

let nombre="pep";
let cantidad=5;
for(let i=0;i<cantidad;i++){
    console.log(nombre);
}

/* Tenemos una variable 'limite' que vale 50. Haced un código que calcule la suma de todos los 
números hasta ese límite.*/

let limite=50;
let suma=0;
for(let i=0;i<=limite;i++){
    suma+=i; // suma=suma+i
}
console.log(suma);
/* Como informáticos nos viene muy bien conocer las potencias de 2 (2,4,8,16,32,64,128,256,...)
 Cread un código que nos muestre las potencias de 2 desde 0 hasta 10. (2**i) */

for(let i=0;i<=10;i++){
    console.log(2**i);
}

for(let i=1;i<=2**10;i*=2){
    console.log(i);
}
/*Cread un programa que nos imprima por consola una cuenta atrás desde 5 (5...4...3...2...1...¡Ya!)*/

for(let i=5;i>0;i--){
    console.log(i+"....");
}
console.log("¡Ya!");

/* Cread un programa que nos cuente los múltiplos de 7 que hay entre 0 y 100*/

let multiplos7=0;
for(let i=0;i<=100;i++){
    if (i%7==0){
        multiplos7++;
    }
}
console.log(multiplos7);

multiplos7=0;
for(let i=0;i<=100;i+=7){
    multiplos7++;
}
console.log(multiplos7);

/* Cread un programa que nos haga la media de los números entre 0 y 100 */
suma=0;
let contador=0;
for(let i=0;i<=100;i++){
    suma+=i; // suma=suma+i
    contador++;
}
console.log(suma/contador);

/* Cread un programa que lance 20 veces una moneda y nos diga al final cuantas caras y cuantas cruces han salido,
*/

let caras=0,cruces=0;

for(let i=0;i<20;i++){
    let tiradaMoneda = Math.trunc(Math.random() * 2) + 1;
    if (tiradaMoneda==1){
        caras++;
    } else{
        cruces++;
    }
}

console.log("Caras",caras,"Cruces",cruces);

Ejemplos tiradas dados

// Lo siguiente nos devuelve un número entre 1 y 6, como la tirada de un dado
// tiradaDado = Math.trunc(Math.random() * 6) + 1;
// Vamos a hacer un programa que tire el dado hasta que salga un 5
// for if y break
// while o do while
tiradaDado=0;
for(let i=0;tiradaDado!=5;i++){
    tiradaDado = Math.trunc(Math.random() * 6) + 1;
    console.log("Tirada "+i+" ha salido "+tiradaDado);
}
console.log("-".repeat(10));
tiradaDado=0;
while(tiradaDado!=5){
    tiradaDado = Math.trunc(Math.random() * 6) + 1;
    console.log("Tirada ha salido "+tiradaDado);
}
console.log("-".repeat(10));
do{
    tiradaDado = Math.trunc(Math.random() * 6) + 1;
    console.log("Tirada ha salido "+tiradaDado);
}while(tiradaDado!=5);

Ejemplos funciones matemáticas

let caramelos = 1000;
let nens = 70;
console.log(caramelos / nens);

// Math.round nos redondea según las normas del redondeo: hasta 0.5 para abajo, de 0.5 para arriba
let carameloxnen = Math.round(caramelos / nens);
console.log(carameloxnen);

// Con el random podemos tener valores aleatorios
let aleatorio = Math.random();
console.log(aleatorio);

// Trunc nos quita los decimales
// Por lo tanto si multiplico el random por un valor, le quito los decimales y le sumo 1
// Obtengo un número al azar entre 1 y ese valor
// En este caso simulo la tirada de un dado, que es un valor enter 1 y 6
let tiradaDado = Math.trunc(Math.random() * 6) + 1;

console.log(tiradaDado);
console.log(Math.sqrt(16));

// Obtengo valores entre 1 y 2 
let tiradaMoneda = Math.trunc(Math.random() * 2) + 1;
console.log(tiradaMoneda)
// Lo hago 10 veces, como si tirara una moneda en 10 ocasiones
for (let i = 0; i < 10; i++) {
    tiradaMoneda = Math.trunc(Math.random() * 2) + 1;
    // Si es 1 es cara y si es 2 es cruz
    if (tiradaMoneda==1){
        console.log("Ha salido cara");
    }else{
        console.log("Ha salido cruz");
    }
    
}

Ejemplos bucle for

for (let i = 0; i < 5; i++) {
    console.log(i);
}

let cadena = "";

for (let i = 0; i < 5; i++) {
    cadena += "*";
}

console.log(cadena)

let cuadrado = 8;
for (let i = 0; i < cuadrado; i++) {
    let linea = "";
    for (let k = 0; k < cuadrado; k++) {
        linea += "*";
    }
    console.log(linea);
}


// Tengo en una variable un número y quiero saber sus divisores
// 12 -> 2, 3, 4, 6, 12
// 11 -> 11
// 8 -> 2, 4, 8
// ¿Yo puedo de alguna manera en JS saber si un número es divisor de otro?
// Si el resto de la división es 0 numero % divisor==0 if (numero % divisor == 0)
let numero = 101;

for (let i = 2; i <= numero; i++) {
    if (numero % i == 0) {
        console.log(i + " es divisor de " + numero);
    }
}

// Quiero saber si un número es primo. Un número es primo si solo es divisible entre el mismo y la unidad

let esPrimo=true;
for (let i = 2; i < numero; i++) {
    if (numero % i == 0) {
        console.log(i + " es divisor de " + numero); // Entro aquí cuando 'i' es divisor del número
        esPrimo=false;
    }
}
if(esPrimo){
    console.log(`${numero} es primo`)
}else{
    console.log(`${numero} NO es primo`)

}

let divisores=0;
for (let i = 2; i <= numero; i++) {
    if (numero % i == 0) {
        console.log(i + " es divisor de " + numero);
        divisores++;
    }
}
console.log("El número "+numero+" tiene "+divisores+" divisores");
if(divisores==1){
    console.log(`${numero} es primo`)
}

// dibujar un arbolito

let cadena="";
let tamanyo=6;
for(let i=0;i<tamanyo;i++){
    cadena+="*";
    console.log(cadena);
}

// Escribir los números del 1 al 10 y sus cuadrados

for(let i=1;i<=10;i++){
    console.log(i,i*i);
}

Bucle for con ejemplos

// Sintaxis del for es la siguiente:
// for( inicializar variables ; condicion ; modificación )

// Forma 'canónica'
for (let i = 0; i < 10; i++) {
    console.log(i); // 0 1 2 ... 9
}

for (let i = 1; i <= 10; i++) {
    console.log(i); // 1 2 3 ... 10
}

// Sumar todos los numeros del 1 al 100
let suma = 0;
for (let i = 1; i <= 100; i++) {
    suma += i;
}
console.log(suma);

// Incremento de dos en dos
for (let i = 1; i < 1000; i += 2) {
    console.log(i);
}

// Restando 1 a la variable
for (let i = 10; i > 0; i--) {
    console.log(i);
}

// A partir de aquí esto son experimentos. Se muestran para que veáis que se puede hacer
// PERO NO PARA HACERLO

// for sin inicialización
let j = 0;
for (; j < 10; j++) {
    console.log(j)
}
// for sin modificación
for (let i = 0; i < 10;) {
    console.log(i);
    i++;
}

// for sin condicion
for (let i = 0; ; i++) {
    console.log(i);
    if (i > 10) {
        break; // Esto sirve para salir del bucle
    }
}

// for pelado
j = 0;
for (; ;) {
    console.log(j);
    j++;
    if (j > 10) {
        break;
    }
}

// combinaciones de todas las cosas
for (let i = 0; i < 20; i++) {
    if (i % 3 == 0) {
        console.log(i + " es múltiplo de 3");
    }
}

// Bucles anidados
for (let i = 0; i < 5; i++) {
    for (let k = 0; k < 5; k++) {
        console.log(i, k);
    }
}

for (let i = 0; i < 5; i++) {
    for (let k = 0; k < 5; k++) {
        if (i < k) {
            console.log(i, k);
        }
    }
}

// Un ejemplo
// Tabla de multiplicar
for (let i = 1; i <= 10; i++) {
    console.log(i + " x 5 = " + (i * 5));
}

for (let i = 1; i <= 10; i++) {
    console.log(`${i} x 5 = ${(i * 5)}`);
}

// Todas las tablas de multiplicar con un bucle anidado
for (let k = 1; k <= 10; k++) {
    for (let i = 1; i <= 10; i++) {
        console.log(`${i} x ${k} = ${(i * k)}`);
    }
}

Ámbito (scope) de las variables

//Esto está mal
let importe=1000;
if(importe>500){
    let descuento=.1;
    console.log(descuento);
}
console.log(importe*descuento);

// Esto está bien

let importe=1000;
let descuento=0;
if(importe>500){
    descuento=.1;
}
console.log(importe*descuento);

Soluciones ejercicios if while

//Crear una variable caramelos que valga 1000 y una variable nens que valga 70 y 
//crear una variable donde almacenar cuantos caramelos les tocaría a cada niño.
let caramelos=1000;
let nens=70;
let carameloxnen=1000/70;

console.log(Math.round(carameloxnen));

//Crear una variable cartas que tenga un valor  numérico y crear un programa que 
//nos diga 'correcto' si el número de cartas es 7 o 'incorrecto' si el número de cartas 
//no es 7

let cartas=0;
if (cartas==7) {
    console.log("Correcto");
} else {
    console.log("Incorrecto");
}

//Crear una variable precio que valga 50 y una variable cantidad que valga 10 y 
//calcular el total en otra variable. Cread una variable descuento que valga 0 y 
//si el total es mayor de 1000 que descuento valga 0.1

let precio=50;
let cantidad=10;
let total=precio*cantidad;
let descuento=0;
if (total>1000) {
    descuento=0.1;
}
console.log(descuento);
//Dependiendo del dinero que se haya gastado un cliente en nuestra empresa le 
//vamos a dar un regalo según la siguiente tabla: 
//hasta 1000€, un bolígrafo, de 1000 a 5000 un libro y más de 5000 un reloj. Haced el código que nos lo muestre

let dineroGastado=900;
// Manera 1
if(dineroGastado<1000){
    console.log("Un bolígrafo");
}
if (dineroGastado>=1000 && dineroGastado<5000){
    console.log("Un libro");
}
if (dineroGastado>=5000){
    console.log("Un reloj");
}

// Manera 2
if(dineroGastado<1000){
    console.log("Un bolígrafo");
} else if (dineroGastado<5000){
    console.log("Un libro");
}else{
    console.log("Un reloj");
}

//Tenemos una variable elemento y otra tipo. 
//Si elemento vale 'aire' o 'fuego' y tipo es 'extrovertido' escribimos 'compatible'. 
//Si elemento vale 'agua' o 'tierra' y tipo es introvertido escribimos 'incompatible' y 
//si no es ninguna de las dos escribimos 'No se puede determinar'

let elemento="agua";
let tipo="introvertido";


// Manera 1
if((elemento=="aire" || elemento=="fuego") && tipo=="extrovertido"){
    console.log("Compatible");
} else if(tipo=="introvertido" && (elemento=="agua"||elemento=="tierra")){
    console.log("Incompatible")
} else{
    console.log("No se puede determinar");
}

// Manera 2
let mensaje="No se puede determinar";
if((elemento=="aire" || elemento=="fuego") && tipo=="extrovertido"){
    mensaje="Compatible";
} 
 if(tipo=="introvertido" && (elemento=="agua"||elemento=="tierra")){
    mensaje="Incompatible";
}
console.log(mensaje);
//Haced un bucle que nos muestre los números del 10 al 1 por consola
let i=10;
while(i>0){
    console.log(i);
    i--; // i=i-1  i-=1
}
//Haced un bucle que pida nombres al usuario hasta que ponga 'fin'
let nombre;
do{
    nombre=prompt("Dame un nombre","fin");
}while(nombre!="fin");