4. naloga
Jezero
V jezeru sredi letoviškega parka želimo regulirati globino vode. Zato na izpust iz jezera namestimo računalniško krmiljeno zapornico, v najglobljo točko jezera pa postavimo tipalo za merjenje globine vode, ki vrne eno meritev na uro. Na voljo sta nam naslednji dve funkciji oz. podprograma:
- Funkcija
GlobinaVode
vrne višino vode kot celo število od 0 do 100 (0 = jezero se je posušilo; 100 = jezero je poplavilo letovišče). Funkcija vrne rezultat šele, ko tipalo pošlje novo meritev (ta je lahko tudi enaka prejšnji meritvi). Do takrat funkcija stoji in čaka. - Funkcija
PremakniZapornico(odpri)
odpre ali zapre (odvisno od tega, ali je parameter odpri enak true ali false) zapornico na izpustu iz jezera in se vrne takoj. Če je bila zapornica že od prej v takem stanju, se ne zgodi nič (to torej ne šteje za napako). Če to funkcijo kličemo večkrat zaporedoma v kratkem časovnem obdobju, obvelja zadnji klic.
Funkciji sta takšne oblike:
public static int GlobinaVode(); function GlobinaVode: integer; def GlobinaVode(): ... void PremakniZapornico(bool odpri); public static void PremakniZapornico(bool odpri); public static void PremakniZapornico(boolean odpri); procedure PremakniZapornico(Odpri: boolean); def PremakniZapornico(odpri): ... |
int GlobinaVode();
/* v C/C++ */ /* v C# in javi */ { v pascalu } # v pythonu; vrne vrednost tipa int /* v C/C++ */ // v C# // v javi { v pascalu } # v pythonu |
Za 10 točk napiši program ali podprogram (funkcijo), ki se vrti v neskončni zanki, spremlja globino vode in odpira ali zapira zapornico po naslednjih pravilih:
- Če je globina vode pod 33, je gladina jezera prenizka. Program naj zapre zapornico, da se bo začela gladina vode dvigati.
- Če je globina vode nad 66, je gladina jezera previsoka. Program naj odpre zapornico.
Ker pa taka regulacija jezera ob velikih nalivih ali dolgotrajni suši reagira prepozno, si uprava letoviškega parka želi, da bi program za regulacijo spremljal gibanje globine vode v krajšem obdobju in v določenih primerih reagiral predčasno (še preden gladina vode postane previsoka ali prenizka).
Za dodatnih 10 točk dodaj v program naslednji dve pravili:
- Če se je v zadnjih 12 urah gladina vode stalno dvigala (vsaka meritev je strogo večja od prejšnje), naj program odpre zapornico.
- Če se je v zadnjih 12 urah gladina vode stalno spuščala (vsaka meritev je strogo manjša od prejšnje), naj program zapre zapornico.
Upoštevaj, da imata pravili iz prvega dela naloge prednost pred dodatnima praviloma.