You are on page 1of 5

Bi 71: c t kiu d liu NGAY

NGAY ::
Ngay : { 1..31 }
Thang : { 1..12 }
Nam : { y N1 | y >= 000 }

// Trc Cng Nguyn

NamNhuan ( nam : N1 ) kq : B
Pre
Post kq = (( 4 mod nam = 0) ( 100 mod nam 0 )) ( 400 mod nam = 0 )
Inv-NGAY ( d : NGAY ) kq : B
Pre
Post kq = ( ( d.thang {1, 3, 5, 7, 8, 10, 12} d.ngay { 1..31 } )
( d.thang {4, 6, 9, 11} d.ngay { 1..30 } )
( d.thang = 2 NamNhuan( d.nam ) d.ngay { 1..29 } )
( d.thang = 2 NamNhuan( d.nam ) d.ngay { 1..28 } )
Bi 72: c t hm tr v ngy tip theo sau 1 ngy cho trc
NgayCuoiCung( d : NGAY ) kq : N1
Pre
Post ( ( d.thang {1, 3, 5, 7, 8, 10, 12} ( kq = 31 ) )
( d.thang {4, 6, 9, 11} ( kq = 30 ) )
( d.thang = 2 NamNhuan( d.nam ) ( kq = 29 ) )
( d.thang = 2 NamNhuan( d.nam ) ( kq = 28 ) )
NgayTiepTheo( d : NGAY ) kq : NGAY
Pre
Post ((d.ngay + 1 < NgayCuoiCung(d)) (kq.ngay = d.ngay + 1) (kq.thang =
d.thang) (kq.nam =
d.nam))
((d.ngay + 1 < NgayCuoiCung(d)) (d.thang 12) (kq.ngay = 1)
(kq.thang = d.thang + 1)
(kq.nam = d.nam) )
((d.ngay + 1 < NgayCuoiCung(d)) (d.thang = 12) (kq.ngay = 1)
(kq.thang = 1) (kq.nam =
d.nam + 1) )
Bi 73: c t hm tr v ngy sau n ngy ca 1 ngy cho trc
// Tr v s thng tng ng vi s ngy

BaoNhieuThang( ngay, thang : N1) kq : N1


Pre
Post (kq = 0) (ngay < NgayCuoiCung(thang))
(kq = 1 + BaoNhieuThang(ngay NgayCuoiCung(thang), thang + 1) (thang
11))
(kq = 1 + BaoNhieuThang(ngay NgayCuoiCung(thang), 1) (thang 12))
// Tr v s nm tng ng vi s thng
BaoNhieuNam( thang : N1) kq : N1
Pre
Post (kq = 0) (thang 12)
(kq = 1 + BaoNhieuNam (thang 12) (thang 12))
NgayDu ( ngay, thang : N1) kq : N1
Pre
Post (kq = ngay) (ngay < NgayCuoiCung(thang))
( NgayDu (ngay NgayCuoiCung(thang), thang + 1) (thang 11) )
( NgayDu (ngay NgayCuoiCung(thang), 1) (thang 12) )
ThangDu (thang : N1) kq : N1
Pre
Post (kq = thang) (thang 12)
( BaoNhieuNam (thang 12) (thang 12) )
NgayTiepTheo( n : N1, d : NGAY ) kq : NGAY
Pre
Post ((d.ngay + n < NgayCuoiCung(d)) (kq.ngay = d.ngay + n) (kq.thang =
d.thang) (kq.nam =
d.nam))
((d.ngay + n < NgayCuoiCung(d)) (kq.ngay = NgayDu(d.ngay + n))
(kq.thang = d.thang +
BaoNhieuThang(d.ngay + n)) (kq.thang
12) (kq.nam = d.nam) )
((d.ngay + n < NgayCuoiCung(d)) (kq.ngay = NgayDu(d.ngay + n))
(kq.thang =
ThangDu(d.thang +
BaoNhieuThang(d.ngay + n))) (kq.thang 12) (kq.nam = d.nam +
BaoNhieuNam(d.thang + BaoNhieuThang(d.ngay + n))) )

Bi 74: c t hm tr v s ngy chnh lch gia 2 ngy cho trc

// Tr v s ngy tng ng vi nm
NgayCuaNam( nam : N1 ) kq : N1
Pre
Post (kq = 365) ( NamNhuan(nam) )
(kq = 366) ( NamNhuan(nam) )
// Tnh tng cc ngy trong cc thng, t thng 2 n thng a vo
TongNgayCuaNam ( nam : N1 ) kq : N1
Pre
Post (kq = 0) (nam = 0)
(kq = NgayCuaNam(nam 1) + TongNgayCuaNam(nam 1)) (nam > 0)
// Tnh tng cc ngy trong cc thng, t thng 2 n thng a vo
TongNgayCuaThang ( thang : N1 ) kq : N1
Pre
Post (kq = 0) (thang = 1)
(kq = NgayCuoiCung(thang 1) + TongNgayCuaThang(thang 1))
(thang > 1)
// Tnh tng cc ngy qua, t ngy bt u 1/1/000 n ngy hin ti
TongNgay ( d : NGAY ) kq : N1
Pre
Post kq = (d.ngay - 1) + TongNgayCuaThang( d.thang ) +
TongNgayCuaNam( d.nam )
ChenhLech ( x, y : NGAY ) kq : N
Pre
Post kq = TongNgay(x) TongNgay(y)
Bi 75: Cho bit ngy 12/5/2007 l ngy th by. Hy c t hm tr v th ca 1
ngy cho trc(tr v chui k t)
LayThu (x : N1) kq : char*
Ext rd danhsachthu = [bay, chu nhat, hai, ba, tu, nam, sau]
Pre x 7
Post kq = danhsachthu(x)
TinhThu ( d : NGAY ) kq : char*
Ewt rd macdinh = mk-NGAY(15, 05, 2007)

Pre
Post kq = LayThu( 7 mod ChenhLech ( macdinh, x ) + 1)

Hoi thay Nam ve su dung ext


Su dung dac ta khong tuong minh doi voi kieu doi
tuong phuc
Bi 76: c t kiu DONTHUC v kiu DATHUC.
DONTHUC ::
Heso : R
Somu : N1
DATHUC ::
donthuc : DONTHUC*
Inv-DATHUC (d : DATHUC) kq : B
kq = ( i, j inds d.donthuc ( ij ) ( d(i).somu = d(j).somu )
Bi 77: c t hm tnh o hm cp 1 ca a Thc
DaoHam(d : DATHUC) kq : DATHUC
Pre
Post i elems d.donthuc ( j elems kq.donthuc ( i.somu = j.somu + 1)
( i.heso * (j.somu + 1) = j.heso va len
d.donthuc = len kq.donthuc )
Bi 78: Tm tt c cc nghim phn bit ca 1 a Thc
TAPNGHIEM ::
Songhiem : N1
Nghiem : R*
LuyThua( x : R, n : N1) kq : R
Pre
Post ((n = 0) (kq = 1))
((n > 0) (kq = x * LuyThua(x, n - 1))

GiaTriDonThuc( x : R, d : DONTHUC ) kq : R
Pre
Post kq = d.heso * LuyThua(x, d.somu)
GiaTriDaThuc ( x : R, d : DATHUC ) kq : R
Pre
Post (( len d.donthuc = 0 ) ( kq = 0))
(( len d.donthuc > 0 ) ( kq = GiaTriDonThuc( x, hd d.donthuc ) +
GiaTriDaThuc( x, tl d.donthuc ))
Nghiem ( d : DATHUC ) kq : TAPNGHIEM
Pre
Post ( kq.songhiem = len kq.nghiem ) ( x elems kq.nghiem GiaTriDaThuc( x,
p ) = 0 va
(koTonTai x Kthuoc elems kq.nghiem GiaTriDaThuc(x,p) = 0)
Bi 79: Tnh Gi tr a Thc t mt nghim x0 cho trc
S dng li cc hm trn cho ti hm GiaTriDaThuc
Bi 80: Tnh tch phn xc nh trn [x1, x2]
TichPhan( x1, x2 : R, d : DATHUC ) kq : R
Ext wr dh : DATHUC
Pre
Post ( d = DaoHam( dh ) ) ( kq = GiaTriDaThuc( x2, dh ) GiaTriDaThuc ( x1, dh
))

You might also like