В задании речь идет о модуле для работы с банковским счетом. В модуль включены две функции — deposit
и withdraw
, которые работают с глобальной переменной account
. Предполагайте, что модуль может быть расширен, то есть может быть написан модуль с дополнительными функциями, включающий этот модуль, работающий с той же глобальной переменной account
. Это расширение не должно нарушать допустимое множество значений этой переменной.
Переменная account
обозначает количество денег на счете. Оно не может быть отрицательным и должно укладываться в тип.
Функция deposit
предназначена для того, чтобы положить некоторую положительную сумму денег на счет. Если это можно сделать, функция должна увеличивать значение переменной account
на эту сумму денег и возвращать число 0, других действий эта функция не должна делать. Если положить указанную сумму нельзя, функция должна возвращать число 1 и не делать никаких других действий.
Функция withdraw
предназначена для того, чтобы снять некоторую положительную сумму денег со счета. Если это можно сделать, функция должна уменьшать значение переменной account
на эту сумму денег и возвращать число 0, других действий эта функция не должна делать. Если снять указанную сумму нельзя, функция должна возвращать число 1 и не делать никаких других действий.
Заголовочный файл модуля можно скачать по этой ссылке.
Задание: 1) дополнить заголовочный файл спецификацией модуля; 2) написать реализацию модуля и доказать при помощи Frama-C, что реализация удовлетворяет спецификации; 3) прислать на почту архив с директорией, в которой есть заголовочный файл со спецификацией, реализация и директория .jessie с доказательством.
Задание должно быть выполнено до 12:00 2 апреля.