JavaScript III - Zadanie 3
Cel zadania:
Stwórz program symulujący działanie termostatu z inteligentną regulacją temperatury. Wymagania funkcjonalne:
1. Pobieranie danych od użytkownika Zapytaj użytkownika o minimalną temperaturę optymalną Zapytaj użytkownika o maksymalną temperaturę optymalną Użyj funkcji prompt() do pobrania danych
2. Walidacja danych wejściowych Sprawdź, czy: Wartości są liczbami (nie są NaN) Minimum jest mniejsze od maksimum Wartości są w sensownym zakresie (np. 0°C do 50°C) Jeśli dane są niepoprawne, wyświetl komunikat błędu i zapytaj jeszcze raz
3. Symulacja pracy termostatu Temperatura startowa: 10°C Wykonaj 40 pomiarów/iteracji W każdej iteracji: Wyświetl aktualną temperaturę Oblicz różnicę między aktualną a optymalną temperaturą Dostosuj temperaturę używając algorytmu PID
4. Algorytm regulacji (uproszczony PID) Oblicz temperaturę docelową (środek zakresu optymalnego) Im większa różnica, tym większa zmiana temperatury Wzór sugerowany: zmiana = różnica * współczynnik Współczynnik może wynosić np. 0.3 (30% różnicy)
- Funkcja walidująca dane
- Funkcja obliczająca temperaturę docelową
- Funkcja obliczająca zmianę temperatury (PID)
- Główna pętla symulacji
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// Walidacja danych od użytkownika
function isItCorrect(min, max) {
if (isNaN(min)) return false;
if (isNaN(max)) return false;
if (min >= max) return false;
if (min < 0 || max > 50) return false;
return true;
}
// Obliczanie temperatury docelowej
function goalTemperature(min, max) {
return (min + max) / 2;
}
// Obliczanie zmiany temperatury
function pid(subtract) {
let ratio = 0.3; // 30% korekty
return subtract * ratio;
}
// Pobieranie danych od użytkownika i walidacja
let minTemp = Number(prompt("Podaj minimalną temperaturę:"));
let maxTemp = Number(prompt("Podaj maksymalną temperaturę:"));
while (!isItCorrect(minTemp, maxTemp)) {
alert("Błędne dane! Podaj wartości ponownie.");
minTemp = Number(prompt("Podaj minimalną temperaturę:"));
maxTemp = Number(prompt("Podaj maksymalną temperaturę:"));
}
// Symulacja pracy termostatu
let actualTemp = 10; // temperatura startowa
let finalTemp = goalTemperature(minTemp, maxTemp);
console.log("Docelowa temperatura:", finalTemp, "°C");
console.log("---- START SYMULACJI ----");
for (let i = 0; i < 40; i++) {
console.log("Pomiar " + (i + 1) + ": " + actualTemp.toFixed(2) + "°C");
let subtract = finalTemp - actualTemp;
let change = pid(subtract);
actualTemp = actualTemp + change;
}
console.log("---- KONIEC SYMULACJI ----");
console.log("Ostateczna temperatura:", actualTemp.toFixed(2), "°C");
</script>
</body>
</html>