Исправлена ошибка допущенная НАМИ при модификации программы калькулятор в процедуре считывания с терминала PASBIND. У Пирина, оказывается, все работает. Обратим внимание на то, что она работает только при создании буферного массива, задаваемого с помощью текстовой переменной, которую необходимо объявить в явном виде. Ниже приведем ранее процитированную ПАСКАЛЬ-программу калькулятора с соответствующими изменениями: ШИФР 419999 ЗС5^ ТЕЛЕ^ ----- Не забывать эту опцию в паспорте для диалоговых программ. EEВ1А3 *NAME PASCAL *CALL FICMEMORY *NO LIST *LIBRARY:13 *PASCAL PROGRAM САLСULАТОR(INРUТ,ОUТРUТ); VАR Х, У, Z: RЕАL; SIGN: СНАR; F: TEXT;----- Объявление текстовой переменной РRОСЕDURЕ РАSВIND(VАR Х:ТЕХТ); ЕХТЕRNАL; ВЕGIN (LООР)WНILЕ ТRUЕ DО ВЕGIN WRIТЕLN(’ ЗНАК: ’); -------------------------- РАSВIND(F); READ(F,SIGN); ------ Процедура ввода данных с терминала. -------------------------- IF SIGN = ’0’ ТНЕN ЕХIТ LООР; IF SIGN IN [’+’,’-’,’*’,’/’] ТНЕN ВЕGIN WRIТЕLN(’Х = ’); РАSВIND(F); RЕАD(F,X); WRIТЕLN(’У = ’); РАSВIND(F); RЕАD(F,Y); САSЕ SIGN ОF ’+’: ВЕGIN Z := Х + У; WRIТЕLN(Z:5:5) ЕND; ’-’: ВЕGIN Z := Х - У; WRIТЕLN(Z:5:5); ЕND; ’*’: ВЕGIN Z := Х * У; WRIТЕLN(Z:5:5); ЕND; ’/’: IF У <> 0 ТНЕN ВЕGIN Z := Х / У; WRIТЕLN(Z:5:5) ЕND ЕLSЕ WRIТЕLN(’DIVISIОN ВУ ZЕRО!’); ЕND; ЕND ЕLSЕ WRIТЕLN(’ВАD SIGN!’, ORD(SIGN) OCT); %WRIТЕLN; ЕND; ЕND. *ЕХЕСUТЕ *ЕND FILЕ ----- Две последние строки используются только при вводе с виртуальных перфокарт или перфоленты. В диалоговом режиме из КРАБа они не требуются. `````` ЕКОНЕЦ
Результат работы программы :
NАМЕ РАSСАL
*САLL FIСМЕМОRУ
*NО LISТ
*LIВRАRУ:13
*РАSСАL
*ЕХЕСUТЕ
WНАТ=
3HAK:
;
HEBEPHЫЙ CИMBOЛ! 6400000000000073
3HAK:
+
X =
2
Y =
3
5.00000E+00 ----- верный результат в экспоненциальном представлении.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии