Язык программирования Форт


Глава 10. Хранение программ и данных - часть 18


CR R@ PATBLOCK 2+ BLOCK + @ ."Диастолическое давление". CR ;

Если ввести с клавиатуры 18 SD то мы увидим что-нибудь вроде Номер пациента 18 Вес 192 Систолическое давление 148 Диастолическое давление 76 ok

Теперь посмотрим, как можно получить средние показатели по всем пациентам (мы только начнем решение этой задачи, предоставляя вам закончить ее в упражнениях). Прежде всего нужно убедиться, что в блоках не содержится ничего, кроме данных о пациентах, т.е. все остальные байты должны содержать нули. Это сделать просто, вводя 50 BLOCK 1024 0 FILL UPDATE й то же самое повторить с блоками 51 и 52. Теперь можно ввести данные с помощью PD. Тогда сумму содержимого каждого блока можно найти, используя слово : SUMBLOCK ( n -- ) BLOCK 0 0 ROT 512 0 DO DUP I 2 * + @ SWAP >R 0 D+ R>

LOOP DROP ;

Теперь, если вы введете PATBLOCK SUMBLOCK D. то увидите на экране сумму всех весов. Обратите внимание, что мы должны использовать числа двойной длины и сложные манипуляции в стеке, так как суммарный вес может оказаться больше 65535 фунтов (считая, что средний вес каждого пациента больше 127 фунтов). Предлагаем вам продолжить решение в следующих упражнениях.

Упражнения

1. Переделайте слово ARRAYPUT таким образом, чтобы при попытке записать какую-либо часть массива после конца блока выдавалось сообщение об ошибке и происходил уход из программы. 2. Предположим, что у вас есть два 10-байтовых массива, 1ARRAY и 2ARRAY, которые вы хотите записать в последовательных блоках точно так же, как мы записывали TESTARRAY. Определите слово PUTARRAYS, которое, если ввести: 1ARRAY 2ARRAY 5 PUTARRAYS запомнит эти два массива последовательно друг за другом, начиная с байта номер 100 (5 х 20 - 100). Зачем может потребоваться запоминание массивов попарно? 3. Определите заново слова PD и SD так, чтобы ни ввод, ни вывод не могли бы произойти после конца блока. 4. Создайте переменную CNT и модифицируйте программу SUMBLOCK так, чтобы она инкрементировала значение CNT. В CNT должно накапливаться число ненулевых записей (т.


- Начало -  - Назад -  - Вперед -