Zadanie domowe nr 3: Symulacja termostatu

Stwórz program symulujący działanie termostatu z inteligentną regulacją temperatury

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Symulacja Termostatu</title>
</head>

<body>
<script>
/*
----------------------------------------------
 Funkcja pomocnicze: pobierająca temperaturę od użytkownika
----------------------------------------------
1.Pytamy użytkownika o wartość liczbową.
2.Zakres ograniczamy do min < max, zakresu 0–50°C i liczb.
Pętla trwa dopóki użytownik nie poda poprawnej wartości.
Dodatkowo jeśli użytnowwnik naciska anuluj to pojawia się alert
Promty zawsze są rozumiene jako tekst, dlatego trzeba zrobić konwersję string na Number
*/

function pobierzTemperature(opis) {

    while (true) {

        let wartosc = prompt(`Podaj ${opis} temperaturę (0–50°C):`);

        if (wartosc === null) {
            alert("Musisz wpisać wartość.");
            continue;
        }

        wartosc = Number(wartosc);

        if (!isNaN(wartosc) && wartosc >= 0 && wartosc <= 50) {
            return wartosc;
        }

        alert("Błędna wartość! Podaj liczbę z zakresu 0–50.");
    }
}

/*
----------------------------------------------
 Funkcje matematyczne: Obliczanie temperatury optymalnej
----------------------------------------------
4. Temperatura optymalna to środek zakresu (min + max) podzielomny na 2. 
Jak obliczenie średniej arytmetycznwej
*/
function wyliczTempOptymalna(minTemp, maxTemp) {
    return (minTemp + maxTemp) / 2;
}
/*
----------------------------------------------
 Uproszczony regulator PID
----------------------------------------------
4.Tu oblicza zmianę temperatury na podstawie różnicy między temperaturą aktualną a optymalną.
Korekta = 0.3 oznacza 30% korekty.
*/
function obliczZmianePID(tempAktualna, tempOptymalna) {
    const roznica = tempOptymalna - tempAktualna;
    const korekta = 0.3;
    return roznica * korekta;
}

/*
----------------------------------------------
 Główna symulacja termostatu
----------------------------------------------
*/    

//pobranie i walidacja danych

function symulacjaTermostatu() {

    alert("Witaj! Uruchamiasz symulację termostatu.");

    // pobranie zakresu temperatur
    let minimalnaTemp = pobierzTemperature("minimalną");
    let maksymalnaTemp = pobierzTemperature("maksymalną");

    // sprawdzamy poprawność zakresu. Pętla while konczy skię gdy temp minimalna jest nizsza niż maksymalna
    while (minimalnaTemp >= maksymalnaTemp) {
        alert("Minimalna temperatura musi być niższa niż maksymalna.");
        minimalnaTemp = pobierzTemperature("minimalną");
        maksymalnaTemp = pobierzTemperature("maksymalną");
    }    

    // obliczamy temperaturę optymalną
    const tempOptymalna = wyliczTempOptymalna(minimalnaTemp, maksymalnaTemp);

    console.log("=== START SYMULACJI TERMOSTATU ===");
    console.log("Zakres optymalny:", minimalnaTemp, "-", maksymalnaTemp, "°C");
    console.log("Temperatura optymalna:", tempOptymalna, "°C");

    // ustawiamy temperaturę aktualną
    let tempAktualna = 10;
    const iteracje = 40;

    // główna pętla sterowania, iteracja musi się powtórzyć 40 razy
    for (let i = 1; i <= iteracje; i++) {

        console.log(`\n--- Pomiar ${i} ---`);
        console.log("Aktualna temperatura:", tempAktualna.toFixed(2), "°C");

        // zmiana z algorytmu PID
        const zmiana = obliczZmianePID(tempAktualna, tempOptymalna);

        // aktualizacja temperatury
        tempAktualna += zmiana;

        console.log("Zmiana:", zmiana.toFixed(2));
        console.log("Nowa temperatura:", tempAktualna.toFixed(2), "°C");

    }

    console.log("\n=== KONIEC SYMULACJI ===");
}

symulacjaTermostatu();

</script>
</body>
</html>