Salta el contingut

Solucions dels Exercicis UT03 - Model d'Objectes Predefinits a JavaScript

Objecte Window

51. Obrir i tancar finestres

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 51</title>
    <script>
        let novaFinestra;

        const obrir = () => {
            novaFinestra = window.open("https://www.wikipedia.org", "wikipedia", "width=600,height=400");
        };

        const tancar = () => {
            if (novaFinestra) {
                novaFinestra.close();
                novaFinestra = null;
            }
        };
    </script>
</head>
<body>
    <button onclick="obrir()">Obrir Wikipedia</button>
    <button onclick="tancar()">Tancar Finestra</button>
</body>
</html>

52. Propietats de la finestra

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 52</title>
    <script>
        const mostrarPropietats = () => {
            console.log("innerWidth: " + window.innerWidth);
            console.log("innerHeight: " + window.innerHeight);
            console.log("outerWidth: " + window.outerWidth);
            console.log("outerHeight: " + window.outerHeight);

            document.getElementById("resultat").innerHTML = `
                <p>innerWidth: ${window.innerWidth}px</p>
                <p>innerHeight: ${window.innerHeight}px</p>
                <p>outerWidth: ${window.outerWidth}px</p>
                <p>outerHeight: ${window.outerHeight}px</p>
            `;
        };
    </script>
</head>
<body>
    <button onclick="mostrarPropietats()">Mostrar Propietats</button>
    <div id="resultat"></div>
</body>
</html>

53. Alert, Confirm i Prompt

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 53</title>
    <script>
        const mostrarAlerta = () => {
            window.alert("Això és una alerta!");
            console.log("Alerta mostrada");
        };

        const mostrarConfirmacio = () => {
            const resposta = window.confirm("Desitges continuar?");
            console.log("Confirmació: " + resposta);
            document.getElementById("resultat").innerHTML = "Resposta: " + resposta;
        };

        const demanarNom = () => {
            const nom = window.prompt("Quin és el teu nom?", "Escriu aquí");
            console.log("Nom introduït: " + nom);
            document.getElementById("resultat").innerHTML = "Hola " + nom + "!";
        };
    </script>
</head>
<body>
    <button onclick="mostrarAlerta()">Mostrar Alerta</button>
    <button onclick="mostrarConfirmacio()">Mostrar Confirmació</button>
    <button onclick="demanarNom()">Demanar Nom</button>
    <div id="resultat"></div>
</body>
</html>

54. Comptador amb setInterval i clearInterval

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 54</title>
    <script>
        let comptador = 0;
        let intervalo = null;

        const iniciar = () => {
            comptador = 0;
            intervalo = setInterval(() => {
                comptador++;
                document.getElementById("comptador").innerHTML = comptador;
            }, 1000);
        };

        const aturar = () => {
            clearInterval(intervalo);
            intervalo = null;
        };

        const reiniciar = () => {
            aturar();
            comptador = 0;
            document.getElementById("comptador").innerHTML = "0";
        };
    </script>
</head>
<body>
    <h3>Comptador: <span id="comptador">0</span></h3>
    <button onclick="iniciar()">Iniciar</button>
    <button onclick="aturar()">Aturar</button>
    <button onclick="reiniciar()">Reiniciar</button>
</body>
</html>

55. Finestra emergent centrada

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 55</title>
    <script>
        const obrirCentrada = () => {
            const amplada = 600;
            const alçada = 400;
            const esquerra = (screen.width - amplada) / 2;
            const dalt = (screen.height - alçada) / 2;

            window.open(
                "https://www.google.com", 
                "centrada", 
                `width=${amplada},height=${alçada},left=${esquerra},top=${dalt}`
            );
        };
    </script>
</head>
<body>
    <button onclick="obrirCentrada()">Obrir Finestra Centrada</button>
</body>
</html>

Objecte Location

56. Propietats de location

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 56</title>
    <script>
        window.onload = () => {
            const taula = `
                <table border="1">
                    <tr><th>Propietat</th><th>Valor</th></tr>
                    <tr><td>href</td><td>${location.href}</td></tr>
                    <tr><td>protocol</td><td>${location.protocol}</td></tr>
                    <tr><td>host</td><td>${location.host}</td></tr>
                    <tr><td>hostname</td><td>${location.hostname}</td></tr>
                    <tr><td>port</td><td>${location.port || "Per defecte"}</td></tr>
                    <tr><td>pathname</td><td>${location.pathname}</td></tr>
                    <tr><td>search</td><td>${location.search || "Cap"}</td></tr>
                    <tr><td>hash</td><td>${location.hash || "Cap"}</td></tr>
                </table>
            `;
            document.getElementById("taula").innerHTML = taula;
        };
    </script>
</head>
<body>
    <h2>Propietats de location</h2>
    <div id="taula"></div>
</body>
</html>

57. Navegació amb assign()

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 57</title>
    <script>
        const navegar = () => {
            const url = document.getElementById("url").value;
            if (url) {
                location.assign(url);
            } else {
                alert("Si us plau, introdueix una URL válida");
            }
        };
    </script>
</head>
<body>
    <h2>Navegació a URL</h2>
    <input type="text" id="url" placeholder="https://www.exemple.com">
    <button onclick="navegar()">Navegar</button>
</body>
</html>

58. Recarregar pàgina amb comptador

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 58</title>
    <script>
        window.onload = () => {
            let comptador = localStorage.getItem("recarregues") || 0;
            comptador = parseInt(comptador) + 1;
            localStorage.setItem("recarregues", comptador);
            document.getElementById("comptador").innerHTML = comptador;
        };

        const recarregar = () => {
            location.reload();
        };

        const reiniciar = () => {
            localStorage.removeItem("recarregues");
            document.getElementById("comptador").innerHTML = "0";
        };
    </script>
</head>
<body>
    <h2>Vegades que s'ha recarregat: <span id="comptador">0</span></h2>
    <button onclick="recarregar()">Recarregar Pàgina</button>
    <button onclick="reiniciar()">Reiniciar Comptador</button>
</body>
</html>

### 59. Paràmetres de la URL
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 59</title>
    <script>
        window.onload = () => {
            const parametres = location.search.substring(1);
            const parells = parametres.split("&");
            let html = "<ul>";

            for (let parell of parells) {
                const [clau, valor] = parell.split("=");
                if (clau) {
                    html += `<li>${decodeURIComponent(clau)} = ${decodeURIComponent(valor)}</li>`;
                }
            }
            html += "</ul>";

            document.getElementById("parametres").innerHTML = html;
        };
    </script>
</head>
<body>
    <h2>Paràmetres de la URL</h2>
    <div id="parametres"><p>Cap paràmetre detectat</p></div>
    <p><em>Prova: pagina.html?nom=Joan&edat=25</em></p>
</body>
</html>
### 60. Detectar canvis de hash
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 60</title>
    <script>
        const mostrarSeccio = () => {
            const hash = location.hash.substring(1);
            const seccions = {
                seccio1: "Contingut de la Secció 1",
                seccio2: "Contingut de la Secció 2",
                seccio3: "Contingut de la Secció 3"
            };

            const contingut = seccions[hash] || "Selecciona una secció";
            document.getElementById("contingut").innerHTML = contingut;
        };

        window.onhashchange = mostrarSeccio;
        window.onload = mostrarSeccio;
    </script>
</head>
<body>
    <h2>Navegació per Hash</h2>
    <a href="#seccio1">Secció 1</a> |
    <a href="#seccio2">Secció 2</a> |
    <a href="#seccio3">Secció 3</a>

    <div id="contingut">Selecciona una secció</div>
</body>
</html>
## Objecte Navigator ### 61. Informació del navegador
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 61</title>
    <script>
        window.onload = () => {
            const info = `
                <table border="1">
                    <tr><th>Propietat</th><th>Valor</th></tr>
                    <tr><td>appName</td><td>${navigator.appName}</td></tr>
                    <tr><td>appVersion</td><td>${navigator.appVersion}</td></tr>
                    <tr><td>userAgent</td><td>${navigator.userAgent}</td></tr>
                    <tr><td>platform</td><td>${navigator.platform}</td></tr>
                    <tr><td>cookieEnabled</td><td>${navigator.cookieEnabled}</td></tr>
                </table>
            `;
            document.getElementById("info").innerHTML = info;
        };
    </script>
</head>
<body>
    <h2>Informació del Navegador</h2>
    <div id="info"></div>
