1

我有一个非常简单的函数,它应该以给定的时间单位计算两个日期之间的时间量,例如:getPartialPeriod(January 1, February 15, months)将导致1.5.

我真的很纠结如何证明它——我从循环开始,因为我认为这是最困难的部分。我定义了许多 Hoare 三元组和循环不变量,却发现它们都没有用。我会很感激我能得到的所有帮助。

函数伪代码:

getPartialPeriod(startDate, endDate, timeUnitType):
    partialPeriod = 0
    currentDate = startDate + 1 timeUnit

    CASE timeUnitType
        weeks:   daysInTimeUnit = 7
        months:  daysInTimeUnit = 30
        DEFAULT: daysInTimeUnit = 1
    END CASE

    WHILE currentDate <= endDate DO 
        INCREMENT partialPeriod
        currentDate = currentDate + timeUnit
    END WHILE

    remainingPeriod = amount of days between currentDate and endDate
    partialPeriod = partialPeriod + remainingPeriod / daysInTimeUnit

PS请忽略这似乎是一个愚蠢的实现 - 这并不重要。

4

0 回答 0