Maple: Управляющие клавиши ИМС; замечания и предложения по его использованию и развитию, страница 11

В приведенном примере возвращаются соответственно: значения считываемых строк файла (первый элемент последовательности), возвращаемое filepos-функцией значе-ние - номер позиции конца текущей строки и начала следующей (второй элемент) и логическое значение тестирующей feof-функции (третий элемент) на текущей стро-ке. Из данного примера четко прослеживается полная идентичность реакций функций readline и filepos на ситуацию “конец файла”, возвращающих нуль-значение, и некор-ректное значение в данной ситуации feof-функции,возвращающей false-значение вме-сто необходимого true-значения. Следовательно, feof-функция не может служить для надежного тестирования ситуации “конец файла” и для этих целей в режиме READ-до-ступа к TEXT-файлам следует использовать непосредственно readline-функцию либо filepos-функцию, как это иллюстрировалось в примерах по основному тексту.

            Применение к закрытому TEXT-файлу feof-функции открывает его как BINARY-файл STREAM-вида в READ-режиме доступа. При этом, производится установка пози-ции сканирования файла сразу же в его конец с возвратом false-значения. Все после-дующие обращения к файлу по readline-функции последовательно возвращают значе-ния его строк в циклическом порядке. Это же сохраняет силу и для пустого файла. По вызову filepos(<СФ>,0)-функции возвращается нуль-значение с установкой указателя в конец файла, указанного первым фактическим аргументом функции.

            36. По {writeto|appendto}-функции попытка направить вывод результатов вычи-слений (информации Output-параграфов) в открытый файл не вызывает ошибки, но сам вывод в файл производится в режиме дописывания (APPEND). Устанавливаемый по {writeto|appendto}-функции режим выгрузки результатов вычислений в файл не от-меняется по restart-предложению. По вызову writeto(terminal)-функции производится как возврат в стандартный режим, так и закрытие файла выгрузки.

            37.При использовании writebytes-функции для вывода русскоязычных символов (представленных в виде их десятичных кодов внутренней таблицы MS-D0S) на дисплей происходит их искажение, что иллюстрирует следующий пример:

> writebytes(default,map(convert,[`80`,`AB`,`A0`,`A4`,`EC`,`A5`,`A2`],decimal,hex)): Þ

€« ¤ì¥¢

> writebytes(default,map(convert,[`C0`,`EB`,`E0`,`E4`,`FC`,`E5`,`E2`],decimal,hex)): Þ

Аладьев

В основе данной ситуации лежит различие внутренних кодовых таблиц MS-DОS и сре-ды Windows в области символов русского алфавита. Во избежание этого можно, в час-тности, использовать либо русифицированную Windows-оболочку, либо предваритель-но обработать Salcombe-утилитой [29,30] русскоязычный текст на предмет получения hex-кодов соответствующих букв русского алфавита в Windows-среде. Последний при-ем и продемонстрирован во втором примере фрагмента на основе полученных посред-ством Salcombe-утилиты Windows-кодов. Описанная ситуация лежит в основе больши-нства случаев искажений русскоязычных текстов.

38.В ряде случаев limit-функция не возвращает результатов вычисления преде-лов для достаточно простых выражений, как это иллюстрирует следующий фрагмент:

> limit(sin(z)*cos(h)/(z*h),{z=0,h=Pi/2});  Þ

> limit(sin(z)/z,z=0),  limit(cos(h)/h,h=Pi/2);  Þ  1, 0

            39. При использовании в качестве пределов суммирования sum-функции значе-ний±infinity уже для относительно простых выражений могут возвращаться некоррект-ные результаты, как это иллюстрирует следующий фрагмент:

> In:= infinity: G:=(x)->(56*x+98)/(9*x^3-2):   S:=(x)->(x+1)/(9*x^3-2):

> evalf(sum(G(x)+S(x),x=-In..In));  Þ  - ¥

> evalf(sum(G(x),x=-In..In)) + evalf(sum(S(x),x=-In..In));  Þ  -22.70583738

> SP1:= Sum(Product(10*k-4,k=1..n)/Product(3*k-1,k=1..n),n=1..In);  Þ

> evalf(value(SP1),12);  Þ  -1.39437005476 - .133593764054 I

Из приведенного фрагмента следует, что применение при указанных условиях sum-фу-нкции приводит к противоречию вида sum(A+B) ¹ sum(A)+sum(B), что следует учиты-вать при использовании данного средства языка АРМа. Подобная ситуация имеет мес-то и для случая совместного использования {Sum, Product}-функций, когда операции суммирования и произведения могут ошибочно приводить к комплексным значениям.