</body>
</html>
### 62. Detectar Java habilitada
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 62</title>
    <script>
        window.onload = () => {
            const javaEnabled = navigator.javaEnabled();
            const missatge = javaEnabled 
                ? "Java està habilitada" 
                : "Java no està habilitada";
            document.getElementById("resultat").innerHTML = missatge;
            console.log("Java habilitada: " + javaEnabled);
        };
    </script>
</head>
<body>
    <h2>Estat de Java</h2>
    <div id="resultat"></div>
</body>
</html>
### 63. Detector de navegador
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 63</title>
    <script>
        const detectarNavegador = () => {
            const userAgent = navigator.userAgent;
            let navegador = "Desconegut";

            if (userAgent.indexOf("Chrome") > -1) {
                navegador = "Google Chrome";
            } else if (userAgent.indexOf("Safari") > -1) {
                navegador = "Safari";
            } else if (userAgent.indexOf("Firefox") > -1) {
                navegador = "Mozilla Firefox";
            } else if (userAgent.indexOf("Edg") > -1) {
                navegador = "Microsoft Edge";
            } else if (userAgent.indexOf("Trident") > -1) {
                navegador = "Internet Explorer";
            }

            document.getElementById("navegador").innerHTML = `Navegador: ${navegador}`;
        };

        window.onload = detectarNavegador;
    </script>
</head>
<body>
    <h2>Detector de Navegador</h2>
    <div id="navegador"></div>
</body>
</html>
### 64. Informació d'idioma
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 64</title>
    <script>
        window.onload = () => {
            const idioma = navigator.language;
            const idiomes = navigator.languages;

            let html = `
                <p><strong>Idioma principal:</strong> ${idioma}</p>
                <p><strong>Idiomes preferits:</strong></p>
                <ul>
            `;

            for (let i of idiomes) {
                html += `<li>${i}</li>`;
            }
            html += "</ul>";

            document.getElementById("idiomes").innerHTML = html;
        };
    </script>
</head>
<body>
    <h2>Informació d'Idioma</h2>
    <div id="idiomes"></div>
</body>
</html>
### 65. Detector de dispositiu
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 65</title>
    <script>
        const esMovil = () => {
            const userAgent = navigator.userAgent;
            const patrons = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;
            return patrons.test(userAgent);
        };

        window.onload = () => {
            const dispositiu = esMovil() ? "Dispositiu mòbil" : "Ordinador d'escriptori";
            document.getElementById("dispositiu").innerHTML = dispositiu;
        };
    </script>
</head>
<body>
    <h2>Tipus de Dispositiu</h2>
    <div id="dispositiu"></div>
</body>
</html>
## Objecte Document ### 66. Comptador d'enllaços i imatges
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 66</title>
    <script>
        window.onload = () => {
            const numEnllacos = document.links.length;
            const numImatges = document.images.length;

            document.getElementById("resultat").innerHTML = `
                <p>Nombre d'enllaços: ${numEnllacos}</p>
                <p>Nombre d'imatges: ${numImatges}</p>
            `;
        };
    </script>
</head>
<body>
    <h2>Comptador d'Elements</h2>

    <a href="#">Enllaç 1</a>
    <a href="#">Enllaç 2</a>
    <img src="imatge1.jpg" alt="Imatge 1">
    <img src="imatge2.jpg" alt="Imatge 2">

    <div id="resultat"></div>
</body>
</html>
### 67. Canviar títol del document
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 67</title>
    <script>
        const canviarTitol = () => {
            const nouTitol = window.prompt("Introdueix el nou títol:", document.title);
            if (nouTitol) {
                document.title = nouTitol;
                document.getElementById("titol-actual").innerHTML = document.title;
            }
        };

        window.onload = () => {
            document.getElementById("titol-actual").innerHTML = document.title;
        };
    </script>
</head>
<body>
    <h2>Títol actual: <span id="titol-actual"></span></h2>
    <button onclick="canviarTitol()">Canviar Títol</button>
</body>
</html>
### 68. URL del document i referrer
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 68</title>
    <script>
        window.onload = () => {
            const html = `
                <p><strong>URL del document:</strong> ${document.URL}</p>
                <p><strong>Document referrer:</strong> ${document.referrer || "Cap"}</p>
            `;
            document.getElementById("info").innerHTML = html;
        };
    </script>
</head>
<body>
    <h2>Informació del Document</h2>
    <div id="info"></div>
