Этим Вы окажете большую помощь науке и медицине. См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm |
1) Все программы были вручную набраны из книжек в период с 1996 по 1998 год, когда в компьютерном классе стояли ещё 386 компьютеры и активно использовался Turbo Pascal. Программы набирались из книжек исключительно в образовательных и учебных целях, для занятий студентов в компьютерном классе.
2) Про модуль F_GRTEXT.PAS. Если указать AppHandle := false то вывод будет производиться через PutPixel, а не в видеопамять, и будет значительное замедление вывода. А вот при использовании CGA-режимов вывод в видеопамять и не предусмотрен, поэтому в случае работы с F_GRTEXT в CGA-режиме обязательно следует указать AppHandle := false (в начале главной подпрограммы), иначе на экран вообще ничего выводиться не будет.
3) Снова про модуль F_GRTEXT.PAS. В книжке переменные r и a в процедуре Coo объявлены типа Single. Однако при наборе вместо Single был указан тип Real. В случае, если на компьютере есть сопроцессор, то при указании Single вывод векторными шрифтами производится намного быстрее, чем в случае, если указать тип Real. Но, выиграв в скорости, проигрываем в размере EXE-файла. На 386DX компьютере с 80387 сопроцессором было замерено время вывода на экран программой GRTEXT_T.PAS в случае применения Real и Single. Компьютер имел тактовую частоту 40 MHz. Итак, при Real время вывода составило 11 сек., а в случае применения Single - всего 3 секунды. А далее приводится таблица с длинами GRTEXT_T.EXE в зависимости от того, какой тип Real или Single применить:
Как скомпилирован | Время выполнения | Длина GRTEXT_T.EXE (неупакованного) | упакованный DIET 1.0 | упакованный WWPACK 3.02 | упакованный APACK 0.98 |
с Real | 11 сек. | 35856 | 22813 | 21986 | 20787 |
с Single {$E-} | 3 сек. | 37600 | 24315 | 23452 | 22202 |
с Single {$E+} | 3 сек. | 47360 | 31601 | 30427 | 29111 |
В случае использования {$E+} в программный код включаются и 8087-инструкции и код для их эмуляции. При запуске программы в этом случае производится анализ, есть ли сопроцессор, и если его нет - то только тогда включаются средства его эмуляции, а если сопроцессор есть, то средства эмуляции не работают, а работают 8087-инструкции. А в случае использования директивы {$E-} в программу включаются только 8087-инструкции, но и тогда производится тест на наличие сопроцессора при запуске программы. Если его нет, то выведется сообщение: Numeric co-processor required
4) Как встроить шрифт в программу, использующую модуль F_GRTEXT.PAS. Следует заметить, что в случае использования модуля F_GRTEXT.PAS регистрация шрифта в программе выполняется немного иначе, по сравнению со стандартным модулем GRAPH.TPU. Как именно - см. в приводимой ниже программе:
|
Перед запуском этой программы необходимо подготовить файл trip.obj с помощью программы binobj.exe Необходимо выполнить команду: binobj trip.chr trip trip 5) О функции MS-DOS INT $32 В книжке "Фаронов В.В. Турбо Паскаль 7.0: Практика программирования 1997 год" на странице 79 в статье про функцию MS-DOS INT $32 сказано, что автору не удалось получить информацию о диске в MS-DOS 6.20. На самом же деле здесь дело в том, что в книжке у автора в этой программе была ошибка - номер диска должен заноситься в регистр dl, а не в al. Исправив эту ошибку, были проведены тесты на MS-DOS 6.20 и на MS-DOS 7.10 (который входит в Windows 95). В обоих случаях эта программа нормально заработала. Только соответствует ли формат получаемой информации тому формату, что приведён в книжке - неизвестно (такие тесты не проводились). Ведь этот формат менялся в MS-DOS 2.0, 3.0 и 4.0 (об этом так и сказано в книжке), а насчёт MS-DOS 5.0 и выше - неизвестно.
6) Несколько замечаний по модулю F_TEXT - Процедуры ChangeAttribute и SetAttribute игнорируют границы установленного окна. Координаты x1, y1, x2, y2 в этих процедурах считаются относительно начала экрана! - С помощью процедур MoveFromScreen и MoveToScreen не следует пересылать данные из одной части видеопамяти в другую. Если используется CGA адаптер, то в этом случае на экране будет появляться характерный снег, так как эти процедуры уже подразумевают, что "второй" параметр - не видеопамять, и MoveFromScreen синхронизирует только Source, а MoveToScreen синхронизирует только Destin. - Следует отметить, что в отличие от модуля Crt, модуль F_Text не использует запись в видеопамять, а использует INT $10, что приводит к некоторому замедлению вывода на экран.
7) Небольшое замечание по Borland Pascal. Если есть два разных TURBO.TPL, один в каталоге например \BP\BIN, а другой в текущем каталоге (откуда компилируем), то компилятор берёт тот, что в каталоге, откуда компилируем. Это же касается и файлов с настройками TURBO.TP и TURBO.DSK. А вот в следующей ситуации, если в текущем каталоге есть и TURBO.TPL и "в свободном виде" CRT.TPU (либо CRT.PAS), то для компиляции будет взят тот CRT.TPU, что внутри TURBO.TPL. Если в текущем каталоге есть и .TPU и .PAS - модуль, то вначале ищется .TPU (при режимах Compile или Make). В случае режима Build сразу компилируется .PAS, в независимости от того, есть ли .TPU (ну если уж .PAS нет, то тогда, конечно, берётся .TPU). При Compile, если .TPU не найден - выдаётся сообщение об ошибке, а при Make, если .TPU не найден - то ищется .PAS.
8) Ниже приводится для интереса таблица, показывающая, насколько высокий выигрыш давало наличие арифметического сопроцессора на старых машинах. Приводится сравнение скорости вычислений в программе pr_rkf45.pas, которая была набрана из книжки (эта программа решает систему дифференциальных уравнений двумя различными методами).
Тип компьютера | Время выполнения программы pr_rkf45.exe |
XT - 4,77 MHz без сопроцессора | 2 минуты |
XT - 4,77 MHz с сопроцессором | 18 секунд |
386 - 20 MHz без сопроцессора | 55 секунд |
386 - 40 MHz без сопроцессора | 34 секунды |
386 - 40 MHz с сопроцессором | 2 секунды |
Pentium I - 100 MHz (сопроцессор встроен) | мгновенно |
9) Небольшое примечание, не касающееся программ, набранных из книжки. Примечание по запуску Microsoft(R) FORTRAN Professional Development System, Version 5.1. Оболочка Microsoft Fortran (PWB.COM) при работе под Windows NT/2000/XP отказывается компилировать программу и выдавать сообщения об ошибках (в случае, если в тексте программы есть ошибки) и предлагает запустить старую версию EXE-файла, если она есть. В связи с этим при работе с Microsoft Fortran под Windows NT/2000/XP лучше вообще не пользоваться оболочкой, а использовать компилятор FL.EXE. Компилятор FL.EXE лучше запускать из .BAT-файла. Вот пример .BAT-файла для компиляции программы на Фортране: @ECHO OFF SET PATH=S:\APPLY\F77\BIN;S:\APPLY\F77\BINB SET LIB=S:\APPLY\F77\LIB SET INCLUDE=S:\APPLY\F77\INCLUDE S:\APPLY\F77\BINB\FL.EXE %1 %2 %3 %4 %5 %6 %7 %8 %9 SET LIB= SET INCLUDE= ----------------------------------------------------------------
< < < На главную страничку < < <