Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MODULE Miesiac (typ_roku)
- VAR miesiac : {styczen, luty, marzec, kwiecien, maj, czerwiec, lipiec, sierpien, wrzesien, pazdziernik, listopad, grudzien};
- VAR dzien : 1..32;
- VAR maxDni : 28..31;
- ASSIGN
- init(miesiac) := styczen;
- next(miesiac) := case
- miesiac = styczen & dzien = maxDni : luty;
- miesiac = luty & dzien = maxDni: marzec;
- miesiac = marzec & dzien = maxDni: kwiecien;
- miesiac = kwiecien & dzien = maxDni: maj;
- miesiac = maj & dzien = maxDni: czerwiec;
- miesiac = czerwiec & dzien = maxDni: lipiec;
- miesiac = lipiec & dzien = maxDni: sierpien;
- miesiac = sierpien & dzien = maxDni: wrzesien;
- miesiac = wrzesien & dzien = maxDni: pazdziernik;
- miesiac = pazdziernik & dzien = maxDni: listopad;
- miesiac = listopad & dzien = maxDni: grudzien;
- miesiac = grudzien & dzien = maxDni: styczen;
- TRUE : miesiac;
- esac;
- init(dzien) := 1;
- next(dzien) := case
- ((dzien + 1) <= maxDni) : dzien + 1;
- TRUE: 1;
- esac;
- init(maxDni) := 31;
- next(maxDni) := case
- next(miesiac) = styczen & dzien = maxDni: 31;
- next(miesiac) = luty & typ_roku = normalny & dzien = maxDni: 28;
- next(miesiac) = luty & typ_roku = przestepny & dzien = maxDni: 29;
- next(miesiac) = marzec & dzien = maxDni: 31;
- next(miesiac) = kwiecien & dzien = maxDni: 30;
- next(miesiac) = maj & dzien = maxDni: 31;
- next(miesiac) = czerwiec & dzien = maxDni: 30;
- next(miesiac) = lipiec & dzien = maxDni: 31;
- next(miesiac) = sierpien & dzien = maxDni: 31;
- next(miesiac) = wrzesien & dzien = maxDni: 30;
- next(miesiac) = pazdziernik & dzien = maxDni: 31;
- next(miesiac) = listopad & dzien = maxDni: 30;
- next(miesiac) = grudzien & dzien = maxDni: 31;
- TRUE : maxDni;
- esac;
- MODULE Rok(miesiac, dzien)
- VAR rok : 1900..2018;
- VAR typ : { normalny, przestepny };
- ASSIGN
- init(typ) := normalny;
- next(typ) := case
- (((next(rok)) mod 4 = 0 & (next(rok)) mod 100 != 0) | (next(rok)) mod 400 = 0) : przestepny;
- TRUE : normalny;
- esac;
- init(rok) := 1900;
- next(rok) := case
- next(miesiac) = styczen & dzien = 31 & rok + 1 <= 2018: rok + 1;
- TRUE: rok;
- esac;
- MODULE main
- VAR
- Rok: Rok(Miesiac.miesiac, Miesiac.dzien);
- Miesiac: Miesiac(Rok.typ);
- DEFINE
- ROK:= Rok.rok;
- TYP_ROKU:= Rok.typ;
- MIESIAC:= Miesiac.miesiac;
- MAX_DNI:= Miesiac.maxDni;
- DZIEN:= Miesiac.dzien;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement