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:


int GlobinaVode();
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): ...
/* 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.