Подключите Ваш компьютер к проекту распределённых вычислений!
Этим Вы окажете большую помощь науке и медицине.
См. подробнее: 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
 с Real11 сек.35856228132198620787
 с Single {$E-}3 сек.37600243152345222202
 с Single {$E+}3 сек.47360316013042729111
   В случае использования {$E+} в программный код включаются и 8087-инструкции и код для
их эмуляции. При запуске программы в этом случае производится анализ, есть ли сопроцессор,
и если его нет - то только тогда включаются средства его эмуляции, а если сопроцессор
есть, то средства эмуляции не работают, а работают 8087-инструкции. А в случае использования
директивы {$E-} в программу включаются только 8087-инструкции, но и тогда производится
тест на наличие сопроцессора при запуске программы. Если его нет, то выведется сообщение:
Numeric co-processor required
4) Как встроить шрифт в программу, использующую модуль F_GRTEXT.PAS. Следует заметить, что
   в случае использования модуля F_GRTEXT.PAS регистрация шрифта в программе выполняется
   немного иначе, по сравнению со стандартным модулем GRAPH.TPU. Как именно - см. в приводимой
   ниже программе:


uses Graph, f_grtext;

procedure trip; {$L trip.obj} external;

var d, r : Integer;

begin
  d:=Detect; InitGraph(d,r,''); MoveTo(0,100);
  if RegisterCHRFont(@trip)>0 then
    OutString('Нормальная регистрация',1,0,1,1) else
  begin
    SetTextStyle(TriplexFont,HorizDir,4);
    OutText('Ошибка при регистрации шрифта')
  end;
  ReadLn; CloseGraph
end.

	Перед запуском этой программы необходимо подготовить файл 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= ----------------------------------------------------------------

< < < На главную страничку < < <