Информатика -продвинутый курс

         

МОДЕЛИ ВНУТРИВИДОВОЙ КОНКУРЕНЦИИ


Рассмотрим простейшую из указанных моделей для вида с дискретными периодами размножения, в которой численность популяции в момент времени t

равна N, и изменяется во времени пропорционально величине основной чистой скорости воспроизводства R. Такими видами являются, например, большая часть растений, некоторые виды насекомых, у которых разные поколения четко разнесены во времени. Коэффициент R характеризует количество особей, которое воспроизводится в расчете на одну существующую, а также выживание уже существующих. Данная модель может быть выражена уравнением

 (7.60)

решение которого имеет вид

(7.61)

где N0- начальная численность популяции. Эта модель, однако, описывает популяцию, в которой отсутствует конкуренция и в которой R

является константой; если R>1,

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

Следовательно, в первую очередь необходимо изменить уравнение (7.60) таким образом, чтобы чистая скорость воспроизводства зависела от внутривидовой конкуренции.

Конкуренцию можно определить как использование некоего ресурса (пищи, воды, света, пространства) каким-либо организмом, который тем самым уменьшает доступность этого ресурса для других организмов. Если конкурирующие организмы принадлежат к одному виду, то взаимоотношения между ними называют внутривидовой конкуренцией,

если же они относятся к разным видам, то их взаимоотношения называют межвидовой конкуренцией.




Рис. 7.37. К вопросу об ограничении скорости роста популяции

На рис. 7.37 показана простейшая возможная зависимость скорости воспроизводства от численности популяции. Точка А отражает ситуацию, в которой численность популяции близка к нулю, конкуренция при этом практически отсутствует, и фактическую скорость воспроизводства вполне можно описывать параметром R в его первоначальном виде. Следовательно, при низкой плотности популяции уравнение (7.60) вполне справедливо. В преобразованном виде оно выглядит так:



Точка В,

напротив, отражает ситуацию, в которой численность популяции высока, и в значительной степени проявляется внутривидовая конкуренция. Фактическая скорость воспроизводства в результате конкуренции настолько снижена, что популяция в целом может не более чем восстанавливать в каждом поколении свою численность, потому что количество родившихся особей уравновешивается количеством погибших. Гипотезе, отраженной на рис. 7.37, соответствует уравнение

(7.62)

где
. Это уравнение представляет собой модель роста популяции, ограниченного внутривидовой конкуренцией. Суть этой модели в том, что константа R в уравнении (7.60) заменена на фактическую скорость воспроизводства, т е.
, которая уменьшается по мере роста численности популяции Nt. Достоинство полученного уравнения заключается в его простоте. Такой тип конкуренции приводит к саморегуляции численности популяции, изображенной на рис. 7.38 (для некоторого набора параметров модели; численное решение).





Рис. 7.38. Изменение численности популяции согласно уравнению (7.62) при R = 2, К = 200, N0 = 20

После несложного изменения в уравнении (7.62) может быть получена гораздо более общая модель, учитывающая интенсивность конкуренции. Простейшая из возможных зависимостей падения скорости роста популяции от ее численности, изображенная на рис. 7,37, является не законом природы, а всего лишь удобной гипотезой. Далеко не всегда реальная динамика численности популяции, определяемая внутривидовой конкуренцией, даже качественно согласуется с изображенной на рис. 7.38.


Более общая гипотеза о законе падения скорости роста популяции в зависимости от ее численности приводит к следующему уравнению:

(7.63)

Общность данной модели в отличие от уравнения (7.62) обусловлена введением в модель параметра b,

который определяет тип зависимости падения скорости роста популяции от ее численности.

Набор величин a, b, R

можно использовать для сравнения и противопоставления сильно различающихся ситуаций. Другим положительным качеством уравнения (7.63) является его способность освещать новые стороны реального мира. Путем анализа кривых динамики популяций, полученных с помощью уравнения, можно прийти к предварительным выводам относительно динамики природных популяций.

На рис. 7.39, а, б, в и г, построенных с помощью численного моделирования, показаны различные варианты динамики численности популяций, полученные с помощью уравнения (7.63) при разном сочетании параметров b и R.



Рис. 7.39, а. Монотонное установление стационарной численности популяции при b =1,4, R

=2



Рис. 7.39, б. Колебательное установление стационарной численности популяции при b

=3,9, R =2

Важной частью исследования, связанного с моделью (7.63), является построение на фазовой плоскости (b, R) границ, которые разделяют монотонное затухание, затухающие колебания, устойчивые предельные циклы и случайные (хаотические) изменения, рис. 7.40 Для этого надо задаться значениями а

и N0

и производить расчеты, изменяя параметры b, R. Различить каждый из возможных режимов можно попытаться визуально, выполняя построение на экране компьютера графиков изменения численности популяции и запоминая соответствующие значения параметров b, R при переходе от одного режима к другому. Следует, однако, понимать,



Рис. 7.39, в. Устойчивые предельные циклы изменения численности популяции при b

= 3,6, R = 4



Рис. 7.39, г. Случайные изменения численности популяции при b =

4,4, R = 4

что установление различии между квазипериодическими, апериодическими и хаотическими движениями - сложная математическая задача.


Для ее решения используются методы преобразований Фурье и другие, рассмотрение которых выходит за пределы данной книги.

В связи с уравнениями (7.62), (7.63) сделаем замечание общего характера, справедливое для всех моделей в экологии. В отличие от физики, где «модель» часто является точно установленным законом природы, в экологии модель гораздо более условна. Ее адекватность реальности (в той мере, в какой моделирование вообще на это претендует) проверяется лишь экспериментально. Поскольку экологи много раз наблюдали каждую из динамик, изображенных на рис. 7.39, можно сделать вывод о полезности соответствующей модели (иначе она была бы лишь математическим упражнением).



Рис. 7.40. Схематическое изображение фазовой диаграммы динамики численности популяции с дискретным размножением

До сих пор мы рассматривали модели, применимые к популяциям с дискретными периодами размножения. Но в природе встречаются и популяции, где рождение и гибель организмов происходит непрерывно; для таких популяции модели, выраженные уравнениями из предыдущего пункта, непригодны. Рассмотрим популяцию с непрерывным размножением

и построим модель изменения ее численности. Математическим аппаратом здесь являются дифференциальные уравнения. Скорость роста в этом случае можно обозначить
, тогда средняя скорость увеличения численности в расчете на одну особь определяется величиной
.

Без учета внутривидовои конкуренции получаем
 = r или



Через r

обозначена мгновенная удельная скорость роста численности, т.е. приращение численности за единицу времени в пересчете на одну особь. Согласие этой модели, вследствие того, что не учтена внутривидовая конкуренция, численность популяции при r > 0 будет неограниченно возрастать, т.е. будет наблюдаться экспоненциальный рост.

Теперь попробуем учесть внутривидовую конкуренцию. Для этого воспользуемся методом, который однажды уже применяли (см. рис. 7.37).

Обратимся к рис. 7.41. Когда численность популяции близка к нулю, скорость роста определяется величиной r, так как конкуренция еще не оказывает влияния на прирост популяции (точка А).



Когда же при возрастании N достигается значение K (предельной плотности насыщения), скорость роста популяции снижается до нуля (точка В).

Записав уравнение прямой АВ, получим

(7.65)



Рис. 7.41. Зависимость скорости воспроизводства от численности популяции

Последнее уравнение известно под названием «логистического». Одно из его достоинств - простота. Уравнение относится к одному из стандартных типов и допускает аналитическое решение:

(7.66)

В истории экологии логистическое уравнение сыграло значительную роль, оказав большое влияние на применение в экологии математических методов. С другой стороны, простота уравнения накладывает ограничения на область его применения, так как с его помощью можно описать немногие реальные популяции. Но, несмотря на все ограничения, логистическое уравнение используется как составная часть и в других моделях динамики численности популяции, рассматриваемых ниже.

Изменение численности популяции в соответствии с формулами (7.65)-(7.66) иллюстрирует рис. 7.42.



Рис. 7.42. Динамика численности популяции при No =25, К = 200, r = 3


МОДЕЛИРОВАНИЕ КАК МЕТОД РЕШЕНИЯ ПРИКЛАДНЫХ ЗАДАЧ


С точки зрения информатики, решение любой производственной или научной задачи описывается следующей технологической цепочкой: «реальный объект -модель - алгоритм - программа - результаты - реальный объект». В этой цепочке очень важную роль играет звено «модель», как необходимый, обязательный этап решения этой задачи. Под моделью при этом понимается некоторый мысленный образ реального объекта (системы), отражающий существенные свойства объекта и заменяющий его в процессе решения задачи.

Модель - очень широкое понятие, включающее в себя множество способов представления изучаемой реальности. Различают модели материальные (натурные) и идеальные (абстрактные). Материальные модели основываются на чем-то объективном, существующем независимо от человеческого сознания (каких-либо телах или процессах). Материальные модели делят на физические (например авто- и авиамодели) и аналоговые, основанные на процессах, аналогичных в каком-то отношении изучаемому (например, процессы в электрических цепях оказываются аналогичными многим механическим, химическим, биологическим и даже социальным процессам и могут быть использованы для их моделирования). Границу между физическими и аналоговыми моделями провести можно весьма приблизительно и такая классификация моделей носит условный характер.

Еще более сложную картину представляют идеальные модели, неразрывным образом связанные с человеческим мышлением, воображением, восприятием. Среди идеальных моделей можно выделить интуитивные модели, к которым относятся, например, произведения искусства - живопись, скульптура, литература, театр и т.д., но единого подхода к классификации остальных видов идеальных моделей нет. Иногда эти модели все разом относят к информационным. В основе такого подхода лежит расширительное толкование понятия «информация»: «информацией является почти все на свете, а может быть, даже вообще все». Такой подход является не вполне оправданным, так как он переносит информационную природу познания на суть используемых в процессе моделей - при этом любая модель является информационной.
Более продуктивным представляется такой подход к классификации идеальных моделей, при котором различают следующие.

1. Вербальные

(текстовые) модели. Эти модели используют последовательности предложений на формализованных диалектах естественного языка для описания той или иной области действительности (примерами такого рода моделей являются милицейский протокол, правила дорожного движения, настоящий учебник).

2. Математические

модели - очень широкий класс знаковых моделей (основанных на формальных языках над конечными алфавитами), широко использующих те или иные математические методы. Например, можно рассмотреть математическую модель звезды. Эта модель будет представлять собой сложную систему уравнений, описывающих физические процессы, происходящие в недрах звезды. Математической моделью другого рода являются, например, математические соотношения, позволяющие рассчитать оптимальный (наилучший с экономической точки зрения) план работы какого-либо предприятия.

3. Информационные

модели - класс знаковых моделей, описывающих информационные процессы (возникновение, передачу, преобразование и использование информации) в системах самой разнообразной природы.

Граница между вербальными, математическими и информационными моделями может быть проведена весьма условно; возможно, информационные модели следовало бы считать подклассом математических моделей. Однако, в рамках информатики как самостоятельной науки, отдельной от математики, физики, лингвистики и других наук, выделение класса информационных моделей является целесообразным. Информатика имеет самое непосредственное отношение и к математическим моделям, поскольку они являются основой применения компьютера при решении задач различной природы: математическая модель исследуемого процесса или явления на определенной стадии исследования преобразуется в компьютерную (вычислительную) модель, которая затем превращается в алгоритм и компьютерную программу, рис. 1.37.



Рис. 1.37. Обобщенная схема компьютерного математического моделирования


МОДЕЛИРОВАНИЕ ПРОЦЕССА ТЕПЛОПРОВОДНОСТИ


То, что тела могут проводить тепло, общеизвестно. Если один из концов длинного стержня поместить в костер, то, если стержень сделан не из горючего или легко плавящегося материала, другой конец через некоторое время тоже нагреется; как быстро и насколько - зависит от материала, размеров стержня и других факторов. Процесс теплопроводности - один из, так называемых, процессов тепломассопереноса, играющих огромную роль в природе и в технике. Другие процессы такого рода - диффузия, благодаря которой смешиваются разные жидкости или газы, процессы гидро- и аэродинамики (т.е. переноса (движения) жидкостей и газов).

Хотя каждый из таких процессов имеет собственные закономерности, между ними много общего. Эти процессы происходят в сплошной среде, о которой шла речь выше; при их математическом моделировании используется один и тот же математический аппарат-дифференциальные уравнения в частных производных.

Ограничимся одной из самых простых задач данного класса - переносом тепла в однородном стержне. Рассмотрим линейный стержень, боковая поверхность которого не проводит тепла (теплонзолирована). Если в начальный момент стержень неравномерно нагрет, то в нем будет происходить перераспределение тепла; при отсутствии внутренних источников тепла его температура, в конце концов, выровняется.

Поскольку стержень линеен и однороден, то распределение температуры в пространстве характеризуется одной координатой x.

Температура (обозначим ее u) зависит от х; кроме того, она может меняться со временем, т.е. является функций двух переменных и(х, t). Изменение этой функции вдоль стержня, «скорость» которого определяется производной пол x, и изменение ее со временем, скорость которого определяется производной по t, взаимосвязаны и, как будет показано ниже, входят в одно уравнение.

Уравнение теплопроводности.

Получим уравнение, описывающее процесс изменения температуры в стержне. Фиксируем некоторую точку x0

(рис. 7.29) и выделим около нее малый участок стержня длиной ?x.
Искомое уравнение есть по существу уравнение теплового баланса (т.е. сохранения энергии): изменение количества тепла в избранном участке стержня за счет притока и (или) оттока его через два сечения приведет к нагреванию или охлаждению этого участка в соответствии с его теплоемкостью. Выразим все это математическим языком.



Рис. 7.29. Участок линейного стержня

Количество тепла, проходящее через поперечное сечение стержня в точке x0

за время ?t, пропорционально площади поперечного сечения S,

градиенту температуры
 и промежутку времени ?t:
~
, рис. 7.30. Если с S и ?t все очевидно, то появление производной
 требует пояснении. За ней стоит тот экспериментальный факт, что поток тепла ?Q, через некоторый участок стержня длиной ?х тем больше, чем больше разность температур (|и1| - |u2|) на его концах и чем меньше расстояние ?х:



Вводя коэффициент пропорциональности k, называемый коэффициентом теплопроводности, получаем



Значение k определяется материалом стержня и для нескольких материалов приведено в табл. 7.6 (в единицах системы СИ:
).

Таким образом, различия в теплопроводности разных материалов огромны.



Рис. 7.30. Поток тепла через участок стержня длиной ?х

Теперь запишем количество тепла, проходящее через сечение в точке х = x0 + ?x:. Оно определяется, естественно, той же формулой:



с условием, что производная
 берется в точке х = x0 + ?х. Для получения искомого уравнения ее надо выразить через значение в точке x0.

Таблица 7.6

Значение коэффициента теплопроводности для некоторых материалов

Медь

384

Лед (0° С)

2,23

Асбест

0,4 - 0,8

Алюминий

209

Бетон

0,7 - 0,2

Дерево

0,1 - 0,2

Сталь

47

Кирпич

0,7

Воздух

0,034

Имеем, ограничиваясь первым порядком приращения

?x,



в силу чего



Если через сечения х = х0

и х = x0 + ?x за время ?t прошло разное количество тепла, то та его часть, которая пошла на нагревание (или, в зависимости от знака, на охлаждение) этого участка стержня, есть





Пусть за то же время температура участка изменилась на ?u; как известно, это связано с изменением ?Q соотношением ?Q

= mc?u, где т - масса, с - удельная теплоемкость. Приравняем два выражения для ?Q:



Поскольку массу можно представить как т = ?•S•?x (? - плотность вещества), то, поделив обе части уравнения на ?t и перейдя к пределу при ?t > 0, получим

(7.48)

Это - основное уравнение теплопроводности для однородного стержня. Как следует из процедуры вывода, это уравнение локально, т.е. в данный момент времени и в данной точке выражает закон сохранения энергии.

В уравнение (7.48) входят три постоянные, характеризующие вещество. Удобно объединить их в одну, переписав уравнение в виде

(7.49)

где 
 - так называемый, коэффициент температуропроводности. Обозначение а2 в (7.49) удобно, так как фиксирует знак этого коэффициента - он всегда положителен.

Уравнение (7.49) - одно из самых простых дифференциальных уравнений в частных производных. Несмотря на его элементарный вид, решение такого уравнения даже в простейшей ситуации есть весьма сложная задача.

Уравнение теплопроводности в трехмерном случае. Описанный выше вывод уравнения теплопроводности достаточно элементарен. Рассмотрим вывод уравнения теплопроводности в трехмерном случае, используя более общий аппарат математического анализа.



Рис. 7.31. Иллюстрация к выводу уравнения теплопроводности в трехмерном случае

Рассмотрим некоторое тело (V), ограниченное поверхностью (S) (рис. 7.31). Закон сохранения энергии должен выполняться для любой части тела (V). По этому закону скорость изменения энергии в теле равна потокуэнергии через его границу. Имеем для энергии в объеме V



где ? (
, t) - объемная плотность энергии.

Поток энергии через границу тела S равен



 - поток энергии. В этих формулах фигурируют тройной и поверхностный (первого рода) интегралы. Закон сохранения энергии (интегральный) примет вид



Применяя к правой части теорему Остроградского- Гаусса, получаем



Поскольку это соотношение должно выполняться для любой части тела (V), то необходимо и достаточно, чтобы в любой точке
 и в любое мгновение t имело место равенство нулю подынтегрального выражения.


Учитывая, что плотность энергии ? (
, t) пропорциональна температуре тела, а поток энергии пропорционален градиенту температуры, получаем (опуская детали) уравнение

(7.50)

где и = u (
, t) - температура в точке
в момент t. Уравнение (7.50) является трехмерным аналогом уравнения (7.49).

Далее будет продолжено лишь рассмотрение задачи о теплопроводности в стержне.

Начальные и краевые условия.

Уравнения (7.49), (7.50) описывают процесс изменения температуры тела (перенос тепла) во времени и в пространстве. Ясно, что для отслеживания такого процесса надо знать распределение температуры в теле в некоторый начальный момент времени:

(7.51)

где f(x) - заданная функция. Кроме того, в тех местах, где возможен теплообмен с окружающей средой, надо знать условия этого теплообмена. Для стержня с теплоизолированной боковой поверхностью такими местами являются концы. Пусть длина стержня l; если один конец имеет координату x = 0, а.

другой - x

= l, то простейший вариант краевых условий - постоянная (но не обязательно одинаковая) температура на каждом конце стержня:



Нижеследующее утверждение физически очевидно, но его строгое математическое доказательство весьма непросто: дифференциальное уравнение (7.49) при начальном условии (7.51) и краевых условиях (7.52) имеет единственное решение.

Аналитические методы решения задачи одномерной теплопроводности существуют, но требуют значительной математической подготовки, к тому же решение обычно получается в виде ряда Фурье, и по его виду протекание процесса неочевидно. В двух- и трехмерном случаях аналитическое решение чаще всего получить не удается (по крайней мере, в практически полезном виде). Как и всюду в этой главе, ниже мы используем простейшие численные методы его решения. Вначале, однако, приведем графические результаты решений простейших задач (заимствованные из книги И.Г.Арамановича и В.И.Левина «Уравнения математической физики», Москва, 1969), способствующие пониманию рассматриваемой проблемы.

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





Графики температуры построены в некоторые последовательные моменты времени, рис. 7.32. При любом t > 0 график симметричен относительно точки
.

Теплоизоляция концов стержня находит свое выражение в том, что кривые распределения температуры имеют горизонтальные касательные при

x = 0 и х = l. Из физических соображений ясно, что при t > ? u >uo/2.



Рис. 7.32. Графическая иллюстрация решения задачи из примера 1

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



Здесь u0 - максимальное значение температуры.

В точках
 l и
l и =
 u0 для любого t > 0, рис. 7.33. Кроме того, при каждом фиксированном t график и симметричен относительно прямой х =
 l и каждая его половина симметрична относительно, соответственно, точек
и
.

Постоянная температура на торцах стержня - простейшее краевое условие. Возможна, однако, и ситуация, когда через торцы происходит теплообмен с окружающей средой. Этот теплообмен, как было установлено Ньютоном, удовлетворяет правилу: поток тепла через единицу поверхности в единицу времени пропорционален разности температур тела и окружающей среды: ?Q = h (u -
)

где и - температура конца стержня,
 - температура окружающей среды, h

- коэффициент теплообмена. По определению h > 0, т.е. ?Q > 0 соответствует уходу тепла из стержня, ?Q < 0 - приходу из окружающей среды.



Рис. 7.33. Графическая иллюстрация решения задачи из примера 2

Поскольку поток тепла во внешнюю среду пропорционален градиенту изменения температуры на торце стержня, закон сохранения энергии принимает вид

(7.53)

(знак «минус» во второй формуле связан с соотношением направления потока и оси х), k - коэффициент теплопроводности.

Ниже приведен пример эволюции температуры в стержне, у которого один из концов теплоизолирован, а на другом - поддерживается постоянная температура.

Пример 3. В стержне (с теплоизолированной боковой поверхностью) левый конец теплоизолирован:
, на правом - поддерживается постоянная температура
, а начальная температура постоянна по стержню:
, рис. 7.34.





Рис. 7.34. Графическая иллюстрация решения задачи из примера 3

Методы конечных разностей в моделировании свойств сплошных сред. Покажем на примере уравнения теплопроводности наиболее распространенные методы численного интегрирования уравнении в частных производных. В их основе лежит прием дискретизации.

Покроем отрезок [а, b] одномерной сеткой (т.е. разобьем на n равных частей, рис. 7.35) с узлами в точках



Искомую функцию и(х)

будем аппроксимировать ее значениями в узлах сетки. Конечно, такое представление не дает полного описания, но в промежуточных точках, если сетка достаточно «мелкая», возможна интерполяция.



Рис. 7.35. Одномерная сетка

Остановимся на разностной аппроксимации производных. Производная дает информацию о локальном изменении функции в пространстве и, соответственно, связывает ее значения в соседних узлах сетки. Очевидная аппроксимация первой производной в точке х,

имеет вид

(7.54)

Для крайних точек, однако, такая аппроксимация невозможна, и простейший способ - ограничиться односторонними разностями:

(7.55)

Разумеется, (7.54) и (7.55) дают простейшие аппроксимации. Втягивая большое количество узлов, можно получить аппроксимации более высокого порядка, но часто бывает достаточно описанных выше. Аналогичная им аппроксимация вторых производных имеет вид

(7.56)

Что же касается методов интегрирования по времени, то это те же методы, что и для обыкновенных дифференциальных уравнений: Эйлера, Рунге - Кутта и т.д. Так как им тоже свойственна дискретизация, то возникает еще одна, временная сетка. При интегрировании уравнений по времени мы движемся по отдельным слоям, а в каждом слое определяем значение искомой функции на пространственной сетке. Если для интегрирования по времени используется метод Эйлера или другой одношаговый метод, то для работы со следующим временным слоем используются значения искомой функции из предыдущего слоя, для более сложных - из нескольких предыдущих слоев.

Далее будем индексы, соответствующие временной сетке, писать надстрочно (вверху), а пространственной - подстрочно (внизу).


Таким образом, для одномерного уравнения запись u
 означает значение функции и(х, t) в j-м временном слое и в i-м узле пространственной сетки. Вернемся к одномерному уравнению теплопроводности (7.49) и сформулируем простейшую возможную схему его интегрирования - явную схему первого порядка - по времени, используя метод Эйлера, по пространству, используя простейшие аппроксимации (7.56). Шаг по времени обозначим ?t, по координате - ?x. Величина u
 = u (tk+1, xi) находится из разностного уравнения

(7.57)

(k = 0, 1,...; i

= 1, 2, ..., n - 1) для внутренних узлов пространственной сетки; в силу начального условия (7.51)



где функция f(x) задана и определяет значение температуры при t = 0. Что касается значений u
 и и
  (на концах стержня), то они зависят от типа краевого условия; для случая, когда концы стержня поддерживаются при постоянной температуре, имеем и
 =
 , и
 =
, где
,
 - заданные числа.

Теперь остановимся на вопросе об устойчивости и эффективности обсуждаемого метода. Устойчивость понимается в том же смысле, что и для обыкновенных дифференциальных уравнений, но шансов получить неустойчивый метод здесь гораздо больше. Существуют разностные схемы абсолютно неустойчивые, абсолютно устойчивые и условно устойчивые. Первые при любых, сколь угодно малых, шагах так «раскачивают» начальную погрешность, что приводят к результатам, не имеющим ничего общего с реальностью. Вторые ни при каких шагах не «раскачиваются», хотя, конечно, чем меньше шаг, тем меньше разница между приближенным и точным решениями. Третьи устойчивы при одних комбинациях значений ?x и ?t и неустойчивы при других. Исследование, которого мы проводить не будем, показывает, что разностная схема (7.57) устойчива при



и неустойчива в противном случае.

Эффективность схемы можно представить лишь при сопоставления с другой схемой того же назначения. Прежде всего, под эффективностью понимают возможность относительно быстро получить решение с достаточной точностью. Иногда оказывается не менее важным объем оперативной памяти под массивы, хранение которых неизбежно в данном методе.


Схема (7.57) с точки зрения быстродействия малоэффективна, с точки зрения объема памяти - вполне удовлетворительна, так как, получив значения и
 на некотором временном слое, не обязательно сохранять в ОЗУ значения на предыдущем слое (их можно вывести на диск или на печать).

Получим более эффективный и устойчивый метод. Он аналогичен переходу от метода Эйлера к одному из вариантов метода Рунге - Кутта второго порядка (называемому иногда модифицированным методом Эйлера). Усредним пространственный член уравнения (7.49) по времени:

(7.58)

Это, безусловно, лучшая чем в (7.57) аппроксимация производной
. Исследование показывает, что схема (7.58) (называемая в литературе схемой Кранка-Николсона) абсолютно устойчива и более эффективна.

Расплатой за эффективность является то, что (7.58) - неявная схема, т.е. не формула для непосредственного расчета, как (7.57), а система линейных алгебраических уравнений для величин u
, u
, …, u
 которую еще предстоит решать (поскольку неизвестные на (k + 1)-м временном слое величины u
 входят и в левую, и в правую часть (7.58)). Поскольку неявные схемы, как правило, устойчивей, к ним прибегают часто.

Заметим, что (7.58) есть система специального вида - с трехдиагональной матрицей. В самом деле, если выписать первое, последнее и некоторое промежуточное ;'-е уравнения, перенося неизвестные в левые части, получим

(7.59)

Конечно, к таким системам можно применять стандартные методы решения систем линейных алгебраических уравнений, но для них существует и специализированный высокоэффективный метод, называемый «методом прогонки». За деталями отсылаем к учебникам по численным методам.

Пример.

Рассмотрим динамику изменения температуры в стержне длиной 4 м с теплоизолированными концами, температура на которых поддерживается постоянной и равна 3°С с начальным условием f(x) = -0,5x2 + 2x + 3. Коэффициент а в уравнении (7.49) примем равным 0,78 (выбор этот достаточно произволен).

Для демонстрации работы явной схемы (7.57) произведем расчеты по этой формуле на первом шаге.


Ограничимся пятью узлами на пространственной сетке. В начальный момент (t = 0) имеем u
 = 3,0000, u
 = 4,5000, и
 = 5,0000, и
 =

4,5000, и
 =

3,0000.

Из краевых условий получаем и
 = и
 =

3,0000. Подставляя в формулу (7.57) соответствующие значения, получаем



аналогично получаем u
 =3,8916.

Таблица 7.7

Результаты моделирования процесса теплопроводности, полученные по неявной схеме (7.59)

x

     t

0

1

2

3

4

0

3,000

4.500

5,000

4,500

3,000

1

3,000

4,000

4,428

4,000

3,000

2

3,000

3,688

3,975

3,688

3,000

3

3,000

3,476

3,669

3,476

3,000

4

3,000

3,325

3,461

3,325

3,000

5

3,000

3,225

3,316

3,225

3,000

6

3,000

3,154

3,218

3,154

3,000

7

3,000

3,106

3,150

3,106

3,000

8

3,000

3,073

3,103

3,073

3,000

9

3,000

3,050

3,071

3,050

3,000

10

3,000

3,034

3,049

3,034

3,000

На рис. 7.36 представлена графическая иллюстрация результатов расчетов.



Рис. 7.36. Графики зависимости температуры от координаты в разные моменты времени (сверху вниз t = 0, t = 2, t = 4, t = 6, t = 8), в начальный момент времени температура самая высокая, затем она постепенно выравнивается, и зависимости температуры от времени в разных точках стержня. Верхняя кривая соответствует x = 2; ниже - x = 1 и х = 3; прямая линия, совпадающая здесь с осью абсцисс, - значение температуры на концах стержня

Ясно, что по мере эволюции во времени температура стержня будет выравниваться и асимптотически стремиться к 3oС во всех точках.


МОДЕЛИРОВАНИЕ РАССУЖДЕНИЙ


Рассуждение - один из важнейших видов мыслительной деятельности человека, в результате которого он формулирует на основе некоторых предложений, высказываний, суждений новые предложения, высказывания, суждения. Действительный механизм рассуждений человека остается пока недостаточно исследованным. Человеческим рассуждениям присущи: неформальность, нечеткость, нелогичность, широкое использование образов, эмоций и чувств, что делает чрезвычайно трудными их исследование и моделирование. К настоящему времени лучше всего изучены логические рассуждения и разработано много механизмов дедуктивных выводов, реализованных в различных интеллектуальных системах, основанных на представлении знаний с помощью логики предикатов 1-го порядка.

Предикат - это конструкция вида P(t1, t2, ..., tn), выражающая какую-то связь между некоторыми объектами или свойствами объектов. Обозначение этой связи или свойства, Р,

называют «предикатным символом»; t1,

t2, .... tn обозначают объекты, связанные свойством (предикатом) Р

и называют термами.

Термы могут быть только трех следующих типов:

1) константа (обозначает индивидуальный объект или понятие);

2) переменная (обозначает в разное время различные объекты);

3) составной терм – функция f(t1, t2, … tn), имеющая в качестве своих аргументов m

термов t1, t2, … tm.

Примеры.

1. Предложение «Волга впадает в Каспийское море» можно записать в виде предиката

впадает (Волга, Каспийское море).

«Впадает» - предикатный символ; «Волга» и «Каспийское море» - термы-константы. Мы могли обозначить отношение «впадает» и объекты «Волга» и «Каспийское море» символами.

Вместо термов-констант можно рассматривать переменные:

впадает (Х, Каспийское море)

или

впадает (X,Y).

Это тоже предикаты.

2. Отношение х

+ 1 < у можно записать в виде предиката А(х,у). Предикатный символ А здесь обозначает то, что останется от x

+ 1 < у, если выбросить из этой записи переменные х и у.

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

Так, для наших примеров предикат «впадает» имеет арность 2 и при Х = «Волга», а Y = «Каспийское море» истинен, а при Х = «Дон», Y = «Бискайский залив» ложен. Предикат А в примере 2 также имеет арность 2, истинен при Х = 1, Y = 3 и ложен при X=3, Y=1.

Предикаты могут быть объединены в формулы с помощью логических связок (союзов): ^ («и», конъюнкция), v («или», дизъюнкция), ~ («не», отрицание), > («следует», импликация), - («тогда, и только тогда, когда», эквиваленция).

Ниже приведены таблицы истинности этих союзов, позволяющие определить, истинно или ложно значение формулы-связки при различных значениях, входящих в нее предикатов A и В.

Математически строго формулы логики предикатов определяются рекурсивно:

1) предикат есть формула;

2) если А

и В - формулы, то А, А^В,АvВ, А>B, А-В - тоже формулы;

3) других формул не бывает.

Многие формулы логики предикатов требуют использования кванторов, определяющих область значений переменных - аргументов предикатов. Используются кванторы общности (перевернутое А от английского «All» - все) и квантор существования - (перевернутое Е от английского «Exists» - «существует»). Запись "x читается «для любого х», «для каждого х»; $х - «существует х»,

«хотя бы для одного х». Кванторы связывают переменные предикатов, на которые они действуют, и превращают предикаты в высказывания.

Таблица 1.12 Истинность связок предикатов (И - истина, Л - ложь)

А

В

А^В

AvB



А>В

А-В

И

И

Л

Л

И

Л

И

Л

И

Л

Л

Л

И

И

И

Л

Л

Л

И

И

И

Л

И

И

И

Л

Л

И

Пример.

Введем обозначения: А(х) - студент х учится отлично; В(х) - студент х получает повышенную стипендию. Теперь формула А (Иванов) > В (Иванов) означает: студент Иванов учится отлично, следовательно, студент Иванов получает повышенную стипендию, а формула с квантором общности (Vx) (A(x) —> В(х)) означает: каждый студент, который учится отлично, получает повышенную стипендию.



Из всевозможных формул нам потребуется только один их вид, называемый фразами Хорна.

Фразы Хорна содержат в общем случае импликацию и конъюнкцию предикатов А, В1, В2,. . . , Вп следующим образом: В1, В2,. . . Вп > А,

или в более удобных обозначениях:

А:-В1, В2,...Вn

(читается: А

если B1 и В2 и ... и Вп).

Очевидно, фраза Хорна является формой записи некоего правила, и в дальнейшем будет называться правилом. Предикат А называется заголовком или головой правила, а предикаты В1, В2,... ,Вп-

его подцелями.

Очевидно, что отдельный предикат является частным случаем фразы Хорна: А.

Другой частный случай фразы Хорна - правило без головы

:-В1, В2,...,Вп,

или

:-В.

Такая фраза Хорна называется вопросом. Мы будем записывать «: - В» в виде «? - В», а «:- В1, В2,.... Вп» в виде «? – В1, В2,.... Вп».

Поясним логический смысл такой формулы. Напомним, что импликация А: - В (В —> А) может быть выра-жена через отрицание и дизъюнкцию : ~BvА (проверьте это с помощью таблицы истинности). Значит, если отбросить А, останется только ~В - отрицание В. Формула < B1, ..., Вп

означает отрицание конъюнкции ~{B1^B2^...^Bn), что по закону де Моргана ~(X^Y) = (~X)v(~Y) равно (~B1)v(~B2) v ... v(~Bn) - дизъюнкции отрицаний.

Множество фраз Хорна применительно к некоторой проблемной области образует теорию (в логическом смысле).

Пример.

Рассмотрим предметную область: сдачу экзамена по некоторой дисциплине. Введем обозначения:

А - студент успешно сдает экзамен.

В - студент посещал занятия.

С - студент освоил учебный материал.

D - студент занимался самостоятельно.

Е - студент подготовил шпаргалку.

Введем знания о предметной области:

Студент успешно сдаст экзамен, если студент освоил учебный материал.

Студент освоил учебный материал, если студент посещал занятия и студент занимался самостоятельно. Студент посещал занятия. Студент занимался самостоятельно.

Форма логической записи:

А:-С;

C:-B,D;



В;

D.

В приведенном примере можно выполнить логический вывод. Так, из истинности фактов В

и D и правила С:-В, D следует истинность С, и из правила А:-С - истинность предиката А, т.е., студент успешно сдаст экзамен. Кроме того, правила А :-С и С:-В, D можно было бы переписать в виде А :-В, D.

В этих случаях используют правила вывода, называемые методом резолюций.

Рассмотрим простейшую форму резолюции. Допустим, имеются «родительские» предложения

            отрицание: ~А                                              импликация: А :-В.

В результате одного шага резолютивного вывода получаем новое предложение:

В,

которое называется резольвентой. В этом случае резолюция соответствует стандартному пропозициональному правилу вывода:

            допуская, что не       А

            и                                 А, если В

            выводим                    не В.

Еще более простой случай:

            отрицание:                ~А

            факт:                          А.

            Резольвента - противоречие.

В общем случае имеются родительские предложения

~(А1^ ... ^Аn)

Ak:-B1,...,Bm              1 £ k £ n.

В качестве резольвенты за один шаг вывода получается ~(A1^…^Ak-1 ^B1^…^Bm^Ak+1^…^An).

Таким образом, резолюция является подстановкой предикатов - подцелей B1,... Вп, вместо соответствующего предиката Ak из отрицания. Отрицание инициирует логический вывод и поэтому называется запросом (или вопросом) и обозначается А1, А2, ... , An.

Смысл метода резолюций состоит в том, что строится отрицание конъюнкции и проверяется, истинно его значение или ложно. Если значение результирующей конъюнкции ложь, значит, получилось противоречие и, поскольку на старте было отрицание предикатов, выполнено доказательство «от обратного». Если получено значение «истина», то доказательство не выполнено.

Пример.

Пусть предикат дает (Х,Y,Z) означает, что «X дает Y некоторому объекту Z», а предикат получают (X, Y)



означает, что «Y получает Z». Пусть знания об этих отношениях выражаются предложениями

1) получает(вы,

сила):- дает (логика, сила, вы);

2) дает

(логика, сила, вы).

Задача, которую нужно решить, состоит в том, чтобы ответить на вопрос: получаете ли вы силу ?

Представим этот вопрос в виде отрицания -получает(вы, сила). Резолюция предложения 1 и отрицания приводит к ~дает

(логика, сила, вы), что вместе с фактом 2 приводит к противоречию. Следовательно, ответом исходной задачи является «да».

Пока что мы рассмотрели резолюцию для высказываний или предикатов без переменных. Если же вывод производится для множества предикатов с переменными в качестве аргументов, эти переменные в ходе вывода получают значения соответствующих констант или, как еще говорят, конкретизируются константами.

Рассмотрим это на примере.

Пример.

Рассмотрим следующие родительские предложения:

1) ~получает

(вы. У);

2) получает (X,

сила) :- дает (Z, сила, X).

Они содержат три переменные X,Y и Z, которые неявно находятся под действием квантора общности. Так, предложение 1 утверждает, что «для всех Y вы не получаете Y», а 2 - «для всех Z любой Х получает силу, если Z дает силу X».

Правило резолюции требует совпадения предиката из отрицания 1 и головы правила 2. Это означает, что переменные получают значения (конкретизируются) соответственно их месту в предложениях 1 и 2 следующим образом: Х = вы, Y = сила. Предикат получает (вы, сила) называется общим примером для предикатов получает(вы

Y) и получает (Х, сила).

Изложенные положения логики предикатов находят реализацию и дальнейшее развитие в языке программирования Пролог.


МОДЕЛИРОВАНИЕ СЛУЧАЙНЫХ ПРОЦЕССОВ В СИСТЕМАХ МАССОВОГО ОБСЛУЖИВАНИЯ


Кому не случалось стоять в очереди и с нетерпением прикидывать, успеет ли он сделать покупку (или заплатить за квартиру, покататься на карусели и т.д.) за некоторое имеющееся в его распоряжении время? Или, пытаясь позвонить по телефону в справочную и натыкаясь несколько раз на короткие гудки, нервничать и оценивать - дозвонюсь или нет? Из таких «простых» проблем в начале XX века родилась весьма непростая наука - теория массового обслуживания, использующая аппарат теории вероятностей и математической статистики, дифференциальных уравнений и численных методов. Основоположником ее стал датский ученый А.К.Эрланг, исследовавший проблемы функционирования телефонных станций.

Впоследствии выяснилось, что новая наука имеет многочисленные выходы в экономику, военное дело. организацию производства, биологию и экологию; по ней написаны десятки книг, тысячи журнальных статей.

Компьютерное моделирование при решении задач массового обслуживания. реализуемое в виде метода статистических испытаний (метода Монте-Карло), хоть и не является в теории массового обслуживания основным, но играет в ней важную роль. Основная линия в ней - получение результатов аналитических, т.е. представленных формулами. Однако, возможности аналитических методов весьма ограничены, в то время как метод статистических испытаний универсален и весьма прост для понимания (по крайней мере кажется таковым).

Типичная задача: очередь к одному «продавцу». Рассмотрим одну из простейших задач данного класса. Имеется магазин с одним продавцом, в который случайным образом входят покупатели. Если продавец свободен, он начинает обслуживать покупателя сразу, если покупателей несколько, выстраивается очередь.

Вот аналогичные задачи:

• ремонтная зона в автохозяйстве и автобусы, сошедшие с линии из-за поломки;

•травмопункт и больные, пришедшие на прием по случаю травмы (т.е. без системы предварительной записи);

• телефонная станция с одним входом (или одной телефонисткой) и абоненты, которых при занятом входе ставят в очередь (такая система иногда практикуется);


• сервер локальной сети и персональные машины на рабочем месте, которые шлют сообщение серверу, способному воспринять разом и обработать не более одного сообщения.

Будем для определенности говорить о магазине, покупателях и продавце. Рассмотрим возникающие здесь проблемы, которые заслуживают математического исследования и, как выясняется, весьма серьезного.

Итак, на входе этой задачи случайный процесс прихода покупателей в магазин. Он является «марковским», т.е. промежутки между приходами любой последовательной пары покупателей - независимые случайные события, распределенные по некоторому закону. Реальный характер этого закона может быть установлен лишь путем многочисленных наблюдений; в качестве простейшей модельной функции плотности вероятности можно взять равновероятное распределение в диапазоне времени от 0 до некоторого Т - максимально возможного промежутка между приходами двух последовательных покупателей. При этом распределении вероятность того, что между приходами двух покупателей пройдет 1 минута, 3 минуты или 8 минут одинакова (если T

> 8).

Такое распределение, конечно, малореалистично; реально оно имеет при некотором значении t = ?

максимум и быстро спадает при больших t,

т.е. имеет вид, изображенный на рис. 7.56.

Можно, конечно, подобрать немало элементарных функций, графики которых похожи на тот, что изображен на рис. 7.56. Например, семейство функций Пуассона, широко используемых в теории массового обслуживания:

(7.70)

где ?

- некоторая константа, п -

произвольное целое. Функции (7.70) имеют максимум при
 и нормированы:
pn(t)dt = 1.



Рис. 7.56. Типичная плотность вероятности распределения времени между приходами покупателей

Второй случайный процесс в этой задаче, никак не связанный с первым, сводится к последовательности случайных событий - длительностей обслуживания каждого из покупателей. Распределение вероятностей длительности обслуживания качественно имеет тот же вид, что и в предыдущем случае; при отработке первичных навыков моделирования методом статистических испытаний вполне уместно принять модель равновероятного распределения.



В таблице 7.8 в колонке А записаны случайные числа - промежутки между приходами покупателей (в минутах), в колонке В -

случайные числа - длительности обслуживания (в минутах). Для определенности взято аmax = 10 и bmах

= 5. Из этой короткой таблицы, разумеется, невозможно установить, каковы законы распределения приняты для величин А

и В; в данном обсуждении это не играет никакой роли. Остальные колонки предусмотрены для удобства анализа; входящие в них числа находятся путем элементарного расчета. В колонке С представлено условное время прихода покупателя, в колонке D -

момент начала обслуживания, Е -

момент конца обслуживания, F - длительность времени, проведенного покупателем в магазине в целом, G - в очереди в ожидании обслуживания, Н - время, проведенное продавцом в ожидании покупателя (магазин пуст). Таблицу удобно заполнять по горизонтали, переходя от строчки к строчке. Приведем для удобства соответствующие формулы (в них i = 1, 2, 3,...):



так как начало обслуживания очередного покупателя определяется либо временем его прихода, если магазин пуст, либо временем ухода предыдущего покупателя;



Таблица 7.8

Моделирование очереди

N

А

В

С

D

Е

F

G

Н

1

0

4

0

0

4

4

0

0

2

2

1

2

4

5

3

2

0

3

10

5

12

12

17

5

0

7

4

1

2

13

17

19

6

4

0

5

6

3

19

19

22

3

0

0

Таким образом, при данных случайных наборах чисел в колонках A

и В и покупателям приходилось стоять в очереди (колонка G), и продавцу - в ожидании покупателя (колонка H).

При моделировании систем такого вида возникают следующие вопросы. Какое среднее время приходится стоять в очереди к прилавку? Чтобы ответить на него, следует найти



в некоторой серии испытаний. Аналогично можно найти среднее значение величины h. Конечно, эти выборочные средние сами по себе - случайные величины; в другой выборке того же объема они будут иметь другие значения (при больших объемах выборки, не слишком отличающиеся друг от друга).


Доверительные интервалы, в которых находятся точные средние значения (т.е. математические ожидания соответствующих случайных величин) при заданных доверительных вероятностях находятся методами математической статистики.

Сложнее ответить на вопрос, каково распределение случайных величин G и Н при заданных распределениях случайных величин А и В. Допустим, в простейшем моделировании мы примем гипотезу о равновероятных распределениях величин A и В - скажем, для А

в диапазоне от 0 до 10 минут и В -

от 0 до 5 минут. Для построения методом статистических испытаний распределений величин G и Н поступим так: найдем в достаточно длинной серии испытаний (реально - в десятках тысяч, что на компьютере делается достаточно быстро) значения gmax (для Н

все делается аналогично) и разделим промежуток [0, gmax] на т равных частей - скажем, вначале на 10 - так, чтобы в каждую часть попало много значений gi. Разделив число попаданий nk в каждую из частей на общее число испытаний n, получим набор чисел pk =
 (k = 1, 2,...,n). Построенные по ним гистограммы дают представление о функциях плотностей вероятности соответствующих распределений. По гистограмме можно составить представление о функции плотности распределения соответствующей случайной величины. Для проверки же гипотезы о принадлежности такого эмпирически найденного распределения тому или иному конкретному виду служат известные статистические критерии.

Располагая функцией распределения (пусть даже эмпирической, но достаточно надежной), можно ответить на любой вопрос о характере процесса ожидания в очереди. Например: какова вероятность прождать дольше т минут? Ответ будет получен, если найти отношение площади криволинейной трапеции, ограниченной графиком плотности распределения, прямой х = т и у = 0, к площади всей фигуры.

Следующая программа позволяет моделировать описанный выше процесс. На выходе она дает средние значения и дисперсии случайных величин g и h, полученные по выборке, максимальный объем которой порядка 10000 (ограничение связано с малой допустимой длиной массива в PASCALe; чтобы его смягчить, использовано динамическое описание массивов g



и h). Кроме того, программа строит гистограммы распределений величин g и h.

Программа 152.

Моделирование очереди

Program Cohered;

(входной поток равновероятных событий;

динамические массивы позволяют значительно увеличить объем выборки)

Uses Crt, Graph;

Const N = 10000 (число членов выборки);

 W1 = 10 (диапазон времен прихода от 0 дo wl};

 W2 = 5 (диапазон времен обслуживания от 0 до w2};

Type Т = Array(l..N] Of Real; U = ^Т;

Var A, B, C, D, E, F, Aa, Bb, Cc, Dd, Ее, Ff, Dg, Dh, M : Real;

Sl, S2 : Double; I, K, J, I1, I2 : Integer;

LI, L2, V : Array [1..11] Of Real; G, H : U; Ch : Char;

Begin

If MaxAvail >= SizeOf(G) Then New(G);

If MaxAvail >= SizeOf(H) Then New(H);

Randomize; (ниже - имитационное моделирование)

Aa := 0; Bb := W2 * Random; Cc := 0; Ее := Bb; Ff := Bb;

G^[l] = 0; H^[1] := 0;

For К = 1 To 11 Do

Begin L1(K] := 0; L2[K] := 0 End;

For I = 2 To N Do

  Begin

 A := Wl * Random; В := W2 * Random;

 С := Cc + A; If С > Ее Then D := С Else D := Ее;

 E := D + B; F := E - C; G^[I] := F - B; H^[I] := D - Ее;

 Cc := С; Ее := E;

 If G^[I] <= 1 Then Ll[l] := Ll[l] + 1; If H^[1] = 0 Then

    L2[l] := L2[l] + 1;

 For К := 2 To 10 Do

 Begin

           If (G^[I] > К - 1) And (G^[I] <= K) Then L1[K] := L1[K] + 1;

If (H^[I] > K - 1) And (H^[I] <= K) Then L2[K] := L2[K] + 1;

 End;

 If G^[I] > 10 Then Ll[l1] := Ll[ll] + 1;

 If H^[I] > 10 Then L2[ll] := L2[ll] + 1;

 Sl := Sl + G^[l]; S2 := S2 + H^[I];

End;

For I := 1 To 11 Do (ниже - нормировка распределений g и h}

 Begin

L1[I] := L1[I] / N; L2[I] := L2[I] / N

 End;

(ниже - расчет средних и дисперсий величин g и h}

Sl := Sl / N; S2 := S2 / N; Dg := 0; Dh := 0;

For I := 1 То N Do

Begin

Dg := Dg + Sqr(G^[I] - Sl); Dh := Dh + Sqr(H^[I] - S2)

End;

 Dg := Dg / N; Dh := Dh / N;

 WriteLn('распределение величины g распределение величины h');

 WriteLn;

 For K := 1 To 11 Do

WriteLn ('11[', K, ']=', L1[K] : 6 : 4, '' : 20, '12(', К, ']=',

  L2[K] : 6 : 4);



WriteLn;

WriteLn('выборочное среднее величины g=', S1 : 6 : 3,

' выборочная дисперсия величины g=', Dg : 6 : 3);

WriteLn('выборочное среднее величины h=', S2 : 6 : 3,

' выборочная дисперсия величины h=', Dh : 6 : 3);

Dispose(G); Dispose(H); WriteLn;

WriteLn('для продолжения нажать любую клавишу');

Repeat Until KeyPressed; Ch := ReadKey;

  (ниже - построение гистограмм распределений величин g и h)

DetectGraph(I, К); InitGraph(I, К, '');

I := GetMaxX; К := GetMaxY; J := I Div 2; M :'= Ll[l];

For I1 := 2 То 11 Do If L1[I1] > M Then M := L1[I1];

For I1 := 1 To 11 Do V[I1] := L1[I1] / M;

Line(10, К - 10, J - 20, К - 10); Line[l0, К - 10, 10, 5) ;

OutTextXY(20, 100, 'распределение величины g');

For I1 := 1 To 11 Do

 Begin

  I2 := Round((K - 20) * (1 - V[I1])) + 10;

  Line(I1 * 20 - 10, I2, I1 * 20 + 10, I2);

  Line(I1 * 20 - 10, I2, I1 * 20 - 10, К - 10);

  Line(I1 * 20 + 10, I2, I1 * 20 + 10, К - 10);

 End;

Line(J + 20, К - 10, I - 10, К

- 10);

Line(J + 20, К - 10, J + 20, 5) ;

OutTextXY(J + 30, 100, 'распределение величины h'); M := L2[l];

For I1 := 2 To 11 Do If L2[I1] > M Then M := L2[I1];

For I1 := 1 To 11 Do V[I1] := L2[I1] / M;

For I1 := 1 To 11 Do

 Begin

  I2 := Round((K - 20) * (1 - V[I1])) + 10;

  Line(J + I1 * 20, I2, J + I1 * 20 + 20, I2);

  Line(J + I1 * 20, I2, J + I1 * 20, К - 10);

  Line(J + I1 * 20 + 20, I2, J + I1 * 20 + 20, К - 10);

 End;

OutTextXY(200, GetMaxY

- 10, 'для выхода нажать любую клавишу');

Repeat Until KeyPressed; CloseCraph

End.

Приведем для сравнения результаты расчета средних значений величин g, h и соответствующих среднеквадратичных отклонений Sg, Sh, полученные при одинаковых значениях всех параметров в пяти разных сериях испытании по 10000 событий в серии (табл. 7.9) (входной поток покупателей - процесс равновероятных событий с максимальным временем между приходами 10 мин, длительность обслуживания также распределена равновероятным образом в интервале от 0 до 5 мин).

Таблица 7.9



Сравнение результатов моделирования в разных сериях испытаний

Испытание

g

Sg

h

Sh

1

0,738

1,568

2,508

2,588

2

0,746

1,511

2,500

2,571

3

0,765

1,529

2,446

2,582

4

0,753

1,524

2,451

2,589

5

0,765

1,573

2,482

2,572

Количество цифр выписано таким образом, чтобы отразить значимую разницу между данными разных серий.

Оценим доверительный интервал математических ожиданий величин g

и h при с достоверности 0,99 по формуле  
 < тх <
; ? = 2,58 •
 (
 - среднее значение х; п - объем выборки; S - среднеквадратичное отклонение). По первой выборке получаем

0,738 - 0,025 < mg < 0,738 + 0,025 (округлим: 0,71 < mg < 0,77)

2,508 - 0,067 < mh < 2,508 + 0,067 (округлим: 2,44 < mh < 2,58).

Таким образом, различия в выборочных средних вполне укладываются в указанные доверительные интервалы.

В рассмотренной задаче, как и в любой более сложной задаче об очередях, может возникнуть критическая ситуация, когда очередь неограниченно растет со временем. В самом деле, если люди заходят в магазин очень часто (или продавец работает слишком медленно), очередь начинает нарастать, и в любой системе с конечным временем обслуживания наступит кризис. Приведем для иллюстрации динамики этого процесса распределения величина - времени ожидания покупателем в очереди и h - времени простоя продавца в ожидании покупателя, при трех наборах параметров w1, w2, где w1 - максимальный интервал времени между приходами покупателей, w2 -

максимальная длительность обслуживания покупателя (рис. 7.57 - 7.59).



Рис. 7.57. w1 = 10, w2 = 3 (нет проблем с обслуживанием, вероятность долго простоять в очереди мала, вероятность бездеятельности продавца достаточно велика)

В чем практическое значение задач об очередях? Прежде всего, стремление рационально построить обслуживание потребителей. В магазине можно, к примеру, поставить второго продавца, но если при этом продавцы будут мало заняты, возникает ущерб для предприятия.


Таким образом, актуальным является вопрос об отыскании оптимального решения при наличии противоречивых требований, т.е. налицо оптимизационная многокритериальная модель.

Визуально проиллюстрировать формирование очереди поможет следующая программа.



Рис. 7.58. w1 = 10, w2 = 8 (кризис приближается)



Рис. 7.59. wl = 10, w2 = 10 (кризис наступил)

Программа 153.

Имитационное моделирование очереди

Program Bank;

Uses Graph, Crt;

Var Gm, Gd, P, X, Qq, I, T, V : Integer; St : String[1O];

Begin

Qq := 0; P := 6; V := 2; Randomize; DetectGraph(Gd, Gm);

InitGraph(Gd, Gm, ' ');

SetColor(2); RectAngle(300, 100, 500, 300); Т

:- 0;

Repeat

Т

:= Т + 1; Str(T, St); SetTextStyle(0, 0, 1) ;

SetColor(4); OutTextXY(600, 50, St); X := Random(ll) ;

If X < P Then Qq := Qq + 1; SetColor(15) ;

For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);

Delay(1000); SetColor(0);

For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);

If T Mod V = О

Then Begin

Qq := Qq - 1; If Qq < 0 Then Qq :- 0; Setcolor(15) ;

For I := 0 To Qq Do Circle(490 - I * 30, 200, 15);

 End;

SetColor(O); OutTextXY(600, 50, St)

Until KeyPressed Or (Qq > 15); ReadLn;

End.

 


МУЗЫКАЛЬНЫЕ ВОЗМОЖНОСТИ


В ряд версий Бейсика встроен специальный подъязык, который позволяет программировать музыку. Это делается без труда командой PLAY. В команде указывается строковое выражение, составленное из символов, кодирующих ноты.

Общий формат команды PLAY таков:

PLAY AS, B$, CS,

где AS, BS, CS - строки символов, число которых не превышает числа параллельных звуковых каналов в системе. Каждый символ - команда специального языка, задающая ноту, длительность и громкость звучания, другие параметры. Следующие латинские буквы соответствуют основным нотам:

с - «до»,

d - «ре»,

е - «ми»,

f - «фа»,

g - «соль»,

а - «ля»,

b - «си»

Например,команда

PLAY "cdefgab"

осуществляет музыкальное исполнение гаммы (до-ре-ми-фа-соль-ля-си) четвертой октавы с длительностью 1/4 ноты (устанавливаемой, при отсутствии явных указаний, «по умолчанию»).

Нота может звучать на полтона выше (бемоль - знак «минус») или ниже (диез -знак «плюс», либо #). Высота звучания нотьГопределяется октавой. Октава кодируется символом с номером On. помещаемым перед нотой или группой последующих нот. Принято кодировать октавы по порядку с единицы в соответствии с фортепианным рядом, первая октава (01) - контроктава, вторая октава (02) - большая октава, третья октава (03) - малая октава, четвертая октава (04) - первая октава, пятая октава (05) - вторая октава и т.д. Например, команда

PLAY "оЗ а а а"

проигрывает три ноты ля-ля-ля в малой октаве.

Длительность звучания ноты измеряется в специальных единицах - одна целая нота (произнесите четко «раз-и. два-и, три-и, четыре-и», тогда время, затраченное на эту фразу, приблизительно соответствует длительности одной ноты). Выделяют длительность в полноты (1/2 ноты), четверть, одну восьмую, одну шестнадцатую и т.д. - вплоть до одна шестьдесят четвертая. Длительность звучания в программе устанавливают командой Ln (n = 1, 2, ... 64), включаемой в символьную последовательность, либо непосредственно в самих командах установки нот.
Например,

PLAY"C8D2L16fbe"

означает звучание ноты «до» длительностью в одну восьмую ноты, «ре» - в одну вторую, а ноты фа-си-ми звучат длительностью в одн\ шестнадцатую ноты. Аналогичную размерность имеет пауза, обозначаемая Rn или Рп.

Уровень громкости может быть установлен командой Vn, предшествующей ноте (n = 0, 1,... 15); по умолчанию n = 8 - «средняя» громкость.

Ниже приведен пример кодирования музыкального произведения.

Программа 59

*********** рпезы Шумана **************

10 DATA c8, f2f8, e8, f8, a8, o5c8, f8f2

20 DATA e8, d8, c8, f8, o4g8, a8, b-8, o5d8, o4f8, g8,a8

30 DATA o5c8, o4g2, c4, f2f8, e8, f8, a8, o5c8, a8a4a8

40 DATA g8, f8, d8, c8, f8, o4, g8, a8. b-8, o5, d8, o4, g8, a8, b-8

50 DATA o5d8, o4-d8, e8, f2

60 FOR i = 1 TO 46

70 READ f$

80 PLAY f$

90 NEXT i

Использование функции считывания п символов нажатых клавиш INPUTS(n) позволяет использовать клавиатуру как музыкальный инструмент.

Программа 60

5 ******* компьютер - простейший музыкальный инструмент *******

10 f$ = INPUT$(1)

20 PLAY f$

30 GOTO 10


НАЧАЛЬНЫЙ ЭТАП РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ


Все началось с идеи научить машину считать или хотя бы складывать многоразрядные целые числа. Еще около 1500 г. великий деятель эпохи Просвещения Леонардо да Винчи разработал эскиз 13-разрядного суммирующего устройства, что явилось первой дошедшей до нас попыткой решить указанную задачу. Первую же действующую суммирующую машину построил в 1642 г. Блез Паскаль - знаменитый французский физик, математик, инженер. Его 8-разрядная машина сохранилась до наших дней.

Рис. 4.1. Блез Паскаль (1623 - 1662) и его счетная машина

От замечательного курьеза, каким восприняли современники машину Паскаля, до создания практически полезного и широко используемого агрегата - арифмометра (механического вычислительного устройства, способного выполнять 4 арифметических действия) - прошло почти 250 лет. Уже в начале XIX века уровень развития ряда наук и областей практической деятельности (математики, механики, астрономии, инженерных наук, навигации и др.) был столь высок, что они настоятельнейшим образом требовали выполнения огромного объема вычислений, выходящих за пределы возможностей человека, не вооруженного соответствующей техникой. Над ее созданием и совершенствованием работали как выдающиеся ученые с мировой известностью, так и сотни людей, имена многих из которых до нас не дошли, посвятивших свою жизнь конструированию механических вычислительных устройств.

Еще в 70-х годах нашего века на полках магазинов стояли механические арифмометры и их «ближайшие родственники», снабженные электрическим приводом -электромеханические клавишные вычислительные машины. Как это часто бывает, они довольно долго удивительным образом соседствовали с техникой совершенно иного уровня - автоматическими цифровыми вычислительными машинами (АЦВМ), которые в просторечии чаще называют ЭВМ (хотя, строго говоря, эти понятия не совсем совпадают). История АЦВМ восходит еще к первой половине прошлого века и связана с именем замечательного английского математика и инженера Чарльза Бэббиджа. Им в 1822 г.
была спроектирована и почти 30 лет строилась и совершенствовалась машина, названная вначале «разностной», а затем, после многочисленных усовершенствований проекта, «аналитической». В «аналитическую» машину были заложены принципы, ставшие фундаментальными для вычислительной техники.

1. Автоматическое выполнение операций.

Для выполнения расчетов большого объема существенно не только то, как-быстро выполняется отдельная арифметическая операция, но и то, чтобы между операциями не было «зазоров», требующих непосредственного человеческого вмешательства. Например, большинство современных калькуляторов не удовлетворяют этому требованию, хотя каждое доступное им действие выполняют очень быстро. Необходимо, чтобы операции следовали одна за другой безостановочно.

2. Работа по вводимой «на ходу» программе.

Для автоматического выполнения операций программа должна вводиться в исполнительное устройство со скоростью, соизмеримой со скоростью выполнения операций. Бэббидж предложил использовать для предварительной записи программ и ввода их в машину перфокарты, которые к тому времени применялись для управления ткацкими станками.

3. Необходимость специального устройства - памяти - для хранения данных (Бэббидж назвал его «складом»).



Рис. 4.2. Чарльз Бэббидж (1792 - 1871) и его «аналитическая машина»

Эти революционные идеи натолкнулись на невозможность их реализации на основе механической техники, ведь до появления первого электромотора оставалось почти полвека, а первой электронной радиолампы - почти век! Они настолько опередили свое время, что были в значительной мере забыты и переоткрыты в следующем столетии.

Впервые автоматически действующие вычислительные устройства появились в середине XX века. Это стало возможным благодаря использованию наряду с механическими конструкциями электромеханических реле. Работы над релейными машинами начались в 30-е годы и продолжались с переменным успехом до тех пор, пока в 1944 г. под руководством Говарда Айкена - американского математика и физика - на фирме IBM (International Business Machines) не была запущена машина «Марк-1», впервые реализовавшая идеи Бэббиджа (хотя разработчики, по-видимому, не были с ними знакомы).Для представления чисел в ней были использованы механические элементы (счетные колеса), для управления - электромеханические. Одна из самых мощных релейных машин РВМ-1 была в начале 50-х годов построена в СССР под руководством Н.И.Бессонова; она выполняла до 20 умножений в секунду с достаточно длинными двоичными числами.

Однако, появление релейных машин безнадежно запоздало и они были очень быстро вытеснены электронными, гораздо более производительными и надежными.


НАЧАЛО СОВРЕМЕННОЙ ИСТОРИИ ЭЛЕКТРОННОЙ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ


Подлинная революция в вычислительной технике произошла в связи с применением электронных устройств. Работа над ними началась в конце 30-х годов одновременно в США, Германии, Великобритании и СССР. К этому времени электронные лампы, ставшие технической основой устройств обработки и хранения цифровой информации, уже широчайшим образом применялись в радиотехнических устройствах.

Первой действующей ЭВМ стал ENIAC (США, 1945 - 1946 гг.). Его название по первым буквам соответствующих английских слов означает «электронно-числовой интегратор и вычислитель». Руководили ее созданием Джон Моучли и Преспер Эккерт, продолжившие начатую в конце 30-х годов работу Джорджа Атанасова. Машина содержала порядка 18 тысяч электронных ламп, множество электромеханических элементов. Ее энергопотребление равнялось 150 кВт, что вполне достаточно для обеспечения небольшого завода.

Практически одновременно велись работы над созданием ЭВМ в Великобритании. С ними связано прежде всего имя Аллана Тьюринга - математика, внесшего также большой вклад в теорию алгоритмов и теорию кодирования. В 1944 г. в Великобритании была запущена машина «Колосс».

Эти и ряд других первых ЭВМ не имели важнейшего с точки зрения конструкторов последующих компьютеров качества - программа не хранилась в памяти машины, а набиралась достаточно сложным образом с помощью внешних коммутирующих устройств.

Огромный вклад в теорию и практику создания электронной вычислительной техники на начальном этапе ее развития внес один из крупнейших американских математиков Джон фон Нейман. В историю науки навсегда вошли «принципы фон Неймана». Совокупность этих принципов породила классическую (фон-неймановскую) архитектуру ЭВМ. Один из важнейших принципов - принцип хранимой программы - требует, чтобы программа закладывалась в память машины так же, как в нее закладывается исходная информация. Первая ЭВМ с хранимой программой (EDSAC) была построена в Великобритании в 1949 г.

Рис. 4.3.

Джон фон Нейман (1903-1957)

<


Рис.

4.4. Сергей Александрович Лебедев (1902- 1974)

В нашей стране вплоть до 70-х годов создание ЭВМ велось почти полностью самостоятельно и независимо от внешнего мира (да и сам этот «мир» был почти полностью зависим от США). Дело в том, что электронная вычислительная техника с самого момента своего первоначального создания рассматривалась как сверхсекретный стратегический продукт, и СССР приходилось разрабатывать и производить ее самостоятельно. Постепенно режим секретности смягчался, но и в конце 80-х годов наша страна могла покупать за рубежом лишь устаревшие модели ЭВМ (а самые современные и мощные компьютеры ведущие производители - США и Япония - и сегодня разрабатывают и производят в режиме секретности).

Первая отечественная ЭВМ - МЭСМ («малая электронно-счетная машина») -была создана в 1951 г. под руководством Сергея Александровича Лебедева, крупнейшего советского конструктора вычислительной техники, впоследствии академика, лауреата государственных премий, руководившего созданием многих отечественных ЭВМ. Рекордной среди них и одной из лучших в мире для своею времени была БЭСМ-6 («большая электронно-счетная машина, 6-я модель»), созданная в середине 60-х годов и долгое время бывшая базовой машиной в обороне, космических исследованиях, научно-технических исследованиях в СССР. Кроме машин серии БЭСМ выпускались и ЭВМ других серий - «Минск», «Урал», М-20, «Мир» и другие, созданные под руководством И.С.Брука и М.А.Карцева, Б.И.Рамеева, В.М.Глушкова, Ю.А.Базилевского и других отечественных конструкторов и теоретиков информатики.

С началом серийного выпуска ЭВМ начали условно делить по поколениям; соответствующая классификация изложена ниже.



Рис. 4.5.

Первая в мире ЭВМ ENIAC


НАПРАВЛЕНИЯ ИССЛЕДОВАНИЙ И РАЗРАБОТОК В ОБЛАСТИ СИСТЕМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА


Научное направление, связанное с машинным моделированием человеческих интеллектуальных функций - искусственный интеллект - возникло в середине 60-х годов XX столетия. Его возникновение непосредственно связано с общим направлением научной и инженерной мысли, которое привело к созданию компьютера -направлением на автоматизацию человеческой интеллектуальной деятельности, на то, чтобы сложные интеллектуальные задачи, считавшиеся прерогативой человека, решались техническими средствами.

Говоря о сложных интеллектуальных задачах следует понимать, что всего 300 -400 лет назад перемножение больших чисел вполне относилось к таковым; однако, усвоив в детстве правило умножения столбиком, современный человек пользуется им не задумываясь, и вряд ли эта задача сегодня является «сложной интеллектуальной». По-видимому, в круг таковых следует включить те задачи, для решения которых нет «автоматических» правил, т.е. нет алгоритма (пусть даже и очень сложного), следование которому всегда приводит к успеху. Есди для решения задачи, которая нам сегодня представляется относящейся к указанному кругу, в будущем придумают четкий алгоритм, она перестанет быть «сложной интеллектуальной».

Несмотря на свою краткость, история исследований и разработок систем искусственного интеллекта может быть разделена на четыре периода:

• 60-е - начало 70-х годов XX века - исследования по «общему интеллекту», попытки смоделировать общие интеллектуальные процессы, свойственные человеку: свободный диалог, решение разнообразных задач, доказательство теорем, различные игры (типа шашек, шахмат и т.д.), сочинение стихов и музыки и т.д.;

• 70-е годы - исследования и разработка подходов к формальному представлению знаний и умозаключений, попытки свести интеллектуальную деятельность к формальным преобразованиям символов, строк и т.д.;

• с конца 70-х годов - разработка специализированных на определенных предметных областях интеллектуальных систем, имеющих прикладное практическое значение (экспертных систем);


• 90-е годы - фронтальные работы по созданию ЭВМ 5-го поколения, построенных на иных принципах, чем обычные универсальные ЭВМ, и программного обеспечения для них.

В настоящее время «искусственный интеллект» - мощная ветвь информатики, имеющая как фундаментальные, чисто научные основы, так и весьма развитые технические, прикладные аспекты, связанные с созданием и эксплуатацией работоспособных образцов интеллектуальных систем. Значение этих работ для развития информатики таково, что именно от их успеха зависит появление ЭВМ нового 5-го поколения. Именно этот качественный скачок возможностей компьютеров -обретение ими в полной мере интеллектуальных возможностей - положен целью развития вычислительной техники в ближайшей перспективе и является признаком компьютерной техники нового поколения.

Любая задача, для которой не известен алгоритм решения, может быть отнесена к сфере искусственного интеллекта. Примерами могут быть игра в шахматы, медицинская диагностика, составление резюме текста или перевода его на иностранный язык - для решения этих задач не существует четких алгоритмов. Еще две характерные особенности задач искусственного интеллекта: преобладающее использование информации в символьной (а не в числовой) форме и наличие выбора между многими вариантами в условиях неопределенности.

Перечислим отдельные направления, где применяются методы искусственного интеллекта.

1. Восприятие и распознавание образов (задача, упоминавшаяся ранее, как одно из направлений кибернетики). Теперь под этим понимаются не просто технические системы, воспринимающие визуальную и звуковую информацию, кодирующие и размещающие ее в памяти, проблемы понимания и логического рассуждения в процессе обработки визуальной и речевой информации.

2. Математика и автоматическое доказательство теорем.

3. Игры. Как и формальные системы в математике, игры, характеризующиеся конечным числом ситуаций и четко определенными правилами, с самого начала исследований по искусственному интеллекту привлекли к себе внимание как предпочтительные объекты исследования, полигон для применения новых методов.


Интеллектуальными системами был быстро достигнут и превзойден уровень человека средних способностей, однако уровень лучших специалистов не достигнут до сих пор. Возникшие трудности оказались характерными и для многих других ситуаций, так как в своих «локальных» действиях человек использует весь объем знаний, который он накопил за всю свою жизнь.

4. Решение задач. В данном случае понятие «решение» используется в широком смысле, относится к постановке, анализу и представлению конкретных ситуаций, а рассматриваемые задачи - те, которые встречаются в повседневной жизни, для решения которых требуется изобретательность и способность к обобщению.

5. Понимание естественного языка. Здесь ставится задача анализа и генерации текстов, их внутреннего представления, выявление знаний, необходимых для понимания текстов. Трудности связаны, в частности, с тем, что значительная часть информации в обычном диалоге не выражается определенно и ясно. Предложениям естественного языка присуща:

• неполнота;

• неточность;

• нечеткость;

• грамматическая некорректность;

• избыточность;

• зависимость от контекста;

• неоднозначность.

Однако такие свойства языка, являющегося результатом многовекового исторического развития, служат условием функционирования языка как универсального средства общения. Вместе с тем, понимание предложений естественного языка техническими системами с трудом поддается моделированию из-за- этих особенностей языка (да и вопрос о том, что такое «понимание», нуждается в размышлениях). В технических системах должен использоваться формальный язык, смысл предложений которого однозначно определяется их формой. Перевод с естественного языка на формальный является нетривиальной задачей.

6. Выявление и представление знаний экспертов в экспертных системах. Экспертные системы - интеллектуальные системы, вобравшие в себя знания специалистов в конкретных видах деятельности - имеют большое практическое значение, с успехом применяются во многих областях, таких как автоматизированное проектирование, медицинская диагностика, химический анализ и синтез и т.д.

Во всех этих направлениях главные трудности связаны с тем, что недостаточно изучены и поняты принципы человеческой интеллектуальной деятельности, процесс принятия решений и решение задач. Если в 60-х годах широко обсуждался вопрос «может ли компьютер мыслить», то теперь вопрос ставится иначе: «достаточно ли хорошо человек понимает, как он мыслит, чтобы передать эту функцию компьютеру»? В силу этого, работы в области искусственного интеллекта тесно соприкасаются с исследованиями по соответствующим разделам психологии, физиологии, лингвистики.


НАУЧНАЯ ГРАФИКА


Компьютерная графика представляет значительный интерес для научных исследований. В частности, она выступает как средство формирования научной документации с использованием специальной нотации - математических знаков, индексов, шрифтов и т.п. В последнее время ученые чаще стали обращаться к имитационному моделированию на компьютере.

В компьютерной графике большое значение имеют методы и способы геометрического моделирования.

Модели, геометрические преобразования составляют в настоящее время основу теории компьютерной графики и геометрического моделирования. Аналитические модели - это набор чисел, логических параметров, играющих роль коэффициентов в уравнениях, которые задают графический объект заданной формы. Например, аналитической моделью окружности на плоскости в параметрической форме являются уравнения

x=x0+R-cosA,

y=y0+R-sinA,

где х0, у0 - координаты центра, R - радиус, А - угол. Параметрическое задание образов широко применяется в машинной графике и геометрии. Изображение окружности можно осуществить установкой последовательных точек (близко расположенных), изменяя генерирующий параметр А от 0 до 360°.

Координатные модели

- это массивы координат точек, принадлежащих объектам. Например, поверхность задается массивом точек Z = f (x, у) на координатной сетке [хi, yj}. Если точки в модели расположены в том же порядке, что и на линии образа, то модели называют упорядоченными. Помимо координат, в модели могут быть указаны дополнительные характеристики проекции касательных или нормальных векторов.

Приближенные модели содержат аппроксимации кривых методами вычислительной геометрии. Например, изображение гладких кривых можно осуществить ломаными линиями: линейными, параболическими или сплайнами. Используя вышеперечисленные геометрические модели, можно создавать различные демонстрационные картины. Например, модель Солнечной системы для наглядности удобно представить в динамической форме. Организуем движение точки (Земли) по окружности, в центре которой размещается круг (имитация Солнца). Установку точки на орбите осуществим по параметрическим формулам окружности:

X0 = 320 + r1•sin(A1);

Y0 = 240 + rl •cos(Al),

где r1 - радиус орбиты Земли, А1 - параметрический угол, меняющийся от 0 до 360°. Чтобы организовать движение, достаточно в цикле устанавливать точку с координатами (x0, у0) для всех углов А1, принимающих значения от 0 до 360° с шагом h. Аналогичная процедура справедлива и для второй точки (Луны), которая изображается по подобным формулам, в которых центр орбиты (Земля) является подвижным:

х = х0 + r • sin(A);

у = у0 + r • cos(A),

где r - радиус орбиты Луны, А - угол вращения.



НАЗНАЧЕНИЕ И ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКА


В программировании помимо процедурного подхода, представителями которого являются такие универсальные языки высокого уровня как Бейсик, Паскаль, Си, и логического подхода, представленного языком Пролог, существует еще одно направление - функциональное. Оно возникло в 1962 г. вместе с созданием Дж.Маккарти языка программирования Лисп (Lisp). Долгое время этот язык занимал особое место. Подавляющее большинство программ искусственного интеллекта составлено на языке Лисп. До сих пор он считается стандартным языком разработки систем искусственного интеллекта. Его популярность особенно велика в США. В нашей стране этот язык не получил широкого распространения (одна из причин - недостаток литературы о нем на русском языке), однако в настоящее время популярность этого языка быстро растет. Несмотря на то, что Лисп - один из самых старых используемых языков программирования, у него многое еще впереди.

Язык Лисп - один из первых языков обработки данных в символьной форме. Его название происходит от английских слов «list processing » - «обработка списков». В Лиспе и программа, и обрабатываемые ею данные представляются в одной и той же форме - в форме списка. Таким образом, программы могут обрабатывать и преобразовывать другие программы и даже самих себя.

Используемый в Лиспе, так называемый, функциональный подход к программированию основывается на той простой идее, что вся обработка информации и получение искомого результата могут быть представлены в виде вложенных и/или рекурсивных вызовов функций, выполняющих некоторые действия, так что значение одной функции используется как аргумент другой. Значение этой функции становится аргументом следующей и т.д. пока не будет получен конечный результат - решение задачи.

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

Имеется большое число систем программирования на Лиспе, реализованных для компьютеров различных типов. Как правило, это интерпретирующие системы, работающие в интерактивном (диалоговом) режиме. Соответствующие описания и команды вводятся с клавиатуры после приглашения ("_"), затем прочитывается результат.



НАЗНАЧЕНИЕ И ОСНОВНЫЕ ФУНКЦИИ ОПЕРАЦИОННЫХ СИСТЕМ


Особое место среди программных средств всех типов занимают операционные системы, являясь ядром программного обеспечения.

Операционная система - это комплекс программ, обеспечивающих

• управление ресурсами, т.е. согласованную работу всех аппаратных средств компьютера;

•управление процессами, т.е. выполнение программ, их взаимодействие с устройствами компьютера, с данными;

• пользовательский интерфейс, т.е. диалог пользователя с компьютером, выполнение определенных простых команд - операций по обработке информации.

Такое определение операционной системы уже апеллирует к ее функциям, поэтому рассмотрим эти функции подробнее.

Операционные системы — наиболее машиннозависимый вид программного обеспечения, ориентированный на конкретные модели компьютеров, поскольку они напрямую управляют их устройствами или, как еще говорят, обеспечивают интерфейс между пользователем и аппаратной частью компьютера.

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

• центрального процессора, имеющего определенную архитектуру (структуру регистров, набор и форму представления команд, формат обрабатываемых данных и т.д.) и характеризующегося производительностью, т.е. количеством простейших операций, выполняемых в единицу времени, а также другими качествами;

• оперативной памяти, характеризующейся емкостью (объемом) и скоростью обмена данными (прежде всего с центральным процессором);

• периферийных устройств, среди которых имеются

• устройства ввода (клавиатура, мышь, сканер и др.);

• устройства вывода (дисплей, принтер, графопостроитель и др.);

• внешние запоминающие устройства (дисководы для магнитных и оптических дисков, устройства для работы с лентами и др.);

• мультимедийные устройства.

Все эти аппаратные устройства обобщенно называют ресурсами компьютера.

В сравнении с оперативной памятью внешние запоминающие устройства обладают практически неограниченной емкостью.
Так, емкость встроенного накопителя персональных компьютеров - винчестера - обычно в 50-100 раз больше объема оперативной памяти. Для других устройств - накопителей на гибких магнитных дисках и оптических дисках - используются сменные носители информации, однако время доступа к информации на внешних запоминающих устройствах значительно больше, чем к информации в оперативной памяти (в тысячи раз). Медленнее, чем центральный процессор, работают и устройства ввода - вывода.

За время существования компьютеров операционные системы претерпели значительную эволюцию. Так, первые операционные системы были однопользовательскими и однозадачными. Эффективность использования ресурсов компьютера в этом случае оказывалось невысокой из-за простоев всех, кроме одного работающего периферийного устройств компьютера. Например, при вводе данных простаивал центральный процессор, устройства вывода и внешние запоминающие устройства.

По мере роста возможностей, производительности и изменениях в соотношении стоимости устройств компьютера положение стало нетерпимым, что привело к появлению

многозадачных операционных систем, остававшихся однопользовательскими.

Такие операционные системы обеспечивают постановку заданий в очередь на выполнение, параллельное выполнение заданий, разделение ресурсов компьютера между выполняющимися заданиями. Так, например, одно задание может выполнять ввод данных, другое - выполняться центральным процессором, третье - выводить данные, четвертое - стоять в очереди. Важнейшее техническое решение, обусловившее такие возможности, - появление у внешних устройств собственных процессоров (контроллеров).

При многозадачном режиме

• в оперативной памяти находится несколько заданий пользователей;

• время работы процессора разделяется между программами, находящимися в оперативной памяти и готовыми к обслуживанию процессором;

• параллельно с работой процессора происходит обмен информацией с различными внешними устройствами.

Наиболее совершенны и сложны многопользовательские многозадачные операционные системы, которые предусматривают одновременное выполнение многих заданий многих пользователей, обеспечивают разделение ресурсов



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

Суть режима разделения времени состоит в следующем. Каждой программе, находящейся в оперативной памяти и готовой к исполнению, выделяется для исполнения фиксированный, задаваемый в соответствии с приоритетом пользователя интервал времени (интервал мультиплексирования). Если программа не выполнена до конца за этот интервал, ее исполнение принудительно прерывается, и программа переводится в конец очереди. Из начала очереди извлекается следующая программа, которая исполняется в течение соответствующего интервала мультиплексирования, затем поступает в конец очереди и т.д. в соответствии с циклическим алгоритмом. Если интервал мультиплексирования достаточно мал (~200 мс), 'а средняя длина очереди готовых к исполнению программ невелика (~10), то очередной квант времени выделяется программе каждые 2 с. В этих условиях ни один из пользователей практически не ощущает задержек, так как они сравнимы со временем реакции человека.

Одной из разновидностей режима разделения времени является фоновый режим, когда программа с более низким приоритетом работает на фоне программы с более высоким приоритетом. Работа в фоновом режиме реального времени аналогична работе секретаря руководителя. Секретарь занимается текущими делами до тех пор, пока начальник не дал срочное поручение.

Помимо рассмотренных режимов организации вычислительного процесса, все большее распространение получаст схема, при которой ЭВМ управляет некоторым внешним процессом, обрабатывая данные и информацию, непосредственно поступающую от объекта управления. Поскольку определяющим фактором являются реально поступающие от объекта управления данные, такой режим называют режимом реального времени, а его организация возлагается на специализированную операционную систему.



Остановимся на некоторых понятиях, важных для понимания принципов функционирования всех операционных систем (ОС).

Понятие процесса

играет ключевую роль и вводится применительно к каждой программе отдельного пользователя. Управление процессами (как целым, так и каждым в отдельности) - важнейшая функция ОС. При исполнении программ на центральном процессоре следует различать следующие характерные состояния (рис. 2.1):

• порождение-

подготовку условий для исполнения процессором;

• активное состояние (или «Счет») - непосредственное исполнение процессором;

• ожидание - по причине занятости какого-либо требуемого ресурса;

• готовность - программа не исполняется, но все необходимые для исполнения программы ресурсы, кроме центрального процессора, предоставлены;

• окончание

- нормальное или аварийное завершение исполнения программы, после которого процессор и другие ресурсы ей не предоставляются.



Рис. 2.1. Граф состояний переходов процесса из одной фазы в другую

Понятие «ресурс» применительно к вычислительной технике следует понимать как функциональный элемент вычислительной системы, который может быть выделен процессу на определенный промежуток времени. Наряду с физическими ресурсами -реальными устройствами ЭВМ - средствами современных операционных систем могут создаваться и использоваться виртуальные (воображаемые) ресурсы, являющиеся моделями физических. По значимости виртуальные ресурсы - одна из важнейших концепций построения современных ОС. Виртуальный ресурс представляет собой модель некоего физического ресурса, создаваемую с помощью другого физического ресурса. Например, характерным представителем виртуального ресурса является оперативная память. Компьютеры, как правило, располагают ограниченной по объему оперативной памятью (физической). Функционально ее объем может быть увеличен путем частичной записи содержимого оперативной памяти на магнитный диск. Если этот процесс организован так, что пользователь воспринимает всю расширенную память как оперативную, то такая «оперативная» .память называется виртуальной.



Наиболее законченным проявлением концепции виртуальности является понятие виртуальной машины, являющееся исходным при программировании на языках высокого уровня, например Паскале. Виртуальная машина есть идеализированная модель реальной машины, изолирующая пользователя от аппаратных особенностей конкретной ЭВМ, воспроизводящая архитектуру реальной машины, но обладающую улучшенными характеристиками:

• бесконечной по объему памятью с произвольно выбираемыми способами доступа к ее данным;

• одним (или несколькими) процессами, описываемыми на удобном для пользователя языке программирования;

• произвольным числом внешних устройств произвольной емкости и доступа. Концепция прерываний

выполнения программ является базовой при построении любой операционной системы. Из всего многообразия причин прерываний необходимо выделить два вида: первого и второго рода. Системные причины прерываний первого рода возникают в том случае, когда у процесса, находящегося в активном состоянии, возникает потребность либо получить некоторый ресурс или отказаться от него, либо выполнить над ресурсом какие-либо действия. К этой группе относят и, так называемые, внутренние прерывания, связанные с работой процессора (например, арифметическое переполнение или исчезновение порядка в операциях с плавающей запятой). Системные причины прерывания второго рода обусловлены необходимостью проведения синхронизации между параллельными процессами.

При обработке каждого прерывания должна выполняться следующая последовательность действий:

• восприятие запроса на прерывание;

• запоминание состояния прерванного процесса, определяемое значением счетчика команд и других регистров процессора;

• передача управления прерывающей программе, для чего в счетчик команд заносится адрес, соответствующий данному типу прерывания;

• обработка прерывания;

• восстановление прерванного процесса.

В большинстве ЭВМ первые три этапа реализуются аппаратными средствами, а остальные- блоком программ обработки прерываний операционной системы.



В настоящее время используется много типов различных операционных систем для ЭВМ различных видов, однако в их структуре существуют общие принципы. В составе многих операционных систем можно выделить некоторую часть, которая является основой всей системы и называется ядром. В состав ядра входят наиболее часто используемые модули, такие как модуль управления системой прерываний, средства по распределению таких основных ресурсов, как оперативная память и процессор. Программы, входящие в состав ядра, при загрузке ОС помещаются в оперативную память, где они постоянно находятся и используются при функционировании ЭВМ. Такие программы называют резидентными. К резидентным относят также и программы-драйверы, управляющие работой периферийных устройств. Важной частью ОС является командный процессор

- программа, отвечающая за интерпретацию и исполнение простейших команд, подаваемых пользователем, и его взаимодействие с ядром ОС. Кроме того, к операционной системе следует относить богатый набор утилит

- обычно небольших программ, обслуживающих различные устройства компьютера (например, утилита форматирования магнитных дисков, утилита восстановления необдуманно удаленных файлов и т.д.).


НАЗНАЧЕНИЕ И ОСНОВНЫЕ ФУНКЦИИ ТАБЛИЧНЫХ ПРОЦЕССОРОВ


Как показала практика, решение многих задач экономического характера на языках высокого уровня с использованием всего арсенала приемов и методов профессионального программирования - сложное и громоздкое дело. Понадобился принципиально иной подход, и он был найден и воплощен в виде электронных таблиц - инструмента, доступного непрофессионалам. Основная область применения электронных таблиц - это те сферы человеческой деятельности, где информация предоставляется в виде прямоугольных таблиц (планово-финансовых и бухгалтерских документов, учета материальных ценностей и др.), требующих при обработке проведения математических расчетов, откуда, по-видимому, и возник термин «табличный процессор». Отметим, что реляционные базы данных, также представляемые с помощью таблиц, к расчетам, как правило, не приспособлены.

В настоящее время известно много вариантов электронных таблиц: АБАК, Варитаб-86. Суперплан, Multiplan, SuperCalk, QuattroPro, Excel, Lotus 1-2-3 и др. Принципиально все они представляют табличный процессор и разнятся лишь интерфейсом и сервисными возможностями.

Электронная таблица (ЭТ) - это прямоугольная матрица, состоящая из ячеек, кдая из которых имеет свой номер, рис. 2.25.

Рис. 2.25. Электронная таблица

Номер ячейки определяется обычным координатным способом, например, ячейка ВЗ и т.д.

Группа ячеек (диапазон) задается через двоеточие, например, B3:D4 (или B3..D4) и образует прямоугольник, включающий ячейки ВЗ, СЗ, D3, В4, С4, D4.

В каждую из ячеек можно занести число, формулу (арифметическое выражение) или текст. Если в ячейку ЭТ записана формула, то в исходном состоянии на экране отображается значение этой формулы, а не она сама. Операндами формулы могут быть математические функции, константы, номера ячеек (содержимое ячейки с указанным номером). Ячейка ЭТ имеет сложную «многослойную» структуру, в ней может стоять ссылка на другую ячейку, значение которой является результатом вычислений по другой формуле и т.д.

Примеры функций:


sum(A2:A8) - сумма значений всех ячеек от А2 до А8;

sin(D5) - синус числа из ячейки D5;

cos(F3) - косинус числа из ячейки F3.

Пример формулы:

2.7. * А6 + cos (sum (D5:F7))

Приведенная формула означает, что мы хотим получить результат следующих вычислений: произведение числа из ячейки А6 на 2.7 сложить с косинусом угла, который является суммой чисел из ячеек D5, Е5, F5, D6, Е6, F6, D7, Е7, F7.

Данные, входящие в таблицы, можно автоматически представлять в виде графиков, диаграмм, гистограмм и т.д.

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

Приведем пример, иллюстрирующий возможности ЭТ.

Формирование зарплатной ведомости.

Так выглядят исходные данные для заполнения электронной таблицы:

А

В

C

D

Е

1

Зарплатная ведомость фирмы «Рога и копыта»

2

ФИО

Оклад

Начисление

Налог

Всего

3

Балаганов А

1500

B3*|.6

С3*0 12

C3-D3

4

Бендер О

3000

B4*|.6

С4*0.12

C5-D5

5

Паниковскин М.

1000

В5*|.6

С5*0.12

C5-D5

Здесь мы имеем дело с тремя типами содержимого ячеек: текст, число, формула. Ввод исходных данных происходит в командной строке. После заполнения таблицы мы увидим на экране:

А

В

С

D

Е

1

Зарплатная ведомость фирмы «Рога и копыта»

2

ФИО

Оклад

Начисление

Налог

Всего

3

Балаганов А.

1500

2400

288

2112

4

Бендер О.

3000

4800

576

4224

5

Паниковскнй М.

1000

1600

192

1408

Обычно работник бухгалтерии, поправив одну из цифр, вынужден был исправлять весь комплект взаимосвязанных документов, куда явно или неявно входил исправленный параметр.С помощью ЭТ такое изменение может быть учтено мгновенно и всюду.


НАЗНАЧЕНИЕ ПРОГРАММ


Описанные выше программные системы - текстовые редакторы и издательские системы, электронные таблицы и СУБД - являются инструментальными средствами общего назначения, т.е. могут использоваться для решения наиболее общих задач информационного характера в любой из сфер человеческой деятельности. Вместе с тем в отдельных сферах деятельности часто возникают задачи менее общего характера, такие, например, как проведение математических расчетов типа решения систем уравнений, интегрирования, статистической обработки информации и т.п., которые также требуют использования инструментальных программных средств. Таких более специальных инструментальных программ в настоящее время существует огромное количество. Одно их перечисление заняло бы многие страницы и все равно осталось бы неполным, так как новые «полуприкладные» системы появляются очень часто. Укажем лишь некоторые классы таких инструментальных средств: универсальные математические пакеты, пакеты статистической обработки данных, электронные «органаизеры» - программные средства, облегчающие планирование деятельности, хранение и поиск записей, отслеживающие заданные промежутки времени и т.д.

Ниже коротко описаны две широко используемых как в обучении, так и в практической деятельности системы, предназначенные для решения математических задач — пакет MATHCAD и система аналитических вычислений REDUCE.



НЕКОТОРЫЕ ПРИЕМЫ ПРОГРАММИРОВАНИЯ


Как уже отмечалось выше, наибольшая польза при изучении вопросов, затрагиваемых в данной главе, будет в том случае, если, наряду с проникновением в общую методологию моделирования и осознанием существа рассматриваемых задач, читатели реализуют несколько моделей в виде компьютерных программ достаточно профессионального уровня, т. е. не просто заглатывающих одни числа и выводящих на экран или принтер длинные столбцы других, но и реализующих некоторый интерфейс пользователя с элементами диалога, графики и т.д.

Именно поэтому мы не будем касаться здесь вопроса об использовании специализированных пакетов программ решения математических задач и графической поддержки. Во-первых, такие пакеты различны на разных ЭВМ, постоянно появляются новые, и за этим не угнаться никакому учебнику. Во-вторых (и это главное), самостоятельно запрограммированное осознанное решение системы дифференциальных уравнений методом Эйлера и сопровождающая его простенькая самостоятельно созданная на BASIC или PASCAL иллюстрация в виде графика или движущегося по экрану предмета дают тому, кто это сделал, куда больше, чем обращение к пакету MATHEMATICA с его могучими программами. От того, что задача будет решена, скажем, программой из этого пакета по методу Рунге - Кутта - Мерсона с автоматическим выбором шага интегрирования, реальных знаний почти не прибавится. Здесь мы упираемся в фундаментальные проблемы целей образования. Разумеется, овладение возможностями одного из пакетов математической поддержки (Eureka, MathCad, MathLab, Derive и др. ) вполне желательно и может принести определенную пользу, но не заменить самостоятельно проделанной работы.

Далее остановимся лишь на отдельных вопросах программирования, наиболее существенных при разработке моделирующих программ, ограничиваясь лишь примерами и советами, призванными уточнить суть дела.

Организация диалога человек - ЭВМ в процессе проектирования и разработки моделирующих программ.

Организация интерфейса пользователя при разработке профессиональных программ - работа не менее (а часто и более) сложная, чем реализация логической или расчетной части задачи.
Многие, работая с табличными процессорами, текстовыми редакторами и другими широко распространенными программами, не склонны задумываться, сколько усилий потребовала от разработчиков организация экрана, на котором всегда есть нужная в данный момент информация, причем именно в том месте экрана, где ее легче найти, система подсказок и помощи, меню для смены режимов работ и т.д. Очень жесткие требования по оформлению диалога предъявляются к обучающим и контролирующим Программам, компьютерным дидактическим играм, многим другим классам программ. Именно по соответствию этим требованиям сегодня в первую очередь судят о профессионализме разработки.

Характерной чертой практически всех профессиональных моделирующих программ является их диалоговый характер. Диалоговые (иначе говоря, интерактивные) программы - большой шаг вперед в развитии процесса взаимодействия человека с компьютером. Обсудим коротко лишь некоторые черты подобной организации человеко-машинного интерфейса.

Диалог человека с машиной весьма далек от привычного человеческого диалога. Главная особенность - ограниченные возможности компьютера в форме восприятия и анализа смысла человеческих сообщений. Воспринимаемые компьютером в ходе диалога сообщения жестко ограниченны в своих конструкциях как синтаксически, так и семантически. Синтаксически -т. е. сообщения воспринимаются лишь в предусмотренной автором программы форме. Например, оговорено, что сообщение содержит 5 букв кириллицы - любое другое система признает неверным и отвергнет. Однако, она в этом случае сочтет верным любой текст из 5 букв кириллицы, даже совершенно бессмысленный; такой текст будет отвергнут на уровне семантического анализа, в котором исследуется, приписал ли автор программы этому тексту какой-либо смысл.

Слово «семантика» означает смысловую сторону сообщения. В распознании смысла сообщений компьютерные программы пока преуспели гораздо меньше, чем в синтаксическом анализе, и могут несравненно меньше, чем человек. Работы в этом направлении - одно из самых перспективных направлений развития информатики.


Подавляющее число программ, реализованных на компьютерах с первого по четвертое поколения, могут распознавать «верно - неверно» лишь по сравнению с эталонными ответами, котооые либо заранее заложены в эти программы, либо выражены в числовой форме и рассчитываются программами.

Обсудим технические вопросы ведения диалога с компьютером. В моделирующих программах, в основном, используются следующие типы элементов диалога:

• меню;

• вопросы, требующие ответа «да/нет»;

• ответы по шаблону;

• команды.

Меню - на экране нумерованное или помеченное иным способом (например, выделением заглавных букв первых слов) множество функций системы, реализация которых возможна в настоящий момент, рис. 7. 3. Пользователь выбирает нужную функцию и тем самым начинает диалог.



Рис. 7. 3, а. Пример кадра меню

Программа 146.

Фрагмент программы, реализующей меню с рис. 7. 3,а.

Program St; Uses Crt;

Var M : Byte; Logic : Boolean;

(Про\"(о}е\"(a)ypa печати меню и выбора соответствующего пункта)

Procedure Menu (Var M : Byte) ;

Begin Repeat (Выбор пункта меню с верифика\"(о}ией вво\"(а)а}

CIrScr; GotoXY (15, 7);

Write('\"(А}ИНАМИКА ПОПУЛ\ss\"{0}ИЙ С НЕПРЕРЫВНЫМ РАЗМНОЖЕНИЕМ')•;

GotoXY(22, 10); Write('1. Внутриви\"{а}овая конкурен\"(о}ия. ');

GotoXY(22, 12); Write('2. Межви\"{а}овая конкурен\"(о}ия. ');

GotoXY(22, 14); Write('3. Система хищник-жертва. ');

GotoXY(22, 16); Write('4. Коне\"{о} работы. ');

GotoXY(15, 22); Write('ВЫБЕРИТЕ НОМЕР НУЖНОГО ПУНКТА МЕНЮ ');

Read(M)

Until M In [1. . 4]

End;

Begin (OCHOBHA\ss ПРОГРАММА)

Logic := False;

Repeat

Menu(M); (меню)

Case M Of

1 : Begin (Внутриви\"{а}овая конкурен\"{о}ия} End;

2 : Begin

{Межви\"{а}овая конкурен\"{о}ия)

CIrScr; WriteLn('Пункт меню "Межви\"{а}овая конкурен\"{о}ия"') ;

Repeat Until KeyPressed

End;

3 : Begin {Система хищник-жертва} End;

4 : Logic := True (Выхо\"{а} из программы)

End

Until Logic



End.

Программа может предусматривать и другие способы организация реакции пользователя: вводом букв В, M. С; еще удобнее - установкой курсора в нужную строку клавишами и (или) «мышью» (если она есть). Сути дела это не меняет.

Вопрос, требующий ответа «да/нет» - частный случай меню, который, однако, целесообразно выделить.



Рис. 7. 3, б. Выбор одного из возможных ответов

Ответы по шаблону даются чаще всего при ожидании числовой информации, когда хотят избежать длинных объяснений о формате числа, количестве значащих цифр.

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



Рис. 7. 3, в. Форматированный ввод данных



Рис. 7, 3, г. Выбор последующего режима работы

В основной части кадра-некий текст, предписывающий определенную реакцию. Но указанные внизу команды имеют приоритет, и при нажатии «М» мы попадем в основное меню независимо от того, что требовалось в верхней части кадра. При этом предусматривается возможность возврата в кадр, из которого вышли.

Разработка диалоговой моделирующей программы - достаточно сложный процесс, включающий создание сценария, программирование, разработка инструкций и документации. В нашем курсе невозможно требовать реализации всех этих элементов в каждой из выполняемых работ, поскольку тогда программистская работа отодвинет на второй план все остальное; можно лишь рекомендовать использовать элементы организации диалога. В отчетной (курсовой, дипломной) работе, напротив, уместна реализация весьма интересных диалоговых оболочек; в текущих же работах элементы разумной организации диалога, оформления экрана вполне уместны и не требуют чрезмерных усилий. Весь диалог при моделировании того уровня, который соответствует данному курсу, невелик по объему и несложен по логической организации.


Согласитесь, что ситуация, когда программа требует ввода данных и извещает об этом лишь знаком «?» на совершенно пустом экране, вам, вероятно, знакома, как знакома и реакция сидящего за компьютером человека, который не понимает, что бы это значило (что особенно смешно, если он сам - автор этой программы). Так не стоит ли снабдить этот знак фразой «введите начальную скорость v0,

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

Спроектируем возможное оформление диалога и формы представления результатов для одной из рассмотренных ниже задач по моделированию. Уместно начать с кадра-заставки, где написаны название задачи, фамилия автора программы - это минимум. Если удастся создать несложный рисунок, иллюстрирующий задачу - очень хорошо, он уместен в том же кадре. Затем, через несколько секунд, кадр сменяется следующим. На нем - основное уравнение (т.е. сама математическая модель) и предложение ввести исходные данные - с представлением шаблонов, или, если это затруднительно, то в свободной форме, но обязательно со словесным запросом значения каждого параметра по очереди. Более чем существенно разумно спроектировать формы для вывода результатов - таблицы, графики, траектории и т.д., их очередность, взаимное расположение.

Неплохо, если в процессе счета программа выводит на экран стационарную или мерцающую надпись типа «Подождите, идут расчеты». Когда счет закончен, на экране может появиться меню с предложениями: «Вывод таблицы результатов», «Вывод графика N(t)», «Запись параметров и результатов в файл», «Печать результатов», «Выполнение очередного расчета», «Окончание расчетов».

Разумеется, можно усовершенствовать это оформление, но каждый шаг здесь требует определенной программистской культуры и немалого труда.

Повсеместный переход на графические интерфейсные операционные системы уровня WINDOWS, появление сред визуального программирования типа DELPHI ведут к значительному повышению стандартизации пользовательского интерфейса.


Если при разработке моделирующих программ читатели используют возможности таких сред, то могут получить вполне профессиональные программные продукты.

Отметим, наконец, что те несколько программ, которые приведены ниже при рассмотрении конкретных моделей, не претендуют на совершенный интерфейс. Их цель - пояснение существа рассматриваемых процессов; попытка же оформить их «по всем правилам» привела бы к большим, плохо читаемым программам, не выполняющим этой разъяснительной функции.

Компьютерная научная графика. С простейшей научной графикой мы встречаемся очень рано. Уже в курсе математики 6-7 классов есть достаточно абстрактные и условные рисунки, которые дети легко воспринимают - например, график линейной функции. А ведь на нем немало элементов, интерпретация которых, если задуматься, вовсе не очевидна: линии, штрихи, стрелки, масштабы и т.д. Несмотря на это, понять по графику свойства сложной функции человеку гораздо легче, чем из соответствующей формулы, хотя в ней информации, строго говоря, гораздо больше. Так уж устроено человеческое восприятие, что рисунки, пусть даже условные, гораздо легче воспринимаются рассудком, чем сложные формулы или колонки чисел.

В современной прикладной информатике этим обстоятельством очень широко пользуются, и в ней сформировалось соответствующее направление - машинная (компьютерная) графика. По определению, машинная графика - раздел информатики, в рамках которого исследуются и разрабатываются технические, математические, программные и методические средства и приемы использования ЭВМ для создания, обработки, хранения и практического применения графических изображений.

В машинной графике выделяют несколько разделов.

Иллюстративная графика,

простейшими программными средствами которой являются всем знакомые диалоговые программы - графические редакторы, служит для создания изображений, за которыми, как правило, не стоят какие-либо математические объекты (уравнения и др.). Это - средство реализации свободного полета мысли и воображения, любимое занятие начинающих приобщаться к компьютеру.



Деловая графика

существенно «скучнее». Когда администратору, бухгалтеру, экономисту и т.д. нужно перевести сухие колонки чисел в столбчатую диаграмму, круговую диаграмму, график, достаточно вызвать такую программу и в ходе диалога сообщить ей заголовки, подписи, разметки, цвета и т.д. и имя файла, в котором по определенным правилам записаны указанные числа. Система построит заданное изображение на экране, выведет его на принтер.

Одна из самых сложных и специализированных разновидностей систем машинной графики - инженерная графика, известная также под именем САПР - системы автоматизированного проектирования. Это диалоговые системы, предназначенные для автоматизации процесса проектирования технических объектов, создания полных комплектов проектных документов с учетом существующих норм стандартов.

И, наконец, научная графика - наиболее актуальная для изучаемого курса и наименее всех допускающая единое описание. Универсальных систем компьютерной научной графики, по-видимому, не существует из-за огромного разнообразия задач. Часто программы, реализующие наглядное изображение решения научной задачи (почти всегда по итогам математического моделирования), встраиваются внутрь основной программы, пишутся на том же самом языке программирования.

Общую цель научной графики можно сформулировать так: сделать невидимое и абстрактное «видимым». Берем последнее слово в кавычки, так как часто эта «видимость» весьма условна. Можно ли увидеть распределение температуры внутри неоднородно нагретого тела сложной формы без введения в него сотен микродатчиков, т.е. , по существу, его разрушения? - Да, если есть соответствующая математическая модель, и, что очень важно - договоренность о восприятии определенных условностей на рисунке. Можно ли увидеть распределение металлических руд под землей без раскопок? Строение поверхности чужой планеты по результатам радиолокации? На эти и множество других вопросов ответ - да, можно, с помощью машинной графики и предшествующей ей математической обработки.


Изображения такого рода систематически публикуются научными и научно-популярными изданиями.

Более того, можно «увидеть» и то, что строго говоря, вообще плохо соответствует слову «видеть». Так. возникшая на стыке химии и физики наука - квантовая химия - дает нам возможность «увидеть» строение молекулы. Эти изображения -верх абстракции и системы условностей, так как в атомном мире обычные наши понятия о частицах (ядрах, электронах и т.д. ) принципиально не применимы. Однако, многоцветное «изображение» молекулы на экране компьютера для тех, кто понимает всю меру его условности, приносит большую пользу, чем тысячи чисел, являющихся плодом квантовохимического расчета.

При реализации относительно несложных задач нашего курса прибегать к помощи каких-либо стандартных пакетов машинной графики - дело вовсе необязательное. Конечно, можно себе представить, что итоговое оформление экрана в конце процесса моделирования выполнено с помощью графического редактора, а содержащийся в нем график - с помощью пакета деловой графики (или еще какого-то), но возникающую при этом проблему совмещения разных систем программирования не всегда легко решить. Целесообразнее, по-видимому, ориентироваться на тот язык программирования, на котором реализуется математическая модель.

Приведем несколько конкретных примеров, привязанных к нашему курсу.

Траектории движения тел, графики. В ряде рассмотренных ниже задач уместно иллюстрировать процесс моделирования изображениями движущихся объектов и их траекториями. Мы сознательно ограничивались случаями плоских (двумерных) движений, которые легко отобразить на плоском экране компьютера.

Поскольку основные графические операторы языка BASIC или процедуры модуля GRAPH Turbo Pascal нашим читателям известны, опишем лишь общие моменты построения графиков и траекторий. Напомним, что в главе 3 в разделе, посвященном PASCAL, приведена программа построения графика аналитически заданной функции на произвольном отрезке; здесь мы детализируем рассмотрение. Пусть численные расчеты уже закончены и нам известны границы значений координат [xmin, xmax] и [ymin, ymах] и есть таблица значений х и у в некоторые моменты времени, разделенные равными промежутками: 0, t, 2t, 3t,..., пt. Требуется построить графики зависимости x(t), у(t) и траекторию.


Проиллюстрируем это, используя графические процедуры PASCAL.

С помощью директивы Uses Graph и процедуры InitGraph (<параметры>) осуществляется переход в графический режим, в котором можно строить изображения. Необычная ориентация «экранной» системы координат создает определенные проблемы при построении графиков и траекторий. Мы хотим выводить их и задавать координаты точек в «естественной» системе координат x, y, изображенной на рис. 7.4, а графические процедуры (Circle, Line. OutText и др.) воспринимают аргументы в «экранной» системе x', у'. Сделаем разметку так, как показано на рисунке, и произведем линейное преобразование координат



Если известны разрешающая способность экрана - М точек по оси х' и N точек по оси у', то для нахождения коэффициентов ?, ?, ?, ? достаточно связать любые две точки в разных системах координат, например



(отступ на 10 позиций от краев экрана позволит создавать подписи, разметку осей и

др.). Имеем



откуда



откуда



Таким образом, перевод одних координат в другие осуществляется по формулам





Рис. 7.4. Экранная и «естественная» системы координат

Теперь достаточно поставить точку с нужной координатой (x, у) с помощью процедуры PutPixel, а введя ее в цикл, изобразить график или траекторию. Если же требуется изобразить движение тела, то перед выводом на экран очередной точки достаточно стереть предыдущую или воспользоваться несколькими видеостраницами - соответствующие приемы программирования читателю, скорее всего, известны. Отметим, что создание на экране дисплея динамических зрительных изображений - так называемая анимация - одно из перспективных направлений искусственного интеллекта-раздела современной информатики.

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



Опишем типичную процедуру построения изолиний на экране компьютера. На старте мы имеем двумерную таблицу значений некоторой величины А, полученную в ходе математического моделирования; числа в этой таблице соответствуют значениям этой величины в узлах пространственной сетки (рис. 7.5).

Зададим некоторый, совершенно условный, пространственный шаг h

между соседними узлами по горизонтали и вспомогательную систему координат, в которой узел (1, 1) имеет координату (0, 0), узел (1, 2) - координату (h, 0), узел (1, 3) - координату (2h, 0) и т.д. Если шаг по вертикали h*, то узел (i, j)

в этой системе имеет координату ((i-1) • h, (y-1) • h*).

Предварительно найдем в таблице наибольшее и наименьшее значения величин аij -

допустим, это amin и аmах. Пусть b - некоторое промежуточное значение: amin < b < amax. Обсудим в общих чертах, как построить изолинию A = b. Будем для этого (в цикле) просматривать вначале все пары ближайших чисел в первой строке таблицы в поисках такой пары, для которой b находится «внутри». Допустим, число b находится между a1k и a1,k+1, т.е. либо a1k < b < a1,k+1, либо a1k > b > a1,k+1.



Рис. 7.5. Пространственная сетка и соответствующая ей таблица значений величины А

С помощью линейной интерполяции найдем соответствующую горизонтальную координату точки, в которой А = b:



(координата у

определяется номером горизонтальной линии; в данном случае у = 0).

Найденные координаты запомним и просмотрим первую строку в таблице до конца, затем просмотрим вторую строку и т.д. Покончив с просмотром строк, мы получим часть точек, соответствующих изолинии А = b.

После этого займемся просмотром столбцов. Допустим, во втором столбце нашлась пара чисел, для которой число b находится между аp2

и ap+1,2. Она дает следующую точку для изолинии. Закончив просмотр всех столбцов, мы получим максимально возможный набор координат точек, принадлежащих данной изолинии. Выведя их на экран в нужном масштабе, получим точечное изображение изолинии А = b, после чего можем, взяв другое значение b, построить следующую изолинию.


Более детально эта процедура изложена ниже в пункте 3.8 на примере построения линий равного потенциала электрического поля.

Условные цвета, условное контрастирование. Еще один интересный прием современной научной графики - условная раскраска. Она находит широчайшее применение в самых разных приложениях науки и представляет собой набор приемов по максимально удобной, хотя и очень условной, визуализации результатов компьютерного моделирования.

Приведем примеры. В различных исследованиях температурных полей встает проблема наглядного представления результатов. Самый простой (и, с точки зрения специалиста, весьма неэффективный) - привести карту (чертеж, план), в некоторых точках которой обозначены значения температуры.

Другой способ - набор изотерм - гораздо эффективнее; к нему прибегают некоторые газеты, давая состояние и прогноз погоды. Но можно добиться еще большей наглядности, учитывая, что большинству людей свойственно, сравнивая разные цвета, воспринимать красный как «горячий», голубой как «холодный», а все остальные - между ними. Допустим, что на некоторой территории температура в данный момент имеет в разных местах значения от -25°С до + 15°С. Разделим этот диапазон на участки с шагом, равным, например, 5°

[-25,-20], [-20,-15],...,[+10,+15],

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

А что делать, если дисплей монохромный?! Или если изображение надо перенести с цветного дисплея на бумагу при отсутствии возможности цветной печати? -Тогда роль цвета может сыграть контраст. Сделаем самый «горячий» участок самым темным, самый «холодный» - прозрачным, а остальные - между ними. Эффектность, конечно, меньше, чем при цветовой раскраске, но для наметанного глаза изображение информативно.

То же самое можно делать при иллюстрации температурного поля и на поверхности обрабатываемой на станке детали, и на поверхности далекой планеты.



В нашем курсе есть несколько моделей, в которых можно (и очень полезно) прибегнуть к подобному приему визуализации. В задаче о теплопроводности в стержне это даже не очень сложно; можно делать такие условные раскраски при моделировании распределения электрических полей. Если заниматься имитационным моделированием конкурирующих популяций, то, раскрасив их в разные цвета, можно получить на экране причудливые картины, передающие ход конкурентной борьбы.

Условные раскраски бывают и гораздо более абстрактными, чем в описанных выше случаях. При моделировании сложных органических молекул компьютер может выдавать результаты в виде многоцветной картины, на которой атомы водорода изображены одним цветом, углерода - другим и т.д., причем атом представлен шариком (кружочком), в пределах которого плотность цвета меняется в соответствии с распределением электронной плотности.

При поиске полезных ископаемых методами аэрофотосъемки с самолетов или космических спутников компьютеры строят условные цветовые изображения распределений плотности под поверхностью Земли. Подобных примеров можно привести достаточно много.

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

Программа 147. Условная раскраска неравномерно нагретого стержня в разные моменты времени (по заранее заготовленным данным).

Program Stergen;

Uses Crt, Graph

Type Mas2 = Array [0..10, 0..4] of Real;

Const (Массив распределения температуры в разные моменты времени)

U : Mas2 =

((3.000, 3.667, 4.333, 5.000, 3.000), (3.000, 3.628, 4.128, 3.952, 3.000), (3.000, 3.514, 3.783, 3.593, 3.000), (3.000, 3.377, 3.546, 3.396, 3.000), (3.000, 3.267, 3.381, 3.272, 3.000), (3.000, 3.187, 3.266, 3.188, 3.000), (3.000, 3.131, 3.185, 3.131, 3.000), (3.000, 3.091, 3.129, 3.091, 3.000),

(3.000, 3.064. 3.090, 3.064, 3.000), (3.000, 3.044, 3.063, 3.044, 3.000), (3.000, 3.031, 3.044, 3.031, 3.000));



Var

M, I, J, N1, Nt : Integer; MaxF, L, T, HI, Ht : Real;

Procedure Initialize; (Процедура инициализации графического режима)

Var GraphDriver, GraphMode : Integer;

Begin

DetectGraph(GraphDriver, GraphMode) ;

InitGraph(GraphDriver, GraphMode, '');

End;

(Графическая иллюстрация решения)

Procedure Postar.ovka (U : Mas2; Nt, N1 : Integer; HI, L, MaxF : Real);

Var X_N, Shag, Y_N, Shir, Dlin, Color, I, J, K, Y : Integer;

Flag .: Boolean; Ff : String; Col : Array [0..15] Of Byte;

Begin

Initialize; (Инициализация графического режима)

X_N := GetMaxX Div 6;

If Nt <= 6 Then M := Nt Else M := Nt Div 2;

Y_N := GetMaxY Div M - 20; Shir := Y_N Div 2;

Dlin := GetMaxX -2 * X_N; Shag := Trunc(Dlin / N1); Str(Shag,Ff) ;

Col[0] := 0; Col[l] := 8; Col[2] := 1; (Палитра цветов)

Col[3] := 9; Col[4] := 3; Col[5] := 11;

Col[6] := 2; Col[7] := 10; Col[8] := 14;

Col[9] := 13; Col[l0] := 5; Col[ll] := 12; Col [12] := 4;

For I :== 0 To M - 1 Do (номер временного промежутка)

  Begin

    For J := 0 To N1 - 1 Do (номер участка стержня)

      Begin

        Flag := False;

          For К := 0 To Shag Do

          Begin

          For y:= 0 To Shir Do

          Begin

          Color := 1 + Round((U[I, J] + (определение номера цвета)

          (U[I, J + 1] - U[I, J]) * К / Shag - U[0, 0]) / 3 * 16);

If Random(64) > 32

Then If Random(64) > 32 Then Color := Color + 1 Else

  Color := Color - 1;

          If Not Flag Then (вывод текущей температуры)

Begin

Str((U[I,J]+(U(I,J+l]-U[I,J])*K/Shag) : 5 : 3, Ff);

             OutTextXY(K+X_N+Shag*J, Y_N*(1+1)-19, Ff) ;

             Flag := True

          End;

          {рисование точки}

        PutPixel(K+X_N+Shag*J, Y+Y_N*(1+I), Col[Color])

        End

   End

End

End;

SetColor(White); OutTextXY(150, 450, 'Нажмите любую клавишу ');

 Repeat Until KeyPressed; CloseGraph

End;

Begin (ОСНОВНАЯ ПРОГРАММА)

L := 4; Т := 10; Hi := 1; Ht := 1;

N1 := Trunc(L / HI); Nt := Trunc(T / Ht); MaxF := 5;

Postanovka (U.Nt, N1, HI, L, MaxF)

End.


НЕПРЕРЫВНАЯ И ДИСКРЕТНАЯ ИНФОРМАЦИЯ


Чтобы сообщение было передано от источника к получателю, необходима некоторая материальная субстанция - носитель информации. Сообщение, передаваемое с помощью носителя, назовем сигналом. В общем случае сигнал - это изменяющийся во времени физический процесс. Такой процесс может содержать различные характеристики (например, при передаче электрических сигналов могут изменяться напряжение и сила тока). Та из характеристик, которая используется для представления сообщений, называется параметром сигнала.

В случае когда параметр сигнала принимает последовательное во времени конечное число значений (при этом все они могут быть пронумерованы), сигнал называется

дискретным, а сообщение, передаваемое с помощью таких сигналов -дискретным сообщением. Информация, передаваемая источником, в этом случае также называется дискретной. Если же источник вырабатывает непрерывное сообщение (соответственно параметр сигнала - непрерывная функция от времени), соответствующая информация называется непрерывной. Пример дискретного сообщения - процесс чтения книги, информация в которой представлена текстом, т.е. дискретной последовательностью отдельных значков (букв). Примером непрерывного сообщения служит человеческая речь, передаваемая модулированной звуковой волной; параметром сигнала в этом случае является давление, создаваемое этой волной в точке нахождения приемника - человеческого уха.

Непрерывное сообщение может быть представлено непрерывной функцией, заданной на некотором отрезке [а, Ь] (см. рис. 1.4). Непрерывное сообщение можно преобразовать в дискретное (такая процедура называется дискретизацией). Для этого из бесконечного множества значений этой функции (параметра сигнала) выбирается их определенное число, которое приближенно может характеризовать остальные значения. Один из способов такого выбора состоит в следующем. Область определения функции разбивается точками x1, x2,... хn, на отрезки равной длины и на каждом из этих отрезков значение функции принимается постоянным и равным, например, среднему значению на этом отрезке; полученная на этом этапе функция называется в математике ступенчатой.
Следующий шаг - проецирование значений «ступенек» на ось значений функции (ось ординат). Полученная таким образом последовательность значений функции у1, у2, ... уn.

является дискретным представлением непреравной функции, точность которого можно неограниченно улучшать путем уменьшения длин отрезков разбиения области значений аргумента.



Рис. 1.4. Процедура дискретизации непрерывного сообщения

Ось значений функции можно разбить на отрезки с заданным шагом и отобразить каждый из выделенных отрезков из области определения функции в соответствующий отрезок из множества значений (рис. 1.4). В итоге получим конечное множество чисел, определяемых, например, по середине или одной из границ таких отрезков.

Таким образом, любое сообщение может быть представлено как дискретное, иначе говоря последовательностью знаков некоторого алфавита.

Возможность дискретизации непрерывного сигнала с любой желаемой точностью (для возрастания точности достаточно уменьшить шаг) принципиально важна с точки зрения информатики. Компьютер - цифровая машина, т. е- внутреннее представление информации в нем дискретно. Дискретизация входной информации (если она непрерывна) позволяет сделать ее пригодной для компьютерной обработки.

Существуют и другие вычислительные машины - аналоговые ЭВМ. Они используются обычно для решения задач специального характера и широкой публике практически не известны. Эти ЭВМ в принципе не нуждаются в дискретизации входной информации, так как ее внутреннее представление у них непрерывно. В этом случае все наоборот - если внешняя информация дискретна, то ее «перед употреблением» необходимо преобразовать в непрерывную.


НОРМАЛЬНЫЕ АЛГОРИТМЫ МАРКОВА


Для формализации понятия алгоритма российский математик А.А.Марков предложил использовать ассоциативные исчисления.

Рассмотрим некоторые понятия ассоциативного исчисления. Пусть имеется алфавит (конечный набор различных символов). Составляющие его символы будем называть буквами. Любая конечная последовательность букв алфавита (линейный их ряд) называется словом в этом алфавите.

Рассмотрим два слова N

и М в некотором алфавите А. Если N

является частью М, то говорят, что N входит в М.

Зададим в некотором алфавите конечную систему подстановок N - М, S - Т,..., где N, М, S, Т,... - слова в этом алфавите. Любую подстановку N-M можно применить к некоторому слову К следующим способом: если в К имеется одно или несколько вхождений слова N, то любое из них может быть заменено словом М,

и, наоборот, если имеется вхождение М,

то его можно заменить словом N.

Например, в алфавите А = {а, b, с} имеются слова N

= ab, М = bcb, К = abcbcbab, Заменив в слове К слово N

на М, получим bcbcbcbab или abcbcbbcb, и, наоборот, заменив М на N, получим aabcbab

или аbсаbаb.

Подстановка ab - bcb недопустима к слову bacb, так как ни ab, ни bcb

не входит в это слово. К полученным с помощью допустимых подстановок словам можно снова применить допустимые подстановки и т.д. Совокупность всех слов в данном алфавите вместе с системой допустимых подстановок называют ассоциативным исчислением. Чтобы задать ассоциативное исчисление, достаточно задать алфавит и систему подстановок.

Слова P1 и Р2 в некотором ассоциативном исчислении называются смежными, если одно из них может быть преобразовано в другое однократным применением допустимой подстановки.

Последовательность слов Р, P1, Р2, ..., М называется дедуктивной цепочкой, ведущей от слова Р к слову М, если каждое из двух рядом стоящих слов этой цепочки - смежное.

Слова Р

и М называют эквивалентными, если существует цепочка от Р к М и обратно.

Пример

                        Алфавит                                Подстановки

                        {а, b, с, d, е}  ас - сa,                        abac - abace


                                               ad - da;                       eca - ae

                                               bc - cb;                       eda - be

                                               bd - db;                       edb - be

Слова abcde и acbde - смежные (подстановка bc - cb). Слова abcde

- cadbe эквивалентны.

Может быть рассмотрен специальный вид ассоциативного исчисления, в котором подстановки являются ориентированными: N > М (стрелка означает, что подстановку разрешается производить лишь слева направо). Для каждого ассоциативного исчисления существует задача: для любых двух слов определить, являются ли они эквивалентными или нет.

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

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

Пример

                                   Алфавит:                               Система подстановок В:

                                   А = {а, b, с}                                      cb - cc

                                                                                              сса - аb

                                                                                              ab – bса

Предписание о применении подстановок: в произвольном слове Р надо сделать возможные подстановки, заменив левую часть подстановок на правую; повторить процесс с вновь полученным словом.



Так, применяя систему подстановок В из рассмотренного примера к словам babaac и bсaсаbс

получаем:

babaac > bbcaaac > остановка

bcacabc > bcacbcac > bcacccac > bсасаbс > бесконечные процесс (остановки нет), так как мы получили исходное слово.

Предложенный А.А.Марковым способ уточнения понятия алгоритма основан на понятии нормального алгоритма, который определяется следующим образом. Пусть задан алфавит А

и система подстановок В. Для произвольного слова Р подстановки из В подбираются в том же порядке, в каком они следуют в В.

.Если подходящей подстановки нет, то процесс останавливается. В противном случае берется первая из подходящих подстановок и производится замена ее правой частью первого вхождения ее левой части в Р.

Затем все действия повторяются для получившегося слова P1. Если применяется последняя подстановка из системы В, процесс останавливается.

Такой набор предписаний вместе с алфавитом А и набором подстановок В определяют нормальный алгоритм. Процесс останавливается только в двух случаях: 1) когда подходящая подстановка не найдена; 2) когда применена последняя подстановка из их набора. Различные нормальные алгоритмы отличаются друг от друга алфавитами и системами подстановок.

Приведем пример нормального алгоритма, описывающего сложение -натуральных чисел (представленных наборами единиц).

Пример

                                               Алфавит:                                Система подстановок В:

                                               А = (+, 1)                                            1 + > + 1

                                                                                                          + 1 > 1

                                                                                                          1 > 1

Слово Р: 11+11+111

Последовательная переработка слова Р с помощью нормального алгоритма Маркова проходит через следующие этапы:

Р = 11 + 11 + 111                               Р5



= + 1 + 111111

Р1 = 1 + 111 + 111                              Р6 = ++ 1111111

Р2 = + 1111 + 111                               Р7 = + 1111111

Р3 = + 111 + 1111                               Р8 = 1111111

Р4 = + 11 + 11111                               Р9 = 1111111

Нормальный алгоритм Маркова можно рассматривать как универсальную форму задания любого алгоритма. Универсальность нормальных алгоритмов декларируется принципом нормализации: для любого алгоритма в произвольном конечном алфавите А

можно построить эквивалентный ему нормальный алгоритм над алфавитом А,

Разъясним последнее утверждение. В некоторых случаях не удается построить нормальный алгоритм, эквивалентный данному в алфавите А, если использовать в подстановках алгоритма только буквы этого алфавита. Однако, можно построить требуемый нормальный алгоритм, производя расширение алфавита А (добавляя к нему некоторое число новых букв). В этом случае говорят, что построенный алгоритм является алгоритмом над алфавитом А, хотя он будет применяться лишь к словам в исходном алфавите A.

Если алгоритм N

задан в некотором расширении алфавита А,

то говорят, что N есть нормальный алгоритм над алфавитом А.

Условимся называть тот или иной алгоритм нормализуемым, если можно построить эквивалентный ему нормальный алгоритм, и ненормализуемым в противном случае. Принцип нормализации теперь может быть высказан в видоизмененной форме: все алгоритмы нормализуемы.

| Данный принцип не может быть строго доказан, поскольку понятие произвольного алгоритма не является строго определенным и основывается на том, что все Известные в настоящее время алгоритмы являются нормализуемыми, а способы ромпозиции алгоритмов, позволяющие строить новые алгоритмы из уже известных, не выводят за пределы класса нормализуемых алгоритмов. Ниже перечислены способы композиции нормальных алгоритмов.

I. Суперпозиция алгоритмов. При суперпозиции двух алгоритмов А и В

выходное слово первого алгоритма рассматривается как входное слово второго алгоритма В. Результат суперпозиции С может быть представлен в виде С(р) = В(А(р)),



II. Объединение алгоритмов.

Объединением алгоритмов А и В в одном и том же алфавите называется алгоритм С в том же алфавите, преобразующий любое слово р, содержащееся в пересечении областей определения алгоритмов А и В, в записанные рядом слова А(р) и

В(р).

III. Разветвление алгоритмов. Разветвление алгоритмов представляет собой композицию D трех алгоритмов А, В  и

С, причем область определения алгоритма D является пересечением областей определения всех трех алгоритмов А, В и С, а для любого слова р из этого пересечения D(p) = А(р),

если С(р) = е, D(p)

= B(p), если С(р) = е, где е - пустая строка.

IV. Итерация алгоритмов. Итерация (повторение) представляет собой такую композицию С двух алгоритмов А и В, что для любого входного слова р соответствующее слово С(р) получается в результате последовательного многократного применения алгоритма А до тех пор, пока не получится слово, преобразуемое алгоритмом В.

Нормальные алгоритмы Маркова являются не только средством теоретических построений, но и основой специализированного языка программирования, применяемого как язык символьных преобразований при разработке систем искусственного интеллекта. Это один из немногих языков, разработанных в России и получивших известность во всем мире.

Существует строгое доказательство того, что по возможностям преобразования нормальные алгоритмы Маркова эквивалентны машинам Тьюринга.


НОВЕЙШИЕ МЕТОДОЛОГИИ РАЗРАБОТКИ ПРОГРАММ ДЛЯ ЭВМ


Структурный подход сыграл огромную роль в программировании и вычислительной технике. С его использованием создан большой запас программного обеспечения, решено множество практически значимых задач. Однако, развитие программирования на этом не остановилось. Сегодня дополняющим структурное программирование, создающим основу для разработки современных аудиовизуаль-программных комплексов стало объектное (иногда говорят объектно-ориентированное) программирование, а противостоящим ему при решении определенных классов задач является декларативное программирование, выраженное двумя разными подходами - функциональным и логическим.

Здесь мы ограничимся кратчайшей характеристикой этих направлений, более детально описанных в гл. 3.

Само структурное программирование, наиболее отчетливо выраженное в языке Паскаль (PASCAL), возникло в ходе развития процедурно-ориентированного подхода, заложенного в исторически первом из языков программирования - Фортране (FORTRAN). Во всех языках этого направления разработчик алгоритма (он же, как правило, и программист) описывает, какими действиями следует реализовать процесс. В основе языков этой группы лежат понятия команд (операторов) и данных. Отдельные группы операторов могут объединяться во вспомогательные алгоритмы (процедуры, подпрограммы).

Объект - основное понятие объектного программирования - в первом приближении похож на процедуру. Однако, процедура (подпрограмма) «оживает» лишь внутри той программы, к которой она относится, а объект может вести себя вполне независимо. Он может относиться к иной предметной области нежели основная программа, быть исполненным в ином стиле. Объекты достаточно причудливо связываются друг с другом, могут перенимать свойства друг у друга («наследование»). В объектно-ориентированном подходе исходная задача представляется как совокупность взаимодействующих объектов. Наиболее популярные реализации объектного программирования созданы на основе языков Паскаль, Бейсик (BASIC).

Декларативный подход в разработке компьютерных программ появился в начале 70-х годов.
Он не получил столь широкого применения как процедурный, поскольку был направлен на относительно узкий круг задач искусственного интеллекта. При его применении программист описывает свойства исходных данных, их взаимосвязи, свойства, которыми должен обладать результат, а не алгоритм получения результата. Разумеется, для получения результата этот алгоритм все равно нужен, но он должен порождаться автоматически той системой, которая поддерживает декларативно-ориентированный язык программирования. При логическом варианте такого подхода (прежде всего это относится к языку Пролог, PROLOG) задача описывается совокупностью фактов и правил в некотором формальном логическом языке, при функциональном варианте - в виде функциональных соотношений между фактами (язык Лисп, LISP).

Процедурно-ориентированное программирование развивается и в другом направлении - так называемого, параллельного программирования. В привычных алгоритмах и программах действия совершаются последовательно одно за другим. Однако, логика решения множества задач вполне допускает одновременное выполнение нескольких операций, что ведет к многократному увеличению эффективности. Реализация параллельных алгоритмов на ЭВМ стала возможной с появлением многопроцессорных компьютеров, в которых специалисты видят будущее вычислительной техники.


О ПОНЯТИИ «АРХИТЕКТУРА ЭВМ»


Термин «архитектура» используется в популярной литературе по вычислительной технике достаточно часто, однако определение этого понятия и его содержание могут у разных авторов достаточно различаться. Разберемся в этом вопросе более тщательно.

Начать целесообразно с происхождения термина. Слово «архитектура» в изначальном своем смысле используется в градостроении. Будучи достаточно сложной структурой, современный город состоит из районов, площадей, улиц, домов и т.п., расположенных определенным образом. Жителей города обычно мало интересует, как выглядит конкретный дом и из каких материалов он построен. Зато очень важно знать район, где этот дом расположен, улицы, ведущие к нему, и транспорт, пользуясь которым можно сократить время в пути.

Для того, чтобы ориентироваться в хитросплетении улиц и площадей, в любом городе существует исторически сложившаяся система названий, а также определенная нумерация домов. Наличие общепринятой адресации позволяет однозначно определить положение любого строения и в случае необходимости быстро отыскать его. Именно на существовании такой адресной системы построена работа почты. Во многих случаях расположение улиц и присвоение им имен носит беспорядочный характер. В то же время бывает, что эта деятельность тщательно продумана и является продолжением общей планировки города, т.е. фактически частью его архитектуры. Классическим примером может служить известная система взаимно-перпендикулярных улиц (авеню и стриты) города Нью-Йорка. Помимо чисто практической, архитектура города может иметь еще и художественную ценность (что обычно больше интересует приезжих). Но этот аспект понятия «архитектура» вряд ли переносим на вычислительную технику.

Используя аналогию с градостроительством, естественно понимать под архитектурой ЭВМ ту совокупность их характеристик, которая необходима почьзователю. Это, прежде всего, основные устройства и блоки ЭВМ, а также структура связей между ними. И действительно, если заглянуть, например, в «Толковый словарь по вычислительным системам», мы прочтем там.
что термин « архитектура ЭВМ используется для описания принципа действия, конфигурации и взаимного соединения основных логических узлов ЭВМ (вследствие чего термин «архитектура» оказывается ближе к обыденному значению этого слова)».

Однако описание внутренней структуры ЭВМ вовсе не является самоцелью: с точки зрения архитектуры представляют интерес лишь те связи и принципы, которые являются наиболее общими, присущими многим конкретным реализацням вычислительных машин. Часто говорят даже о семействах ЭВМ. т.е. группах моделей, совместимых между собой. В пределах одного семейства основные принципы устройства и функционирования машин одинаковы, хотя отдельные модели могут существенно различаться по производительности, стоимости и другим параметрам. Ярким примером могут служить различные модификации компьютеров PDP фирмы DEC (более известные нашим пользователям по отечественным аналогам - серии ДВК), семейство MSX-машин. к которому принадлежит широко распространенная YAMAHA, а также заполонившие мир IBM-совместимые персональные компьютеры.

Именно то общее, что есть в строении ЭВМ, и относят к понятию архитектуры. Важно отметить, что целью такой общности в конечном счете служит вполне понятное стремление: все машины одного семейства, независимо от их конкретного устройства и фирмы-производителя, должны быть способны выполнять одну и ту же программу (на практике из-за постоянного роста вычислительной мощности техники чаще используется менее жесткий принцип совместимости снизу вверх: все программы данной модели выполнимы на более старших). Отсюда неизбежно следует вывод, что с точки зрения архитектуры важны не все сведения о построении ЭВМ, а только те, которые могут как-то использоваться при программировании и «пользовательской» работе с ЭВМ. Равно как максимально подробная архитектура города не нуждается в описании марок кирпичей, из которых построены дома, и растворов, которыми эти кирпичи скреплены, так и архитектура ЭВМ не содержит описания электронных схем, других деталей реализации, «невидимых» для пользователя (например, внутреннего ускорителя доступа к памяти).

Ниже приводится перечень тех наиболее общих принципов построения ЭВМ, которые относятся к архитектуре:

• структура памяти ЭВМ;

• способы доступа к памяти и внешним устройствам;

• возможность изменения конфигурации компьютера;

• система команд;

• форматы данных;

• организация интерфейса.

Суммируя все вышеизложенное, получаем следующее определение архитектуры:

«Архитектура - это наиболее общие принципы построения ЭВМ, реализующие

программное управление работой и взаимодействием основных ее функциональных

узлов».


§ О РАЗНОВИДНОСТЯХ МОДЕЛИРОВАНИЯ


С понятием «модель» мы сталкиваемся с детства. Игрушечный автомобиль, самолет или кораблик для многих были любимыми игрушками, равно как и плюшевый медвежонок или кукла. В развитии ребенка, в процессе познания им окружающего мира, такие игрушки, являющиеся, по существу, моделями реальных объектов, играют важную роль. В подростковом возрасте для многих увлечение авиамоделированием, судомоделированием, собственноручным созданием

игрушек, похожих на реальные объекты, оказало влияние на выбор жизненного пути.

Что же такое модель? Что общего между игрушечным корабликом и рисунком на экране компьютера, изображающим сложную математическую абстракцию? И все же общее есть: и в том, и в другом случае мы имеем образ реального объекта или явления, «заместителя» некоторого «оригинала», воспроизводящего его с той или иной достоверностью и подробностью. Или то же самое другими словами: модель является представлением объекта в некоторой форме, отличной от формы его реального существования.

Практически во всех науках о природе, живой и неживой, об обществе, построение и использование моделей является мощным орудием познания. Реальные объекты и процессы бывают столь многогранны и сложны, что лучшим способом их изучения часто является построение модели, отображающей лишь какую-то грань реальности и потому многократно более простой, чем эта реальность, и исследование вначале этой модели. Многовековой опыт развития науки доказал на практике плодотворность такого подхода.

В моделировании есть два заметно разных пути. Модель может быть похожей копией объекта, выполненной из другого материала, в другом масштабе, с отсутствием ряда деталей. Например, это игрушечный кораблик, самолетик, домик из кубиков и множество других натурных моделей. Модель может, однако, отображать реальность более абстрактно - словесным описанием в свободной форме, описанием, формализованным по каким-то правилам, математическими соотношениями и т.д.

В прикладных областях различают следующие виды абстрактных моделей;


I) традиционное ( прежде всего для теоретической физики, а также механики, химии, биологии, ряда других наук) математическое моделирование без какой-либо привязки к техническим средствам информатики;

II) информационные модели и моделирование, имеющие приложения в информационных системах;

III) вербальные (т.е. словесные, текстовые) языковые модели;

IV) информационные (компьютерные) технологии, которые надо делить

А) на инструментальное использование базовых универсальных программных средств (текстовых редакторов, СУБД, табличных процессоров, телекоммуникационных пакетов);

Б) на компьютерное моделирование, представляющее собой

• вычислительное (имитационное) моделирование;

• «визуализацию явлений и процессов» (графическое моделирование);

• «высокие» технологии, понимаемые как специализированные прикладные технологии, использующие компьютер (как правило, в режиме реального времени) в сочетании с измерительной аппаратурой, датчиками, сенсорами и т.д.

Итак, укрупненная классификация абстрактных (идеальных) моделей такова.

1. Вербальные (текстовые) модели. Эти модели используют последовательности предложений на формализованных диалектах естественного языка для описания той или иной области действительности (примерами такого рода моделей являются милицейский протокол, правила дорожного движения).

2. Математические модели - очень широкий класс знаковых моделей (основанных на формальных языках над конечными алфавитами), широко использующих те или иные математические методы. Например, можно рассмотреть математическую модель звезды. Эта модель будет представлять собой сложную систему уравнений, описывающих физические процессы, происходящие в недрах звезды. Математической моделью другого рода являются, например, математические соотношения, позволяющие рассчитать оптимальный (наилучший с экономической точки зрения) план работы какого-либо предприятия.

3. Информационные модели - класс знаковых моделей, описывающих информационные процессы (возникновение, передачу, преобразование и использование информации) в системах самой разнообразной природы.



Граница между вербальными, математическими и информационными моделями может быть проведена весьма условно; вполне возможно считать информационные модели подклассом математических моделей. Однако, в рамках информатики как самостоятельной науки, отделенной от математики, физики, лингвистики и других наук, выделение информационных моделей в отдельный класс является целесообразным.

Отметим, что существуют и иные подходы к классификации абстрактных моделей; общепринятая точка зрения здесь еще не установилась. В частности, есть тенденция резкого расширения содержания понятия «информационная модель». при котором информационное моделирование включает в себя и вербальные, и математические модели.

Основное содержание данной главы связано с прикладными математическими моделями, в реализации которых используются компьютеры. Это вызвано тем, что внутри информатики именно компьютерное математическое и компьютерное информационное моделирование могут рассматриваться как ее составные части. Компьютерное математическое моделирование связано с информатикой технологически; использование компьютеров и соответствующих технологий обработки информации стало неотъемлемой и необходимой стороной работы физика, инженера, экономиста, эколога, проектировщика ЭВМ и т.д. Неформализованные вербальные модели не имеют столь явно выраженной привязки к информатике - ни в принципиальном, ни в технологическом аспектах.


ОБОЛОЧКА TURBO-VISION


Объектно-ориентированный подход позволяет создавать объектные среды, библиотеки объектов для последующего использования при разработке программ. Особенно широкую известность получили объектные оболочки для разработки интерфейсов программ в некотором едином, ставшем стандартным, стиле.

Turbo-Vision - это оболочка для создания оконченных интерфейсов программ в среде Турбо-Паскаль версий 6.0, 7.0.

Объектно-ориентированная библиотека Turbo-Vision включает

• многократные перекрещивающиеся окна с изменяемыми размерами;

/

• выпадающие меню;

• поддержку мыши;

• встроенную установку цвета;

• кнопки, полосы скроллинга, окна ввода, зависимые и независимые кнопки;

• стандартную обработку клавиш и нажатий мышки и многое другое.

Стандартный отработанный интерфейс, создаваемый с помощью Turbo-Vision, имеет сверху строку меню, а снизу - строку статуса.

Текст, который появляется в строке статуса, обычно выводит сообщения о текущем состоянии программы, показывая доступные горячие клавиши или подсказки для команд, которые доступны пользователю в данный момент.

Когда «выпадает» меню. полоса подсветки пробегает по списку элементов меню при движении мыши или нажатии на клавиши курсора. Нажатием клавиши <Enter> или левой кнопки мыши выбирается подсвеченный элемент. Выбранный элемент меню посылает команду в определенную часть программы.

Программа обычно взаимодействует с пользователем через одно или более окон или диалоговых окон, которые появляются и исчезают на панели экрана в соответствии с командами от мышки или клавиатуры. Turbo-Vision предоставляет большой набор окон для ввода и отображения информации. Окна можно сделать со скроллингом, что позволяет выводить в окнах большие объемы данных. Скроллинг окна по информации выполняется передвижением по полосе скроллинга внизу окна, с правой стороны окна или обеим сторонам. Полоса скроллинга указывает относительную позицию окна в отображаемых данных.

Диалоговые окна часто содержат кнопки - подсвеченные слова - которые могут активизироваться с помощью мыши (или переходом через клавишу Tab и нажатием клавиши <Пробел>).
Отображаемые слова, выбранные мышью, могут быть установлены для передачи команд в программу.

Простейшая программа на Turbo-Vision выполняет следующие действия:

• заполняет панель экрана полутеневым шаблоном;

• выводит на экран полосу меню (наверху) и строку статуса (внизу);

• устанавливает обработчик для событий, инициированных от клавиш и мыши;

• строит объект меню и соединяет его с полосой меню;

• строит диалоговое окно;

• связывает диалоговое окно с меню;

• ожидает действий пользователя через мышь или клавиатуру. Краеугольным объектом любой программы является объект TApplication. TApplication - это абстрактный тип объекта. Он ничего не делает. TApplication используется для создания порожденных типов от TApplication. которые содержат программный код. Например, в простейшей демонстрационной программе HELLO.PAS, выводящей в стандартном для Turbo-Vision виде надпись HELLO, WORLD! определяется порожденный тип объекта THelloApp:

PHelloApp = ^HelloApp;

THelloApp = object(TApplication)

procedure GreetingBox;

procedure HadleEvent(var Event: TEvent); virtual;

procedure InitMenuBar; virtual;

procedure InitStatusLine; virtual;

end;

Как показано здесь, полезно определить тип указателя на каждый тип определяемого объекта, поскольку большая часть работы над объектами производится через указатели. Полиморфизм, главным образом, работает через указатели.

THelloApp содержит гораздо больше, чем четыре содержащихся в нем метода; порожденный объект наследует все от его предка. В определении THelloApp определяется, чем новый объект отличается от его предка TApplication. Все, что не переопределяется, наследуется в неизменном виде от TApplication.

Четыре метода, определенные в THelloApp, завершают приложения:

1) метод HadleEvent определяет, что некоторые события произошли (и указывает это) и как на эти события отвечать другим прикладным функциям; метод HadleEvent, определенный в TApplication, работает с общими событиями, которые возникают внутри любой программы, но необходимо обеспечить обработку событий, специфичных для программы;



2) метод InitMenuBar устанавливает меню для полосы Меню программы ( TApplication содержит полосу меню, но не сами меню);

3) метод InitStatusLine устанавливает текст строки статуса внизу экрана; этот текст обычно отображает сообщение о текущем состоянии программы, показывая доступные горячие клавиши или напоминая пользователю о некоторых действиях;

4) метод GreetingBox вызывает диалоговое окно в ответ на элемент меню Greeting; GreetingBox вызывается из метода HadleEvent в ответ на событие, переключаемое выбором элемента меню Greeting; в более сложных программах можно использовать различные методы в ответ на каждый элемент меню, определяемый в начальном меню.

На верхнем уровне абстракции главная программа на Turbo-Vision выглядит аналогично Hello и содержит три метода:

var

HelloWorld: THelloApp;

begin

HelloWorld.Init;

HelloWorld Run;

HelloWorld.Done;

end;

Каждый из этих трех методов требует небольшого пояснения.

Init - это необходимый вызов конструктора. Все объекты, содержащие виртуальные методы, должны быть созданы (через вызов их конструктора) до вызова любых других методов этого объекта. Все конструкторы Turbo-Vision имеют имя Init. Это удобное соглашение, которым мы рекомендуем пользоваться.

HelloWorld.Init устанавливает объекты главной программы для использования. Он очищает экран, устанавливает некоторые значения для важных переменных, заполняет панель экрана и выводит строку статуса и полосу меню. Он вызывает конструкторы многих других объектов, некоторые из которых никогда не видны, поскольку они вызываются внутри.

Почти вся работа программы в Turbo-Vision выполняется внутри метода главной программы Run. Определения метода Run здесь нет, поскольку Run наследуется от родительского объекта TApplication.

Этот метод состоит, главным образом, из цикла repeat...until, показанном здесь в псевдокоде;

repeat

<получить событие>;

<обработать событие>;

until Quit;

Это не точный код, а общая схема реализации Run.


В сущности программа Turbo- Vision циклически выполняет две задачи: получение события (где событие - это, в сущности, «сделать что-нибудь») и обработку этого события. Одно из событий вычисляется в некоторый вид команды выхода и цикл завершается.

Дестрактор Done в действительности очень прост: он уничтожает все объекты программы - полосу меню, строку статуса и панель экрана - и удаляет обработчик ошибок и драйверы Turbo-Vision. Метод Done должен отменять все действия, выполненные конструктором Init, а затем вызывать TApplication.Done, который обрабатывает все стандартные элементы.

Объектно-ориентированное программирование с использованием Turbo-Vision требует хорошего знания иерархии объектов и спецификаций их методов.

Помимо объектно-ориентированной оболочки Turbo-Vision для Турбо-Паскаля, существует аналогичная более развитая система для языка C++. Объектно-ориентированное программирование стало основой интерфейса системы Windows. Современные объектно-ориентированные системы типа Visual Basic, Delphi совершенно скрывают механизмы программирования и позволяют разрабатывать интерфейсы программ-приложений вообще без кодирования команд, пользуясь лишь средствами наглядного проектирования на экране дисплея.


ОБОЛОЧКИ ОПЕРАЦИОННЫХ СИСТЕМ


Интерфейс операционной системы DOS не обладает необходимой дружественностью. Команды нужно знать наизусть, посимвольно набирать на клавиатуре и при этом не допускать ошибок. Все это предъявляет высокие требования к квалификации пользователя.

Для облегчения взаимодействия пользователя с компьютером .существуют, так называемые, оболочки операционных систем - программы, делающие наглядным и простым выполнение базовых операций над файлами, каталогами и др. с использованием меню, защитой от необдуманных и ошибочных действий и разветвленной контекстной помощью. .

Простая оболочка обычно входит в комплект утилит операционной системы MS DOS. Однако, значительно большее распространение получила оболочка под названием «нортон командер» (Norton Commander). Остановимся на ее интерфейсе подробнее, рис. 2.3.

При работе Norton Commander в стандартной настройке (конфигурации) на экране дисплея имеются следующие области:

• правая и левая панель - большие синие прямоугольники, на которых отображаются каталоги (директории) дисков; одна из панелей является активной; обозначение текущего диска и директория вверху активной панели выделены цветом; внутри панели находится указатель;

• командная строка с приглашением, в которой можно непосредственно набирать команды DOS или формировать их с помощью имен файлов на панелях;

• строка подсказки с обозначением команд, закрепленных за функциональными клавишами F1... F10.

Указатель перемещается внутри панели при нажатии клавиш управления курсором; переключить активную панель можно с помощью клавиши <Таb>. Чтобы войти в директорий, нужно указать его имя указателем и нажать клавишу <Ввод> (<Еntег>), чтобы выйти из текущего директория - установить указатель на две точки вверху панели выше имен файлов и директориев и нажать клавишу <Ввод> (<Enter>). При нажатии клавиши <Ввод>, когда указатель установлен на имени исполняемого файла (с расширением .bat или .ехе или .com), происходит запуск этого файла на исполнение.
Если необходимо вызвать имя файла в командную строку для формирования параметров команды, нужно, выделив имя файла указателем, нажать одновременно <Ctrl> и <Enter>. Можно по желанию определить действия Norton Commander над файлами с произвольными расширениями при нажатии клавиши <Ввод>. Так, можно задать, что при указании файла с расширением .txt запускается текстовый редактор и в него загружается указанный файл.



Рис. 2.3. Типичный вид панелей Norton Commander

Основные операции выполняются при нажатии функциональных клавиш. Так, при нажатии клавиши

F1 происходит вызов контекстной подсказки (гипертекста с развитой системой ссылок);

F2 вызывается пользовательское меню, в котором по желанию собраны часто выполняемые команды;

F3 вызывается для просмотра (View) в режиме текста или кодов файл, указанный на активной панели;

F4 вызывается простейший редактор для редактирования указанного на активной панели текстового файла;

F5 копируется указанный файл или директорий (или группа отмеченных файлов и директорией) с активной панели на диск, отражаемый пассивной панелью;

F6 происходит переименование (если вводится новое имя) или перемещение файлов или директорий с активной панели на пассивную;

F7 создается директорий на активной панели;

F8 удаляются указанные или отмеченные файлы и директории;

F9 вызывается горизонтальное меню в верхней строке экрана;

F10 происходит выход из Norton Commander.

Выделение файлов происходит при нажатии клавиши <Ins> или при задании фильтра с помощью серой клавиши «+».

Горизонтальное меню, вызываемое клавишей F9, позволяет изменить настройки Norton Commander (например, режим отображения информации на панелях), выполнить перечисленные и некоторые дополнительные, важные для пользователя, команды и действия.

Примечательно, что большинство операций можно выполнить с помощью Norton Commander несколькими способами:

• с помощью меню, выбирая команду с помощью клавиш управления курсором;

• с помощью меню, выбирая команду с помощью манипулятора «мышь»;



• с помощью меню, выбирая команду с помощью выделенной в команде буквы;

• с помощью «(горячих клавиш» - сочетания клавиш при их одновременном нажатии.

По мере роста квалификации пользователи переходят к использованию именно «горячих клавиш». Например, чтобы перейти к другому дисководу на левой панели, нажимают комбинацию <Alt>+<Fl>, на. правой - <Alt>+<F2>; чтобы отключить панели - <Ctrl>+<0> и т.д.

Norton Commander имеет-резидентную часть, которая восстанавливает состояние Norton Commander после окончания работы прикладных программ.

Наряду с Norton Gommander;' нашли применение аналогичные программные средства типа Volkov Commander и dos Navigator. Имея много общего с Norton Commander, они оказываются более удобными в ряде специфических моментов (таких как работа с архивами, подключение внешних редакторов, соединение файлов и т.д.).

С переходом на персональные компьютеры с процессором 80386 и с увеличенной памятью (не менее 4 Мбайт), на смену Norton Commander и характерному для DOS стилю работы в текстовом режиме пришла оболочка Windows и новый стиль работы с графическим интерфейсом. Идея графического интерфейса Windows заимствована компанией «Microsoft», долгое время специализировавшейся на операционных системах для персональных компьютеров IBM, у операционной системы для компьютеров Apple. Иногда Windows определяют не как оболочку, а как нечто большее, используя термин типа «операционная среда». При этом исходят из того, что если классическая оболочка (такая как Norton Commander) видоизменяет лишь пользовательский интерфейс, то программа типа Windows дополнительно к этому берет на себя управление программами и заданиями, т.е. реализует основные функции операционной системы.

Принципиально важные особенности Windows по сравнению с MS DOS - это многозадачность (допускается одновременное выполнение нескольких процессов) и возможность обмена данными между работающими программами. Важно и то, что Windows использует расширенную оперативную память (много больше 640 кбайт) и подразумевает единый интерфейс всех прикладных программ.


Недаром утвердилось понятие «программировать под Windows», т.е. ориентироваться на стандартный графический интерфейс.

Название Windows - «окна» - говорит само за себя. Эта оболочка операционной системы построена на основе графических окон, соответствующих программным средствам и группам программных средств, которыми пользователь может управлять, изменять их размеры, перемещать по экрану, открывать и закрывать по своему желанию.

Оболочка Windows ориентирована на работу с помощью манипулятора «мышь». Все операции в этой среде в высокой степени унифицированы, все программные средства имеют очень схожие интерфейсы и принципы управления, что значительно ускоряет освоение новых программных средств,

Первой версией обсуждаемой операционной среды, получившей широкое распространение, стала Windows 3.1 (Windows for work groups 3.11), рис. 2.4.

При запуске Windows 3.1 пользователь видит на экране окно Program Manager -Диспетчера Программ, в котором имеются пиктограммы (условные схематические обозначения) программ; среди них всегда имеются группы аксессуаров (accessories) и приложений (main), а также другие группы, такие как Microsoft Office. Группу можно активизировать, указав ее пиктограмму курсором и дважды нажав левую кнопку мыши; при этом открывается окно, содержащее пиктограммы для каждого программного средства, относящегося к группе. Чтобы запустить программное средство, надо указать его курсором и дважды нажать левую клавишу мыши.



Рис.2.4. Типичный вид среды Windows 3.1

Работающую программу можно снять, указав знак «-» в левом верхнем углу окна и нажав левую кнопку мыши, или отложить (минимизировать), указав знак «-» в правом верхнем углу. Может быть минимизирована и группа, если нажать левую клавишу мыши, предварительно указав на «-» в правом верхнем углу окна группы.



Рис. 2.5. Пример группового окна

Существует группа программ, составляющих стандартные приложения Windows. Это относительно небольшие по возможностям (по сравнению со специализированными) прикладные программы: текстовый редактор Write, графический редактор PaintBrush, картотека, календарь, калькулятор, часы и т.д.


Конечно, возможности редактора Write при оформлении книги не идут в сравнение с текстовым процессором Word-7, но она существенно проще в освоении. В Картотеке можно хранить «карточки» с текстами и рисунками и вести поиск информации (например, по ключевым словам), т.е. организовать простую базу данных. Часы, Календарь и Калькулятор удобно всегда иметь под рукой.

Совместная работа нескольких программ требует возможности обмена данными между ними. При разработке программного обеспечения для MS DOS об этом особо не заботились: даже если разные программы могут обрабатывать один и тот же файл (например, редакторы Лексикон и MultiEdit могут поочередно искать орфографические ошибки в смешанном русско-английском тексте), то надо вначале выйти из одной программы и затем войти в другую, имеющую, как правило, иначе организованный интерфейс, и т.д. В Windows такой проблемы нет: можно, например, ввести в текст, создаваемый с помощью Write или Word, рисунок, созданный с помощью PaintBrush, не выходя ни из одной из этих программ в едином интерфейсе Windows.



Рис. 2.6. Пример окна диспетчера файлов

Для работы с файлами в Windows существует специальная программа - File Manager (Диспетчер Файлов - Менеджер Файлов), рис. 2.6. Она позволяет выполнять все виды работ с файлами: просмотр файловой структуры, копирование, удаление, переименование, пересылку между каталогами и т.д. Пиктограмма Диспетчера Файлов имеет вид шкафа с ящиками, каталога - папки, текущего каталога - раскрытой папки. Благодаря наглядности и простоте использования оболочка Windows получила огромное распространение и стала стандартом для IBM совместимых персональных компьютеров с процессорами 386 и более мощных.

Важно понимать, однако, что многозадачность Windows не есть реальная параллельность в выполнении программ. На машине с одним процессором, которой является IBM PC, истинная параллельность невозможна. Среда Windows создает видимую параллельность, разделяя время между приложениями малыми порциями и постоянно переходя от одного к другому.



С 1995 года на смену операционной оболочке Windows 3.1 для IBM-совместимых персональных компьютеров пришла операционная система Windows'95. В настоящее время эта операционная система бьет все рекорды популярности. По прогнозам ожидается около 100 млн. продаж этой системы к 2000 году. Трудно оценить количество несанкционированных копий этой системы, широко используемой как в России, так и во всем мире. Windows'95 предназначена для установки на персональных компьютерах desktop и компьютерах типа notebook, имеющих процессор типа

Intel 80386DX, 80486, Pentium. Объем оперативной памяти должен быть не менее 4 Мбайт. Новая версия операционной системы лучше использует дополнительную оперативную память, чем предыдущая. Однако многие приложения для нормальной работы требуют от 8 до 16 Мбайт.

Новая версия обеспечивает более высокую производительность и большие возможности за счет применения 32-, а не 16-разрядной передачи данных. Windows'95 является высокопроизводительной, универсальной, надежной, многозадачной и многопотоковой интегрированной 32-разрядной операционной системой нового поколения с расширенными сетевыми возможностями, работающей в защищенном режиме и обеспечивающей графический интерфейс с пользователем. Windows'95 представляет собой интегрированную среду, обеспечивающую эффективный обмен информацией между отдельными программами и предоставляющую пользователю широкие возможности по обработке текстовой, графической, звуковой и видеоинформации. Понятие интегрированности подразумевает также совместное использование ресурсов компьютера всеми программами.

Операционная система позволяет прослушивать компакт-диски, редактировать музыкальные произведения, работать с видеофрагментами. Новая операционная система обладает также улучшенными телекоммуникационными возможностями, которые позволяют использовать ее в локальных и глобальных сетях, работать с электронной почтой. Windows'95 обеспечивает работу пользователя в сети, с электронной почтой, факсом и со средствами мультимедиа, поддерживает большинство приложений DOS и предыдущих версий Windows.


Если в предыдущих версиях активное приложение периодически передавало системные ресурсы другим приложениям, работающим в фоновом режиме, то новая операционная система сама управляет ресурсами, используя принцип вытесняющей многозадачности. Приложение, нуждающееся в ресурсах, может приостановить работу до получения ресурса или перейти к другим операциям. Многопоточное выполнение одной задачи позволяет при задержке в выполнении одного потока работать со следующим. Распределение времени между потоками производится с учетом их приоритетов. Приложения работают в защищенном адресном пространстве. После завершения работы приложения память автоматически очищается.

Применение 32-разрядного фонового спулинга печати ускоряет печать больших документов, позволяет минимизировать перерывы в работе. Сопоставление возможностей Windows'95 и Windows for Workgroups 3.11 показало, что при использовании новой операционной системы скорость загрузки и печати 100-страничного WinWord-документа возросла примерно на 30%.

После загрузки Windows'95 на экране появляется изображение, напоминающее рабочий стол. Так же, как на рабочем столе, на его модели (на экране) размещены значки папок с документами и значки быстрого доступа. Одна из основных задач, поставленная разработчиками новой операционной системы, заключалась в обеспечении простоты, удобства, интуитивной очевидности пользовательского интерфейса. Интерфейс Windows'95 спроектирован так, чтобы создать комфортные условия для пользователя и обеспечить объектно-ориентированную и документированную работу. По сравнению с предыдущими версиями улучшилось оформление экрана: появились эффектные трехмерные интерфейсные элементы, изменилось оформление диалогового окна, окон приложений и документов. Улучшенный пользовательский интерфейс, однотипность выполнения всех базовых операций призваны ускорить процесс освоения операционной системы.

Для обозначения различных объектов, с которыми имеет дело пользователь, в Windows используются графические символы.


В Windows'95 отдельные файлы объединяют в папки, которые являются аналогом каталогов, использовавшихся в предыдущих версиях. Так же, как в каталоге может находиться несколько каталогов более низкого уровня, папка может состоять из нескольких папок более низкого уровня.

Значительное внимание уделено документо-ориентированной работе с тем, чтобы пользователь в первую очередь уделял внимание документам, а не прикладным программам (документом называется любой файл, обрабатываемый с помощью прикладной программы). Windows'95 позволяет открыть любой документ, не запуская предварительно приложение, в котором оно создано. Объекты (предметы), с которыми мы контактируем в реальной жизни, обладают определенными свойствами. У каждого предмета свой внешний вид, вес, габариты и т.п. Аналогично, объекты Windows имеют свои характеристики. Можно подобрать внешний вид значка, отображающего файл. Файлы имеют размеры, для них задаются атрибуты и т. п.

Windows'95 предоставляет удобные средства быстрого вызова программ, документов и папок с помощью значков быстрого вызова, позволяющих двойным щелчком открыть папку или документ, не запуская предварительно приложение, в котором создавался объект. Чтобы ускорить открытие часто используемых документов и запуск приложений, можно создать к ним сколько угодно значков быстрого вызова и разместить их на рабочем столе в одной или нескольких папках. Например, можно обеспечить быстрый вызов принтера, установив его значок на рабочей поверхности стола. В этом случае, чтобы распечатать файл будет достаточно перетащить мышью его значок на значок принтера. Двойной щелчок значка быстрого вызова Блокнот на экране дисплея запустит текстовый процессор.

Чтобы установить значок быстрого вызова к папке (файлу), ее необходимо выделить в окне Мой компьютер и выбрать команду Создание ярлыка из меню Файл. Первоначально значок располагается в конце списка окна. Значок можно переместить или скопировать на рабочий стол или в часто используемую папку с помощью мыши методом Drag and Drop (Перетащить и Отпустить).


Другой вариант установки значка быстрого вызова в нужной папке или на рабочем столе - перетащить значок программы или документа в нужную папку, нажав правую кнопку мыши, и воспользоваться командой Создать ярлык из динамического меню, которое появится, когда отпустят правую кнопку. Можно не копировать файл (папку) в другую папку, а вставить в нее значок быстрого вызова к этому файлу. Сначала следует выделить файл, затем активизировать команду Копировать из меню Правка. После перехода в окно, где предполагается разместить значок быстрого вызова, активизируют команду Вставить ярлык из меню Правка. Изображение значка быстрого .вызова можно изменить с помощью диалогового окна, появляющегося после выделения значка и активизации команды Свойства

из меню Файл. Все значки быстрого вызова связаны с файлами и папками, которые они представляют. При удалении файлов и папок автоматически удаляются и значки. При удалении значка быстрого вызова файл, с которым он связан, не удаляется. Если переименовать папку или файл, надпись к значку не меняется, однако, связь между ними сохраняется.

Длина имени файла в предыдущих версиях Windows, как и в DOS, была ограничена восемью символами, а расширение - тремя символами после точки. Это вызывало неудобства при вспоминании содержания файла. В Windows'95 эти ограничения сняты. Windows'95 позволяет давать файлам имена, содержащие до 255 символов и включать пробелы, знак плюс, знак равенства, квадратные скобки, точку с запятой и другие знаки препинания. Пробелы, находящиеся в начале и в конце имени, не учитываются. Имя файла можно писать на русском языке. Любые символы, стоящие после последней точки, рассматриваются как расширение, расширение имени зависит от приложения, в котором создавался файл. Имя для папки задается так же, как для файла. Однако для папки не задается расширение.

Чтобы установить атрибуты файла и определить его принадлежность к приложению или документу, используются первые три символа после последней точки в имени файла.


Так, для файла CONFIG. SYSTEM устанавливается расширение SYS. Совместимость имен файлов новой операционной системы с предыдущими версиями и DOS обеспечивается поддержкой ранее используемой таблицы размещения файлов (FAT), в которой хранится информация о свободных секторах и о дисковом пространстве, отведенном для файлов. Существенные ограничения таблицы FAT связаны с тем, что она не предназначена для работы с большими дисками объемом ³

100 Мбайт. При работе с такими дисками FAT не помещается целиком в памяти и загружается частями, что увеличивает количество перемещений головок при считывании файла. Кроме того, использование FAT приводит к сильной фрагментации больших дисков, что увеличивает потери времени, связанные с их обработкой. Аналогичная таблица для Windows'95 совместима с FAT и поэтому при установке Windows'95 не требуется переформатирование жесткого диска. При использовании длинного имени, созданного Windows'95, в DOS FAT создаются «псевдонимы», которые обеспечивают ввод первых восьми букв из нового имени и добавляют порядковый номер после знака тильда "~". Например, при использовании слова literature (литература) в именах двух файлов в DOS они запишутся как litera~l для первого документа и litera~2 для второго документа. Инсталлируемая файловая система Windows'95 поддерживает также сетевые файловые системы.

Существенно усовершенствованы в Windows'95 окна. Групповые окна заменены на окна папок, в которых появились очень полезные для работы панели инструментов. Их можно отобразить в окне папки или удалить командой Панель инструментов (рис. 2.7.) из меню Вид.

Панель содержит раскрывающееся окно списка, в котором представлено имя текущей папки, и кнопки, дублирующие часто используемые команды. После раскрытия окна списка в нем видна древовидная диаграмма папок, имеющихся на компьютере. Команду можно быстро активизировать, щелкнув кнопку на панели инструментов. При этом нет необходимости сначала выбирать меню. При подводе указателя мыши к кнопке рядом с ним появляется флажок-подсказка с названием выполняемой команды.





Рис. 2.7. Панель инструментов окна папки

Ниже кратко описывается назначение кнопок:

1 - вверх на один уровень (Up one level) - переход в родительскую папку;

2- подключить сетевой диск (доступно при работе в сети);

3 - отключить сетевой диск (доступно при работе в сети);

4 - вырезать (Cut) - перемещение выделенного объекта в Буфер Обмена;

5 - копировать (Copy) - копирование выделенного объекта в Буфер Обмена;

6 - вставить (Paste) - вставка выделенного объекта из Буфера Обмена;

7 - отменить (Undo) - отмена последней команды, восстанавливает вид окна до выполнения предыдущей команды;

8 - удалить (Delete) - уничтожение выделенного файла или папки;

9 - свойства (Properties) - вызов одноименного диалогового окна;

10 - большие значки (Large Icons) - отображение рядом с именами папок и файлов больших значков;

11 - маленькие значки (Small Icons) - отображение рядом малых значков;

12 - список (List) - отображение сначала папок, затем файлов столбцами так, чтобы надписи к ним следовали в алфавитном порядке;

13 - таблица (Details) - отображение рядом с именами папок и/или файлов их кратких характеристик.

В зависимости от указанного типа файла, Windows'95 позволяет открыть то или иное приложение, использовать определенный набор команд. Для изменения типа файла или значка к нему используют кнопку Правка.

При работе с документом следует максимально увеличить область экрана, где может располагаться интересующая нас информация. Однако большую часть экрана часто занимают различные панели. Отображение на экране панели задач регулируется с помощью флажков вкладки Параметры панели задач команды Панель задач меню Настройки.

Установка флажка Автоматически убирать с экрана позволяет не показывать панель задач и освободить максимум рабочего пространства для работающего приложения.

Windows^95 дает возможность печатать документы на нескольких десятках языков. При начальной установке системы необходимо записать утилиты, позволяющие работать на нужном вам языке.


Русифицированная версия содержит кодовую страницу, поддерживающую знакогенератор и раскладку клавиатуры на русском языке. Эта страница обеспечивает корректную работу с именами файлов, содержащими русские буквы не только в Windows, но и в DOS. Язык, на котором будут печататься символы, переключатели, используемые для перехода с одного языка на другой, выбираются в диалоговом окне программы Клавиатура с

вкладкой Язык приложения Панель управления. Приложение можно вызвать, щелкнув кнопку Пуск. Затем в меню Настройки выбирают команду Панель управления. Чтобы добавить другой язык для ввода символов, нажимают кнопку Добавить, в раскрывающемся окне списка Язык выбирают требуемый и щелкают кнопку ОК.

Для выделения заголовков, смыслового разграничения отдельных фрагментов, при написании формул, индексов используются различные стили и размеры шрифта. Получить справочные данные о шрифте и увидеть его гарнитуру (стиль) позволяет окно, появляющееся после выбора команды Открыть из меню Файл папки Шрифты

программы Мой компьютер. В окне отражаются название, размер файла, версия, фирма-разработчик, демонстрируются образцы нескольких размеров шрифта. Чтобы удалить используемый шрифт, его надо выделить в окне папки Шрифты и выбрать команду Удалить из меню Файл.

Во многих приложениях гарнитура и размер шрифта задаются в диалоговом окне команды Шрифт.

Перечень всех установленных шрифтов приводится в окне списка Шрифт. Размер в пунктах выбирается в окне Размер. Образец написания выбранного шрифта представляется в демонстрационном поле Образец

в правой части окна. В поле Цвет

задается цвет символов. Начертание (стиль) шрифта задается в окне Начертание: обычный, полужирный, курсив, подчеркнутый.

Меню Пуск

позволяет выполнить большой набор работ, связанных с запуском приложений, получением справок, поиском и открытием документов, настройкой системы. Видимо поэтому разработчики операционной системы рядом с кнопкой Пуск поместили подсказку: «Начните работу с нажатия этой кнопки». Для активизации меню Пуск



следует щелкнуть кнопку Пуск или нажать на клавиши Ctrl+Esc. При остановке указателя мыши на пункте меню со значком треугольника с правой стороны раскрываются окна, содержащие подменю и команды. В свою очередь отдельные пункты появившегося подменю также могут быть отмечены значком треугольника и иметь свои подменю. Каждое подменю содержит группу программ. Для выбора программы необходимо остановить на ней указатель и щелкнуть мышью.

Пункт Документы

открывает список с названиями последних документов, с которыми работал пользователь. Список может содержать до 15 наименований документов, независимо от приложения, в котором они создавались. Для открытия документа следует щелкнуть на его названии. Следует отметить, что некоторые приложения не добавляют имена файлов в список меню Документы. Тогда документ можно открыть, запустив то приложение, в котором он создавался. Как правило, открыть документ позволяет команда Открыть

из меню Файл соответствующего приложения Windows. Кроме того, документ можно открыть двойным щелчком его значка в окне Мой Компьютер.

Ряд приложений Windows проверяет, имеются ли в памяти компьютера несохраненные данные. При выходе из приложения без команды Сохранить

появится предупреждающее сообщение с вопросом о необходимости сохранения последних изменений. При попытке закрыть приложение без указаний как поступить с открытым документом появится запрос: «Сохранить изменения, внесенные в документ?». Три кнопки -Да, Нет, Отменить -

позволяют сохранить внесенные во время текущего сеанса работы изменения, не вносить изменений или отменить выход из системы.

Наиболее быстрый способ добавить команду/пункт в меню Пуск - перетащить мышью значок программы на кнопку этого меню. Новый пункт меню расположится в верхней строке меню. Например, можно создать значок быстрого вызова для программы Norton Commander, разместив сначала на рабочем столе значок программы Norton Commander, а затем перетащив его мышью на кнопку Пуск.

Нередко приходится искать нужный файл/папку, так как забыто его имя или место расположения.


Если известна папка, где расположен файл, то можно легко найти его по расширению. Сложнее, если не известно название и расширение. Чтобы быстро найти файл или папку на компьютере пользователя или на других компьютерах сети можно использовать команду Файлы или Папки из меню Поиск. Поиск можно выполнять по следующим критериям:

• по имени файла или папки и по цепочке символов, входящих в имя файла или папки;

• по расширению имени файла;

• по дате последней модификации;

• по размеру;

• по отрывку текста из документа или по заголовку какого-либо раздела.

Использование различных вкладок облегчает поиск файлов по определенным критериям.

Для быстрого вызова часто повторяемых команд можно воспользоваться динамическим меню, которое вызывается правой кнопкой мыши. Динамическое меню (рис. 2.8) содержит часто употребляемые команды. Набор команд зависит от выбранного объекта: значка диска, папки или файла, выделенного текста, панели задач или свободного места экрана.

Если щелкнуть правой кнопкой значок диска в окне программы Мой компьютер, то появятся команды: Открыть, Проводник, Найти, Разделение, Форматировать, Вставить, Создать ярлык. Свойства. Так же как и для диска, команды динамического меню для файла зависят от типа файла и дублируют меню Файл. Правую кнопку мыши удобно использовать для перемещения или копирования файла из одного окна в другое папки Мой компьютер

или Проводник. После транспонирования значка папки/файла с нажатой правой кнопкой мыши появляется динамическое меню, позволяющее указать цель транспортировки: переместить или скопировать объект, создать значок быстрого вызова.

Папка Мусорная корзина предназначена для удаления ненужных файлов. Основное различие между выполнением команды Удалить

в Windows'95 и в других программах состоит в том, что в новой версии операционной системы выбор команды приводит не к удалению файла, а к его перемещению в папку Мусорная корзина. Попавший в нее файл сохраняется до тех пор пока Корзина не будет «очищена». Чтобы удалить любой файл, папку или значок быстрого вызова, можно использовать команду Удалить



или переместить значок удаляемого объекта мышью на значок Мусорная корзина. Значок перетаскиваемого объекта исчезнет. Чтобы просмотреть все файлы, находящиеся в Мусорной корзине, необходимо дважды щелкнуть ее значок. Появится окно папки со строкой меню, имеющим стандартный набор команд. Для восстановления файла, папки или значка быстрого вызова необходимо щелкнуть имя восстанавливаемого файла. Если надо восстановить несколько файлов, то имена файлов выделяют при нажатой клавише Ctrl. Затем используют команду Восстановить из меню Файл.



Рис. 2.8. Динамическое меню

В настоящее время для IBM PC-совместимых компьютеров выпускаются тысячи наименований винчестеров, адаптеров, контроллеров и других изделий. В ряде случаев их установка на компьютере вызывает значительные трудности с точки зрения совместимости, требует больших затрат времени пользователя для выбора положения перемычек. Компьютеры с Plug and Play -адаптерами не нуждаются в ручной установке DIP-переключателей. В соответствии с технологией Plug and Play после включения компьютера автоматически определяются названия вновь подключенных устройств или плат и их характеристики, выполняется их конфигурирование и автоматически загружаются соответствующие драйверы. Это может происходить и во время сеанса работы в случае изменения аппаратных средств компьютера. Аналогично фиксируется удаление какого-либо устройства или платы, выгружаются драйверы этого устройства с тем, чтобы они не занимали оперативную память и освободили системные ресурсы.

При инсталляции Windows'95 приложение Setup (Установка) определяет адаптеры и драйверы, которые не поддерживают новую технологию, и автоматически делает соответствующие записи в системных файлах. Даже если ваш компьютер не полностью поддерживает стандарт Plug and Play, Windows'95 поможет настроить аппаратное обеспечение с помощью диалогового окна Свойства с вкладкой Ресурсы рассматриваемого устройства. Для вызова окна Устройства

сначала следует активизировать значок Система



Панели Управления и двойным щелчком мыши выбрать устройство. В нижнем поле Список конфликтующих устройств указываются устройства, с которыми может конфликтовать рассматриваемое устройство. Рекомендуется установить флажок Использовать автоматическую настройку, чтобы операционная система сама производила настройку системных ресурсов.

Технология Plug and Play содержит три основных компонента: операционную систему, поддерживающую Plug and Play, Plug and Play BIOS и Plug and Play - устройства с соответствующими драйверами. Поэтому полное решение проблемы Plug and Play требует поддержки как на программном, так и на аппаратном уровнях.

В ходе работы с Windows'95 иногда приходится производить перезагрузку системы. Различают «холодную» и «горячую» перезагрузку компьютера. «Холодная» перезагрузка выполняется после выключения питания и его повторного включения. Необходимые для работы программы и параметры считываются в оперативную память заново. «Горячая» перезагрузка производится без выключения питания, одновременным нажатием клавиш Alt+Ctri+Del. В этом случае вся информация, хранящаяся в оперативной памяти и не записанная на жесткий диск, стирается. «Горячую» перезагрузку, как правило, используют в том случае, когда программа «зависла» и не реагирует на нажатие на клавиши и на кнопки мыши. В ряде случаев при нажатии на клавиши Alt+Ctri+Del появляется диалоговое окно Снять Задачу. Если окно позволит закрыть «зависшую» программу, то необходимость в перезагрузке компьютера отпадет.

Перед тем как выключать питание компьютера, необходимо закрыть все открытые документы и приложения. Выключение питания без закрытия документа может привести к потере данных, повреждению открытых файлов и трудностям с их открытием при последующих сеансах работы. После выключения компьютера без правильного выхода из системы возможны нарушения в логической структуре диска. Их исправить можно с помощью программы ScanDisk, расположенной в группе Служебные программы.

Для корректного выхода из Windows надо щелкнуть кнопку Пуск



и команду Завершить работу в появившемся меню. Появится диалоговое окно Завершение Работы. Окно содержит кнопки-переключатели: Выключить компьютер. Перезагрузить компьютер. Перезагрузить компьютер в режиме эмуляции MS DOS, Войти в систему под другим именем. Все кнопки закрывают все программы. В нижней части окна Shut Down Windows расположены три кнопки - Да, Нет, Справка. Через небольшой промежуток времени после щелчка мышью кнопки Да

компьютер будет подготовлен к выключению: будут очищены внутренние буферы и кэши дисков, обеспечено сохранение данных. Не следует выключать электропитание до тех пор, пока не появится сообщение: «Теперь питание компьютера можно выключить».

Мы ограничимся лишь приведенным выше кратким описанием принципов работы Windows. Реальное ее освоение (еще в большей мере, чем DOS и Norton Commander) - дело практических занятий за компьютером с помощью как многочисленных специальных руководств, так и встроенного справочника.


ОБРАБОТКА ПРЕРЫВАНИЙ


Важную роль в работе современного МП играют прерывания. Они всегда нарушают естественный ход выполнения программы для осуществления неотложных действий, связанных, например, с реакцией на щелчок мыши или сбой в цепи электропитания.

События, вызывающие прерывания, можно разделить на две группы: фатальные и нефатальные. На фатальные (неотвратимо наступающие) процессор может реагировать единственным способом: прекратить исполнение программы, проанализировать событие и принять соответствующие меры (чаще всего - сообщить причину прерывания пользователю и ждать его реакции). Однако часто можно с остановкой программы повременить: запомнить, что прерывание было, и продолжать исполнять программу. Например, сложение с переполнением разрядной сетки -фатальное событие, после которого остановка неизбежна; попытка вывода на принтер, не готовый к приему информации, может быть отложена (с сохранением этой информации).

Основные виды прерываний - внутрипроцессорные прерывания и прерывания от внешних устройств. Первые связаны с возникновением непреодолимого препятствия при выполнении программы. Причин может быть много: из памяти выбрана команда с несуществующим кодом или адресом, в ходе исполнения команды возникло переполнение разрядной сетки ЭВМ или произошла попытка записи в оперативную память, отведенную другой задаче. В большинстве подобных случаев дальнейшее выполнение программы становится невозможным и управление передается системе, обеспечивающей прохождение задач (чаще всего это - операционная система), которая и принимает меры по обработке внешней нештатной ситуации.

Гораздо реже, но возможны, нефатальные внутрипроцессорные прерывания, например, специальные отладочные прерывания. Такие прерывания обеспечивают возможность пошагового исполнения тестируемой программы под контролем специальных программных средств.

Прерывания второй группы возникают по требованиям какого-либо из многочисленных внешних устройств. Такое событие обычно не приводит к фатальному завершению задачи,напротив, это вполне нормальная ситуация.
Поэтому при таком прерывании МП принимает меры для того, чтобы обеспечить дальнейшее выполнение программы: запоминает в стеке текущее значение счетчика команд и содержимое регистра состояния. Затем происходит переход на подпрограмму обработки данного прерывания. После ее выполнения процессор восстанавливает из стека значения своих регистров и продолжает выполнение прерванной программы.

Прерывания от внешних устройств подробно рассматриваются в следующем пункте.

Отметим, что термин «прерывание» часто используется еще в одном значении. Речь идет о, так называемых, программных прерываниях. Например, для IBM-совместимых компьютеров существуют многочисленные команды прерывания 1NT с самыми разнообразными номерами. Следует понимать, что 1NT - это одна из инструкций процессора; чтобы она заработала, ее код должен содержаться в программе. В противоположность этому, «настоящие» прерывания возникают аппаратно и не требуют наличия каких-то специальных команд в тексте прерываемой программы. Более того, аппаратное прерывание может произойти между двумя любыми командами программы.

К программным относятся и межмашинные прерывания, возникающие в локальной сети при обмене информацией между компьютерами.

Запрет нефатального прерывания называется маскировкой; маскировка задается программистом или системной программой. Делается это либо с помощью установления вида битового поля в специальном регистре маски прерываний, в котором значения разрядов (0 или 1) связаны соответственно с отсутствием или наличием маскировки закрепленного за этим разрядом прерывания, либо с аналогичным использованием разрядов регистра состояния процессора.

После получения сигнала о незамаскированном прерывании процессор делает следующее:

• запоминает состояние прерванной программы;

• распознает источник прерывания;

• вызывает и выполняет специальную системную программу обработки прерываний;

• восстанавливает состояние прерванной программы и, при возможности, продолжает ее исполнение.

Для распознавания источника прерывания анализируются некоторые биты регистра состояния процессора, состояние внешних устройств и т.д.


Для запоминания состояния прерванной программы чаще всего используется стек. Выше мы уже говорили о стеке в ракурсе организации особого способа адресации. Кроме того, стек используется процессором как для организации механизма прерываний, так и для обработки обращения к подпрограммам, передачи параметров и временного хранения данных.

Назначение программы обработки - понять и в удобной для пользователя форме вывести (обычно на экран) сообщение о причине прерывания и (иногда) дать рекомендации по возможной реакции на эту причину.

Все это разительно отличается от ситуации с машинами 1-го и 2-го (а отчасти и 3-го) поколений, когда пользователь без помощи системного программиста в большинстве случаев не мог разобраться в причине события, вызвавшего прерывание его программы на этапе исполнения. Такая ситуация стала нетерпимой для пользователей персональных компьютеров, и чем совершеннее анализатор программы обработки прерываний, тем выше уровень «дружелюбности» пользовательского интерфейса.


ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ


Кроме числовых значений переменные в Бейсике могут принимать значения в виде строки символов. Символьные значения (константы) заключаются в кавычки " ".

Имя символьной (строковой) переменной отличается от обычной числовой переменной добавлением справа специального символа, чаще знака доллара $, например, AS, Fl$, MaxS. Над символьными переменными допустима операция сложения (склейка строк символов); могут быть использованы функции и процедуры обработки символьных величин.

Начнем с примеров программ, аналогичных приведенным ранее на языке Паскаль.

Программа 68 (см. программу 11)

10 ' ******* Количество гласных в тексте ************

20 с$ =

"аеиоуыэюяАЕИОУЫЭЮЯ"

30 INPUT "Введите текст"; а$

40 n » О

50 FOR k = 1 ТО LEN(c$)

6t> b$ = MID$(c$, k, 1)

70 FOR i = 1 TO LEN(a$)

80 IF b$ = MID$(a$, i, 1) THEN n = n + 1

90 NEXT i

100 NEXT k

110 PRINT "Количество гласных равно", n

120 END

Здесь использована строковая функция MID(a$,ij) - вырезка подстроки из строки а$, где первый аргумент - исходная строка, второй - начальная позиция подстроки, третий - длина подстроки. Функция LEN(aS) - длина текста.

В следующей программе дополнительно использованы строковые функции LEFT$(a$,i) - выделение подстроки длиной i от левого края заданной строки и RIGHT$(a$,i) - то же, но с правого края.

Программа 69 (см. программу 12)

10 ' ******* Замена в тексте sqr на ехр ************

20 INPUT "Введите текст"; а$

30 FOR i = 1 ТО LEN(a$) - 2

40 IF MID$(a$, i, 3) О "THEN GOTO 60

50 a$ = LEFT$(a$, i -1) + "+ RIGHT$(a$, LEN(a$) - i - 2)

60 NEXT i

70 PRINT a$

80 END

Приведем еще несколько примеров.

Программа 70

10 ' ******* игра клавиатурный тренажер ************

12 DATA "азбука", "год"," .23*45/56", letter, pc-ibm

15 DATA

"дом-home", "Красноярск", "Омск", "Пермь", "Воронеж"

20 FOR i = 1 ТО 10

30 READ a$(i)

40 NEXT i


60 FOR i = 1 TO 10

70 CLS : PRINT : PRINT TAB(IO); a$(i);

100 PRINT : PRINT : PRINT

110 PRINT "введите слово и нажмите <ВК>";

120 LOCATE 8, 5 : х » TIMER : INPUT b$ : CLS

130 у = TIMER : PRINT : n =LEN(a$(i))

140 IF a$(i) <> b$ THEN 190

150 PRINT USING "###.#<"; (y - x) / П;

160 PRINT "сек. на один символ": GOTO 200

170 PRINT : PRINT "слово набрано неверно"

180 FOR m = 1 ТО 5000 : NEXT m

190 NEXT i

Функция TIMER возвращает текущее время системной среды в секундах. В строке 180 предусмотрен пустой цикл для осуществления временной задержки в исполнении программы.

Использование функций LEFTS(aS,n) и MID$(a$,n,k) еще раз продемонстрировано в следующем примере. Здесь же использованы математические функции INT(x) -целая часть числа х, RND(x) - случайное число в интервале от 0 до 1. В программе задается массив (оператор DIM aS(k)) из пяти слов, представленных в списке DATA (30 и 40 строки). Случайным образом выбирается одно из них и предлагается его угадать вводом подходящих символов.

Программа 71

5 ' *************** угадай слово *********************

10 k = 5

15 DIM a$(k)

30 DATA

"вечер","информатика","университет"

40 DATA

"эхо","тра-ля-ля"

50 FOR i = 1 ТО k

60 READ a$ (i)

70 NEXT i

80 CLS

90 r = INT(k * RND(-TIMER)) + 1

100 n = LEN(a$(r))

110 PRINT "Я задумал слово из "; n; "букв"

120 LOCATE 5, 20: PRINT LEFT$(s$, n) Ш

130 t = о

т

140 DO • 150 LOCATE 8, 12: PRINT "введи

букву" Щ

160 INPUT h$

170 у = О

180 FOR i = 1 ТО n ] 190 IF h$ = MID$(a$(r), i, 1) THEN | 200 LOCATE 5, 19 + i: PRINT h$: | 210 t=t+l:y=l | 220 END IF |

230 NEXT i

240 LOCATE 8, 12: PRINT " "

250 IF у О 1 THEN LOCATE,10, 15: PRINT "нет такой буквы"

260 FOR m = 1 ТО 5000 : NEXT m 270 LOCATE 10, 15: PRINT " " |

280 LOOP WHILE t 0 n I 290 LOCATE 13, 13: PRINT "угадал, поздравляю!" f

Обратим внимание на использованный в данной программе цикл DO-LOOP-WHILE, который допустим в некоторых версиях Бейсика (QBASIC, Turbo-BASIC).


ОБРАБОТКА СПИСКОВ


На практике часто встречаются задачи, связанные с перечислением объектов. В некоторых случаях при решении задач важно сохранять информацию об уже сделанных шагах решения, чтобы их не повторять. Для решения таких задач в языке Пролог предусмотрены списки.

Список можно задать перечислением элементов. Например, имена учеников класса:

[саша,петя,дима,ксюша,лена].

Элементами списка могут быть не только атомы, но и функции, и вообще любые элементы, даже списки. Заранее длина списка не задается, и в ходе выполнения программы она может меняться.

Альтернативный способ задания списка использует понятия головы и хвоста списка.

Например, в списке [X | Y] Х - это голова списка. Y - его хвост.

Хвост списка по определению также является списком.

Теперь список может быть определен рекурсивно:

1) пустой список [] - список:

2) [X | Y] - список, если Y - список.

Определение списка через его голову и хвост в сочетании с рекурсией лежит в основе большого числа программ, оперирующих списками. Эти программы состоят

1) из факта, ограничивающего рекурсию и описывающего операцию для пустого списка;

2) из рекурсивного правила, определяющего операцию над списком, состоящим из головы и хвоста ( в голове правила), через операцию над хвостом (в подцели).

Пример I:

определение числа элементов в списке.

Программа 122

сколько ([], 0).

сколько ([А|В], N) :- сколько (В, М), N is M+1.

?- сколько ([саша, игорь, лена]), X).

Ответ: Х=3.

Пример 2:

принадлежность элемента списку.

Программа 123

принадлежит (X, [X | Y]).

принадлежит (X, [A |Y ]) : - принадлежит (X,Y).

?-принадлежит (4,(1,3,4,9]).

Ответ:да.

Данная программа имеет очень простой декларативный смысл: элемент принадлежит списку, если он является его головой или принадлежит хвосту списка.

Пример 3:

соединение двух списков.

Эту задачу можно описать с помощью следующих предикатов:

а) ограничение рекурсии состоит в том, что если к пустому списку [ ] добавить список Р, то в результате получится Р;


б) рекурсия состоит в том, что можно список Р добавить к концу списка [X|Y], если Р будет добавлен к хвосту Y и затем присоединен к голове Х (при этом получается список [Х|Т]).

Программа 124

присоединить([ ], Р, Р).

присоединить([XIY], Р, [X | Т]):-присоединить(Y, Р, Т).

? присоединить(L,[джим.R],(джек,бил,джим,тим,джим,боб]).

Ответ:

L=[джек,бил]. К=[тим джим,боб]. L=[джек,бил,джим,тим]. R=[бoб].

Существует традиция использовать для обозначения предиката слияния двух списков предикативный символ append (по-английски -добавить).

В некоторых случаях постановки вопросов к такого рода программам приходится использовать отсечение (!).

Программа 125

append([ ], L, L).

append([A I B] , C, [A | D]):- append(B, C, D).

?-append(X,Y,[1,2]).

Ответ:

X=[]

Y=[l,2]

X=[l]

Y=[2]

X=[l,2]

Y=[].

Если же заменить первое предложение на append([ ], 1,1):- !. и задать тот же вопрос, то получится правильный ответ:

Х=[]

Y=[l,2].

Пример 4. удаление элементов из списка.

Программа 126 аналогична проверке принадлежности элемента списку, но требует уже трехарного предиката, один аргумент которого указывает удаляемый элемент, второй аргумент-исходный список и третий - список-результат.

Программа 126

удал (X. [X I Y], Y) : - !.

удал (X. [Z I Y], [Z I W]) : - удал (X, Y, W) .

Декларативный смысл: если удаляемый элемент совпадает с головой списка, то результатом программы является хвост списка, иначе удаления производятся из хвоста списка.

Данная программа удаляет первое вхождение в список элемента, связанного с переменной X. Знак отсечения "!"в конце правила предотвращает последующий поиск и вывод лишних вариантов ответов после выполнения ограничительного факта.

Для удаления всех вхождений элемента Х программу надо дополнить:

удал (Х,[ ],[]).

удал (X, [X | Y], W) :- удал (X, Y, W).

удал (X, [Z I Y], W):- удал (X, Y, W).

Декларативный смысл программы таков: пока список не пуст, удалить элемент, если он совпадает с головой списка, значит, отбросить голову списка, а затем удалять его из оставшегося хвоста, иначе надо сразу удалять элемент из хвоста.



Пример 5:

индексация элементов списка.

Смысл программы 127 состоит в том, чтобы получить элемент под номером N или узнать номер элемента X.

Программа 127

получить ([X | Y], 1, X).

получить ([W | Y], N, X) :- N is M+l, получить (Y, M, X).

Пример 6: поиск максимального элемента.

Программа 128

max ([X], X).

max ([X | Y], X) :- шах (Y, W), X>W, !.

max ([X | Y], W) :-max (Y, W).

Декларативный смысл программы: если в списке один элемент - он и является максимальным, если более одного, то это голова списка, если она больше максимального элемента хвоста, или максимальный элемент хвоста.

Пример 7:

обращение списка.

Данная задача - самая сложная из рассмотренных. Для ее решения важно сообразить, что обратить список из одного элемента - означает оставить список без изменения. Обратить более длинный список - обратить его хвост, а потом сзади приставить к нему голову исходного списка.

Программа 129

обр ([X], [X]) .

обр ([X I Y], Z) :- обр (Y, W), присоединить (W, [X], Z).

В этой программе используется процедура слияния списков, описанная выше.

Arity-Prolog располагает значительным числом встроенных предикатов для обработки списков, так что приведенные программы имеют, в основном, учебный характер.


ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКА И ПРИМЕР ПРОГРАММЫ НА СИ


Язык программирования Си - это универсальный язык с богатым набором операторов и компактным способом записи выражений. Благодаря гибкости, выразительности и компактности своих конструкций Си завоевал наибольшую популярность в среде профессиональных программистов и широко используется при разработке системных и прикладных программ.

Язык Си представляет собой удачный компромисс между желанием располагать теми возможностями, которые обычно предоставляют программисту столь понятные и удобные языки высокого уровня, и стремлением эффективно использовать особенности компьютера. Кроме набора средств, присущих современным языкам программирования высокого уровня (структурность, модульность, определяемые типы данных) в него включены средства для программирования «почти» на уровне ассемблера (использование указателей, побитовые операции, операции сдвига). Большой набор операторов позволяет писать компактные и эффективные программы. Однако, такие мощные средства требуют от программиста осторожности, аккуратности и хорошего знания языка со всеми его преимуществами и недостатками. В отличие от языков программирования типа Паскаль, требующих жесткой дисциплины программирования, ограничивающих свободу программиста, содействующих устранению многих ошибок в программах еще на стадии их трансляции, язык Си предоставляет программисту наибольшую свободу. Однако, ответственность за корректность программ при этом полностью ложится на программиста.

Си был создан Денисом Ритчи как инструмент для разработки операционной системы UNIX и реализован в рамках этой операционной системы. Название языка имеет случайное происхождение: «С» - третья буква английского алфавита. Это наименование говорит о чувстве юмора у создателей языка - его предшественником был язык В («В» - вторая буква английского алфавита).

В настоящее время имеется большое количество систем программирования на Си для разных типов компьютеров. Разработано много библиотек модулей, инструментальных средств разработки и отладки, облегчающих создание новых программ.
Программы на Си обладают высокой мобильностью, без каких-либо изменений они переносятся, транслируются и выполняются на машинах различных типов.

Язык Си - компилирующего типа. Текст программы на Си, подготовленный с помощью текстового редактора, для получения объектного модуля обрабатывается компилятором, причем компиляция выполняется в два прохода. При первом проходе (претрансляцни) обрабатываются строки-директивы, начинающиеся со знака #, при втором - транслируется текст программы и создается объектный (машинный) код. Для получения загрузочного (исполняемого) модуля теперь необходимо отредактировать внешние связи объектного модуля - подсоединить к нему соответствующие библиотечные модули.

Рассмотрим простую программу на языке Си. Такой пример позволит нам выявить некоторые основные черты любой программы, написанной на языке Си.

Программа 82

#include<stdio.h>

main() /* Простая программа */ <

int num;

num =1,'

printf ("Это моя  1-я программа на языке Си.\n",num);)

Результат выполнения программы:

Это моя 1-я программа на языке Си.

Поясним строки этой программы.

#include<stdio.h> - подключение файла stdio.h, который является частью пакета, имеющегося в любом компиляторе языка Си и описывающего функции ввода-вывода (например, средства взаимодействия программы с терминалом). В качестве имени файла используется аббревиатура английских слов: STandard Input/Output header - стандартный заголовок ввода-вывода. Данная строка не является оператором языка Си. Символ # оказывает, что она должна быть обработана «препроцессором» компилятора. Препроцессор осуществляет некоторую предварительную обработку текста программы перед началом компиляции.

Main() - имя функции (в переводе с английского main - «главная»). Любая программа, написанная на языке Си, состоит из одной или более «функций», являющихся модулями, из которых она собирается. Данная программа состоит из одной функции main. Круглые скобки указывают именно на то, что main() - имя функции.


Программа, написанная на языке Си всегда начинает выполняться с функции, называемой main(). Программист имеет возможность выбирать имена для всех используемых им функций, кроме main. В круглых скобках в общем случае содержится информация (параметры), передаваемые этой функции. В нашем примере параметры не требуются и, следовательно, в скобках ничего не содержится.

/* Простая программа */-комментарий. Использование комментариев облегчает процесс понимания программы любым программистом. Большим удобством при написании комментариев является возможность располагать их в той же строке, что и операции, которые они объясняют. Длинный комментарий может помещаться в отдельной строке или даже занимать несколько строк. Все, что находится между символом, указывающим начало комментария /*, и символом, указывающим его

конец */, игнорируется компилятором, поскольку он не в состоянии интерпретировать язык, отличный от Си.

{ } - фигурные скобки отмечают начало и конец тела функции. Фигурные скобки применяются также для того, чтобы объединить несколько операторов программы в сегмент или «блок».

int num; - оператор описания. С помощью такого оператора мы объявляем, что будем использовать в программе переменную num, которая принимает целые (int) значения.

Точка с запятой в конце строки является частью оператора языка Си, а не разделителем операторов, как в Паскале.

Слово int служит «ключевым словом», определяющим один из основных типов данных языка Си. Ключевыми словами называются специальные зарезервированные слова, используемые для построения фраз языка.

В языке Си все переменные должны быть объявлены. Это означает, что, во-первых, в начале программы необходимо привести список всех используемых переменных, а во-вторых, необходимо указать тип каждой из них. Вообще, объявление переменных считается «хорошим стилем» программирования.

num=l; - оператор присваивания. Служит для присваивания переменной num значения 1.

printf("этo моя %d-я программа на языке Си.\n",num); - вызов функции printf() форматного вывода на печать.


Этот оператор выводит на печать значение переменной num в формате, содержащемся в строке в кавычках (в данном случае печатается приведенная в кавычках фраза. Символы %d указывают компилятору, где в выводимой строке и в какой форме необходимо вставить значение переменной num. Символ % сигнализирует программе, что, начиная с этой позиции, необходимо вывести значение переменной, a d указывает, что число надо печатать в десятичном формате.

Символы \n не появляются на экране. Эти символы служат директивой начать новую строку на устройстве вывода. Комбинация символов \n на самом деле представляет собой один символ, называемый «новая строка». Для этого символам (\n) не существует соответствующей клавиши на клавиатуре. Символ «новая строка» служит примером «управляющей последовательности», которую невозможно ввести с клавиатуры.

В общем случае обращение к этой функции имеет вид:

printf(<фopмaт>,<выpaжeниel>,<выpaжeниe2>,...,<выpaжeниeN>);

где <выражение1>, <выражение2>, ..., <выражение№» - произвольные выражения, результаты которых надо вывести.

Управляющая строка «формат» содержит объекты двух типов: обычные символы, которые просто копируются в выходной поток (печатаются), и спецификации преобразования значений из внутреннего машинного представления в текстовое для вывода на печатающем устройстве.

Каждая спецификация преобразования начинается с символа % и заканчивается символом преобразования. Между % и символом преобразования могут (не обязательно) находиться

1) знак минус, указывающий, что преобразуемый параметр должен быть выровнен влево в своем поле;

2) целое число, задающее минимальный размер поля: преобразованный параметр будет напечатан в поле-минимум оказанного размера; если в преобразованном параметре символов меньше, чем размещается в указанном поле, то слева будут добавлены пробелы (или справа, если указано выравнивание влево);

3) строка цифр с начальным нулем - лишние позиции поля заполняются нулями, а не пробелами:



4) точка, отделяющая размер поля от последующей строки цифр (только для преобразования строк %s) - строка цифр указывает максимальное число символов, выводимых в одной строке.

Символы преобразования:

d - десятичное число со знаком;

u - десятичное число без знака;

О - восьмеричное число без знака (и без ведущего 0);

х - шестнадцатеричное число без знака (и без ведущего 0);

s - символьная строка;

с - одиночный символ;

f- действительное число в представлении с фиксированной точкой;

е-действительное число в экспоненциальном представлении;

g - наиболее короткое представление действительного числа; и др.

Функцией ввода, аналогичной функции вывода printf(), является scanf() - стандартная функция форматного ввода.

Обращение к этой функции имеет вид

sсаnf(<формат>,<&имя1>,<&имя2>,...,<&имяN>);

где <имя1>, <имя2>, ..., <имяN> - имена переменных, значения которых надо ввести. Наличие символа "&" перед каждым именем обязательно (кроме переменных строкового типа), его смысл будет пояснен ниже.

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

В качестве спецификаций в формате можно использовать те же символы, что и в функции printf(). Спецификации формата должны соответствовать количеству и типу вводимых переменных. В управляющей строке функции scanf нет промежуточных управляющих символов между % и символом преобразования, за исключением "*". Если присутствует символ *, входное поле просто пропускается и никакого присваивания не производится. Обычные символы (кроме °о) сопоставляются с очередными (отличными от символов промежутков) символами входного потока, и в случае отличия дальнейший ввод игнорируется.

Программа 83

#include<stdio.h>

main()

(

int data,month,year; char name[15],town[15];

printf("Kaк вас зовут? "); scanf("%s",name); printf("Укажите дату, месяц и год вашего рождения.\пДата:");

scanf("%d",%data) ;

printf ("Месяц (числом) :") ; scanf ("%d", Sinonth) ;

printf("Год:"); scant("%d",&year);

printf("А в каком городе? "); scanf("%s",town);

printf("Вот мы и познакомились...\n");

printf("Вас

зовут %s ",name); printf("Вы

родились в

городе %s (%d.%d.%d)",town,data, month,year);)

Результат работы программы:

Как вас зовут? Иван

Укажите дату, месяц и год вашего рождения.

Дата : 23

Месяц (номером): 02

Год: 1054

А в каком городе? Новгород

Вот мы н познакомились...

Вас зовут Иван

Вы родились в городе Новгород

(23.02.1054)


ОБЩИЕ ПРИНЦИПЫ ОРГАНИЗАЦИИ


Глобальные информационные сети - одно из основных достижений человечества в области информационных технологий, главная примета вхождения в эпоху информационного общества. Делая возможным оперативное общение на огромных расстояниях (в разных странах и даже на континентах), глобальные сети уже изменили для многих людей характер и возможности образования и профессиональной деятельности. Потенциальные возможности глобальных сетей пока используются лишь в малой мере, но эта область прикладной информатики является самой динамичной.

Пользователю глобальной сети доступен, по существу, весь мир. Самой известной глобальной сетью является Internet, представляющий собой объединение огромного числа сетей - национального, отраслевого и еще более узкого - регионального уровня. «Малые» сети имеют выходы (шлюзы) в сети более высокого ранга, в согласованную систему адресов и протоколов (правил) передачи данных, и так образуют Internet - сеть сетей.

В глобальных сетях существует два режима информационного обмена. Диалоговый режим (или режим реального времени), в котором пользователь, получив порцию информации, может немедленно на нее реагировать, подавать новую команду в сеть для получения новых порций информации, называется on-line. В пакетном режиме, называемом off-line, пользователь передает порцию информации (или принимает ее) в коротком сеансе связи и на некоторое время отключается от сети. Это время может быть достаточно длительным - от нескольких часов до нескольких суток - пока его запрос не будет обработан. On-line похож на разговор по телефону, off-line-

на обмен обычными письмами по почте.

Первая сеть с коммутацией пакетов ARPANET начала действовать в США в 1969 г. Тогда в ней было всего лишь 4 компьютера. В настоящее время на Западе действует много глобальных сетей. Назовем для примера BITNET - сеть, объединяющую более 800 коллективных участников, преимущественно из числа университетов, колледжей и научных центров, охватывающую 35 стран Америки, Европы и Азии.


Из российских телекоммуникационных сетей крупнейшей (фактически действующей во всех странах СНГ и Прибалтики) является сеть RELCOM, созданная в 1990 г. Уже в 1996 г. она имела порядка 300 узлов и насчитывала десятки тысяч абонентов. Сеть является членом Европейского консорциума EUNET, объединяющего многие сети Восточной Европы и Северной Африки, которая, в свою очередь, является участником гигантского мирового сообщества INTERNET. Еще в 1994 г. пользователи RELCOM имели доступ к более чем миллиону компьютеров по всему миру. Шлюз, позволяющий RELCOM выходить в зарубежные сети, находится в Москве, оттуда информация, адресованная за рубеж, поступает в Хельсинки - Амстердам - и далее по всему миру с использованием всех существующих видов связи. Для оптимизации работы сети RELCOM она, имея в основе форму звезды, включает, тем не менее, множество перекрестных соединений между узлами, что позволяет установить дублирующие каналы связи и резко увеличить надежность и «живучесть» сети. Сеть универсальна, она предоставляет все виды услуг - от простой электронной почты в режиме off-line до выхода в Internet

в режиме on-line.

Подключившись к сети Relcom, пользователь получает возможность обмениваться любой информацией со всеми абонентами этой сети и десятков других сетей. Это может быть личная или служебная переписка, обмен научной и деловой информацией, двоичные данные (программы, графические файлы) и многое другое. При этом можно общаться с конкретным пользователем, с группой пользователей или со всеми пользователями, интересующимися данным вопросом (с помощью, так называемых, телеконференций). Компьютер пользователя с помощью модема соединяется по телефонной линии с ближайшим узлом сети RELCOM, забирает пришедшую для него информацию и передает новые сообщения. Узел сети анализирует адреса новых сообщений и, в зависимости от результата, передает информацию либо сразу на компьютер адресата, либо на ближайший к адресату узел. Узлы между собой могут быть соединены коммутируемыми линиями, выделенными линиями, оптоволоконным кабелем, спутниковой связью.



RELCOM является официально зарегистрированной национальной подсетью европейской сети EUnet, поэтому ее абоненты имеют возможность пользоваться соглашениями о взаимной передаче сообщений между сетью EUnet и другими сетями и системами электронной почты, охватывающими весь земной шар. При этом услуги сети могут оплачиваться в национальной валюте.

EUnet/RELCOM входит в мировую систему телеконференций USENET, и в ее рамках участвует более чем в полутора тысячах распространяемых по всему земному шару конференциях.

Кроме RELCOM'a в России действуют не менее трех десятков независимых сетей. Большинство из них являются ведомственными и имеют относительно немного клиентов. Например, любительская компьютерная сеть - FidoNet. В качестве каналов связи в ней используются практически только коммутируемые телефонные каналы. Пользователь сети имеет возможность обмена почтовыми сообщениями и файлами. На большинстве узлов сети действуют электронные «доски объявлений». Работа в сети ведется в режиме on-line

только в определенные часы.

Электронные доски объявлений (BBS) предназначены для обмена файлами между пользователями. Они организуются на какой-либо ЭВМ (станции). Файлы (тексты, программы и пр.) на доску объявлений могут помещать как владельцы станции, так и все остальные пользователи. Большинство существующих досок объявлений для связи с удаленными пользователями используют обычные телефонные линии.

Абонент связывается с доской объявлений любым доступным ему способом и за свой счет. При ответе со стороны станции он работает с ней в режиме удаленного терминала как один из пользователей, но с ограниченными правами.

Доска объявлений предоставляет следующие виды услуг:

• просмотреть содержание (список файлов);

• скопировать файл с доски объявлений на свою ЭВМ;

• передать файл на доску объявлений;

• некоторые станции организуют для своих абонентов ящики электронной почты и предоставляют услуги в рамках только этой станции или одной из систем электронной почты.

Для того, чтобы сеть могла функционировать, кроме абонентских пунктов в ней существуют специальные компьютерные узлы связи, функционирующие круглосуточно (их головные компьютеры называют хост-машинами).


Если же они, как часто бывает, наряду с управлением сетью хранят банки информации, то их называют серверами (последний термин используется в литературе в нескольких смыслах в зависимости от контекста).

Конечный пользователь включается в обмен по своему усмотрению в желаемое для него время. Он соединяется с ближайшей к нему хост-машиной, которая, в свою очередь, соединяется с другими хост-машинами в соответствии с адресом, указываемым пользователем сети, затем происходит обмен информацией. Если пользователь работает в режиме on-line, то он сразу получает поступающую информацию и подает новые команды в сеть для получения новых порций информации. В режиме off-line

пользователь сети при соединении с хост-машиной лишь передает свои сообщения и получает поступившую для него к этому времени информацию. Хост-машина хранит поступившие на нее сообщения до тех пор, пока пользователь их не заберет (или ограничивается разумным сроком хранения). Хост-машины постоянно связаны между собой по выделенным каналам связи и обмениваются информацией в автоматическом режиме под управлением специальных программ. Структура такой сети схематически изображена на рис. 5.3.



Рис. 5.3. Структура глобальной компьютерной сети


ОБЩИЕ СВЕДЕНИЯ


Язык Пролог является представителем семейства языков логического программирования и в сравнении с традиционными языками программирования, предназначенными для записи алгоритмов, такими как Бейсик, Фортран, Паскаль, Си, обладает существенными особенностями:

• программа на Прологе не является алгоритмом, а представляет собой запись условия задачи на языке формальной логики (т.е. это дескриптивный, описательный язык программирования);

• язык Пролог предназначен не для решения вычислительных или графических задач, а для решения логических задач, для моделирования процесса логического умозаключения человека; вычисления же и графические построения выполняются в Прологе как побочный продукт логического вывода;

• Пролог требует особого стиля мышления программиста, что затрудняет изучение его теми, кто уже привык к процедурному программированию, поэтому, так называемые, практические программисты не стремятся переходить на этот язык, что мешает росту популярности Пролога; однако во многих странах (Японии, Англии, Франции, Германии, Израиле и т.д.) расширяется практика применения Пролога в образовании как первого изучаемого языка программирования; переход к процедурным языкам типа Паскаля в этом случае трудностей не вызывает.

Все это позволяет отнести Пролог в существующем делении языков программирования на языки низкого и высокого уровня к языкам сверхвысокого уровня. В японском проекте создания в 90-х годах XX века компьютеров 5-го поколения (обладающих искусственным интеллектом) Пролог положен в основу аппаратной организации и разработки программного обеспечения. Нынешний Пролог, безусловно, не является окончательным вариантом языка программирования ЭВМ 5-го поколения и в ближайшие годы получит существенное развитие. По-видимому, он сыграет роль Бейсика дескриптивного программирования: его значение и возможности в популяризации и распространении идей логического программирования чрезвычайно велики.

Изучению языка Пролог очень способствует предшествующее изучение математической логики, понятийной системой которой он пользуется.


Программирование на Прологе включает в себя следующие этапы:

1) объявление фактов об объектах и отношениях между ними;

2) определение правил взаимосвязи объектов и отношений между ними;

3) формулировка вопроса об объектах и отношениях между ними.

Имена - это последовательности букв и цифр, начинающиеся с буквы (строчной !). Системы программирования на Прологе для компьютеров допускают использование лишь латинских строчных и прописных букв: а .. z, A .. Z. Использование русских строчных и прописных букв: а .. я, А .. Я не допускается. При практической работе с интерпретатором рекомендуется, чтобы смысл имен оставался понятным, использовать в качестве имен запись русских слов латинскими буквами. В данном параграфе мы будем записывать все имена русскими буквами, чтобы сделать смысл программ наиболее понятным. При запуске этих программ в «англо-язычных» системах программирования нужно заменять русские буквы в именах на латинские.

Типы данных включают переменные, атомарные значения и структуры (рис. 3.15).



Рис.3.1 5. Классификация типов данных Пролога

Примеры специальных атомов:

: - ( обозначающая импликацию),

? (вопрос, обозначающий отрицание),

! (предикат отсечения, рассматривается далее).

Переменные

обозначаются последовательностью буквой и цифр, начинающейся с заглавной буквы. Особый вид переменной - анонимная переменная _ ,

используемая в качестве аргумента предиката, когда конкретное значение переменной несущественно.

Структура - это конструкция, состоящая из имени структуры и заключенного в скобки списка ее аргументов, разделенных запятыми. Элементами структур могут быть числа, атомы, переменные, другие структуры и списки. Примеры структур: str(A,B,C), носит(юрий,пиджак).

Списки

представляют собой объединение элементов произвольных видов, разделенных запятыми и заключенных в квадратные скобки. Списки отличаются от структур тем, что количество элементов может меняться при выполнении программы. Примеры списков: [1,3,5,7], [красный,желтый,зеленый].



Основная операция, выполняемая в языке Пролог, - это операция сопоставления (называемая также унификацией или согласованием). Операция сопоставления может быть успешной, а может закончиться неудачно. Определяется операция сопоставления так:

• константа сопоставляется только с равной ей константой;

• идентичные структуры сопоставляются друг с другом;

• переменная сопоставляется с константой или с ранее связанной переменной (и становится связанной с соответствующим значением);

• две свободные переменные могут сопоставляться (и связываться) друг с другом. С момента связывания они трактуются как одна переменная: если одна из них принимает какое-либо значение, то вторая немедленно принимает то же значение.

Примеры: 5 сопоставляется с 5, «имеет» сопоставляется с «имеет», «сергей» не сопоставляется с «юрий», «имеет(сергей,машина)» не сопоставляется с «имеет(сергей, телевизор)», «имеет(сергей,машина)» сопоставляется с «имеет(Х,машина)», в этом случае переменная Х получает в качестве значения атом «сергей».

Факты -

это предикаты с аргументами-константами, обозначающие отношения между объектами или свойства объектов, именованные этими константами. Факты в программе считаются всегда и безусловно истинными и таким образом служат основой доказательства, происходящего при выполнении программы.

Пример 1. Факты, описывающие телефонные номера:

телефон(иванов,т561532).

телефон(петров,т642645).

телефон(сидоров,т139833).

Это означает: телефон Иванова - 56-15-32 и т.п. Заметим, что перед цифрами номера идет буква ''т". Она делает номер телефона литерной константой, так как числа 561532,642645, 139833 слишком велики, чтобы быть числовыми константами.

Пример 2, Факты, описывающие студентов:

нравится(сергей,рэп).

нравится(юрий,джаз).

носит(сергей,блейзер).

носит(юрий,пиджак).

Это означает: «Сергею нравится рэп», «Юрию нравится джаз» и т.п.

Правила - это хорновские фразы с заголовком и одной или несколькими подцелями-предикатами. Правила имеют форму



<голова правила> : - <список подцелей>

где знак : - читается «если», а список подцелей состоит из отдельных подцелей, разделенных знаком «запятая» (читаемым как «и»). Правила позволяют определить новые отношения между объектами на основе уже объявленных с помощью фактов. В качестве аргументов в предикатах правила могут использоваться не только константы, но и переменные. На переменные в правилах действуют кванторы общности, поэтому правила очень концентрированно и лаконично выражают конструкции логического вывода. Так, к фактам примера 2 можно добавить следующее утверждение:

крутойпарень(Х):- нравится(Х,рэп),носит(Х,блейзер).

Это означает «любой Х - крутой парень, если Х нравится рэп и Х носит блейзер». Еще примеры правил:

ест(Х,Y): - пища(Y), любит(Х,Y). («Каждый Х ест любой Y, если Y - пища,

и Х любит Y»)

владелец(А,В) : - купил(А,В). («Любой А есть владелец каждого В, если А купил В»)

В Прологе все предложения программы - факты, правила, вопрос - заканчиваются точкой.

Отметим, что в Прологе вместо оператора присваивания имеется более общий и мощный механизм задания значений переменных. Переменные в Прологе получают свои значения в результате сопоставления с константами в фактах и правилах. До тех пор. пока переменная не получила какого-либо значения, она называется «свободной». Когда переменная примет значение, она становится «связанной». Однако, она остается связанной только в течение времени, необходимого для получения одного ответа на запрос, после этого Пролог «развязывает» ее, возвращается и ищет альтернативные решения. Это очень важный момент: нельзя хранить информацию, задавая значения переменных. Переменные служат частью процесса сопоставления, а не «хранилищем» информации. Область действия переменной -ровно одно предложение (правило или запрос программы).

Вопрос - отправная точка логического вывода, происходящего при выполнении программы. На любой вопрос компьютер будет пытаться дать ответ «Да» или «Нет» в зависимости от того.


согласуется или нет утверждение, стоящее в вопросе, с фактами и правилами базы знаний. Вопрос, не содержащий переменных, является общим: «имеет ли место факт... ?». Так, например, к базе знаний примера 1 можно поставить вопрос

?-телефон(иванов,т123456).

и ответ будет «Нет», так как константа т123456 не согласуется ни с одним фактом.

Если к базе знаний (пример 3)

нравится(сергей ,рэп).

нравится(юрий,джаз).

носит(сергей,блейзер).

носит(юрий,пиджак).

крутойпарень(Х) : - нравится(Х,рэп),носит(Х,блейзер).

задать вопрос

?-крутойпарень(юрий).

то будет получен ответ «Нет». В самом деле, в результате резолюции утверждение в этом вопросе согласно правилу заменится конъюнкцией утверждений

нравнтся(юрий,рэп), носит(юрий,блейзер).

(переменная Х в правиле получила значение «юрий»). Эти утверждения не согласуются с остальными фактами базы знаний. Для вопроса

? - крутойпарень(сергей).

будет получен ответ «Да», так как в этом случае противоречий при согласовании вопроса и базы знаний не возникает.

Вопрос, в котором имеются переменные, является частным: «для каких значений переменных факт ... имеет место ?». В процессе сопоставлений при выполнении программы переменные получат значения тех констант (конкретизируются), для которых сопоставление запроса, в целом, успешно, и будут выведены на экран. Так, в ответ на вопрос

? - телефон(иванов,Х).

к базе знаний примера 1 на экране появится сообщение Х=т561532 и будет дан ответ «Да».

Если к базе знаний примера 3 задать вопрос в форме

?- крутойпарень(А).

то свободная переменная А в вопросе сопоставляется со свободной переменной Х в правиле и совмещается с ней, т.е. становится одним и тем же. В результате резолюции согласно правилу произойдет замена

крутойпарень(А)

на

нравится(А,рэп), носит(А,блейзер),

а затем предикат «нравнтся(А.рэп)» успешно согласуется с фактом «нравится(сергей,рэп)>>, и при этом переменная А конкретизируется значением «Сергей»; от вопроса теперь остается «носит(сергей,блейзер)», а в базе знаний имеется соответствующий факт.


Ответ: «Да» и на экране появится значение присутствовавшей в вопросе переменной А:

А=сергей.

Отметим, что машина «не понимает» используемых в программе имен: «нравится», «носит», «сергей» и т.д. Мы могли бы вместо них использовать любые другие обозначения. Для интерпретатора Пролога существенны только совпадения и различия имен, а также связи между предикатами, устанавливаемые с помощью конъюнкций и импликаций. Осмысленные имена мы будем использовать только для того, чтобы облегчить чтение и понимание программ самим себе. Однако, в Прологе существуют предопределенные имена (встроенные предикаты), которые позволяют выполнить арифметические операции, сравнения, графические построения, ввод-вывод и другие полезные операции как побочный продукт выполнения программы. Встроенные предикаты Arity-Prolog описаны в справке по системе программирования, вызываемой нажатием клавиши F1.

Аналогичный набор встроенных предикатов имеется в других версиях языка Пролог.


ОБЗОР КОМПЬЮТЕРНЫХ ИГР


Компьютерные игры бывают разные и каждая из них требует разных ресурсов компьютера.

Ниже приведен краткий обзор компьютерных игр.

Игры на мастерство

1. Имитационные игровые виды спорта: футбол, волейбол, теннис и т.д.

2. Военные игры: морские бои, воздушные бои, звездные воины, игры с вооружениями и др.

3. Рукопашные схватки: каратэ, кунг-фу, тэквондо.

4. Профессиональные игры: авторалли, пилотирование самолета и др.

5. Приключенческие игры: путешествия, подвиги, приключения.

6. Графические игрушки: тетрис, выбивалки, «живые картинки» и т.д.

7. Учебные тренажеры: азбука, клавиатурный тренажер и др.

Азартные игры

1. Карточные игры: пасьянсы, покер, преферанс, марьяж, бридж и т.п.

2. Имитационные азартные игры: кости, рулетка, «поле чудес» и др.

Логические игры

1. Шахматные игры: шашки, шахматы, реверси и т.п.

2. Логические учебные развивающие игры: крестики - нолики, минер, лабиринты, угадан число, слово, быки и коровы, поле чудес, ним и др.

Обучающие игры

Особая роль в мире компьютерных игр принадлежит обучающим и развивающим играм. Педагогам хорошо известна важность и высокая эффективность игровых форм обучения, особенно успешно применяемых при работе с детьми дошкольного и младшего школьного возраста. Существуют, например, специальные среды для начального обучения информатике с забавными исполнителями, которые в игровой форме отрабатывают простые пользовательские навыки, навыки алгоритмизации и т.д. Так, созданная под руководством Ю.А.Первина среда «Роботландия» с ее забавными исполнителями «Машинист», «Буквоед», «Кукарачча» и др. с успехом используется во многих школах.

До недавнего времени основная масса игр требовала минимальных компьютерных ресурсов. Современная индустрия компьютерных игр нацелена на использование технологии мультимедиа и виртуальной реальности. Для них требуются высокие характеристики компьютера и его периферии.



ON-LINE INTERNET


3.4.1. Адресация и виды информации в Internet

По данным на 1995 г. через Internet

связано более 5 млн. компьютеров, и число их очень быстро растет. Internet поддерживает все существующие виды работ, возможных в телекоммуникационных сетях. Эта суперсеть, охватившая весь мир, представляет из себя совокупность многих (более 2000) сетей, поддерживающих единый протокол TCP/IP (Transmission Control Protocol/Internet Protocol).

Основой Internet

является система так называемых IP-адресов. Каждый компьютер, включенный в Internet (а точнее каждый сетевой интерфейс) получает уникальный в рамках всего Internet адрес (адресами ведают национальные комитеты Internet). IP-адрес - это 4-байтовая последовательность, каждый байт записывается в виде десятичного числа. Например, 195.19.19.19 - адрес одной из машин Воронежского государственного педагогического университета.

IP-адрес состоит из двух частей: адреса сети и номера хоста. Под хостом следует понимать не только компьютер в сети, но и вообще любое устройство, которое имеет свой сетевой интерфейс.

Существует несколько классов IP-адресов. Эти классы отличаются друг от друга количеством битов, отведенных на адрес сети и адрес хоста. При разработке структуры IP-адресов предполагалось, что они будут использоваться по разному назначению. Адреса класса А предназначены для использования в больших сетях общего пользования. Адреса класса В предназначены для использования в сетях среднего размера (сети больших предприятий я учреждений, вузов). Адреса класса С предназначены для использования в сетях с небольшим числом компьютеров (табл. 5.6).

Таблица 5.6

Классы IP-адресов

Класс

Диапазон значений первого байта

Возможное число сетей

Возможное число узлов

А

1-126

126

16777214

В

128- 191

16382

65534

С

192-223

2097150

254

Протокол IP описывает три основные компоненты IP-технологии: формат IP-пакета, формат IP-адреса и способ маршрутизации IP-пакетов.
Структура IP-пакета отражена на рис. 5,6.

В настоящее время используется четвертая версия протокола, следовательно, поле версия

принимает значение «4». Сам заголовок, включая необязательные опции и символы заполнения, имеет длину, равную значению поля длина IP-заголовка. Длина исчисляется в 32-битовых словах. Поле тип сервиса определяет способ обслуживания пакета в конкретных сетях и, главным образом, связано с возможностью задержки (delay) пакета в сети. Поле общая длина определяет длину IP-пакета без заголовка. Длина измеряется в октетах (байтах). Поле идентификация предназначено для помощи при «сборке» сообщения. Поле флаги определяет место датаграммы в сообщении (первая, последняя и т.п.). Поле смещение фрагмента определяет смещение датаграммы относительно начала сообщения. Поле время жизни предназначено для определения срока, после которого пакет должен быть удален из сети. Поле протокол

определяет тип датаграммы. Поле контрольная сумма служит для идентификации повреждений пакета при передаче. Контрольная сумма вычисляется только по заголовку пакета. Поле адрес получателя - IP-адрес места назначения. Поле адрес отправителя -

IP-адрес отправителя. Опции могут иметь переменную длину и обычно применяются для трассировки пакетов, обеспечения безопасности. Заполнитель

применяется для выравнивания заголовка на 32-битовую границу.



Рис. 5.6. Структура IP-пакета

Поскольку числовая адресация неудобна для использования ее человеком, в сети Internet числовым адресам ставятся в соответствие буквенные доменные. Поддержка доменных адресов производится с помощью DNS (Domain Name System) - серверной программы, которая обеспечивает поиск доменных имен и IP-адресов узлов сети в зоне ответственности сервера, устанавливает между ними соответствие.

Для проверки прохождения IP-пакетов и доступности тех или иных машин используется программа Ping. В качестве параметра команды запуска этой программы указывается IP-адрес или доменный адрес нужного сервера.


В ответ Ping сообщает число отосланных пакетов, число потерянных пакетов и время прохождения пакета. По этим данным можно судить о качестве связи в сети.

На базе протоколов TCP/IP реализованы другие прикладные протоколы Internet, составляющие основу сервиса в сети.

Для поддержки электронной почты в Internet разработан специальный протокол SMTP (Simple Mail Transfer Protocol), устанавливающий связь с машиной-получателем и передающий почту в режиме on-line (в отличие от описанных выше протоколов, работающих в режиме off-line).

В Internet используется стандарт MIME, описывающий тело почтового сообщения. В отличие от стандарта RFC-822 для электронной почты, обеспечивающего передачу только текстовой информации в 7-битной кодировке ASCII (двоичные файлы при этом при передаче приходилось конвертировать в текстовую форму программой UUDECODE) стандарт MIME позволяет передающей машине описывать в заголовке электронного письма тип информационных единиц, составляющих письмо, для обеспечения их правильной интерпретации машиной-получателем. В настоящее время используются семь типов данных, которые можно передавать в теле письма:

• текст (text);

• смешанный тип (multipart);

• почтовое сообщение (message); •

• графический образ (image);

• аудио-информация (audio);

• фильм или видео (video);

• приложение (application).

Для каждого из этих типов имеется по нескольку подтипов данных. Однако, несмотря на такое богатство типизации,. стандарт MIME предусматривает использование новых типов данных в почтовых сообщениях.

Кодирование информации происходит чаще всего с помощью, так называемого, 64base - набора символов.

Помимо межперсональной электронной почты и телеконференций, Internet обеспечивает доступ к огромным информационным ресурсам, среди которых важнейшими являются

·         система файловых архивов FTP и поисковых серверов ARCHIE;

·         банки информации WWW;

·         базы данных Gopher;



·         базы данных WAIS;

·         справочные службы WHOIS.

3.4.2. Доступ к информации в Internet

Главный режим доступа к информационным ресурсам Internet -on-line,

однако получать информацию из этих ресурсов можно и в режиме off-line с помощью простейшей электронной почты, поскольку на всех видах серверов в Internet обычно имеются почтовые роботы, обрабатывающие почтовые сообщения, содержащие команды сервера.

Система файловых архивов FTP

- это огромное распределенное хранилище всевозможной информации, накопленной за последние 10-15 лет в Сети. Любой пользователь может воспользоваться услугами анонимного доступа к этому хранилищу и скопировать интересующие его материалы. Объем программного обеспечения в архивах FTP составляет терабайты информации (приставка «тера» соответствует множителю 1012), и ни один пользователь или администратор сети просто физически не может обозреть эту информацию. Кроме программ в FTP-архивах можно найти стандарты Inlernet-RFC, пресс-релизы, книги по различным отраслям знаний (и особенно по компьютерной проблематике) и многое другое.

Практически любой архив строится как иерархия директорий. Многие архивы дублируют информацию из других архивов (так называемые «зеркала» - mirrors). Для того, чтобы получить нужную информацию, вовсе не обязательно ждать, когда информация будет передана из Австралии или Южной Африки, можно поискать «зеркало» где-нибудь ближе, например в Финляндии или Швеции. Для этой цели существует специальная программа Archie, которая позволяет просканировать FTP-архивы и найти тот, который устраивает пользователя по составу программного обеспечения и коммуникационным условиям.

Кроме того, FTP - это интерфейс пользователя при обмене файлами по одноименному протоколу. Программа устанавливает канал управления с удаленным сервером и ожидает команд пользователя. Идентификатор удаленного сервера указывается в команде интерфейса open. Если команда ftp работает с пользователем и ожидает его команд, то на экране отображается приглашение



ftp>

Первой командой сеанса является команда open. По этой команде открывается сеанс работы с удаленным сервером:

ftp>open ftp.kiae.su

После выдачи такой команды последуют запросы идентификации пользователя. Зарегистрировать пользователя можно и по команде user:

ftp>

user anonymous

Следующими по важности командами являются команды cd и Is (dir). Назначение этих команд достаточно прозрачно и понятно всем пользователям - навигация по дереву файловой системы и просмотр содержания каталогов. Здесь следует посоветовать пользоваться при просмотре каталогов командой Is с

дополнительными параметрами:

ftp>ls –FC

И, наконец, самыми важными являются команды приема/передачи данных get, put, mget, input

и bin. По командам get и put

можно принять или передать один файл:

ftp> get README.TXT

Команды mget, input предназначены для приема/передачи набора файлов:

ftp> mget *.gz

Для поиска

информации на FTP-серверах создавались поисковые серверы ARCHIE. Ближайшим таким сервером является archi.funei.fi в Финляндии. Однако, в настоящее время функции поиска перешли к поисковым WWW-серверам, рассматриваемым ниже.

«Мировая паутина» WWW (от английских слов World Wide Web - «Мировая паутина») - это распределенная информационная система мультимедиа, основанная на гипертексте. Информация хранится в ней на огромном множестве объединенных в сеть серверов - компьютерах с соответствующим программным обеспечением. Пользователи, или клиенты, имеющие доступ к сети, могут получать эту информацию, используя специальное программное обеспечение - программы просмотра WWW-документов (так называемые, WWW-броузеры). Информация представлена в виде документов, которые содержат ссылки на другие документы, хранящиеся как на том же самом сервере, так и на других, т.е. образует гипертекст. На экране компьютера элементы, имеющие ссылки на другие документы, тем или иным образом (цветом, подчеркиванием) выделены.


Пользователь, работающий с программой просмотра, может связаться с соответствующим сервером сети и получить документ, на который имелась ссылка. Для этого ему достаточно переместить указатель мыши на выделенный элемент и нажать клавишу мыши. Программа просмотра при этом посылает запрос серверу, хранящему документ.

Взаимодействие клиент - сервер при работе на WWW происходит по протоколу, который называется HyperText Transport (или Transfer) Protocol

- сокращенно HTTP. Для получения WWW-документов с сервера в запросе обязательно указывается протокол, адрес сервера, имя директории на сервере и файла с необходимым документом. Эта комбинация получила название Uniform Resource Locator (сокращенно - URL или просто Location). Типичный URL выглядит следующим образом:

http://www.vspu.ac.ru/de/index.htm

WWW-клиенты могут общаться с серверами, поддерживающими, кроме http, протоколы ftp, gopher и др. Если имя директории или файла не указано в URL, сервер вышлет файл index.htm или welcome.htm.

В настоящее время получили распространение более десяти программ просмотра WWW-документов. Из них наиболее популярными являются программы Netscape Navigator

и Microsoft Internet Explorer, работающие в среде Windows.

Информация на WWW включает в себя не только текст, но и графику, видео и звук. На сервере могут также быть запущены и прикладные программы.

Для поиска

информации в «паутине» имеется развитая сеть поисковых WWW-серверов, использующих различные методы индексации информации в сети для быстрого контекстного поиска, причем поиск может выполняться для всех видов серверов сети - WWW. FTP. GOPHER и др. Одними из самых популярных остаются следующие поисковые серверы: www.yahoo.com, www.altavista.digital.com,

а для поиска русскоязычных ресурсов - www.rambler.ru.

При входе на тот или иной поисковый сервер на экране обычно появляется окно для ввода слова или фразы, вхождения которых надо искать (рис. 5.7). Для поиска нужной информации в это окно следует ввести ключевые слова (конъюнкция условий поиска обычно обозначается знаком &), указать язык поиска, вид серверов и запустить поиск.


Возможно, в течение нескольких минут будет найдено несколько сотен или даже тысяч вхождений искомых ключевых слов в документы во всей сети, которые придется просматривать «вручную» и из которых большинство окажется малоинформативными.



Рис. 5.7. «Домашняя» страница поискового сервера Alta Vista в броузере Internet Explorer

Другой вариант поиска - через «дерево» рубрик. Однако и в этом случай поиск нужного сервера или документа может оказаться трудоемким или вообще безрезультатным.

3.4.3. Язык разметки гипертекстов html

Документы, хранящиеся на WWW, подготавливаются на специальном языке HTML (Hypertext Markup Language - «Язык разметки гипертекстов»). В HTML текст кодируется в ASCII и поэтому может быть создан и отредактирован в любом текстовом редакторе. Кроме самого текста в документах имеются флаги разметки, которые интерпретируются клиентской программой просмотра (броузером) и позволяют воспринимать документ именно как гипертекст.

Любой гипертекст похож на книгу и может быть разбит на отдельные структурные элементы:

• собственно текст;

• главы, параграфы, пункты, подпункты;

• абзацы.

Для каждого из этих элементов в HTML существуют определенные стили, описывающие, в каком виде пользователь увидит текст на экране. Пусть мы создали файл minihtml.html:

<BODY>

<ТIТLЕ>Пример НТМL-текста</ТITLЕ>

<Н1>Глава 1</Н1>

<Н2>Параграф 1.</Н2>

Добро пожаловать в HTML!

Это пример гипертекста.<Р>

<Н2>Параграф 2.</Н2><Р>

<А HREF="minihtml.html">npимep НТМL-текста</А>

</BODY>

Из данного примера видно, что

• заголовок документа начинается с <TITLE> и заканчивается </TITLE>;

• заголовок первого уровня (главы) выделяется символами <Н1> и </Н1>;

•заголовки последующих уровней (параграфы, пункты, подпункты и т.п.) -символами <Нх> и </Нх>, где х - числа 2,3, ...

• абзац - символами <Р>.

Не все стили поддерживаются всеми WWW-броузерами.


Если программа просмотра не поддерживает стиль, то она его игнорирует.

Основной текст отделяется от сопроводительного символами

<BODY> </BODY>

Каждый HTML-документ должен иметь заголовок, который показывается отдельно и используется, прежде всего, для идентификации документа (например, при поиске). Заголовок должен описывать цель документа и содержать не больше 5-6 слов. Практически во всех броузерах заголовок документа виден в верхней части экрана (окна).

Для выделения заголовка служат символы

<HEAD><TITLE>Заголовок</TITLE><HEAD>

HTML имеет шесть уровней заголовков, имеющих номера с 1 по 6 (заголовок первого уровня является заголовком высшего уровня). По сравнению с нормальным текстом, заголовки выделяются шрифтом - размером и толщиной букв. Первый заголовок в каждом документе должен быть выделен <Н1>. Синтаксис заголовков:

<Ну> Текст заголовка</Ну>

 

где у - число от 1 до 6, определяющее уровень заголовка.

В отличие от документов, в большинстве текстовых процессоров прерывания строк и слов в HTML-файлах несущественны. Обрыв слова или строки может происходить в любом месте в исходном файле, при просмотре это прерывание будет проигнорировано. Напомним, что в нашем примере, первый параграф был представлен как

<Н2>Параграф 1.</Н2>

Добро пожаловать в HTML!

Это пример гипертекста.<Р>

В исходном файле два предложения находятся на двух разных строках. Программа просмотра игнорирует это прерывание строки и начинает новый абзац только,после знака <Р>.

Главное преимущество HTML состоит в его способности связываться с другими документами. Броузер выделяет (обычно цветом и/или подчеркиванием) ключевые слова, являющиеся гипертекстовыми ссылками (гиперссылками). Описывается ссылка на другой документ следующим образом:

<А НRЕF="имя файла">

Текст, который будет служить как обращение к другому документу</А>. Приведем пример такой гипертекстовой ссылки:





HREF="minihtml.html>примep HTML-текста</A>

Здесь ключевые слова «Пример HTML-текста» являются гиперссылкой на файл minihtml.html, который находится в той же директории, что и текущий документ. Также можно ссылаться на документ в любой директории, описав к нему полный путь. Например, ссылку на файл NJStais.html, лежащий в поддиректории AtlanticStates,

можно описать так:



HREF="AtlanticStates/NJStats.htmI">New Jersey</A>

Это - так называемые относительные ссылки. Можно также использовать абсолютное имя файла (полный путь). В общем случае, использование ссылки по абсолютному имени файла более предпочтительно.

Ссылки на документы, хранящиеся на других серверах, записываются с указанием их URL:

<AHref="http://www.simteI.ru/news/snews.http">News</A>

Гиперссылки могут также использоваться для соединения с определенными разделами документов. Предположим, необходимо соединить документ А с первой главой документа В. Для этого надо создать именованную гиперссылку в документе В:

Здесь вы можете увидеть

<А NAME = "Глава 1">Главу 1</А> текст первой главы.

Теперь, описывая ссылку в документе А, надо включить не только имя файла documentB.html, но также и имя гиперссылки, отделяемое символом (#):

Здесь вы можете увидеть текст

<AHREF="documentB.html#Глава"> Главы 1 </А> документа В

Теперь «кликнув» в слово «Главы I» в документе А, можно перейти непосредственно в Главу 1 в документе В.

Техника соединения с разделами текущего документа аналогична описанной выше, только опускается имя файла. Вот, например, связь с Главой 1 внутри того же самого файла (Документ В):

Это <А HREF = "#Глава1">Глава 1</А> текущего документа.

Для более сложных документов HTML имеет некоторые дополнительные возможности форматирования Так, HTML поддерживает ненумерованные и нумерованные списки.


Ненумерованный список.

<UL><LI>cписок пунктов </UL>

Например:

<ul>

<LI> яблоки

<LI> бананы

</UL>

что дает на экране:

* яблоки

* бананы

Нумерованный список идентичен ненумерованному списку, только вместо <UL> используется <OL>.

Например:

<OL>

<LI> апельсины

<LI> персики

<LI> виноград

</OL>

что дает на экране:

1. апельсины 2. персики 3. виноград

Программа просмотра автоматически нумерует элементы такого списка. Списки могут быть произвольно вложены, хотя практически было бы разумнее ограничиться тремя уровнями вложенных списков.

Приведем пример вложенных списков:

<ul> <LI> Крупные города России;

<UL>

<LI> Москва

<LI> Санкт-Петербург

</UL>

<LI> Крупные города Украины:

<UL>

<LI> Киев

</UL>

</UL>

что дает на экране:

* Крупные города России:

+ Москва + Санкт-Петербург

* Крупные города Украины:

+Киев

Флаг <ADDRESS> используется для того, чтобы определить автора документа и способы контакта с ним (например, e-mail адрес). Обычно это последний пункт в файле. Например, последняя строка документа может выглядеть так:

<ADDRESS> Web-master Воронежского педуниверситета den@vspu.ac.ru</ADDRESS>

что дает на экране: Web-master Воронежского педуниверситета den@vspu.ac.ru

Можно описывать специальными стилями отдельные слова или предложения. Имеются два типа стилей: логический и физический. Логические стили определяют текст согласно заданному значению, в то время как физические стили определяют некоторые участки текста.

Логические стили:

<DFN>                       служит для описания определений. (Это определение.)

<ЕМ>                                     служит для выделения слов. (Это выделенное слово.)

<С1ТЕ>                      служит для выделения заголовков книг, фильмов, цитат и т.п. (Это цитата.)



<CODE>                    служит для выделения программных кодов, текстов программ и

т. п. Изображается шрифтом фиксированной ширины. (The <stdio.h> header file)

<KBD>                      используется для ввода с клавиатуры пользователя. Может быть изображено жирным шрифтом (но в большинстве browser изображается специальным шрифтом) (Введите passwd)

<SAMP>                    используется для машинных сообщений. Изображается шрифтом фиксированной ширины. (Segmentation fault: Core dumped)

<STRONG>               служит для ОСОБОГО выделения слов. Обычно выделяется жирным шрифтом. (Это очень важно.)

<VAR>                      используется для символьных переменных. (Это переменная.)

Существуют физические способы выделения - автор задает стиль написания текста, описывая шрифт в исходном HTML-документе. Можно задать:

<В>, </В>                  жирный шрифт (это жирный шрифт)

<1>, </1>                   наклонный шрифт (это наклонный шрифт)

<ТТ>, </TТ>               фиксированный шрифт (шрифт заданной ширины) (это fixed шрифт)

Используя флаг <HR> можно разделить текст горизонтальной чертой:

Этот текст снизу от линии.

Большинство программ просмотра могут показывать рисунки Х Bitmap (XBM) или GIF формата вместе с текстом. Чтобы включить рисунок, надо описать гиперссылку на него:

<IMG SRC=image_URL>

где image_URL - URL .gif или .xbm файла, содержащего рисунок. Таким образом, синтаксис ссылки на рисунок аналогичен синтаксису гиперссылкн HREF. Форматирование положения рисунка задается включением в гиперссылку пункта "ALIGN = ":

<IMG ALIGN=top SRC=image_URL>

Также возможны типы выравнивания:

ALIGN = MIDDL

ALIGN = CENTER

Поскольку пересылка картинки замедляет загрузку основного WWW-документа, рекомендуется помещать рисунок в отдельный документ, написав на него гиперссылку. В этом случае пользователь сам может решить - смотреть или не смотреть ему этот рисунок;



<А HREF = ima.ge_URL>Здесь</A> вы можете увидеть рисунок.

Рассмотрим более длинный пример HTML-документа:

<HEAD>

<ТITLЕ>;Более длинный пример</ТIТLЕ> </HEAD>

<BODY>

<Н1>Более длинный пример</Н1> Это простой HTML-документ. Это первый абзац. <Р>

Это второй абзац, он демонстрирует некоторые возможности HTML по выделению слов.

Это слово написано <I> наклонным </I> шрифтом.

Это слово написано <В> жирным </В> шрифтом.

Здесь вы можете увидеть картинку:

<IMG SRC="LOGO.G1F">P>

Это третий абзац, он демонстрирует использование гиперссылок.

Это гиперссылка на файл minihtml.html, содержащий простой пример HTML-документа:



HREF="minihtml.htmr>ripHMep HTML-TeKcra</A>.<P>

<Н2>Заголовок второго уровня</Н2>

Дальнейший текст будет написан шрифтом фиксированной ширины: <Р>

<PRE> On the stiff mig up there Hunches a wet black rook Arranging and rearranging its feathers in the rain ...

</PRE> Это ненумерованный список, состоящий из двух элементов: <Р>

<UL>

<LI> смородина

<LI> черника

</UL>

Конец документа. <Р>

<ADDRESS> Web-master Воронежского педуниверситета

den@vspu.ac.ru</ADDRESS>

3.4.4. Программа-оболочка Internet Explorer

Одним из самых популярных в настоящее время броузеров - программ для просмотра документов WWW-серверов - является Internet Explorer,

программа, разработанная компанией MicroSoft и включенная ею в состав операционной системы Windows (95, 98, NT).

Опишем кратко работу с указанной программой, широко используемой в настоящее время для навигации в сети Internet.

В окне Internet Explorer

отображается HTML-документ, полученный из Internet или загруженный из файла. Навигация (перемещение) по такому документу осуществляется с помощью ссылок - выделенных в документе фраз или областей. Курсор превращается на ссылках в пиктограмму кисти руки с вытянутым пальцем, которым можно выбрать или нажать выделенную фразу или область.


Полезные для навигации кнопки-команды содержатся в меню команд Internet Explorer- третьей строке окна. Кнопка «Назад» позволяет возвратиться на предыдущую просмотренную HTML-страницу, кнопка «Вперед» - двигаться вперед по цепочке просмотренных страниц. Кнопка «Останов» служит для остановки передачи данных (если, например, не нужно ждать окончательной досылки картинок и т.п.), кнопка «Обновить», напротив, позволяет возобновить передачу данных текущей страницы в случае, например, сбоя передачи или остановки.



Рис. 5.8. Возможный вид заставки программы Internet Explorer

В той же строке есть очень важное окно ввода адреса. Обычно, в это окно вводят адрес домашней страницы WWW-сервера, с которой начинается поиск и просмотр всего HTML-документа. С помощью кнопки со стрелкой в правой части этого окна можно вызвать список ранее использовавшихся адресов и выбрать необходимый. Более широкие возможности «запоминания» адресов предоставляет опция меню «Избранное» в командном меню системы во второй строке. Эта опция открывает вертикальное меню, команды которого позволяют добавлять новые «закладки» на понравившиеся HTML-страницы, переходить в сети по этим закладкам, упорядочивать ссылки и даже работать с папкой «Мои документы».

Интереснейшая возможность, предусмотренная Internet Explorer - автоматическое установление связи с сервером компании MicroSoft и обновление компонентов операционной системы (драйверов, приложений). Конечно, на такой сервис могут рассчитывать только владельцы лицензионных экземпляров системы.

Из команд главного меню Internet Explorer очень полезными являются также «Свойства обозревателя» в команде «Вид», позволяющая настраивать броузер, «Шрифты», позволяющая менять кодировку отображаемого в окне текста. Для кодировки русских символов в сети применяется как кодировка КОИ-8, так и Windows, встречаются национальные алфавиты. Команда «Шрифты» позволяет выбрать необходимую для правильного отображения текста кодировку.

В Internet Explorer

нет встроенных средств разработки HTML-документов.


Эта функция переложена на текстовый процессор Word из пакета MicroSoft Office. Internet Explorer лишь вызывает Word, когда необходимо, а также позволяет посылать подготовленные страницы на WWW-сервер (если у пользователя имеются соответствующие права).

В команде «Файл» предусмотрены возможности печати или записи на диск найденной информации.

Отметим, что до сих пор рассматривалась работа Internet Explorer с протоколом HTTP (т.е. WWW-серверами) по умолчанию. В действительности он, как и другие броузеры (например. Netscape Communicator), может работать и с другими протоколами Internet: FTP, GOPHER и т.д. Так. для соединения с любым FTP-сервером достаточно в поле адреса указать протокол и адрес сервера, например: ftp://ftp.kiae.su. Работать с файлами и директориями FTP-сервера в среде Internet Explorer можно в традиционной для Windows манере.

Технологии Internet быстро прогрессируют. Так, в едином пакете с Internet Explorer поставляется программное средство Net Meeting для участия в видеоконференциях по Internet.

3.4.5. Другие информационные системы в Internet

Gopher-это еще одна распределенная информационная система Internet.

В основу ее интерфейсов положена идея иерархических каталогов. Внешне Gopher

выглядит как огромная файловая система, которая расположена на машинах сети. Первоначально Gopher

задумывался как информационная система университета с информационными ресурсами факультетов, кафедр, общежитии и т.п. До сих пор основные информационные ресурсы Gopher

сосредоточены в университетах. Gopher считается простой системой, легкой в установке и администрировании, достаточно надежной и защищенной. Количество серверов Gopher на 1994 г. превышало в 1,5 раза число серверов WWW, и до 1995 г. темпы роста установок серверов Gopher опережали все остальные ресурсы Сети. В России Gopher-cepвepы не так распространены, как во всем мире - профессионалам больше нравится World Wide Web. Gopher URL's не так разнообразны, как файловые. Это связано с ограниченностью его сервиса.


Для того чтобы описать, например, gopher-сервер узла gopher.kiae.su необходим URL:

gopher://gopher.kiae.su/

WAIS - это распределенная информационно-поисковая система Internet. Родилась WAIS как перспективная разработка четырех ведущих американских компаний и первое время была коммерческим продуктом, пока не появилась ее свободно распространяемая версия freeWAIS. В основу системы положен принцип поиска информации с использованием логических запросов, основанных на применении ключевых слов. Клиент «обшаривает» все серверы WAIS на предмет наличия на них документов, удовлетворяющих запросу. WAIS широко применяется как поисковая машина в других информационных сервисах Internet, например в WWW и Gopher. Наиболее известным проектом, где была применена WAIS, является электронная версия энциклопедии «Британника».

Контрольные вопросы и задания

1. В чем признак глобальности сети?

2. Что такое «модем» и каковы его функции?

3. Какие модемы используются в Вашем вузе и какие протоколы коррекции ошибок они поддерживают?

4. В какой глобальной сети участвует ваш вуз? К каким сетям есть выход из этой сети?

5. Назовите характеристики одной - двух локальных сетей.

6. Какие виды обмена информацией приняты в электронной почте?

7. Какова структура электронного письма?

8. Каков электронный адрес вашего вуза и что означают его составляющие?

9. В чем состоят возможности одной из программ-оболочек электронной почты?

10. Для чего используется кодирование писем?

11. Приходилось ли вам лично работать с удаленной базой данных или наблюдать за такой работой? Если да, то опишите ее в деталях.

12. Какие виды работ поддерживает сеть Internet?

13. Что такое гипертекст? С какой гипертекстовой программой вы работали и как в ней отражены принципы гипертекста?

14. Как ведется поиск информации в сети Internet?


ОПЕРАЦИОНАЛЬНЫЙ ПОДХОД


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

Подходы к созданию алгоритмов и требования к ним существенно изменялись в ходе эволюции компьютеров. Первоначально, в эпоху ЭВМ 1 -го и 2-го поколений, когда они были еще мало распространены, машинное время было дорого, а возможности ЭВМ очень скромны (с точки зрения сегодняшних достижений), основным требованием к алгоритму была его узко понимаемая эффективность:

1) минимальные требования в отношении оперативной памяти компьютера -.программа должна была использовать наименьшее возможное число ячеек оперативной памяти компьютера;

2) минимальное время исполнения (минимальное число операций). При этом программы составлялись из команд, непосредственно или почти непосредственно исполнявшихся компьютером (точнее говоря, процессором):

• операции присваивания;

• простейших арифметических операций;

• операций сравнения чисел;

• операторов безусловного и условных переходов (изменяющих порядок вычисления команд в программе);

• операторов вызова подпрограмм (вспомогательных алгоритмов).

Такой подход в программировании (создании алгоритмов), ориентированный на непосредственно выполняемые компьютером операции, можно назвать операциональным.

Рассмотрим подробнее операции, которые выполняются компьютером и которые являются шагами программы при операциональном подходе.

Операция присваивания состоит в том, что некоторое значение фигурирующей в программе величины помещается в ячейку памяти компьютера. Эта ячейка может либо принадлежать оперативной памяти, либо находиться в арифметико-логическом устройстве, выполняющем основные операции (это устройство - часть процессора). После операции присваивания указанное значение сохраняется в ячейке памяти, куда оно было помещено, пока не будет заменено другим в результате другого присваивания.
Ячейка памяти, где размещается значение, в программе обозначается именем (идентификатором) соответствующей переменной. Примеры идентификаторов: а, х, у1, у2. Важно помнить, что переменные и, соответственно, их значения могут быть разных типов - числовые (целые или действительные), литерные или логические. Значения различных типов представляются (кодируются) в компьютере по-разному, поэтому они должны соответствовать типам переменных, которым они присваиваются. При разработке алгоритма следует всегда помнить и 'тщательно различать типы переменных.

Набор простейших арифметических операций «сложения» (+), «вычитания» (-), «умножения» (*) и «деления» (/) (причем во многих случаях следует тщательно отличать деление, выполняемое над целыми числами - в этом случае операция деления распадается на деление нацело и вычисление остатка от деления) позволяет записывать арифметические выражения с использованием числовых констант и идентификаторов переменных. Для определения порядка операций в выражениях чаще всего используют стандартное математическое соглашение о старшинстве операции, согласно которому старшими и выполняемыми в 1-ю очередь являются умножение и деление, а младшими - сложение и вычитание. Для изменения «естественного» порядка выполняемых операций служат скобки. Сравните, например, порядок операций в выражениях:



+ 2) * х и а + 2 * х.

Что же касается порядка выполнения операций одного старшинства, то они, как правило, выполняются в порядке записи в выражении.

Операция сравнения числовых значений фактически сводится к определению знака разности этих значений. Этот знак отображается с помощью специальной ячейки памяти (флага знака результата) вычислительного устройства компьютера и может использоваться при выполнении условных переходов между командами (шагами) алгоритма.

Чтобы понять, что такое условные и безусловные переходы при выполнении алгоритма, надо исходить из того, что шаги или команды алгоритма обладают метками или адресами, и, помимо естественного порядка выполнения команд соответственно их записи, возможен и другой порядок, при котором последовательность выполнения команд определяется переходами на команды с определенными метками или адресами.



Безусловным называется переход, для которого изменение порядка выполнения команд раз и навсегда определено и не зависит ни от каких условий. Условным называется переход, для которого порядок выполнения команд определяется по некоторому условию, чаще всего условию сравнения величин числовых типов.

Операция вызова подпрограммы (вспомогательного алгоритма) - это такой переход в последовательности команд алгоритма, при котором на определенном этапе выполнения алгоритма происходит вначале переход на другую программу (подпрограмму по отношению к той, откуда совершен переход), а затем, после ее завершения, возврат в точку вызова подпрограммы и продолжение выполнения команд, начиная со следующей после команды вызова подпрограммы, в-их естественном порядке. Очевидно, что операция вызова подпрограммы представляет собой переход, при котором запоминается адрес команды, следующей за командой вызова подпрограммы, что позволяет вернуться к исходному алгоритму (головной программе) после выполнения вспомогательного алгоритма (подпрограммы).

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



n = 0,1,2,...

Можно показать, что
.

Будем обозначать через x0 нулевое приближение (за него в данном случае можно принять любое положительное число), через e

заданную точность вычислений и через c0

какое-нибудь число, удовлетворяющее условию 0 < c0 <
 , необходимое для оценки достигнутой точности с помощью неравенства



Алгоритм вычисления
.

1) ввести числа а, e, x0, c0;

2) присвоить переменной х значение у,

3) присвоить переменной у значение а/х;

4) присвоить переменной у значение х + у,



5) присвоить переменной х значение у/2;

6) присвоить переменной у значение x2;

7) присвоить переменной у значение y-а;

8) присвоить переменной у значение у/c0;

9) присвоить переменной d значение у/2;

10) сравнить d и e; если d > e, то перейти к команде 3, иначе перейти к следующей команде;

11) вывести числа х, а и e;

12) стоп.

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

Поясним эту программу. Команда 2 помещает значение начального приближения x0

в ячейку памяти, в которой хранятся значения переменной х (на каждом этапе вычислений в этой ячейке хранится значение х,

равное значению одного из членов рекуррентной последовательности xn).

Команды 3-5 вычисляют по числу х число (х

+ а/х)/2. Результат помещается в ячейку памяти, в которой хранится значение переменной х, при этом старое значение «стирается» новым. Команды 6-9 вычисляют величину

,

с помощью которой оценивается сверху разность х -
 . Важное значение имеет команда 10. По ней не производятся вычисления, а сравниваются между собой вычисленное значение 5 и заданная точность e.

Если d

> e, то управляющее устройство вернет вычислительный процесс к команде 3 и заставит повторить процесс.

В противном случае, когда требуемая точность достигнута, печатается полученный результат и работа прекращается.

Данный алгоритм весьма экономичен: в качестве рабочих он использует всего две ячейки памяти (для переменных х и у),

его команды так продуманы, что никакие операции не выполняются с избыточным повторением.

В данном примере не были использованы какие-либо специальные обозначения команд, чтобы сделать их независимыми от языка конкретных ЭВМ (такие языки называют Ассемблерами), чтобы стал ясен общий характер операционального подхода к разработке алгоритмов.


Однако, ориентированность этого подхода на возможности и особенности ЭВМ с появлением большого числа компьютеров 3-го и особенно 4-го поколений не позволяла перейти к массовому промышленному программированию и стала сдерживать развитие вычислительной техники. Отметим основные недостатки алгоритмов, к которым приводил операциональный подход:

• злоупотребление командой условного и безусловного переходов зачастую приводило к очень запутанной структуре программы, напоминавшей по образному сравнению «блюдо спагетти»;

• вместе с разнообразными уловками, направленными на повышение эффективности программы (т.е. минимальных требований к оперативной памяти и минимального времени выполнения), это приводило к непонятности программ, их ненадежности, трудностям в отладке и модификации, делая программирование трудоемким, сложным и чрезвычайно дорогостоящим.

Необходимость ориентироваться на ограниченный набор команд компьютера, на его скромные возможности приводила к огромной трудоемкости, к сложности программ, к проблемам, связанным с ошибками в них. В результате узким местом в развитии вычислительной техники оказалось именно программирование.


§ ОПЕРАЦИОННЫЕ СИСТЕМЫ ЛОКАЛЬНЫХ СЕТЕЙ


Появление компьютерных сетей привело к развитию операционных систем для персональных компьютеров, позволяющих работать в сетях. Такие операционные системы обеспечивают не только совместное использование аппаратных ресурсов сети (принтеров, дисковых накопителей большой емкости и т.д.), но и использование распределенных коллективных технологий при выполнении разнообразных работ.

Существует много операционных систем локальных сетей. Наиболее широкое распространение получили операционные системы Novell NetWare и Windows NT для локальных сетей ПК. Ознакомимся с первой из них.

Фирма «Novell Inc.», в компьютерном мире не менее известная чем фирмы IBM и «Microsoft», специализируется на создании операционных систем локальных сетей. Созданная в 1982 г. небольшой группой менеджеров и программистов, фирма уже к 1990 г. имела годовой оборот на уровне 500 млн. долларов. Ее сетевые ОС известны своим высочайшим качеством и надежностью.

Сетевая операционная система Novell NetWare 386,

начиная с версии 3.11, представляет собой 32-разрядную операционную систему реального времени, работающую в защищенном режиме процессоров 80386 и более мощных (80486 и Pentium).

NetWare 386 является сетевой ОС с централизованным управлением, т.е. в сети один или несколько компьютеров должны быть выделены в качестве файл-серверов. На файл-серверах работает ОС NetWare 386. Остальные компьютеры сети, число которых может достигать нескольких сотен, являются рабочими станциями, и на них должна быть загружена, так называемая, клиентская часть NetWare 386 -специальная компонента системы.

ОС Netware 386 имеет ядро - файл server.exe, который запускается из MS DOS (на файл-сервере), затем с консоли и с помощью текстового файла конфигурации загружаются разнообразные драйверы, управляющие сетевыми устройствами. Кроме драйверов могут быть запущены в многозадачном режиме разнообразные утилиты и прикладные программы, например, управляющие файлами, хранящимися на сервере, и базами данных, работающими с внешними коммуникационными каналами.
Эти команды содержатся в файлах, имеющих имена с расширением .п1т и потому называются «nlm-модулями».

Примером важнейшей утилиты является syscon.exe, с помощью которой администратор системы выполняет всю работу по разграничению доступа пользователей к информации.

После установки NetWare на файл-сервере на его винчестерском накопителе обязательно создается системный том SYS, содержащий несколько стандартных директорий:

• LOGIN, содержащую программу подключения пользователя к сети hgin.exe и другие процедуры, обслуживающие потребности пользователя рабочей станции при подключении ее к сети;

• MAIL, в которой для каждого пользователя сети заводится отдельный подкаталог (с именем из цифр), содержащий стартовый файл пользователя Login Script и файл конфигураций заданий на печать;

• SYSTEM, в которой хранятся файлы операционной системы NetWare, системные утилиты и некоторые другие служебные программы; этот каталог виден только системному администратору (имеющему идентификатор SUPER VISOR);

• PUBLIC, в которой содержатся сетевые программы и утилиты, доступные для всех пользователей сети;

• USERS, с индивидуальными подкаталогами пользователей сети. Файловая система NetWare на сервере не совместима с MS DOS. На рабочих же станциях, после запуска клиентской части системы, обеспечивается прозрачный доступ к разделам диска файл-сервера как к своим собственным дисководам.

Файловая система NetWare поддерживает разветвленную систему разграничения доступа к файлам и каталогам файл-сервера с различных рабочлх станций. Все пользователи сети могут быть разделены системным администратором на группы. Каждая группа обладает своими правами доступа, притом один и тот же пользователь может находиться одновременно в разных группах. В табл. 5.1 приведены типичные для Novell NetWare

виды доступа к каталогам и файлам.

Таблица 5.1

Некоторые виды доступа к каталогам и файлам

Виды доступа

Обозначения

Права

Access Control

A

Изменение прав доступа к каталогу и файлу

File Stream

F

Просмотр содержимого каталога

Create

С

Создание каталогов или файлов в данном каталоге

Erase

E

Удаление каталогов или файлов из данного каталога

Modify

M

Изменение содержимого файлов (перезапись)

Supervisory

S

Права супервизора (позволяют делать любые

операции с файлами, расположенными в каталоге)

Write

W

Запись в файл

<


Определение групп и их прав доступа выполняется с помощью утилиты syscon.exe.

Операционная система обладает развитым командным языком для написания файлов загрузки Login Script, большим набором утилит для пользователя и системного администратора. Охарактеризуем важнейшие из них. Для пользователя это утилиты, хранящиеся в каталоге PUBLIC.

LOGIN - первая команда, которую должен выдать пользователь перед началом работы в сети. При помощи этой команды пользователь подключается к файл-серверу.

Если команда login

запущена без параметров, вы будете подключены к ближайшему серверу. Дополнительно Вам надо будет ввести имя пользователя и, возможно, пароль:

login [/параметры][сервер[/имя_пользователя]][параметры_входа]

В табл. 5.2 приведены параметры, задаваемые командой login

через символ "/" (выделенные буквы можно использовать в качестве сокращения).

Таблица

5.2

Некоторые параметры команды LOGIN

Параметр

Назначение и использование

/Script

/NoAttach

/CleanScreen

Позволяет выполнить подключение к сети с отличным от стандартного файлом Login Script; после параметра необходимо указать полный путь к нужному файлу Login Script

Этот параметр нужен для запуска файла Login Script без подключения к файл-серверу

Стирание экрана во время ввода пароля

После перечисленных выше параметров можно указать имя файл-сервера и имя пользователя. После имени пользователя можно указать дополнительные параметры, которые можно будет проанализировать во время выполнения файла Login Script.

LOGOUT - отключение от файл-сервера. В качестве параметра можно указать имя файл-сервера, от которого вы собираетесь отключиться:

logout[имя_сервера]

Если имя файл-сервера не указано, выполняется отключение от всех серверов, к которым вы были подключены.

MAP - отображение каталогов файл-сервера на локальные диски рабочей станции. Эта команда позволяет автоматизировать процесс отображения каталогов (табл. 5.3).


Приведем общий формат вызова команды (с некоторыми упрощениями):

mар [функция][диск:=[путь[„„]]]

Таблица 5.3

Форматы команды MAP

Формат

 

Комментарий

 

mар

mар диск:= [путь] каталог

mар диск:= [путь] каталог; диск:= [путь] каталог;

map insert диск_поиска:= [путь] каталог;

map root диск := [путь] каталог;

диск := диск

Если команда mар выдана без параметров, на экране отображаегся карта текущего отображения каталогов

Отображение диска «диск» на сетевой каталог «каталог»; в пути для сетевого каталога можно указывать имя сервера или имя тома.

Одновременное отображение нескольких дисков в одной команде

Отображение сетевого каталога на диск. Полученный диск автоматически просматривается при запуске программ, поэтому он называется «дискпоиска»

Отображение сетевого каталога на корневой каталог локального диска. Требуется для тех программ, которые могут работать только с корневым каталогом

MENU. Если, находясь в каталоге SYS:PUBLIC, вы запустите программу тепи.ехе

с параметром main, на экране появится меню, с помощью которого можно выполнять запуск различных сетевых утилит (табл. 5.4).

NCOPY - копирование файлов (табл. 5.5). В отличие от средств копирования файлов, предоставляемых MS DOS, утилита псору

сохраняет атрибуты файлов, специфические для Novell NetWare, поэтому она более предпочтительна для использования в сети, чем программы MS DOS:

nсору [путь1]имя_файла [to] путь2 [параметры...]

В строке, приведенной выше, «путь1» и «путь2» определяют соответственно пути к копируемому файлу и к каталогу, в который он будет копироваться. Можно указывать символы "*", "?", которые будут восприниматься так же, как и для обычной команды copy из операционной системы MS DOS. Для переименования файла при копировании необходимо в качестве параметра «путь2» использовать полный путь к новому файлу с указанием нового имени.



NDIR - получение детальной информации о файлах, расположенных в сетевых каталогах:

ndir [путь][параметры...]

Для команды ndir можно задавать параметры, можно просмотреть полный список параметров, запустив утилиту ndir с параметром /HELP.

SALVAGE - восстановление случайно удаленных файлов. Восстановление возможно, если не использовалась утилита purge,

очищающая каталоги от удаленных файлов.

Запустив утилиту, оказываемся в меню Main Menu Options. Выбрав строку Select Current Directory,

указываем каталог, в котором необходимо восстановить удаленные файлы. Указанный каталог становится текущим (с точки зрения утилиты salvage).

Таблица 5.4

Меню для запуска сетевых утилит

Строка

 

Утилита

 

Назначение

 

Session Management

session

Управление сеансами связи

File Management

filer

Управление файловой системой

Volume Information

volinfo

Получение информации о сетевых томах

System Configuration

syscon

Утилита для изменения конфигурации системы

File Server Monitoring

fconsole

Управление файл-сервером

Print Queue Management

pconsole

Управление очередями печати

Print Job Configuration

printcon

Определение конфигурации заданий на печать

Printer Definitions

printdef

Определение принтеров

Logout

logout

Отключение от сети

Таблица 5.5

Параметры процедуры NCOPY

Параметр

 

Назначение и использоввание

 

/S





/I

/V





Копирование вместе с подкаталогами

Копирование пустых подкаталогов. Этот ключ используется совместно с ключом /S Копирование файлов без сохранения атрибутов

Выдать сообщением тех случаях, когда программа не может скопировать атрибуты файла

Выполнить проверку после копирования на идентичность файла-оригинала и файла-копии

Скопировать файлы с установленным в слове атрибутов архивным битом. Атрибуты файла не изменяются

Скопировать файлы с установленным в слове атрибутов архивным битом После копирования архивный бит в слове атрибутов исходного файла сбрасывается. Это позволяет использовать NCOPY для выполнения архивной выгрузки содержимого каталога

<


Для восстановления файлов необходимо выбрать в главном меню строку Salvage From Deleted Directories. Для просмотра списка удаленных файлов в текущем каталоге и их последующего восстановления служит строка View/Recover Deleted Files.

SEND - посылка с одной рабочей станции на другие короткого (длиной не более 44 символов) сообщения.

Если рабочая станция, на которую послано сообщение, находится в текстовом режиме, полученное сообщение отображается в нижней строке экрана. Работа рабочей станции приостанавливается до тех пор, пока пользователь не нажмет комбинацию клавиш <Ctrl+Enter>.

SESSION - просмотр информации о группах пользователей и об отдельных пользователях, посылка пользователям сообщения, просмотр и изменение отображения сетевых каталогов на диски рабочей станции.

SYSCON - управление сервером, группами пользователей и отдельными пользователями в диалоговом режиме.

Обычные пользователи с помощью этой утилиты могут изменить свой пароль и отредактировать свой файл Login Script.

Пользователи с правами супервизора могут с помощью этой утилиты назначать руководителей групп.

FCONSOLE - управление файл-сервером. Эта диалоговая утилита способна выполнять такие операции с файл-сервером, которые обычно выполняются при помощи команд с консоли файл-сервера. С ее помощью можно выдавать сообщения одновременно всем пользователям в сети, просматривать информацию о работающих в сети пользователях и управлять состоянием файл-сервера.

FILER - управление томами и каталогами. С помощью этой утилиты можно изменять атрибуты каталогов и файлов, изменять права доступа пользователей к каталогам и файлам.

С консоли файл-сервера (если к нему подключена клавиатура и дисплей) можно вводить разнообразные команды. Наиболее часто употребляемые команды приведены ниже.

BROADCAST - посылка сообщения пользователям. Это могут быть, например, сообщения о завершении работы сервера или о размонтировании сетевых томов. Длина сообщения не может превышать 55 символов:

broadcast <сообщение> to [параметр]



DISMOUNT - размонтирование сетевого тома, после чего он делается недоступным для пользователей. Такая операция может потребоваться для снятия редко используемого тома или восстановления его утилитой vrepair:

dismount <имя_тома>

Перед размонтированием тома необходимо предупредить об этом пользователей при помощи команды broadcast.

DOWN - останов файл-сервера. При этом содержимое дисковых буферов переписывается из оперативной памяти на диск, закрываются все файлы и обновляются каталоги. Перед выдачей этой команды необходимо предупредить пользователей, послав им сообщение при помощи команды broadcast.

После завершения процесса останова операционной системы Novell NetWare версии 3.11 на экран консоли выдается сообщение:

Server ...has been shut down. Type EXIT to return to DOS

После появления этого сообщения необходимо выдать команду exit.

Операционная система Novell NetWare завершит свою работу, и появится системное приглашение MS DOS. Если была выдана команда remove dos,

вместо возврата в MS DOS произойдет «теплая» перегрузка файл-сервера (без выполнения процедур начального тестирования при включении питания).

EXIT - возвращение в MS DOS или теплая перегрузка файл-сервера, если была выдана команда remove dos.

Команда exit

должна выдаваться после команды down, останавливающей файл-сервер. Эта команда отсутствует в операционной системе Novell NetWare версии 2.2.

LOAD - запуск с консоли файл-сервера nlm-программ, для загрузки драйверов сетевых адаптеров и дисковых драйверов Эта команда отсутствует в операционной системе Novell NetWare версии 2.2, так как в этой версии не используется механизм nlm-программ.

MODULES - просмотр списка программ, работающих в среде Novell NetWare, на экране консоли файл-сервера.

На экран выводится таблица, в которой для каждой программы приводится имя файла, содержащего программу, и краткое название программы. Эта команда отсутствует в операционной системе Novell NetWare версии 2.2. Список загруженных VAP-процессов можно просмотреть по команде VAP.



MOUNT- монтирование тома, имя которого задано в качестве параметра. Если в качестве параметра указать ''ALL", будут смонтированы все имеющиеся на фалл-сервере тома. Размонтировать том можно при помощи команды dismount.

SET - просмотр и установление различных параметров Novell NetWare. Детальное рассмотрение этих параметров выходит за рамки нашей книги; их можно найти в документации, поставляющейся с Novell NetWare.

SET TIME - установка системной даты:

set time [месяц/день/год][часы:мннуты:секунды]

UNLOAD - выгрузка nlm-программ, запущенных при помощи команды load. Единственный параметр этой команды - имя выгружаемой программы. Эта команда отсутствует в операционной системе Novell NetWare версии 2.2.

VOLUMES - вывод на экран консоли файл-сервера списка томов, смонтированных на данном файл-сервере. Эта команда отсутствует в операционной системе Novell NetWare версии 2.2.

В систему NetWare версии 3.11 входит ряд полезных nlm-модулей (находящихся в каталоге SYSTEM). Они могут быть запущены с помощью команды load. Среди них:

EDIT - запуск с консоли файл-сервера текстового редактора, если ввести команду load edit.

После загрузки в ответ на приглашение File to Edit необходимо ввести путь к файлу, который надо отредактировать, например:

sys:system/autoexec.ncf

Завершение редактирования - клавиша <ESC> и подтверждение необходимости сохранения файла (выбором строки Yes в появившемся меню).

MONITOR - отображение текущего состояния сети. С помощью этой команды можно заблокировать клавиатуру консоли файл-сервера паролем. Программа запускается командой load monitor.

VREPAIR - исправление небольших разрушений в логической

структуре данных на сетевых томах. Загружается при помощи команды load.

Перед восстановлением тома его необходимо размонтировать при помощи команды dismount.


ОПЕРАТОРЫ. УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ ЯЗЫКА


Операторы служат основными строительными блоками программы. В языке Си указанием на наличие оператора служит символ «точка с запятой», стоящий в конце него.

Операторы состоят из выражений. Выражение представляет собой объединение операций и операндов. Операндом называется то, над чем выполняется операция.

Оператор присваивания

Общий вид оператора присваивания <Имя> = <Выражение>;

Пример: int x, у, а;

х=5;

у=х*2+7;

а=у/4;

Переменные получают значения: х=5, у=17, а=4.

В языке Си разрешается включать присваивания в выражения, т. е. присваивание может

рассматриваться как операция с учетом старшинства и влияния скобок.

Пример:

а=(у=(х=5)*2+7)/4.

В результате переменная х получает значение 5, причем это значение участвует в дальнейших вычислениях. Затем выполняется умножение (5*2), сложение (10+7) и еще одно присваивание (у=17). Переменная у получает значение 17, после чего производится деление (17/4), результат которого присваивается переменной а.

В языке Си для компактной записи операторов присваивания имеются специальные операции

+=_=*= /= %= Так, следующие две записи на языке Си эквивалентны: i = i+2 и i+=2.

Пример:

int x,y;

х=у=5;

х+=2; /* х увеличить на 2, результат х=7 */ у- =3; /* у уменьшить на 3. результат у=2 "7 х*=у; /* х умножить на у, результат х=14 */ .- х/=++у; /* разделить х на увеличенный у; результат у=3,х= 12/3 */

Операция присваивания сама по себе имеет значение (равное значению выражения, стоящего справа от знака "=") и может входить в выражения.

Оператор if/else

Общий вид оператора:

If(<выражение>) <оператор1>

else <оператор2>;

Здесь часть "else <оператор2>" является необязательной, можно применять и одиночный оператор

If(<выражение>) <оператор1>;

Вначале вычисляется значение выражения. Оператор выполняется, если значение выражения истинно. Если выражение ложно (его значение равно нулю), и если есть часть с else, то выполняется оператор2.

Программа 88


В1?В2:ВЗ

Сначала вычисляется значение выражения В1. Если оно отлично от нуля (истинно), то вычисляется значение выражения В2, которое и становится значением условного выражения. В противном случае вычисляется значение выражения ВЗ, и оно становится значением условного выражения.

Условное выражение удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Типичными примерами являются присваивание переменной значения большей из двух величин:

max = (a>b)?a:b;

и нахождение абсолютного значения числа:

х = (у<0)?-у : у;

Оператор-переключатель switch

В тех случаях, когда в программе необходимо произвести выбор одного из нескольких вариантов, удобно применять оператор switch. Его синтаксис:

switch (<выражение>)

{

case <константа1>: <список операторов1>;

case <константа2>: <список операторов2>;



case <константаN>: <список операторовN>;

default: <список операторов>;

}

Оператор-переключатель выполняется следующим образом. Вычисляется значение выражения в скобках, приведенного после ключевого слова switch, затем программа просматривает список меток, указанных после слов case, до тех пор, пока не находит ту, которая соответствует данному значению. Далее программа переходит к выполнению оператора, расположенного в этой строке. Если подходящей метки не найдется и если существует строка с меткой default:, то будет выполнятся оператор, помеченный этой меткой. В противном случае произойдет переход к оператору, расположенному за оператором switch.

Метки, имеющиеся в операторе switch, должны быть константами или константными выражениями (выражениями, операнды которого константы) целого или символьного типа. Запрещается использовать в качестве метки переменную. Значением выражения в скобках должна быть величина целого или символьного типа. Список операторов варианта может быть либо пустым, либо заканчиваться одним из операторов завершения (break, continue, goto, return).


Если у вариантов нет общих частей, то рекомендуется каждый вариант завершать оператором break.

Программа 89

#include <stdio.h>

main ()

{

int c;

printf("Введите цифру от 1 до 7:");

c=getchar() ;

printf("\nСоответствующий день недели:");

switch (с)

{

case '1': (printf("\nПонедельник!");break;}

case '2': {printf("\nВторник!");break;}

case '3': (printf("\nСреда!");break;}

case '4': {printf("\nЧетверг!");break;}

case '5': (printf("\nПятница!");break;)

case '6': {printf("\nСуббота!");break;}

default:printf("\nBocкpeceньe!") ;

}

}

Если не использовать оператор завершения, то по окончании выполнения списка операторов выбранного варианта произойдет переход на следующий вариант из списка.

Оператор цикла for

 

Оператор

for (<оператор1>;<выражение>;<оператор2>) <оператор3>;

позволяет организовать повторяющийся вычислительный процесс и называется оператором цикла. Как правило, оператор1 и оператор2 являются операторами присваивания или обращениями к функции, а выражение1 - условным выражением.

Цикл for удобно использовать в тех случаях, когда заранее известно количество повторений тела цикла, или имеется явно выраженная переменная, управляющая циклом. В этом случае выражение1 вычисляется один раз и задает инициализацию управляющей переменной.

Выражение1 является условием завершения цикла, а оператор2 задает приращение управляющей переменной.

Например, следующая конструкция

for (i=l; i<n; i++) <оператор>;

является широко распространенной и позволяет «перебрать» первые п натуральных чисел. Из первой строки цикла for можно сразу узнать всю информацию о параметрах цикла: начальное значение переменной i, ее конечное значение, а также насколько увеличивается значение переменной i при каждом выполнении тела цикла.

Любой из операторов и выражений в цикле for может быть опущен, хотя точка с запятой при этом должна оставаться.


Если отсутствует оператор1 или оператор2, то он просто выпадает из вычислений. Если же отсутствует выражение1, то считается, что оно всегда истинно.

Например, цикл

for (i=l ;;i++) {



}

является бесконечным.

Существуют разнообразные возможности применения цикла for:

1) можно применять операцию уменьшения для счета в порядке убывания вместо счета в порядке возрастания

for(n=10;n>0;n-)

printf("%d \n",n);

2) при желании можно вести счет двойками, десятками и т.д.

for (n=2;n<60;n+=2)

printf("%d\n",n);

3) можно вести подсчет при помощи символов, а не только чисел

for(ch='a';ch<='z';ch++)

printf("Beличинa кода ASCII для %с равна %d.\n",ch,ch);

4) можно проверить выполнение некоторого произвольного условия, отличного от условия, налагаемого на число итераций

for(num=l;num*num*num<216;num++)

5) можно сделать так, чтобы значение некоторой величины возрастало не в арифметической, а в геометрической прогрессии

for(n=l;n<1500;n*=3)

printf("-%d \n",n);

6) в качестве третьего выражения можно использовать любое правильно составленное выражение; какое бы выражение вы ни указали, его значение будет меняться при каждой итерации

for(x= I ;у<=75;у=5*(х++)+10)

printf("%d, %d\n",x,y);

7) можно даже опустить одно или более выражений (но при этом нельзя опускать символы ";"); необходимо только включить в тело цикла несколько операторов, которые в конце концов приведет к завершению его работы

ans=2;

for(n=3;ans<=25;)

ans=ans*n;

Тело цикла for(;;)

printfC"* \n");

будет выполняться бесконечное число раз, поскольку пустое условие всегда считается истинным;

8) первое выражение не обязательно должно инициализировать переменную; вместо этого, например, там мог бы стоять оператор printf() некоторого специального вида; необходимо помнить, что первое выражение вычисляется только один раз перед тем, как остальные части цикла начнут выполняться



for(printf("3апоминайте введенные числа!\n");num = 6;)

scanf('"%d",&num);

printf(" ЭTO как раз то, что я хочу!\n");

в этом фрагменте первое сообщение оказывается выведенным на печать один раз, а затем осуществляется прием вводимых чисел до тех пор, пока не поступит число 6;

9) параметры, входящие в выражения, находящиеся в спецификации цикла, можно изменить при выполнении операций в теле цикла; предположим, например, что есть цикл со спецификацией следующего вида:

for(n=l;n< l000;n+=delta)

и если после нескольких итераций программа решает, что величина параметра dalta слишком мала или велика, оператор if внутри цикла может изменить значение этого параметра (в диалоговой программе пользователь может изменить этот параметр в процессе выполнения цикла).

В качестве оператора в теле цикла также может быть цикл. На количество вложений циклов друг в друга ограничений нет.

В спецификацию цикла for может быть включено несколько инициализирующих или корректирующих выражений. Например, два вложенных цикла можно записать двумя различными способами:

1. for(i=l;i<10;i++)

for(j=l;j<10;j++)

<оператор>

2.      for(i=l,j=l;i<10,j<10;i++,j++)

<оператор>

В нижеследующей программе переменные х, у, z изменяются параллельно.

Программа 90

# include<stdio.h>

main()

{

int x,y,z,v,u,zero();

for(x=l,y=l,z=l;x<10;x++,y++,z++)

printf("x=%d y=%d z=%d\n", х, y, z);

}

Результат работы программы:

x=l y=l z=l

x=2 y=2 z=2

x=3 y=3 z=3

x=4 y=4 z=4

x=5 y=5 z=5

x=6 y=6 z=6

x=7 y=7 z=7

x=8 y=8 z=8

x=9 y=9 z=9

Оператор цикла while

 

В общем виде цикл while записывается так:

while (<выражение>) <оператор>;

Цикл while является «условным» циклом, использующим предусловие (т.е. условие на входе). Он называется условным, потому что выполнение оператора зависит от истинности условия, описываемого с помощью выражения. .



Если выражение «истинно» (или в общем случае не равно нулю), то оператор, входящий в цикл while, выполняется один раз, а затем выражение проверяется снова. Эта последовательность действий, состоящая из проверки и выполнения оператора, периодически повторяется до тех пор, пока выражение не станет ложным (или в общем случае равным нулю). После этого управление передается оператору, следующему за оператором цикла while.

При построении цикла while необходимо включить в него какие-то конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным. В противном случае выполнение цикла никогда не завершится.

Пример 1. Алгоритм Евклида.

Программа 91

#include<stdio.h>

main()

{

int x,y;

scanf("\n%d",&x); scanf("\n%d",&y) ;

while (x!=y)

{

if (x>y) x=x-y; else y=y-x;

)

printf("\n%d",x);

)

Пример 2. Проверить, содержит ли квадрат натурального числа n цифру 3.

Программа 92

#include<stdio.h>

main()

{

int i,n,a;

scanf("%d",&n); n=n*n; i=10000;

while(i>=l)

{

a=n/i; /* если результат целочисленного деления n/i

меньше 1,то а=0 */

n=n-a*i;

if(a==3) goto abc; else i=i/10;

)

printf("цифры 3 в числе n^2 нет");

goto

cd;

abc: printf("цифра 3 в числе n^2 есть");

cd: ;

}

Оператор цикла do/while

В языке Си имеется также конструкция цикла с постусловием (условие на выходе), где истинность условия проверяется после выполнения каждой итерации цикла. Этот подход реализуется с помощью цикла do/while.

Тело цикла do/while всегда выполняется по крайней мере один раз, поскольку проверка условия осуществляется только после его завершения.

Форма записи:

do <оператор>

while (<выражение>);

Оператор break

 

Оператор break дает возможность выйти из операторов цикла for, while, do/while, а также из переключателя switch без проверки условия. Оператор break приводит к немедленному выходу из самого внутреннего охватывающего его цикла или из переключателя.



Оператор break может использоваться для выхода из цикла в тех случаях, когда заданы два разных условия прекращения его работы.

Программа 93

# include<stdio.h>

main()

{

int x=l,y,z;

printf("Мы будем вычислять значение функции y=2*x+z\n");

printf("Введите значение z:"); scant("%d",&z);

while(x<1000)

(

     y=2*x+z;x++; if y=100 ( printf(= 100\n"); break; }

} if y=100

printf("Цикл закончен!!!") ;

else printf ("Цикл

закопчен!!! Но y<>lOO.");

}

Наличие оператора break позволяет использовать «бесконечные циклы». В ряде случаев весьма удобно записать заголовок цикла без всякого условия в виде

 

for(;;),

а выход из цикла оформить с помощью операторов break.

Оператор продолжения continue

Оператор continue вызывает преждевременное завершение выполнения тела цикла и переход к следующему шагу цикла. Оператор continue действует только на самый внутренний цикл, частью которого он является.

Программа 94

#include<stdio.h>

main()

(

int x,y,z;

printf("Мы будем вычислять значение функции y=2*x+z\n");

printf("в промежутках [1;6] и [13;18].");

printf("Введите значение z= "}; scant("%d",&z) ;

for(x=l;x<18;x++)

{

if ((x>6) and (x<13))

continue;

y=2*x+z; printf(= %d, у= %d",x,y);

}

}

Оператор безусловного перехода goto

 

Оператор перехода предназначен для безусловной передачи управления в заданную точку программы. Его выполнение заключается в передаче управления оператору, помеченному заданной меткой.

В качестве метки используется идентификатор. Метка отделяется от оператора, к которому она относится, двоеточием. Помеченный оператор должен находиться в пределах той же функции, что и оператор goto. Может быть помечен любой оператор, но никакие два разных оператора не должны иметь одинаковые метки (внутри одной и той же функции). Кроме того, один оператор может быть помечен несколькими метками.



Форма:

goto <метка>;...

<метка>: <оператор>

Составные операторы и блоки

Символы "{" и "}" используются для объединения описаний и операторов в составной оператор или блок, так что все конструкции, заключенные в фигурные скобки, оказываются синтаксически эквивалентными одному оператору. Точка с запятой никогда не ставится после первой фигурной скобки, которая завершает блок.

Составной оператор - последовательность операторов, заключенная в фигурные скобки (при необходимости его используют в качестве «внутреннего» оператора в операторах ветвления и цикла). Он называется также «блоком». Блоки не могут быть вложенными.

Пример /* I -й вариант */

Программа 95

#include<stdio.h>

main()

{

int sam,index=0;

/* В цикл включен только оператор присваивания. Печать данных */ /* будет произведена только один раз - после завершения цикла */

while(index++<10)

sam=10*index+2;

printf("sum= %d\n",sam) ;

)

Результат работы программы:

sam = 102

 /* II -й вариант */

Программа 96

#include<stdio.h>

main ()

(

int sam,index=0;

/* Наличие фигурных скобок гарантирует, что оба оператора */

/* являются частью цикла while, и печать результатов будет */

/* производиться на каждом шаге работы цикла. Весь составной*/

/* оператор рассматривается как один оператор, являющийся */

/* составной частью оператора while. */

while(index++<10)

{

sam=10*index+2; printf("sum = %d\n",sam);

}

}

Результат работы программы:

sam = 12

sam = 22

sam = 32

sam = 42

sam = 52

sam = 62

sam = 72

sam = 82

sam = 92

sam = 102

Пустой оператор

состоит только из точки с запятой (;) и используется для обозначения пустого тела управляющего оператора.


ОРГАНИЗАЦИЯ «МЕНЮ» В ПРОГРАММНЫХ СИСТЕМАХ


Прикладные программы нацелены на широкий круг пользователей (непрограммистов) и предполагают диалоговый режим работы человека с компьютером. Широкой популярностью пользуются программы, обладающие дружественным интерфейсом, т.е. таким, который не требует от пользователя больших усилий в работе со всеми необходимыми периферийными устройствами, специальных настроек компьютера и обладает удобной системой управления и диалога.

Интерактивный режим в прикладных программах осуществляется по двум принципам: «смотри и выбирай» и «подтверждай то, что я делаю». Программы не утрачивают работоспособности при ошибках пользователя, позволяют легко и безболезненно исправлять ошибочные действия путем их отмены, а также обращаться в любой момент к контекстной помощи. Все принципы дружественного интерфейса реализуются специальной системой интерактивного (диалогового) общения компьютерной программы и пользователя, называемой «пользовательским меню» или просто «меню».

«Меню» представляет набор команд, указаний и данных, который в любой момент доступен пользователю для выбора дальнейшего действия. Указатель (курсор) имеет возможность циклически сканировать меню и управляется клавишами со стрелками и/или манипулятором «мышь». Выбор команды осуществляется установкой курсора на его пункт и нажатием клавиши ввода <Enter>, или указанием стрелки «мыши» и двойным щелчком ее клавиши. Более быстрый выбор команды может быть осуществлен нажатием специальных клавиш или их комбинацией. Как правило, в них участвуют клавиши с буквой, с которой начинается название команды. По своей организации меню представляет иерархическую структуру с системой вложенных подменю («выплывающие», «ниспадающие», «оконные» и пр.) с возможностью возврата из любого пункта в главное (основное) меню.

Меню бывает текстовым и/или графическим с комментариями по каждому своему пункту. Прикладные программы дополнительно имеют функциональное клавишное меню для быстрого выполнения каких-либо команд («горячие клавиши» -«hot key»).
Например, функциональная клавиша F1 чаще используется для экстренного вызова справочной информации (Help - помощь), клавиша F2 - для сохранения данных во внешней памяти.

Фирмы-разработчики программных средств организуют программные меню по своим стандартам и единообразно. Так, например, фирма «Борланд» практикует свой фирменный интерфейс, который легко распознается всеми программистами и пользователями, работающими в системах программирования Турбо: Турбо-Паскаль, Турбо-Бейсик, Турбо-Си и т.п. (см. выше рис.2.10). В верхней части экрана дисплея в Турбо-программах помещается горизонтально главное меню, каждый пункт которого может иметь ниспадающее подменю. В нижней части помещаются команды для функциональных клавиш («горячие» клавиши), рядом - строка статуса, которая дает комментарии к выбираемым командам меню и некоторые параметры состояния прикладной программы.

Таким образом, меню - это некоторый перечень команд (функций), которые имеются в распоряжении пользователя на различных этапах работы с программной системой.

Исторически первым видом «меню» можно считать перечень команд в виде пронумерованного списка возможных функций

Например:

1 - редактирование текста;

2-трансляция программы;

3 - выход.

Оставалось лишь выбрать режим путем нажатия клавиши с его номером и клавиши <Ввод>.

Другой вариант такого меню - ненумерованный список команд, в котором выбор нужной команды осуществляется нажатием клавиши с первой буквой ее имени.

Например:

Редактирование текста;

Трансляция программ;

Выход.

Еще один схожий способ, бывший ранее популярным - наличие справа или слева от списка стрелки, движение которой по вертикали управляется клавишами v и ^. Установив стрелку против нужной строки и нажав клавишу <Ввод>, осуществляем выбор нужной команды.

Например:

Редактирование текста;

Трансляция программ; <=

Выход.

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



Дальнейшее развитие числовых меню привело к символьным меню, в которых выбор заданной функции осуществлялся с помощью ввода соответствующего символа или с помощью функциональных клавиш клавиатуры Fl, F2, F3 ...

Принципиальным шагом в организации эффективных пользовательских меню стало использование графических средств. Появилась возможность создать указатель (в разных программных средах - светящийся курсор, стрелка, выделенный прямоугольник и т.п.), перемещающийся с помощью клавиш со стрелками, а выбор пункта меню осуществлять нажатием специальной клавиши, как правило, ENTER или <Пробел>.

Один из признаков дружественности меню - когда подведение указателя к некоторому элементу меню отображает комментарий функционального назначения. Например, в пункте Текст

может появиться комментарий:

Операции над текстом в целом: считывание, запись, печать

Если выбрать этот пункт меню нажатием клавиши ввода ENTER, то появится подменю команд работы с текстом.

Подобный принцип иерархии в построении меню, который включает главное (основное меню) и дерево подменю, позаимствован из организации структуры директорий (каталогов) файловой системы компьютера. Теперь появилась возможность строить не только дружественный интерфейс, но и дизайн. Возникли меню с системой «ниспадающих», «всплывающих», «многооконных» и т.д. подменю.

Современные типы меню строятся с использованием графического и символьного режимов. Символьный принцип в меню используют для выбора быстрых команд. Соответствующим командам назначаются клавиши, их комбинации или функциональные клавиши Fl ... F 12.

Существует определенная традиция действий «горячих»

клавиш. В частности, в большинстве программ клавиша F2 сохраняет результаты работы, комбинация ALT+X осуществляет выход из программы и т.д.

Значительные удобства пользователю предоставляет специальный манипулятор «мышь», который позволил серьезно облегчить и предоставить комфортные условия работы. Перемещая с помощью мыши указатель, можно одним нажатием кнопки мыши вызвать требуемую функцию.



Современные программные системы построены на интерактивных меню, использующих принцип «кнопки», которые требуют от пользователя минимальных знаний и действий. В них закладывается удобный и оптимальный для работы человека диалоговый режим. Меню содержат интерактивные формы:

• с шаблоном ответа

                                               Продолжить?

Y/N

• со справочником ответа

                                               Какой цвет назначить: черный белый красный голубой

• с назначением параметров, рис. 2.12;

• многостраничные формы, рис. 2.13.



Рис. 2.12. Пример меню с назначением параметров (меню формы печати в Word)



Рис.2.13. Пример многостраничного меню (свойства обозревателя Internet Explorer 4.0)

Интерфейс современных меню строится таким образом, чтобы запрос-ответ пользователя был однозначен, прост и удобен. В силу большой значимости систем организации меню, в большинстве инструментальных сред для разработки программ предусматриваются специальные процедуры и объекты создания меню. Особенное внимание им уделяется в системах управления базами данных (СУБД), авторских системах, в объектно-ориентированных языках программирования.

При работе е прикладными программами пользователю приходится сталкиваться в первую очередь с меню. От того, как он освоил работу с его пунктами, зависит эффективность использования информационной технологии.


ОСНОВНОЙ ЦИКЛ РАБОТЫ ЭВМ


В данном разделе коротко рассмотрена последовательность действий при выполнении команды в ЭВМ. Можно утверждать, что рабочий цикл в общем виде одинаков для всех фон-неймановских машин.

Как уже отмечалось в п.2.2,

важной составной частью фон-неймановской архитектуры является счетчик адреса команд. Этот специальный внутренний регистр процессора всегда указывает на ячейку памяти, в которой хранится следующая команда программы. При включении питания или при нажатии на кнопку сброса (начальной установки) в счетчик аппаратно заносится стартовый адрес находящейся в ПЗУ программы инициализации всех устройств и начальной загрузки. Дальнейшее функционирование компьютера определяется программой. Таким образом, вся деятельность ЭВМ - это непрерывное выполнение тех или иных программ, причем программы эти могут в свою очередь загружать новые программы и т.д.

Каждая программа состоит из отдельных машинных команд. Каждая машинная команда, в свою очередь, делится на ряд элементарных унифицированных составных частей, которые принято называть тактами. В зависимости от сложности команды она может быть реализована за разное число тактов. Например, пересылка информации из одного внутреннего регистра процессора в другой выполняется за несколько тактов, а для перемножения двух целых чисел их требуется на порядок больше. Существенное удлинение команды происходит, если обрабатываемые данные еще не находятся внутри процессора и их приходится считывать из ОЗУ.

При выполнении каждой команды ЭВМ проделывает определенные стандартные действия:

1) согласно содержимому счетчика адреса команд, считывается очередная команда программы (ее код обычно заносится на хранение в специальный регистр УУ, который носит название регистра команд);

2) счетчик команд автоматически изменяется так, чтобы в нем содержался адрес следующей команды (в простейшем случае для этой цели достаточно к текущему значению счетчика прибавить некоторую константу, определяющуюся длиной команды);

3) считанная в регистр команд операция расшифровывается, извлекаются необходимые данные и над ними выполняются требуемые действия.


Затем во всех случаях, за исключением команды останова или наступления прерывания (см. ниже в п. 3.5), все описанные действия циклически повторяются.

После выборки команды останова ЭВМ прекращает обработку программы. Для выхода из этого состояния требуется либо запрос от внешних устройств, либо перезапуск машины.

Рассмотренный основной алгоритм работы ЭВМ позволяет шаг за шагом выполнить хранящуюся в ОЗУ линейную программу. Если же требуется изменить порядок вычислений для реализации развилки или цикла, достаточно в счетчик команд занести требуемый адрес (именно так происходит условный или безусловный переход).

В компьютерах на базе микропроцессоров INTEL 80286 и более поздних моделей для ускорения основного цикла выполнения команды используется метод конвейеризации (иногда применяется термин «опережающая выборка»). Идея состоит в том, что несколько внутренних устройств процессора работают параллельно: одно считывает команду, другое дешифрует операцию, третье вычисляет адреса используемых операндов и т.д. В результате по окончании команды чаще всего оказывается, что следующая уже выбрана из ОЗУ, дешифрована и подготовлена к исполнению. Отметим, что в случае нарушения естественного порядка выполнения команд в программе (например, при безусловном переходе) опережающая выборка оказывается напрасной и конвейер очищается. Следующая за переходом команда выполняется дольше, так как, чтобы конвейер «заработал на полную мощность», необходимо его предварительно заполнить. Иными словами, в конвейерной машине время выполнения программы может зависеть не только от составляющих ее команд, но и от их взаимного расположения.


ОСНОВНЫЕ ФУНКЦИИ И КОМПОНЕНТЫ


Системы программирования - это комплекс инструментальных программных средств, предназначенный для работы с программами на одном из языков программирования. Системы программирования предоставляют сервисные возможности программистам для разработки их собственных компьютерных программ.

В настоящее время разработка любого системного и прикладного программного обеспечения осуществляется с помощью систем программирования, в состав которых входят

• трансляторы с языков высокого уровня;

• средства редактирования, компоновки и загрузки программ;

• макроассемблеры (машинно-ориентированные языки);

• отладчики машинных программ.

Системы программирования, как правило, включают в себя

• текстовый редактор (Edit), осуществляющий функции записи и редактирования исходного текста программы;

•загрузчик программ (Load), позволяющий выбрать из директория нужный текстовый файл программы;

• запускатель программ (Run), осуществляющий процесс выполнения программы;

• компилятор (Compile), предназначенный для компиляции или интерпретации исходного текста программы в машинный код с диагностикой синтаксических и семантических (логических) ошибок;

• отладчик (Debug), выполняющий сервисные функции по отладке и тестированию программы;

• диспетчер файлов (File), предоставляющий возможность выполнять операции с файлами:сохранение, поиск, уничтожение и т.п.

Ядро системы программирования составляет язык. Существующие языки программирования можно разделить на две группы: процедурные и непроцедурные, рис. 2.9.

Процедурные (или алгоритмические) программы представляют из себя систему предписаний для решения конкретной задачи. Роль компьютера сводится к механическому выполнению этих предписаний.

Процедурные языки разделяют на языки низкого и высокого уровня.

Языки низкого уровня (машинно-ориентированные) позволяют создавать программы из машинных кодов, обычно в шестнадцатиричной форме. С ними трудно работать, но созданные с их помощью высококвалифицированным программистом программы занимают меньше места в памяти и работают быстрее.
С помощью этих языков удобнее разрабатывать системные программы, драйверы (программы для управления устройствами компьютера), некоторые другие виды программ.



Рис. 2.9. Общая классификация языков программирования

Программы на языках высокого уровня близки к естественному (английскому)

языку и представляют набор заданных команд.

Перечислим наиболее известные системы программирования.

1. Фортран (FORmula TRANslating system - система трансляции формул); старейший и по сей день активно используемый в решении задач математической ориентации язык.

2. Бейсик (Beginner's All-purpose Symbolic Instruction Code - универсальный символический код инструкций для начинающих); несмотря на многие недостатки и изобилие плохо совместимых версий - самый популярный по числу пользователей.

3. Алгол (ALGOrithmic Language - алгоритмический язык); сыграл большую роль в теории, но для практического программирования сейчас почти не используется.

4. ПЛ/1 (PL/I Programming Language - язык программирования первый). Многоцелевой язык; сейчас почти не используется.

5. Си (С - «си»); широко используется при создании системного программного обеспечения.

6. Паскаль (Pascal - назван в честь ученого Блеза Паскаля); чрезвычайно популярен как при изучении программирования, так и среди профессионалов. На его базе созданы несколько более мощных языков (Модула, Ада, Дельфи).

7. Кобол (COmmon Business Oriented Language - язык, ориентированный на общий бизнес); в значительной мере вышел из употребления.

8. Дельфи (Delphi) - язык объектно-ориентированного «визуального» программирования; в данный момент чрезвычайно популярен.

9. Джава (Java) - платформенно-независимый язык объектно-ориентированного программирования, чрезвычайно эффективен для создания интерактивных веб-страниц.

Среди непроцедурных языков наиболее известны

1. Лисп (Lisp);

2. Пролог (PROgramming in LOGic);

3. Оккам (назван в честь философа У. Оккама).

Широкое распространение среди разработчиков программ, а также при обучении программированию, получили системы программирования «Турбо» (Turbo) фирмы Borland, ядром которых являются трансляторы с языков программирования Бейсик, Паскаль, Си, Пролог и др.


Интерфейс Турбо- оболочки для любых систем программирования внешне совершенно одинаков и предоставляет пользователю стандартный набор функций и команд, описанных выше и отображаемых в главном меню системы.

Рассмотрим технологию разработки программ с использованием популярной системы программирования Турбо-Паскаль 7 (оставив знакомство с самим языком до следующей главы).

В подобных интегрированных системах программирования сделана попытка предоставить разработчику программ максимум сервисных возможностей. Помимо основных функций система Турбо-Паскаль 7 позволяет настроить компилятор на работу в трех режимах: обычном режиме MS DOS (Real), защищенном режиме (Protected) и в режиме операционной среды Windows (Windows).

После загрузки системы (файл TURBO. EXE), на экране монитора появляется интерфейсное окно, рис. 2.10.



Рис. 2.10. Вид экрана интегрированной среды Турбо-Паскаля версии 7 (монтаж)

Главное меню системы (верхняя строка экрана) содержит команды, которые позволяют осуществлять следующие виды работ:

File                  - работа с файлами (сохранение, загрузка, связь с операционной

                                               системой);

Edit                 - работа с текстовым редактором (после загрузки системы по умолчанию

                                   текстовый редактор находится в активном состоянии);

Search             - поиск и замена фрагментов текста;

Run                 -запуск программы на выполнение;

Compile          — компиляция программы и установка параметров компиляции;

Debug                         - установка параметров отладки программы;

Tools               - инструментальные программные средства (ненавязчивый сервис);

Options           -установка опций интегрированной среды;

Window          - работа с окнами;

Help                -система помощи и подсказок.

Для начала работы с системой программирования необходимо иметь проект текста программы, который можно набирать на рабочем поле окна системы. Встроенный текстовый редактор прост и максимально приспособлен для набора текстов программ на языке Паскаль.


В нем предусмотрена специальная подсветка управляющих структур, команд. Удобна система контекстной помощи (Shift+Fl), которая вызовет подсказку по набираемому текущему тексту программы в любой момент и в любом месте. Впрочем, текст программы можно приготовить в любом текстовом редакторе, хранящем тексты в ASCII-кодах (например, в Лексиконе); необходимо лишь снабдить имя файла расширением .pas.

Если текст (тексты) программы был ранее сохранен на жестком диске или дискете, то он может быть загружен в поле редактирования с помощью пункта меню File.

После окончания формирования текста необходимо откомпилировать программу (пункт меню Compile). Если в программе есть ошибки, то компилятор их укажет. После исправления ошибок можно снова повторить компиляцию.

После удачной компиляции запуск программы осуществляется командой меню Run.

Но на этом этапе чаще всего работа не заканчивается. Сложные алгоритмы требуют тестирования и отладки. Многие программы составляются из отдельных модулей, требуют связи с другими программами и системами и т.д. Для решения всех этих проблем предназначены другие команды системы (Debug, Options и пр.).

Разумеется, программисту, работающему на Паскале, нет нужды самому программировать такие непростые, но часто встречающиеся операции, как вычисление значений математических функций, построение изображений простых геометрических объектов (отрезков прямых, окружностей и т.д.), очистка экрана и множество других. Высокоэффективные, тщательно отлаженные программы таких действий сведены в стандартные модули и надо лишь уметь к ним обратиться. В состав пакета библиотек стандартных модулей входят: Crt - работы с экраном, Graph

-работы с графикой и другие, такие как Overlay, String, System, Turbo3, WinAPI, WinCrt, WinDos, WinPrn, WinTypes, WinProcs.


ОСНОВНЫЕ ЭЛЕМЕНТЫ ПРОГРАММЫ НА ЛИСПЕ. СПИСКИ


Программы на языке Лисп строятся из простейших неделимых элементов, называемых атомами. Символы и числа представляют собой атомы, из них состоят все остальные структуры.

Символ - это имя, состоящее из букв, цифр и специальных знаков, которое обозначает какой-нибудь предмет или действие из реального мира, а также число, функцию (программу) и другие объекты. Наряду с символами используются и числа (значения), которые могут быть целыми (например, 543), десятичными (например, 3.789) и в представлении с мантиссой и порядком (например, 1.0243Е-6).

Главной структурой в Лиспе является список.

Списком называется упорядоченная последовательность, элементами которой являются либо атомы, либо списки (подсписки). Списки заключаются в круглые списки, а их элементы разделяются пробелами. Например,

(ab(cd)e)

(В группе 18 студентов)

(((((первый) 2) третий) 4) 5).

Список, в котором нет ни одного элемента, называется пустым списком и обозначается "( )" или специальным символом NIL. Список - это структура данных, представляющая некоторую иерархическую связь (дерево) с помощью строго соответствующих друг другу открывающих и закрывающих скобок.

Имеется и альтернативный способ записи списков - с использованием, так называемой, точечной нотации. Точка при этом отделяет начальный элемент списка -его голову - от остальной части списка - хвоста: (голова, хвост) или

(а1 а2 ... aN) = (а1. (а2.... (aN.Nil)...)).

Здесь Nil - это предопределенная константа, означающая пустой список (и одновременно логическое значение «Ложь»).

Атомы и списки называются S-выражениями. Все вышесказанное можно обобщить в следующих формах Бэкуса - Наура

<S-выражение>                                :: = <атом> | <список>

<список>                                          :: = (<внутренняя часть>)

<внутренняя часть>                                    :: = NIL | <S-выражение> [{внутренняя часть}}

<атом>                                               :: = цепочка алфавитно-цифровых символов без пробелов или специальных символов (,);.

Списки в Лиспе - основное средство представления знаний. Например, с помощью вложенных списков может быть представлена характеристика человека:

(сотрудник

(имя Петр)

(отчество Петрович )

(фамилия Иванов)

( образование ( среднее (с 1969 по 1979))

(высшее ( ВГУ г.Воронеж (с 1979 по 1982)

(МГУ г. Москва (с 1982 по 1984)) ( специальность

(техническая кибернетика)

(программирование )

(стаж (с 1984 по 1997)

)



ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА


Паскаль - язык структурного программирования. Это означает, что программист должен выражать свои мысли очень дисциплинированно, с использованием малого числа четко оговоренных конструкций, используя как чередование их, так и вложения друг в друга. Не рекомендуется (хотя и возможно) использовать оператор перехода goto.

Реализация последовательности действий (т.е. структуры следования) выполняется с помощью составного оператора:

begin <последовательность операторов> end

Раздел операторов в программе всегда является составным оператором. Служебные слова begin и end часто называют операторными скобками.

Для реализации

развилки в Паскале предусмотрены два оператора: условный оператор и оператор варианта (выбора). Они предназначены для выделения из составляющих их операторов одного, который и выполняется.

Структура и действие

условного оператора

таковы:

If <логическое выраженне>

then <оператор 1>

else <оператор 2>

Условный оператор может быть неполным, т.е. не содержать часть «else <оператор 2>». В этом случае, если значение логического выражения равно false, условный оператор не вызывает никаких действий.

Пример: составим программу, которая определяет длину общей части двух отрезков числовой оси, заданных координатами своих концов соответственно а, b и с, d (а < b, с < d). Если отрезки имеют общую часть, то левая координата общей части отрезков m равна максимальному из чисел а и с, а правая n - минимальному из чисел b и d.

Программа 3

program cross;

var a,b,c,d,m,n,l:real;

begin

writeln('введите координаты концов отрезков') ;

read(a,b,с,d) ;

writeln;

if a<c then m:=c else m:=a;

if b<d then n:=b else n:=d;

if m<n then l:=n-m else 1:=0;

writeln("длина общей части отрезков=',1:6:2)

end.

Оператор варианта

имеет следующую форму:

case <выражение> of

 <список констант 1> : <оператор 1>;

<список констант 2> : <оператор 2>;

…………………………

<список констант N> : <оператор N>


end.

Выражение, стоящее между служебными словами case и of, должно иметь значение ординального типа. Любой список констант может состоять из одной константы.

Оператор варианта вычисляет значение выражения, записанного после case. Если его значение совпадает с одной из констант в некотором списке, то выполняется оператор, стоящий после этого списка. Если значение выражения не совпало ни с одной константой во всех вариантах, то оператор варианта ничего не делает.

В качестве примера приведем программу, которая в зависимости от номера месяца выдает сообщение о времени года.

Программа 4

program seasons;

var k:integers

begin

writeln('введите номер месяца') ;

readin(k);

case k of

1,2,12:writeln('зима');

3, 4,5:writeln('весна') ;

6, 7,8:writeln('лето');

9,10,11:writeln('осень')

end

end.

Для реализации циклов в Паскале имеются три оператора Если число повторений известно заранее, то удобно воспользоваться оператором цикла с параметром. В других случаях следует использовать операторы цикла с предусловием (цикл «пока» ) или с постусловием (цикл «до»).

Цикл с предусловием

является наиболее мощным в Паскале. Другие операторы цикла можно выразить через него. Его форма такова:

while - <логическое выражение> do <оператор>

Действие: вычисляется значение логического выражения. Если оно равно true, то выполняется оператор, после чего снова вычисляется значение логического выражения, в противном случае действие заканчивается.

В качестве примера использования такого цикла решим следующую задачу. На склад привозят однородный груз на машинах различной грузоподъемности. На компьютер, управляющий работой склада, поступает информация о весе груза очередной машины. Составить программу подсчета количества машин, прибывших на склад до его заполнения, если вместимость склада не более 100 тонн.

Введем обозначения: sum - сумма веса груза, хранящегося в этот момент на складе; num - число разгруженных машин; w - масса груза очередной машины.


Вначале величины sum и num равны нулю. Цикл разгрузки продолжается, пока выполняется неравенство sum < 100.

Программа 5

program store;

var sum,w:real;

num:integer;

begin

num:=0;sum:=0;

while sum<100 do

begin

writeln('введите вес груза машины');

readln(w);

sum:=sum+w;

if sum<=100 then num:=num+l

else writeln('груз уже не поместится')

end;

writeln('число разгруженных машин =',num;3)

end.

Оператор цикла с постусловием имеет форму:

repeat <последовательность операторов>

until <логическое выражение>

Действие: выполняется последовательность операторов. Далее вычисляется значение логического выражения. Если оно равно true, то действие заканчивается, в противном случае снова выполняется последовательность операторов и т.д.

Решим предыдущую задачу, применяя цикл с постусловием. Цикл разгрузки заканчивается, если выполняется условие: sum > 100.

Программа 6

program store2;

var sum,w:real; man:integer;

begin

num: =0; sum: =0;

repeat

writeln('введите вес груза машины');

readln(w); sum:=sum+w;

if sum<=100 then num:=num+l .

else writeln('груз ухе не поместится')

until sum>=100;

writeln('количество разгруженных машин =',num:3)

end.

Оператор цикла с

параметром предусматривает повторное выполнение некоторого оператора с одновременным изменением по правилу арифметической прогрессии значения управляющей переменной (параметра) этого цикла. Оператор цикла с параметром имеет две формы.

Форма 1:

for <параметр>:= <выражение 1> to <выражение 2> do <оператор>

Параметр, выражение 1, выражение 2 должны быть одного ординального типа;

Параметр в этом цикле возрастает. Действие эквивалентно действию следующего составного оператора:

begin

<параметр>:=<выражение 1>;

while <параметр> <= <выражение 2> do

begin

<оператор>;

<параметр>:=suсс(<параметр>)

end

end.

Если в этом описании отношение <= заменить на >= , а функцию succ на pred, то параметр в цикле будет убывать, в этом случае цикл с параметром принимает форму 2.

Форма 2:

for <параметр>:=<выражение 1> downto <выражение 2> do <оператор>

Пример: составим программу, по которой будет напечатана таблица перевода километров в мили (1 миля = 1,603 км). Параметром цикла можно считать целую величину k - количество километров. Пусть эта величина изменяется от 1 до 10 (с шагом 1, разумеется).

Программа 7

program mili;

const a=1.603; b='км'; с='мили';

var k:integer; m:real;

begin

writeln(b:5,c:7); writeln;

for k:=l to 10 do

begin

m:=k/a; writeln(k:5,m:6:3)

end

end.

Запишем в этой программе цикл с параметром в форме 2:

for k:=10 downto 1 do

begin

m:=k/a; writeln(k:5,m:6:3)

end.

Тогда значения k в таблице будут убывать от 10 до 1 с шагом 1.


ОСНОВНЫЕ ПОЛОЖЕНИЯ


Как уже отмечалось выше (п. 4.1), в настоящее время растет популярность методологий, ориентированных на данные. В первую очередь, это объектно-ориентированное программирование.

Объектно-ориентированная методология проектирования программ основана на концепциях упрятывания информации и абстрактных типов данных. Такой подход рассматривает все такие ресурсы как данные, модули и системы в качестве объектов. Каждый объект

содержит некоторую структуру данных (или тип данных), обрамленную набором процедур (методов), предназначенных для манипулирования этими данными. Используя эту методологию, программист может создать свой собственный абстрактный тип и отобразить проблемную область в эти созданные им абстракции вместо традиционного отображения проблемной области в предопределенные управляющие структуры и структуры данных языка программирования. Подобный подход является более естественным, чем методологии, ориентированные на обработку (на процесс), из-за возможности использовать в процессе программирования разнообразные виды абстракции типов данных. На этом пути программист может сконцентрироваться на проекте системы, не беспокоясь о деталях информационных объектов, используемых в системе.

Основные шаги разработки программы, предусмотренные данной методологией:

• определить проблему;

• развить неформальную стратегию, представляющую общую последовательность шагов, удовлетворяющую требованиям к будущей программе;

• формализовать стратегию

• идентифицировать объекты и их атрибуты;

• идентифицировать операции;

• установить интерфейсы;

• реализовать операции.

Большинство современных языков и систем программирования развивается в направлении все большего использования объектной методологии в создании программ. Характерными примерами являются универсальные языки Паскаль, СИ и даже Бейсик, в современных версиях которых появились средства объектно-ориентированного программирования. Так, начиная с версии 5.5, Турбо-Паскаль охватывает метод проектирования программ на основе объектно-ориентированного программирования.



ОСНОВНЫЕ ПОНЯТИЯ


Такая структура, как

граф (в качестве синонима используется также термин «сеть») , имеет самые различные применения в информатике и в смежных прикладных областях, поэтому познакомимся с основными понятиями теории графов.

Граф G = (V, Е) задается парой конечных множеств V и Е. Элементы первого множества V1, v2,..., vM называются вершинами графа (при графическом представлении им соответствуют точки). Элементы второго множества е1, е2, ...,eN

называют ребрами. Каждое ребро определяется парой вершин (при графическом представлении ребро соединяет две вершины графа). Если ребра графа определяются упорядоченными парами вершин, то такой граф называют ориентированным

(на чертеже при изображении ориентированного графа на каждом ребре ставят стрелку, указывающую его направление). Ориентированный граф с пятью вершинами и семью ребрами изображен на рис. 1.6.

Рис. 1.6. Пример ориентированного графа

Если две вершины соединены двумя или более ребрами, то эти ребра называют параллельными (например, ребра е4 и е5). Если начало и конец ребра совпадают, то такое ребро называется петлей

(например, ребро е7). Граф без петель и параллельных ребер называется простым.

Если ребро ek определяется вершинами vi и vj (будем обозначать этот факт следующим образом: ek = (vi, vj), то говорят, что ребро ek инцидентно

вершинам vi и vj. Две вершины vi и vj называются смежными, если в графе существует ребро (vi, vj).

Последовательность вершин vi1, vi2,..., vik, таких, что каждая пара (vi,(j-1), vij) при 1 < j ? k

определяет ребро, называется маршрутом

в графе G. Вершины vil и vik называют концевыми

вершинами маршрута, все остальные входящие в него вершины - внутренними.

Маршрут, в котором все определяемые им ребра различны, называют цепью. Цепь считают замкнутой, если ее концевые вершины совпадают. Замкнутая цепь, в которой все вершины (за исключением концевых) различны, называется циклом. Незамкнутая цепь, в которой все вершины различны, носит название путь.
Если в ориентированном графе существует путь из vi в vj,

то говорят, что вершина vj достижима из вершины vi.

Две вершины vi

и vj называют связанными в графе G, если в нем существует путь, для которого эти вершины являются концевыми. Граф G

называется связным, если каждые две вершины в нем являются связанными. На рис. 1.7 изображен простой неориентированный связный граф.

Последовательность вершин v1, v5, i4, v3 , например, определяет путь, а последовательность вершин v1, v5,

i4, v3, vl, v1 - цикл. Деревом будем называть неориентированный связный граф без циклов. Лес - это любой граф без циклов. На рис. 1.8 показаны возможные деревья с пятью вершинами.



Рис. 1.7. Пример неориентированного связного графа



Рис. 1.8. Примеры деревьев

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


ОСНОВНЫЕ ПОНЯТИЯ ИНФОРМАЦИОННОГО МОДЕЛИРОВАНИЯ


Остановимся на информационных моделях, отражающих процессы возникновения, передачи, преобразования и использования информации в системах различной природы. Начнем с определения простейших понятий информационного моделирования.

Экземпляром будем называть представление предмета реального мира с помощью некоторого набора его характеристик, существенных для решения данной информационной задачи (служащей контекстом построения информационной модели). Множество экземпляров, имеющих одни и те же характеристики и подчиняющиеся одним и тем же правилам, называется объектом.

Рис. 1.38. Пример абстрагирования при построении информационной модели

Таким образом, объект есть абстракция предметов реального мира, объединяемых общими характеристиками и поведением, рис. 1.38.

Информационная модель какой-либо реальной системы состоит из объектов. Каждый объект в модели должен быть обеспечен уникальным и значимым именем (а также идентификатором, служащим ключом для указания этого объекта, связи его с другими объектами модели). Таким образом обозначение, наименование объекта -это элементарная процедура, лежащая в основе информационного моделирования.

Объект представляет собой один типичный (но неопределенный) экземпляр чего-то в реальном мире и является простейшей информационной моделью. Объекты представляют некие «сущности» предметов реального мира, связанные с решаемой задачей.

Большинство объектов, с которыми приходится встречаться, относятся к одной из следующих категорий:

·         реальные объекты;

·         роли;

·         события;

·         взаимодействия;

·         спецификации.

Реальный объект -

это абстракция физически существующих предметов. Например, на автомобильном заводе это кузов автомобиля, двигатель, коробка передач; при перевозке грузов это контейнер, средство перевозки.


Роль - абстракция цели или назначения человека, части оборудования или учреждения (организации). Например, в университете как в учебном заведении это студент, преподаватель, декан; в университете как в учреждении это приемная комиссия, отдел кадров, бухгалтерия, деканат.

Событие - абстракция чего-то случившегося. Например, поступление заявления от абитуриента в приемную комиссию Университета, сдача (или несдача) экзамена.

Взаимодействия - объекты, получаемые из отношений между другими объектами. Например, сделка, контракт (договор) между двумя сторонами, свидетельство об образовании, выдаваемое учебным заведением его выпускнику.

Объекты-спецификации

используются для представления правил, стандартов или критериев качества. Например, перечень знаний, умений и навыков выпускника математического факультета, рецепт проявления фотопленки.

Для каждого объекта должно существовать его описание - короткое информационное утверждение, позволяющее установить, является некоторый предмет экземпляром объекта или нет. Например, описание объекта «Абитуриент университета» может быть следующим: человек в возрасте до 35 лет, имеющий среднее образование, подавший в приемную комиссию документы и заявление о приеме.

Предметы реального мира имеют характеристики (такие, например, как имя, название, регистрационный номер, дата изготовления, вес и т.д.). Каждая отдельная характеристика, общая для всех возможных экземпляров объекта, называется атрибутом. Для каждого экземпляра атрибут принимает определенное значение. Так, объект Книга имеет атрибуты Автор, Название, Год издания. Число страниц.

У каждого объекта должен быть идентификатор - множество из одного или более атрибутов, значения которых определяют каждый экземпляр объекта. Для книги атрибуты Автор и Название совместно образуют идентификатор. В тоже время Год издания и Число страниц идентификаторами быть не могут - ни врозь, ни совместно, так как не определяют объект. Объект может иметь и несколько идентификаторов, каждый из которых составлен из одного или нескольких атрибутов.


Один из них может быть выбран как привилегированный для соответствующей ситуации.

Объект может быть представлен вместе со своими атрибутами несколькими различными способами. Графически объект может быть изображен в виде рамки, содержащей имя объекта и имена атрибутов. Атрибуты, которые составляют привилегированный идентификатор объекта, могут быть выделены (например, символом * слева от имени атрибута):



В эквивалентном текстовом представлении это может иметь следующий вид:

Книга (Автор. Название. Год издания. Число страниц).

Привилегированный идентификатор подчеркивается.

Еще одним способом представления объекта информационной модели является таблица. В этой интерпретации каждый экземпляр объекта является строкой в таблице, а значения атрибутов, соответствующих каждому экземпляру, - клетками строки, табл. 1.11.

Таблица 1.11 Таблица как представление информационной модели

Автор

Книга

Название

Год издания

Число страниц

Грин А.

Стивенсон Р. П.

Скотт В.

Гончаров И. А.

Бегущая по волнам

Остров сокровищ

Ричард Львиное Сердце

Обрыв

1988

1992

1993

1986

279

269

349

598

Можно классифицировать атрибуты по принадлежности к одному из трех различных типов:

• описательные;

• указывающие;

• вспомогательные.

Описательные атрибуты

представляют факты, внутренне присущие каждому экземпляру объекта. Если значение описательного атрибута изменится, то это говорит о том, что некоторая характеристика экземпляра изменилась, но сам экземпляр остался прежним.

Указательные атрибуты

могут использоваться как идентификаторы (или часть идентификаторов) экземпляра. Если значение указывающих атрибутов изменяется, то это говорит лишь о том, что новое имя дается тому же самому экземпляру.

Вспомогательные атрибуты

используются для связи экземпляра одного объекта с экземпляром другого объекта.

Рассмотрим пример:

                                               Автомобиль

                                               * гос.номер

                                               . марка

                                               . цвет

                                               . владелец

Атрибут «цвет» является описательным, атрибуты «гос. номер» и «марка» - указательными, атрибут «владелец» - вспомогательным, служащим для связи экземпляра объекта Автомобиль с экземпляром объекта Автолюбитель. Если значение вспомогательного атрибута изменится, это говорит о том, что теперь другие экземпляры объектов связаны между собой.


ОСНОВНЫЕ ПРИНЦИПЫ НОВЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ОБУЧЕНИЯ


Как уже неоднократно отмечалось, создание и совершенствование компьютеров привело и продолжает приводить к созданию новых технологий в различных сферах научной и практической деятельности. Одной из таких сфер стало образование - процесс передачи систематизированных знаний, навыков и умений от одного поколения к другому. Будучи само по себе мощной информационной сферой и владея опытом использования различных классических (не компьютерных) информационных систем, образование быстро откликнулось на возможности современной техники. На наших глазах возникают нетрадиционные информационные системы, связанные с обучением; такие системы естественно называть информационно-обучающими.

С началом промышленного изготовления компьютеров первых поколений и их появлением в образовательных учреждениях возникло новое направление в педагогике - компьютерные технологии обучения. Первая обучающая система Plato на основе мощной ЭВМ фирмы «Control Data Corporation» была разработана в США в конце 50-х годов и развивалась в течение 20 лет. По-настоящему массовыми создание и использование обучающих программ стали с начала 80-х годов, когда появились и получили широкое распространение персональные компьютеры. С тех пор образовательные применения ЭВМ выдвинулись в число их основных применений наряду с обработкой текстов и графики, оттеснив на второй план математические расчеты.

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


Благодаря своим конструктивным и функциональным особенностям современный персональный компьютер является уникальной по своим возможностям обучающей машиной. Он находит применение в обучении самым разнообразным дисциплинам и служит базой для создания большого числа новых информационных технологий обучения. Какие же особенности персонального компьютера так выгодно отличают его от прежде известных обучающих машин и технических средств обучения?

Это не столько какая-то одна возможность персонального компьютера, сколько сочетание

• интерактивного (диалогового) режима работы (действие человека - реакция компьютера - ... - действие человека - реакция компьютера и т.д.);

• «персональности» (небольшие размеры и стоимость, позволяющие обеспечить компьютерами целый класс);

• хороших графических, иллюстративных возможностей (экраны распространенных модификаций имеют разрешающую способность 640х480 точек при 16 млн цветовых оттенков - это качество хорошего цветного телевизора или журнальной иллюстрации);

• простоты управления, наличия гибких языков программирования человеко-машинного диалога и компьютерной графики;

• легкости регистрации и хранения информации о процессе обучения и работе учащегося, а также возможности копирования и размножения обучающих программ.

Технические возможности персонального компьютера, если компьютер используется как обучаюшее средство, позволяют

• активизировать учебный процесс;

• индивидуализировать обучение;

• повысить наглядность в предъявлении материала;

• сместить акценты от теоретических знаний к практическим;

• повысить интерес учеников к обучению.

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


Поэтому традиционное обучение, в основном, является пассивным - многие педагоги сетуют, что на уроке активно работают 20 -30% учащихся. Если же обучение ведется в компьютерном классе, компьютер диалоговым характером своей работы стимулирует ученика к деятельности и контролирует ее результаты.

Индивидуализация обучения при использовании компьютера также связана с интерактивным характером работы с компьютером и наличием компьютеров на рабочих местах: каждый ученик теперь может сам выбирать темп обучения, делать в работе паузы. Более глубокий и тонкий учет индивидуальных особенностей учащихся может осуществлять компьютерная программа, с помощью которой ведется обучение (педагогическое программное средство, сокращенно ППС). С помощью начального теста программа может определить уровень обученности ученика, и в соответствии с этим уровнем предъявлять теоретический материал, вопросы и задачи, а также подсказки и помощь. Обучение слабых учеников программа ведет на самом легком (базовом) уровне, изложение теоретических сведений максимально упрощено, вопросы и задачи облегчены, помощь имеет характер прямой подсказки. Обучение сильных учеников ведется на наиболее сложном уровне, теория излагается углубленно, предлагаются творческие задачи, требующие изобретательности и интуиции, а помощь имеет косвенный характер - намека или наводящего на правильный путь соображения. Между этими крайними случаями обучающая программа может учитывать более тонкую градацию подготовленности учащихся.

Каждый ученик в процессе обучения сталкивается с трудностями индивидуального характера, связанными с наличием пробелов в знаниях или особенностями мышления. При обучении с помощью компьютера обучающая программа может диагностировать пробелы в знаниях ученика, его индивидуальные особенности и строить обучение в соответствии с ними.

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


неподвижно), так и динамически, в движении. С помощью компьютерной графики можно сделать зримыми или, как еще говорят, визуализировать такие явления и процессы, которые не могут быть увидены в действительности (тем более в условиях школьного класса), можно создать наглядный образ того, что на самом деле никакой наглядности не имеет (например, эффектов теории относительности, закономерностей числовых рядов и т.п.). На этой возможности компьютеров основывается, так называемая, когнитивная компьютерная графика - особое направление применения компьютеров в научных исследованиях, когда-иллюстративные возможности компьютера используются для изучения различных закономерностей.

Всегда остро стоит вопрос о соотношении теории и практики применительно к научному знанию, обучению и т.д. (на это обращал внимание еще гетевский Мефистофель: «Суха теория, мой друг, но древо жизни вечно зеленеет»). Традиционное обучение является преимущественно теоретическим. Классно-урочная форма обучения исподволь, незаметно подталкивает каждого педагога в отдельности и всю систему образования в целом к усилению теоретической стороны обучения в ущерб практической. В самом деле, любому педагогу излагать теоретические знания у доски и требовать от учеников воспроизведения этого изложения значительно легче, чем организовывать ориентированную на практику работу учащихся. Если же вести обучение с помощью компьютера, оно приобретает практический уклон: диалоговый характер работы с компьютером, его вычислительные моделирующие возможности предрасполагают к обучению в форме решения задач (и к тому же задач практической направленности).

Важным условием успешного обучения является интерес учеников и изучаемому предмету, ходу обучения и его результату. Этот интерес связан со множеством факторов: содержанием изучаемого предмета, уровнем его сложности, организацией процесса обучения, системой поощрений и наказаний, применяемой учителем, личностными качествами самого учителя (его мастерством и интересом к предмету), системой ценностей ученика, его ближайшего окружения, родителей, взаимоотношениями в классном коллективе, социальным заказом в подготовке по направлению науки, представляемому данным предметом.


В последнее десятилетие действует очень настоятельный социальный заказ в отношении всего, что связано с компьютерами (в подготовке специалистов по компьютерам и их применению, в развитии компьютерных технологий, в распространении компьютерной грамотности -умению использовать компьютер для решения разнообразных прикладных задач в различных сферах профессиональной деятельности).

Действию скрытого социального заказа мы обязаны появлением большого числа «компьютерных» талантов и дарований. Сфера деятельности, связанная с компьютером, непосредственная работа на компьютере сама по себе обладает привлекательными чертами, втягивает в себя людей. Существует даже особая категория людей («хакеров»), увлекшихся сложными и тонкими вопросами управления компьютерами, программированием различных компьютерных эффектов. В некоторых случаях можно говорить даже о возникновении психологической зависимости человека от компьютера - настолько велико мотивирующее влияние компьютера.

Компьютерная технология повышает интерес к обучению предметам, не связанным с информатикой. Новое в организации учебного процесса с участием компьютера., само изменение характера работы ученика на уроке способствуют повышению интереса к учебе. В то же время, более тонкое использование возможностей компьютера позволяет управлять мотивацией учеников во время компьютерного обучения. Здесь имеются в виду. в первую очередь, мотивирующие реплики обучающих программ, т.е. фразы, в которых обучающая программа оценивает работу ученика и стимулирует дальнейшее обучение. Эти фразы могут иметь неформальный характер с оттенком юмора и создавать теплую партнерскую эмоциональную атмосферу при работе с компьютером. Важное значение имеют элементы игры, состязательности в компьютерном обучении (например, подсчет очков и сравнение достижений различных учеников) или звуковые и зрительные эффекты (звучание музыкальных мелодий, мигание и цвета на экране дисплея).

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



Итак, компьютеры - эти уникальные по своим возможностям обучающие машины - установлены в классе... И тут выясняется, что не понятно, как к этим компьютерам подступиться, т.е. говорить о компьютерном обучении еще рано. Как быть, с чего начать переход к компьютерному обучению?

Ответ таков: «с подбора обучающих программ и продумывания организационных форм их применения, с разработки методик, использующих возможности компьютера в обучении». Нельзя рассматривать компьютер в обучении (да и в других сферах тоже) отдельно, сам по себе, в отрыве от

а) программного обеспечения - педагогических программных средств;

б) организационных форм использования компьютеров.

В настоящее время существует огромное множество обучающих программ по самым разным предметам, ориентированных на самые различные категории учащихся, начиная контингентом детских садов и кончая персоналом атомных электростанций. Кроме того, каждая из программ предназначена только для одного типа компьютеров - а ведь этих типов великое множество - и не годится для других! Далее будем иметь в виду лишь обучающие программы по общеобразовательным предметам средней школы. Их очень много, и четкая классификация разновидностей этих программ еще не установилась.


ОСНОВНЫЕ ПРИНЦИПЫ РАЗРАБОТКИ И АНАЛИЗА АЛГОРИТМОВ


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

При дедуктивном подходе рассматривается частный случай общеизвестных алгоритмических моделей. Здесь при заданных предположениях известный алгоритм приспосабливается к условиям решаемой задачи. Например, многие вычислительные задачи линейной алгебры, в частности, нелинейные уравнения, системы алгебраических уравнений и т.п., могут быть решены с использованием известных методов и алгоритмов, для которых существует множество специальных библиотек подпрограмм, модулей. В настоящее время получили распространение специализированные пакеты, позволяющие решать многие задачи (Mathcad, Eureka, Reduce— Autocad и т.п.).

Индуктивный способ предполагает эвристический системный подход (декомпозиция - анализ - синтез). В этом случае общих и наиболее удачных методов не существует. Возможны некоторые подходы, позволяющие в каждом конкретном случае находить и строить алгоритмы. Методы разработки алгоритмов можно разбить на методы частных целей, подъема, отрабатывания назад, ветвей и границ и т.п.

Одним из системных методов разработки алгоритмов является структурное программирование. Принципы структурной алгоритмизации ранее излагались в гл. 1 (п. 1.8). Повторим их более формально с упором на реализацию в практически программировании.

Структурное программирование основано на использовании блок-схем, формируемых с помощью управляющих структурных элементов. Блок-схема - это ориентированная сеть, у которой могут быть вершины типа изображенных на рис. 3.5.

Выделяют три базовых структурных элемента (управляющие структуры): композицию, альтернативу, итерацию.

Рис. 3.5. Функциональные (а), предикатные (б) и объединяющие (в) вершины

Композиция - это линейная конструкция алгоритма, составленная из последовательно следующих друг за другом функциональных вершин, рис.3.6.


begin S1;S2; end



Рис. 3.6. Структура «композиция»

Альтернатива - это конструкция ветвления, имеющая предикатную вершину. Конструкция ветвления в алгоритмах может быть представлена в виде развилки (а), неполной развилки (б) и выбора (в) (рис. 3.7).



Рис. 3.7. Структура «альтернатива». Здесь В - условие (логическое выражение)

Итерация - это циклическая конструкция алгоритма, которая, вообще говоря, является составной структурой, состоящей из композиции и альтернативы. Итерации могут быть представлены в двух формах: с предусловием (а)

и с постусловием (о) (рис.3.8).

Каждая из рассмотренных структур имеет один вход и один выход. Поэтому любая компьютерная программа может быть представлена блок-схемой, сформированной из представленных трех управляющих структур.

Процесс структурного программирования обычно начинается с разработки блок-схемы. Для представления алгоритма в полном и законченном виде, а также



Рис. 3.8. Структура «итерация»

для обозначения связей с окружающей средой добавляют дополнительные структуры ввода-вывода и начала-конца программного блока, модуля, алгоритма:



Заметим, что для начального шага разработки программы чрезвычайно важным и необходимым является определение исходных (ввод) и выходных (вывод) данных задачи. С этого этапа начинается разработка практически любого алгоритма.

Метод разработки программы сверху-вниз предполагает процесс пошагового разбиения алгоритма (блок-схемы) на все более мелкие части до уровня элементарных конструкций, для которых можно составить конкретные команды. Идея структурного программирования сверху-вниз состоит в том, что, если для некоторой функции f существует ее композиция через две другие функции g и h, т.е. f=h(g(х)), то проблема разработки алгоритма для f сводится к проблемам разработки алгоритмов для h и g. В структурном программировании сверху-вниз на каждом шаге пытаются текущую функцию выразить как композицию двух (или более) других функций, которые представимы в виде рассмотренных выше управляющих структур.



Для иллюстрации технологии структурного программирования сверху-вниз рассмотрим два примера - сначала простой, затем существенно более сложный.

Пример 1.

Технология разработки программы решения квадратного уравнения.

На рис. 3.9 проиллюстрирована пошаговая детализация процесса построения алгоритма. Заметим, что для начального шага разработки программы имеем в качеств исходных данных коэффициенты а, b, с квадратного уравнения ax2 + bx + с = 0, а на выходе - значения двух корней х 1, х2.

Пример 2.

Рассмотрим более сложный и поучительный пример структурной программирования, известный в литературе как «тур шахматного коня». В задаче необходимо ответить на вопрос, существует ли при заданном положении шахматного коня последовательность его ходов, единожды содержащая все клетки шахматного поля.

Попытка быстро ответить на этот вопрос приводит к перебору всех возможн маршрутов коня. Число вариантов перебора чрезвычайно велико, и поиск нужного маршрута лучше поручить компьютеру.

Одной из эвристических стратегий алгоритма может быть следующая. Haчиная с произвольного поля i,j (на рис.3.10 i = 4,j = 4), пытаемся пойти на поле *1, если невозможно, то на поле *2; при неудаче - на поле *3 и т.д. по часовой стрелке



Рис. 3.9. Пошаговая детализация построения алгоритма

(варианты возможных ходов приведены на рисунке справа). Сделав очередной ход на пустую клетку, запишем в нее номер очередного хода и снова осуществляем процедуру поиска нового хода. В случае, когда из очередной клетки невозможно сделать ход, прерываем маршрут и выводим результат в виде таблицы, соответствующей шахматному полю, в которой раставлены ходы коня. Очевидно, что такая стратегия лишь при удаче может дать полный тур коня.

Итак, исходные данные задачи - произвольные начальные координаты коня i,j от 1 до 8. Результат - возможный маршрут коня из заданного поля. Удачным считается маршрут, содержащий все 64 хода, т.е. полный тур коня.



F Рис.3.10. Иллюстрация к задаче «тур шахматного коня»

Инициализация доски предполагает задание двумерного массива размером 8х8 с нулевыми элементами.


В дальнейшем элемент a[iJ] принимает значения номера очередного хода. Распечатать результат - означает вывести таблицу а[1..8,1..8]. На рис.3.12 показан один из результатов возможного маршрута коня из начального поля i=l, j=l.



Рис. 3.11. Пошаговая детализация построения алгоритма к примеру 2



Рис. 3.12. Возможный результат маршрута коня из поля (1.1)

Программа 35

Program Tur_Konja;

var a: array[1..8,1..8] of integer;

im, jm :array(l..8] of integer;

i, j, k, n, inac, jnac: integer;

inext, jnext: integer;

begin

(-----инициализация шахматной доски-—--}

for i:=l to 8 do for j:=l to 8 do a[i,j]:=0;

im[l]:=-2; jm[l]:=l.; im[2]:=-1; jm[2]:=2; im[3]:=1; jm[3]:=2;

im[4]:=2; jm[4):=l; im[5]:=2; jm[5]:=-!; im[6]:=1; jm(6]:=-2;

im[7]:=-l; jm[7]:=-2; im[8]:=-2; jm[8]:=-l;

write('введи начальные координаты коня 0<i,j<9: ');

readln(inac,jnac) ;

a[inac,jnac]:=1; i:=inac; j:=jnac; n:=2; k:=l;

while k<=8 do

begin inext:=i+im(k]; jnext:=j+jm (k] ;

if (inext<l) or (inext>8) or (jnext<l) or

   (jnext>8) or (a[inext,jnext]<>0)

then k:=k+l

else begin a(inext,jnext]:=n; n^n+l; i:«-inext;

j:«jnext; k:=l;

end;

end;

{--------вывод результата прохода—————)

for i:=l to 8 do

begin writeln; writeln; for j:=l to 8 do write(a(i,j]:2,' ')

end;

writeln; write('кол-во

шагов = ',n-l); readln;

end.

Зачастую используют альтернативный процедуре сверху-вниз метод структурного программирования сннзу-вверх. По сути мы приходим к конечному результату системным методом. Сначала разбиваем задачу на отдельные блоки (модули) с их связями между собой (декомпозиция), затем, после их разработки, проводим сборку блоков в единую программу (синтез). Принцип снизу-вверх широко распространен среди программистов, которые предпочитают модульный подход, предполагающий максимальное использование стандартных и специализированных библиотек процедур, функций, модулей и объектов.


ОСНОВЫ ОБЪЕКТНОГО ПРОГРАММИРОВАНИЯ В СИСТЕМЕ ТУРБО-ПАСКАЛЬ


Объект в ТурбоПаскале - это структура данных, содержащая поля данных различных типов и заголовки методов и обобщающая структуру «Запись» (record).

Синтаксис описания объекта:

<ИмяПотомка>=

оbjесt<ИмяПредка> поле;

поле;

метод;

метод;

end;

В отличие от записи полями объекта могут быть, кроме данных, еще и методы, обрабатывающие эти данные

Метод - это процедура или функция, объявленные внутри описания объекта. Синтаксис описания метода:

procedure <Заголовок>(<Параметр1>, <Параметр2>:integer),

Метод имеет доступ к полям данных объекта, не требуя передачи их ему в виде параметров

Объявление метода внутри объявления объектного типа содержит только заголовок. Тело метода определяется вне объявления объекта. Его заголовок должен содержать имя объекта, которому принадлежит метод. Например:

procedure <ТипОбъекта.Метод>

(<Параметр1>, <Параметр2> : integer);

begin

еnd;{Метод}

Методы подразделяют на статические и виртуальные. Виртуальный метод отличается от статического тем. что реализующий его код подсоединяется к исполняемой программе не в процессе компиляции, а в процессе выполнения, что достигается, так называемым, поздним связыванием. Это дает возможность строить иерархию объектов с одинаковыми названиями методов, реализуемыми, однако, различными кодами.

Синтаксис виртуального метода:

procedure <Метод> (<Параметр1>, <Параметр2> : integer): virtual;

Кроме обычных процедур и функций, ТурбоПаскаль 6.0 реализует два специальных типа методов: конструктор и деструктор.

Конструктор - это специальный метод, инициализирующий объект, содержащий виртуальные методы, он объявляется специально зарезервированным словом constructor. Конструктор инициализирует объект путем установления связи между объектом и специальной таблицей виртуальных методов, содержащей адреса кодов, реализующих виртуальные методы. Конструктор может также использоваться для инициализации полей данных объекта.


Деструктор - это специальный метод, освобождающий память «кучи» от динамических объектов. Он объявляется с использованием специально зарезервированного слова destructor.

Основными отличительными свойствами объекта являются

• инкапсуляция - объединение записей с процедурами и функциями, работающими с этими записями;

• наследование - задание объекта, затем использование его для построения иерархии порожденных объектов с наследованием доступа каждого из порожденных объектов к коду и данным предка;

• полиморфизм - задание одного имени действию, которое передается вверх и вниз по иерархии объектов с реализацией этого действия способом, соответствующим каждому объекту в иерархии.

Рассмотрим смысл каждого из перечисленных свойств на примере построения на экране дисплея точек разных цветов (звездного неба).

Инкапсуляция.

Основой решения задачи является задание положения (позиции) отдельной точки на экране, описываемого координатами Х и Y. Для задания координат подходит тип «запись»:

Pozition = record

X, Y : integer;

end;

Далее может быть необходимо задать значения координат (такая процедура носит название инициализации). Создадим соответствующую процедуру:

procedure Init(CoordX, CoordY : integer);

begin

X : =

CoordX;

Y : = CoordY;

end;

Затем потребуется знание фактических значений координат. Для этого вводим две функции:

function GetX : integer;

begin

GetX: = X;

end;

function GetY: integer;

begin

GetY: = Y;

end;

По нашему замыслу процедура Init и функции GetX и GetY должны работать только с полями записи Pozition.

Введение объектов позволяет зафиксировать это положение, объявив и поля, и действия над ними в единой конструкции:

Pozition = object

X, Y: integer;

procedure Init(CoordX, CoordY : integer);

function GetX : integer;

function GetY : integer;

end;

Процедура Init и функции GetX и GetY являются методами объекта Pozition.

Для инициализации экземпляра типа Pozition достаточно вызвать его метод, как если бы он был полем записи:



var

FirstPozition : Pozition;



FirstPozition.Init(10,15);

Метод задается так же, как и процедура в модуле: внутри объекта записывается заголовок (как в секции Interface модуля); при этом все поля, используемые мето-дом, должны предшествовать его объявлению. Определение метода (расшифровка действий) происходит вне объявления объекта. Имя метода должно предваряться названием типа объекта, которому метод принадлежит, сопровождаемым точкой. Например,

procedure Pozition. Init(CoordX, CoordY: integer);

begin

X: = CoordX:

Y: = CoordY;

end;

Заметим, что имена формальных параметров метода не могут совпадать с именами полей данных объекта.

Также как модуль скрывает детали реализации процедур от пользователя, объект может скрывать свои поля и методы. Для этого используется ключевое слово private (личный). Личные поля и методы доступны только внутри метода. Объявление выглядит следующим образом:

type

ObjectName=object

поле;



поле;

метод;

метод;

private

поле;



поле;

метод;



метод;

end;

Наследование. Рассмотрим точку с координатами Х и Y. Ее можно сделать видимой или невидимой, ей можно задать цвет, ее можно переместить. Создадим объект с такими возможностями:

Point=object

X,Y : integer; "

procedure Init(CoordX, CoordY : integer);

function GetX : integer;

function GetY . integer;

Visible: Boolean;

Color: Word;

procedure Init(CoordX, CoordY : integer; InitCoIor : Word);

function Is Visible : Boolean;

procedure Show;{показывает точку}

procedure Blind; {стирает точку}

procedure Jump(NextX, NextY : integer);{nepeMeiuaer точку}

end;

Заметим, однако, что поля X.Y и методы GetX, GetY практически совпадают с соответствующими полями и методами объекта Pozition.

Турбо-Паскаль предоставляет возможность учесть эту ситуацию. Следует считать тип объекта Point порожденным типом Pozition, записав это следующим образом:

Point=object(Pozition)

Visible : Boolean;

Color : Word;

procedure Init(CoordX, CoordY : integer; InitColor : Word);



function Is Visible . Boolean;

procedure Show;

procedure Blind:

procedure Jump(NextX, NextY : integer);

end;

Объект Point теперь наследует свойства объекта Pozition. Поля X,Y явно не заданы в Point, но Point ими обладает благодаря наследованию, т.е. можно написать

Point.X:=17;

Смысл объектно-ориентированного программирования заключается в работе с полями объекта через его методы.

Полиморфизм. Предположим, надо создать объект «кружок». Очевидно, что новый объект должен иметь предком объект Point, обладая всеми его свойствами, кроме того. быть больше по размеру. Однако, ясно, что «высветить» точку и закрашенную окружность не удастся одними и теми же командами. Турбо-Паскаль разрешает сохранить потомку имя родительского метода, «перекрывая» его. Чтобы перекрыть родительский метод, надо просто задать его с тем же именем, но с другим телом (кодом) и, если необходимо, с другим набором параметров. Такой метод делается виртуальным и к его объявлению добавляется слово virtual. Применение виртуальных методов налагает ограничения на процедуры инициализации, которые должны записываться с зарезервированным словом constructor и иметь общее имя Init

Каждый отдельный экземпляр объекта должен инициализироваться с помощью отдельного вызова конструктора

Для очистки и удаления динамически распределенных объектов существует специальная процедура destructorDone.

Деструктор комбинирует шаг освобождения памяти в «куче» с некоторыми другими задачами. Метод деструктора может быть пустыу), поскольку работу выполняет не только код тела, но и код, генерируемый Турбо-Паскалем в ответ на зарезервированное слово destructor.


ПАКЕТ MATHCAD


Одним из последних достижений в области инструментальных средств для решения прикладных задач является MATHCAD - физико-математический пакет с включенной в последнюю версию системой искусственного интеллекта SmartMath (разработка NASA), которая позволяет выполнять математические вычисления не только в числовой, но н в аналитической (символьной) форме.

На рисунке 2.28:

1 - палитра операторов;                  4-рабочая область;

2 - панель инструментов;                5 - панель форматирования;

3 - главное меню;                             6 - строка статуса.

Рис 2.28. Пример экрана MATHCAD

Важное значение разработчики MATHCAD придавали удобству работы с ним и простоте освоения. Интерфейс MATHCAD прост и понятен, полностью отвечает стандартам среды Windows. Все графики и математические объекты могут быть введены щелчком «мыши» с перемещаемых палитр. Обучение пользователя происходит в процессе работы «на ходу» при помощи многочисленных сообщений системы.

Графическая среда MATHCAD позволяет записывать математические формулы в привычном виде, гибко и выразительно представлять данные графически.

Документ MATHCAD состоит из областей различного типа. Текстовые области создаются нажатием кнопки с буквой А на панели инструментов. Математические области возникают, если щелкнуть в свободном месте (появляется красный крестик -визир, фиксирующий место ввода формулы). Области на экране легко можно перетаскивать «мышью» или перемещать командами Cut

и Insert меню Edit.

Большинство математических формул записывается в рабочем документе MATHCAD так же, как на листе бумаги. Знаки арифметических операций вводятся с помощью клавиш+,-,*,/.

Для ввода скобок, определяющих порядок выполнения арифметических операций используется клавиша <Space> (пробел). В большинстве случаев система тут же выдает ответ после ввода символа "=" с клавиатуры или с 1-й палитры операторов. В среде MATHCAD знак "=" означает числовой, а знак "стрелка вправо" символьный вывод значения переменной, функции, выражения.


Если последовательно вводить



При вводе более сложных операций используют кнопки палитр операторов MATHCAD, находящиеся на экране слева. Для перехода от одной палитры к другой надо щелкнуть на цифре над палитрой.

Стандартные математические функции, такие как cos, sin, arctan, log, exp можно вводить посимвольно, или вставлять из прокручивающегося списка. Чтобы вызвать прокручивающийся список встроенных функций MATHCAD, следует выбрать пункт Insert Function

из меню Math.

Для редактирования выражения надо щелкнуть «мышью» правее элемента выражения, подлежащего изменению, а затем нажать клавишу <Backspace> и ввести нужный элемент. Для немедленного пересчета значения выражения следует щелкнуть «мышью» в стороне от выражения. Все вычисления могут производиться с высокой точностью - число значащих цифр задается из меню системы и практически не ограниченно.

Символ определения «:=» (который можно ввести с 1-й палитры операторов или нажав клавишу «:» ) позволяет определять переменные и функции:



Важно следить за тем, чтобы все переменные и функции были определены левее и/или выше тех выражений, где они используются.

Вычислить (протабулировать) функции и выражения для параметров, пробегающих заданный диапазон значений, можно с помощью кнопки "m..n" 1-й палитры. Например, для табуляции функции f(x), приведенной выше, просто вводят z = f(z)

= и т.д.

z = 0,.5, 2

z

F(z)

ехр(f(z))

• z

0

0.167

0

0.5

0.14

0.575

1

0.083

1.087

1.5

0.01

1.516

2

-0.059

1.885

Для создания этих таблиц просто вводят z = , f(z) = и т.д. Имеется ввиду, что функция определена в предыдущем примере (выше).

MATHCAD имеет широкие возможности визуализации числовых данных - 7 видов двумерных и трехмерных графиков. На каждом из двумерных графиков может одновременно находиться до 16 различных кривых, имеющих по 6 атрибутов. Можно создавать собственные библиотеки графических элементов, размещать в рабочем документе MATHCAD произвольные графические изображения.



Для построения графика надо определить с помощью кнопки "m..n" диапазон независимой переменной, а затем создать область графика с помощью кнопки внизу 1-й палитры. После этого вводятся выражения, откладываемые по осям Х и Y (в средние поля ввода на соответствующих осях). Для каждой оси может быть введено несколько выражений.

Интегралы и суммы легко вычислять с помощью кнопок 1-й палитры. Для этого достаточно щелкнуть соответствующую кнопку и заполнить появившиеся позиции ввода.

Для выполнения вычислений с матрицами необходимо нажать кнопку с изображением матрицы на 2-й палитре, указать в диалоговом окне число столбцов и строк, нажать кнопку Create и заполнить пустые поля. Теперь, чтобы обратить матрицу А, надо напечатать «A^-1=», а для вычисления определителя - «A».

Численное решение уравнения начинается с задания пробного значения корня и требует использования оператора root(.„, ...). Его первый операнд - левая часть уравнения в виде F(x)=0, а второй - переменная, по которой ищется корень.

Например,

t =1

гооt(t2- cosh(t),t)=1,621.

MATHCAD корректно оперирует с единицами измерения выводимых числовых результатов и автоматически меняет числовое значение результата при изменении синицы измерения.

Например,



Чтобы пересчитать ответ в других единицах, надо щелкнуть на ответе, затем на втором (дополнительном) поле ввода правее и ввести нужные единицы.

Документ MATHCAD, на котором совмещены текст, графика и формулы, выглядит как страница учебника или научной статьи, при этом формулы являются «живыми» - стоит внести изменения в любую из них, как MATHCAD пересчитает результаты, перерисует графики и т.д. Можно анимировать график, записав его эволюцию при изменяющемся значении параметра, а затем воспроизвести мультипликацию со звуковым сопровождением.

Документы MATHCAD могут быть особым образом «сшиты» в электронные книги. При этом они, сохраняя все свои свойства, оказываются организованными в структуру, обладающую гипертекстовыми ссылками, навигацией, контекстным поиском, открывающимися окнами и т.д.



Доступ к таким электронным книгам может осуществляться по локальным и глобальным сетям - MATHCAD имеет средства для выхода в Интернет и загрузки документов с помощью Интернет-протокола.

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

В среде MATHCAD имеются функции трех видов: встроенные, пользовательские и вложенные. Это виртуальные функции, производные, интегралы, корни, связанные с соответствующими вычислительными методами и алгоритмами. В меню Symbolic пакета Mathcad PLUS 5.0. включены следующие операции символьной математики:

• вычисление выражения в аналитическом виде;

• вычисление выражения в комплексном виде;

• вычисление числового значения выражения;

• упрощение выражений;

• развертывание выражения;

• разложение на множители;

• группировка выражения;

• вычисление коэффициентов полинома;

• поиск производной по переменной;.

• интегрирование по переменной;

• решение уравнения в аналитическом виде;

• подстановка в выражение;

• разложение в ряд;

• представление в виде смешанной дроби;

• транспонирование матрицы;

• инвертирование (обращение) матрицы;

• нахождение детерминанта (определителя) матрицы;

• преобразование Фурье;

• обратное преобразование Фурье;

• преобразование Лапласа;

• обратное преобразование Лапласа;

• Z-транспонирование;

• обратное Z-транспонирование;

• пределы (команд нет.есть кнопки-иконки).

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

Интеллектуальная система SmartMath включается в работу двумя способами: одноименной командой из меню Math или нажатием и «притоплением» на панели инструментов кнопки-иконки с изображением кафедралки - головного убора средневековых ученых.



SmartMath позволяет работать не только в ручном, но и в автоматическом режиме. Режим автоматических символьных преобразований включается опцией . Live Variable в меню Math.

Искомое выражение появляется правее, ниже или вместо исходного, заданного пользователем. Место для результата задается установкой Derivation Format... и Derive in Place в меню Symbolic. Если в исходном выражении пользователь что-то поменяет, то ему придется все действия повторить, не забыв при этом стереть предыдущий вариант ответа. В автоматическом режиме за исходным выражением нажатием соответствующей кнопки-иконки ставится знак «стрелка вправо». А чтобы система SmartMath поняла, в каком направлении необходимо вести преобразования, введены 7 ключевых слов: factor, expand, series, simplify, complex, float и assume. Эти слова можно считать зачатками нового языка программирования, ориентированного не на вычислительный, а на аналитический процесс.

Второй режим системы SmartMath связан с оптимизацией численных расчетов.

Ключевое слово optimize, поставленное перед суммой (произведением, интегралом, пределом), заставляет систему SmartMath отойти от лобовой атаки. Если оптимальное решение найдено, то правее выражения появляется красная шестиугольная звезда.

Пользователь может просмотреть не только численный результат, но и аналитическое выражение, упростившее расчеты. Оно заносится в специальный буфер, отображенный на диске командой Show SmartMath..меню Math или щелчком по красной звездочке. Оптимизационное выражение можно записать в переменную, которая будет уже иметь, не числовой, а символьный тип. Оптимизировать расчеты можно и без слова optimize, включив опцию Optimize в меню Math. В этом случае оптимизироваться будут все выражения без особого на то приглашения.

Оптимизация не только ускоряет расчеты, но и повышает их точность. И не только количественно, но и качественно за счет исправления методологических ошибок (промахов) численных методов.


ПЕРСОНАЛЬНЫЙ ОБМЕН СООБЩЕНИЯМИ


Наиболее популярный тип телекоммуникаций состоит в электронном общении индивидов с другими индивидами, индивидов с группами, групп с группами. Многие из телекоммуникационных проектов используют электронную почту (иногда посредством дискуссионных групп на list-серверах) как единую среду общения. В других проектах преподаватели и учащиеся используют телеконференции и связанные с Internet «доски объявлений». Можно выделить следующие основные разновидности телекоммуникационных проектов.

Свободная переписка.

Возможно, это наиболее часто используемая структура телекоммуникационной деятельности, аналогичная переписке по обычной почте. Поскольку переписка между учащимися требует большего внимание, чем многие преподаватели могут ей уделить, можно развернуть свободный обмен электронной почтой между группами. Свободная переписка является прекрасным источником при изучении иностранных языков, культурных традиций различных народов и т.д.

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

«Здравствуйте! Мы -группа 13-16-летних учащихся технологической школы им. Ромена Роллана в пригороде Парижа. На занятиях по технологиям ученики должны разработать проект, связанный с технологиями и компьютерами. Мы хотим переписываться с вами, чтобы узнать о вас больше:

• Что представляет собой ваш класс?

• Где находится ваша школа?

• Изучаете ли вы технологии?

• Что вам больше всего нравится делать?

Мы хотели бы также переписываться о различных компьютерных играх».

Глобальный класс. При этой разновидности структуры переписки два или более класса (находящиеся где угодно) могут совместно изучать одну и ту же тему, обсуждая то, что они сейчас изучают по заранее определенному графику.

Вот пример «электронного расписания» месячных проектов по ознакомлению с опасностью СПИДа :

1-15 февраля. Регистрация.

1- 5 марта. Что представляет собой вирус СПИДа?

8-12 марта. СПИД и образование.

15- 19 марта.
Выявление СПИДа.

22 - 26 марта. Обмен мнениями о СПИДе.

Предложения для обсуждения и отработки на весь срок проекта включаются в план. Хорошо бы вывесить на стенд сообщения от учащихся, преподавателей и ученых на тему проекта. Побуждайте своих учащихся готовить сообщения на эту тему или на любую другую, которую они хотели бы обсудить. Эти сообщения должны быть красиво оформлены на специальном стенде, чтобы их могли видеть другие учащиеся, родители, администрация, посетители. Учащиеся и учителя участвуют в обсуждении темы через электронную почту.

Электронные «встречи».

Электронная почта, телеконференции, электронные доски объявлений могут также дополняться синхронным общением в реальном времени. При этом общение между учащимися и их «гостем» происходит путем поочередной печати на клавиатуре с использованием возможности «переговоров», допускаемой многими системами электронной почты.

Электронное обучение. Специалисты различных профилей из вузов, частных и государственных учреждений, предприятий или школ, связанные через Internet, могут служить «электронными преподавателями» для учащихся, желающих познакомиться со специальными темами в интерактивном режиме. Так, например, в учебных целях может быть организовано общение учащихся с руководителями, политиками, писателями и другими экспертами в определенной сфере деятельности. Другая разновидность такого рода проекта - когда в качестве «электронных педагогов» выступают студенты старших курсов некоторых вузов по отношению к школьникам в других городах и даже странах. Получила известность поисковая служба под названием «Электронные Эмиссары», спонсируемая Техасским центром образовательных технологий и Техасским университетом в Остине. Она помогает желающим найти и установить контакты с экспертами в различных областях знаний во всех странах мира. С ее помощью преподаватели и их классы находят друг друга, разрабатывают структуру учебного проекта и обучаются посредством электронной почты.

Ролевые игры. В проектах, основанных на ролевых играх, участники общаются друг с другом, играя определенную роль.К примеру, профессор истории университета Вирджинии Дженнингс Ваггонер становится Томасом Джефферсоном для нескольких классов средних школ, изучающих историю. В проекте, спонсируемом госдепартаментом образования штата Небраска и университетом Небраски в Омахе, студенты старших курсов по электронной почте играют роли главных персонажей книг, которые учащиеся средних школ Восточной Небраски изучают со своими учителями. Существует большое число таких проектов исторической направленности.