загрузка...
 
4. 2 Блок-схема функции void number ()
Повернутись до змісту

4. 2 Блок-схема функции void number ()

 

Блок №1 представляет собой цикл for ( ). В нем значение лексемы lval вначале определяется. Затем проверяется, что nch – цифра. Если это так, то происходит вычисление нового значения lval в блоке №2. Старое значение lval умножается на 10. К нему прибавляется результат вычитания из кода прочитанной цифры (nch) кода нуля. В таблице кодов ASCII код нуля в “10” системе равен 48, код “1” – 49, код “2” – 50 и т.д. Соответственно в  “16”-ричной системе – (30)16, (31)16, (32)16 и т.д.

Таким образом, разница кодов позволяет получить прочитанную цифру. Предположим, из программы на SPL считывается константа 541. По первой цифре “5” будет вызвана функция number (). lval=0. nch содержит код цифры “5”, т.е. (35)16. Итак, условие – является ли содержимое nch кодом цифры, дает положительный ответ. В результате происходит переход к блоку №2. В нем вычисляем  lval=10*0+(35)16 – (30)16 =5. После этого происходит возврат в циклы, считывается из файла новое значение nch. Это код (34)16 цифры “4”.

Теперь в блоке №2  lval=10*5+(34)16 – (30)16 =54.

После считывания кода цифры  “1”  lval=10*54+(31)16 – (30)16=541.

После того как очередной прочитанный символ окажется не цифрой, происходит выход из цикла. Лексема получает значение NUMB, и происходит выход из функции.



загрузка...