JavaScript III - Zadanie 3

JavaScript III - Zadanie 3
Photo by Dan LeFebvre / Unsplash

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>