<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Praca domowa 3</title>
</head>
<body>
<script>
/** Sprawdzanie wartości **/
function getTemperature(){
while(true){
let minTemp = parseFloat(prompt("Podaj minimalną temperaturę optymalną w \u2103: "));
let maxTemp = parseFloat(prompt("Podaj maksymalną temperaturę optymalną w \u2103: "));
let iterNumber = parseInt(prompt("Podaj liczbę iteracji: ", "40"));
if (isNaN(minTemp)){
alert("Minimalna tempertatura nie jest liczbą!");
continue;
}
else if (isNaN(maxTemp)){
alert("Maksymalna tempertatura nie jest liczbą!");
continue;
}
else if (isNaN(iterNumber) || iterNumber < 0){
alert("Zła liczba iteracji!");
continue;
}
else if (maxTemp <= minTemp){
alert("Maksymalna tempertatura nie jest większa od minimalnej!");
continue;
}
else if (minTemp < 0 || maxTemp > 50){
alert("Podaj liczby w zakresie od 0\u2103 do 50\u2103!");
continue;
}
return [minTemp, maxTemp, iterNumber];
};
};
/** Szukanie temperatury docelowej **/
function getTargetTemp(minTemp, maxTemp){
return (maxTemp+minTemp)/2;
};
/** PID **/
function regulateTemp(startTemp, targetTemp, factor = 0.3){
diffTemp = targetTemp-startTemp;
changeTemp = diffTemp*factor;
return changeTemp + startTemp;
};
/** Rysowanie temperatury **/
function temperatureBar(currentTemp){
let hashAmount = "";
for(i = 0; i <50; i++){
if (i < Math.round(currentTemp)){
hashAmount += "#";
}
else{
hashAmount += " ";
};
};
return hashAmount;
};
/** Symulacja pracy termostatu **/
function countTemp(){
const [minTemp, maxTemp, iterNumber] = getTemperature();
let targetTemp = getTargetTemp(minTemp,maxTemp);
let startTemp = 10;
let tempBar;
let disturbance;
let historyTemp = [startTemp];
for(let i=0; i<iterNumber; i++){
console.log("Aktualna temperatura: ", startTemp, "\u2103");
tempBar = "Pasek temperatury: 0\u2103 ["+temperatureBar(startTemp)+"] 50\u2103";
console.log(tempBar);
disturbance = Math.random() * (5 - (-7)) + (-7);
startTemp += disturbance;
startTemp = regulateTemp(startTemp, targetTemp);
historyTemp.push(startTemp);
}
console.log("Minimalna optymalna temperatura wybrana przez użytkownika: ", minTemp,"\u2103");
console.log("Maksymalna optymalna temperatura wybrana przez użytkownika: ", maxTemp,"\u2103");
console.log("Liczba iteracji wybrana przez użytkownika: ", iterNumber);
console.log("Temperatura docelowa: ", targetTemp,"\u2103. Temperatura osiągnięta: ", Math.round(historyTemp[historyTemp.length - 1],3),"\u2103");
console.log("Historia temperatur w \u2103: ", historyTemp);
console.log("Najmniejsza osiągnięta temperatura: ", Math.min(...historyTemp),"\u2103");
console.log("Największa osiągnięta temperatura: ", Math.max(...historyTemp),"\u2103");
};
countTemp();
</script>
</body>
</html>
Przykład użycia