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>