<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>for in / for of</title>
</head>
<body>
<script>
//WALIDACJA DANYCH
function validateData(min, max, input1, input2){
if (input1 === null || input1 === "") {
alert("Nie podano żadnej wartości");
return false;
} else if (input2 === null || input2 === "") { // Sprawdź, czy wartości są liczbami
alert("Nie podano żadnej wartości");
return false;
} else if (isNaN(input1)) {
alert("To nie jest liczba");
return false;
} else if (isNaN(input2)) {
alert("to nie jest liczba"); // Sprawdź czy są numerem
return false;
} else if (!Number.isInteger(min)) {
alert("To nie jest liczba całkowita"); // Sprawdź, czy są liczbami całkowitymi
return false;
} else if (!Number.isInteger(max)) {
alert("To nie jest liczba całkowita");
return false;
} else if (min<0 || min>50) {
alert("Wartości nie mieszczą się w zakresie");//Sprawdź czy wartości mieszczą się w zakresie
return false;
} else if (max<0 || max>50) {
alert("Wartości nie mieszczą się w zakresie 0-50C");
return false;
} else if (min>max) {
alert("Podano złe wartości");//Sprawdź czy minimum jest mniejsze od max
return false;
}
return true;
}
//OBLICZANIE ŚREDNIEJ TEMPERATURY
function averageTemperature(min,max){
return (min+max)/2;
}
//KOREKTA PID
function correction(averageTemperature, currentTemperature, sumErrors, prevError, valueP, valueI, valueD){
let error = averageTemperature - currentTemperature;
let P = valueP*error;
sumErrors += error;
let I = valueI*sumErrors;
let D = valueD*(error-prevError);
let correction = P+I+D;
return{
correction: correction,
sumErrors: sumErrors,
prevError: error,
}
}
//SYMULACJA PĘTLA 40 ITERACJI Z ALGORYTMEM PID
function thermostatSimulation(averageTemperature){
let currentTemperature = 10;
let valueP = 0.3;
let valueI = 0.3;
let valueD = 0.3;
let sumErrors = 0;
let prevError = 0;
console.log("Temperatura optymalna:" + averageTemperature + "°C");
console.log("Temperatura startowa: " + currentTemperature + "°C");
for (let i=1; i<=40; i++){
let wynik = correction (
averageTemperature,
currentTemperature,
sumErrors,
prevError,
valueP,
valueI,
valueD
);
//Komunikat zależny od temperatury
if (averageTemperature > currentTemperature) {
console.log("Za zimno — zwiększam temperaturę");
} else if (averageTemperature < currentTemperature) {
console.log("Za gorąco — zmniejszam temperaturę");
} else {
console.log("Temperatura jest idealna");
}
//Aktualizacja zmiennych
currentTemperature += wynik.correction;
sumErrors = wynik.sumErrors;
prevError = wynik.prevError;
console.log("Iteracja" + i + ":Temperatura =" +currentTemperature.toFixed(2)+"°C");
}
}
//Pętla główna
let min, max;
let correctData = false;
//Pobieranie danych
do {
let input1 = prompt("Podaj minimalną temperaturę");
let input2 = prompt("Podaj maksymalną temperaturę");
min = Number(input1);
max = Number(input2);
correctData = validateData (min, max, input1, input2);
} while (!correctData);
console.log("Uruchamiam termostat");
console.log("Temperatura minimalna:" + min + "°C");
console.log("Temperatura maxymalna:" + max + "°C");
let optimalTemperature = averageTemperature(min,max);
thermostatSimulation (optimalTemperature);
</script>
</body>
</html>