</body>
</html>
### 69. Accés a elements del DOM
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 69</title>
    <script>
        const modificarElements = () => {
            // Per ID
            const element1 = document.getElementById("element1");
            if (element1) element1.innerHTML = "Modificat per ID";

            // Per classe
            const elements2 = document.getElementsByClassName("element2");
            for (let el of elements2) {
                el.innerHTML = "Modificat per classe";
            }

            // Per tag
            const paragrafs = document.getElementsByTagName("p");
            for (let i = 0; i < paragrafs.length; i++) {
                paragrafs[i].style.color = "blue";
            }
        };
    </script>
</head>
<body>
    <h2>Accés a Elements</h2>
    <div id="element1">Element 1</div>
    <div class="element2">Element 2</div>
    <p>Paràgraf 1</p>
    <button onclick="modificarElements()">Modificar Elements</button>
</body>
</html>
### 70. Accés a formulari
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 70</title>
    <script>
        window.onload = () => {
            const formulari = document.forms[0];
            const numCamps = formulari.elements.length;

            let html = `<p>El formulari conté ${numCamps} camps:</p><ul>`;
            for (let i = 0; i < numCamps; i++) {
                html += `<li>${formulari.elements[i].name || formulari.elements[i].type}</li>`;
            }
            html += "</ul>";

            document.getElementById("info").innerHTML = html;
        };
    </script>
</head>
<body>
    <h2>Informació del Formulari</h2>
    <form>
        <input type="text" name="nom" placeholder="Nom">
        <input type="email" name="email" placeholder="Email">
        <input type="password" name="contrasenya" placeholder="Contrasenya">
        <textarea name="comentari" placeholder="Comentari"></textarea>
        <button type="submit">Enviar</button>
    </form>
    <div id="info"></div>
</body>
</html>
## Objecte String ### 71. Comptador de vocals
const contarVocals = (cadena) => {
    cadena = cadena.toLowerCase();
    let comptador = 0;
    const vocals = "aeiou";

    for (let i = 0; i < cadena.length; i++) {
        if (vocals.includes(cadena.charAt(i))) {
            comptador++;
        }
    }

    return comptador;
};

console.log(contarVocals("Hola món")); // 3
### 72. Trobar totes les ocurrències d'un caràcter
const trobarOcurrencies = (cadena, caracter) => {
    let posicions = [];
    let posicio = cadena.indexOf(caracter);

    while (posicio !== -1) {
        posicions.push(posicio);
        posicio = cadena.indexOf(caracter, posicio + 1);
    }

    return posicions;
};

console.log(trobarOcurrencies("hola amiga", "a")); // [1, 5, 8]
### 73. Validar adreça de correu
const validarEmail = (email) => {
    const posicioArroba = email.indexOf("@");
    const posicioPunt = email.lastIndexOf(".");

    return posicioArroba > 0 && posicioPunt > posicioArroba + 1;
};

console.log(validarEmail("user@example.com")); // true
console.log(validarEmail("userexample.com")); // false
### 74. Dividir cadena en paraules
const dividirEnParaules = (cadena) => {
    return cadena.split(" ");
};

console.log(dividirEnParaules("Hola mundo com estàs")); 
// ["Hola", "mundo", "com", "estàs"]
### 75. Primera lletra de cada paraula en majúscula
const capitalitzar = (cadena) => {
    const paraules = cadena.split(" ");
    let resultat = [];

    for (let paraula of paraules) {
        const primera = paraula.charAt(0).toUpperCase();
        const resta = paraula.slice(1).toLowerCase();
        resultat.push(primera + resta);
    }

    return resultat.join(" ");
};

console.log(capitalitzar("hola mundo com estàs")); 
// "Hola Mundo Com Estàs"
## Objecte Math ### 76. Número aleatori entre dos valors
const numeroAleatori = (min, max) => {
    return Math.floor(Math.random() * (max - min + 1)) + min;
};

console.log(numeroAleatori(1, 100)); // Número entre 1 i 100
### 77. Calculadora d'àrea d'un cercle
const areaCircle = (radi) => {
    return Math.PI * Math.pow(radi, 2);
};

console.log(areaCircle(5)); // 78.53981633974483
### 78. Valor màxim i mínim d'un array
const minMax = (array) => {
    return {
        max: Math.max(...array),
        min: Math.min(...array)
    };
};

console.log(minMax([5, 2, 9, 1, 7])); // {max: 9, min: 1}
### 79. Distància entre dos punts
const distanciaEntre = (x1, y1, x2, y2) => {
    const dx = Math.pow(x2 - x1, 2);
    const dy = Math.pow(y2 - y1, 2);
    return Math.sqrt(dx + dy);
};

console.log(distanciaEntre(0, 0, 3, 4)); // 5
### 80. Simulador de dau
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 80</title>
    <script>
        const llançarDau = () => {
            const resultat = Math.floor(Math.random() * 6) + 1;
            document.getElementById("resultat").innerHTML = 
                `Has obtingut un <strong>${resultat}</strong>`;
        };
    </script>
</head>
<body>
    <h2>Simulador de Dau</h2>
    <button onclick="llançarDau()">Llançar Dau</button>
    <div id="resultat"></div>
</body>
</html>
## Objecte Date ### 81. Data i hora actuals
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 81</title>
    <script>
        window.onload = () => {
            const ara = new Date();
            const dia = ara.getDate();
            const mes = ara.getMonth() + 1;
            const any = ara.getFullYear();
            const hores = ara.getHours();
            const minuts = ara.getMinutes();
            const segons = ara.getSeconds();

            const format = `${dia}/${mes}/${any} ${hores}:${minuts}:${segons}`;
            document.getElementById("data").innerHTML = format;
        };
    </script>
</head>
<body>
    <h2>Data i Hora Actuals</h2>
    <p id="data"></p>
</body>
</html>
### 82. Rellotge digital
<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <title>Exercici 82</title>
    <style>
        #rellotge {
            font-size: 48px;
            font-weight: bold;
            font-family: monospace;
        }
    </style>
    <script>
        const actualitzarRellotge = () => {
            const ara = new Date();
            const hores = String(ara.getHours()).padStart(2, "0");
            const minuts = String(ara.getMinutes()).padStart(2, "0");
            const segons = String(ara.getSeconds()).padStart(2, "0");

            document.getElementById("rellotge").innerHTML = 
                `${hores}:${minuts}:${segons}`;
        };

        window.onload = () => {
            actualitzarRellotge();
            setInterval(actualitzarRellotge, 1000);
        };
    </script>
</head>
<body>
    <h2>Rellotge Digital</h2>
    <div id="rellotge"></div>
</body>
</html>
### 83. Dies fins a Cap d'Any
const diasFinsCapDAny = () => {
    const ara = new Date();
    const capDAny = new Date(ara.getFullYear() + 1, 0, 1);
    const diferencia = capDAny - ara;
    const dies = Math.ceil(diferencia / (1000 * 60 * 60 * 24));

    return dies;
};

console.log(diasFinsCapDAny()); // Número de dies fins a Cap d'Any
### 84. Dia de la setmana d'una data
const nomDiaSetmana = (dia, mes, any) => {
    const data = new Date(any, mes - 1, dia);
    const dies = ["dilluns", "dimarts", "dimecres", "dijous", 
                   "divendres", "dissabte", "diumenge"];
    return dies[data.getDay()];
};

console.log(nomDiaSetmana(29, 10, 2025)); // "dimecres"
### 85. Calculador d'edat
const calcularEdat = (dia, mes, any) => {
    const dataNaixement = new Date(any, mes - 1, dia);
    const ara = new Date();

    let edat = ara.getFullYear() - dataNaixement.getFullYear();
    const mesActual = ara.getMonth();
    const mesNaixement = dataNaixement.getMonth();

    if (mesActual < mesNaixement || 
        (mesActual === mesNaixement && ara.getDate() < dataNaixement.getDate())) {
        edat--;
    }

    return edat;
};

console.log(calcularEdat(15, 3, 1990)); // Edat calculada

Notes importants

  1. Seguretat: Algunes propietats del navigator i location estan restringides per motius de seguretat en contexts de navegador.

  2. Compatibilitat: Les solucions utilitzen mètodes moderns de JavaScript. Per a navegadors més antics, pot ser necessari adaptar el codi.

  3. HTML: Els exemples que necessiten HTML estan complets però simplifícats. En un projecte real, hauries d'afegir més estils CSS i estructurar millor el codi.

  4. localStorage: Algunes solucions utilitzen localStorage que requereix que el codi s'executi en un servidor o localment (no funciona sempre en fitxers locals per a alguns navegadors).