42371

Системы программирования Turbo Pascal 7.0

Лабораторная работа

Информатика, кибернетика и программирование

End Переместиться к концу строки. CtrlEnd Переместиться к последней строке окна. Найдите первое вхождение строки end в тексте программы. Замените все end на 234 .

Русский

2013-10-29

1.16 MB

45 чел.

Лабораторные работы (файл TPascal_7)

1. Теория

2.Контрольные вопросы

3.Задания для самостоятельного выполнения

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

lab00.html

***********************************

Лабораторная работа N 0.

ВВЕДЕНИЕ

    Уважаемые читатели.

    Вы начинаете  изучение системы программирования Turbo Pascal 7.0.

Лабораторная работа N 0,  текст которой вы сейчас читаете, поможет вам

правильно организовать свои занятия, и в конечном итоге, успешно овла-

деть новыми для вас знаниями.

    Как мы будем работать

    ---------------------

    Программирование, как и любой другой предмет,  можно  изучать  по

разному. Но  наилучшие  результаты  в изучении языков программирования

достигаются при систематической работе с компьютером.  Именно  поэтому

мы предлагаем  вам  100%  машинный  курс  языка программирования Turbo

Pascal 7.0.

    Среди различных форм обучения мы выбрали наиболее прогрессивную и

эффективную форму занятий.  Как утверждают психологи и педагоги, такой

подход наиболее результативен.

    Урок информатики теперь будет проходить не совсем так, как прохо-

дит обычный урок.  У вас не будет ответов у доски.  Привычное домашнее

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

из  вас  имеет  возможность проявить свою индивидуальность и самостоя-

тельность. Большую часть материала вам  придётся  осваивать  самостоя-

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

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

добных данной лабораторной работе. Учебный материал взаимосвязан и пе-

реплетён. Практически каждую лабораторную работу просто невозможно вы-

полнить, не выполнив предыдущей лабораторной работы.

        

    История

    -------

    В 1965  году  был объявлен конкурс по созданию нового языка прог-

раммирования - преемника языка АЛГОЛ-60.  Участие  в  конкурсе  принял

швейцарский учёный,  поляк по происхождению,  Никлаус Вирт, работавший

доцентом на факультете информатики Стэнфордского университета.  Проект

предложенный им был отвергнут комиссией в 1967 году.  Но Вирт не прек-

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

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

Цюрихе, он уже в 1968 году разработал  первую  версию  языка  Паскаль.

Язык назван  в честь великого французского математика и механика Блеза

Паскаля, в 1648 г.  создавшего первую счётную машину. В 1971 г. Н.Вирт

выпустил описание своего языка, а в 1975 г. было разработано руководс-

тво для пользователей Паскаля, практически легшей в основу стандарта.

    Но такой документ появился только в 1982 г. - международный стан-

дарт ISO на язык Паскаль.

    Паскаль переживал  громадный  успех  и в конце 70-х годов получил

широкое распространение в университетах.  Но разработчики программного

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

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

менения.  Поскольку  Вирт изначально разрабатывал Паскаль для обучения

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

венных для практического программирования.  По этой причине в компиля-

торах Паскаля появлялись всё новые расширения,  выводящие язык за пре-

делы чисто академических приложений. Это породило множество диалектов.

    Вирт не признал новые диалекты, провозгласив в 1977 г. свою пози-

цию: "Если язык едва подходит для применения, на который его создатель

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

полностью адекватный язык, а не усложнять существующий".

    Именно это Вирт и сделал.  В 1981 г. он разработал язык Модула-2,

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

    До этого времени,  различные компиляторы Паскаля для  микрокомпь-

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

занимали большой объём памяти на диске и работали  с  черепашьей  ско-

ростью. Но тут на арену вышел бывший студент Вирта со своим компилято-

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

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

    Разработчиком Турбо-Паскаля стал "сумасшедший француз"  по  имени

Филип Кан.  Родом из Парижа,  Кан некоторое время учился в Цюрихе, где

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

щитил диссертацию на степень кандидата наук по математике.  В этот пе-

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

    Кан занимался математикой, а компьютерами интересовался лишь пос-

тольку, поскольку это помогало ему в решении  задач  и  доказательстве

теорем. Затем  он  приобрёл  свой первый микрокомпьютер.  Вместе с ещё

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

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

существующими компиляторами Паскаля побудила Кана взяться за разработ-

ку Турбо-Паскаля.  В  1982 г.,  имея на руках эту программу и 2000 $ в

кармане, он покинул Францию и уехал в Калифорнию.

    Вначале Кан  не мог получить там даже работу.  Путешествуя по ту-

ристской визе,  он не имел права на так называемую зелёную карточку  -

правительственное разрешенеие на получение работы в США. В отчаянии он

решил сделать ставку на Турбо-Паскаль и создал  новую  фирму  "Borland

International" - название, подсказанное телевизионной передачей о быв-

шем космонавте с похожим именем.  Кан решил, что имя, имеющее "всеаме-

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

бизнеса.

    Несмотря на громкое имя фирмы Кану не удалось заинтересовать даже

представителей рискового капитала.  Кан привлёк к работе в своём новом

предприятии других   образованных  новичков  вроде  бывшего  владельца

японского ресторана и официантки коктейль-бара, имевшей степень канди-

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

из официальных  источников финансирования,  Кан собрал небольшую сумму

(20 000 $) у членов своей семьи. В марте 1984 г. он организовал конто-

ру в двухкомнатном офисе над авторемонтным гаражом.  Приступив к делу,

Кан уговорил служащего одного популярного компьютерного  журнала  про-

вести широкую рекламу Турбо-Паскаля в кредит.

    Кан понимал,  что  рекламное  объявление - единственный возможный

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

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

лечения читателей, он оформил объявление в резких зелёных, синих и ро-

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

мость товара болжна быть ниже 50 $.  Поэтому он  оценил  свой  сложный

компилятор и редактор программ в 49 $ и 95 центов. Это была предельняя

нижняя граница - остальные системы продавались в 10 раз дороже.

    Реклама оказалась гениальной находкой для завоевания рынка. Толь-

ко за первый месяц она принесла Кану заказов на 150  000  $.  Эксперты

отмечали также  быстродействие  компилятора  Кана,  который работал во

много раз быстрее, чем его соперники.

    В первые два года было продано не менее 300 тыс. копий Турбо-Пас-

каля, что превзошло объём продажи всех прочих языков  для  микрокомпь-

ютеров.

    Турбо-Паскаль почти за одну ночь перевёл "Borland  International"

в разряд  основных производителей программного обеспечения.  В 1985 г.

Кан с лёгкостью выбросил 45 000 $ на организацию приёма,  пригласив на

него 600 клиентов фирмы и их гостей.  Являя образец экстравагантности,

он облачил свою внушительную фигуру в пурпурно-золотую  тогу,  увенчал

волосы венком из виноградных листьев и исполнил - в честь своего успе-

ха, достигнутого в 33 года, - несколько вещей на саксофоне.

    Начиная с  1985 года фирма "Borland International" выпустила нес-

колько версий языка Turbo Pascal начиная с  версии  3.0  и  заканчивая

версией 6.0.

    В 1992 году фирма  Borland  International  выпустила  два  пакета

программирования, основанные на использовании языка Паскаль, - Borland

Pascal 7.0 и Turbo Pascal 7.0.

    Пакет Borland  Pascal  7.0 учитывает многие новейшие достижения в

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

режима работы:  в режиме операционной системы MS DOS, в защищённом ре-

жиме MS DOS и в среде Windows.

    Пакет Turbo  Pascal  7.0  обладает  ограниченными возможностями и

позволяет работать  только в обычном режиме MS DOS.  Начинающему прог-

раммисту целесообразно начать изучение языка и среды  именно  с  этого

пакета. На  сегоднящний  день Turbo Pascal 7.0 практически повсеместно

применяется как учебный язык программирования.

    Никлаус Вирт в настоящее время продолжает работать в  Швейцарском

федеральном технологическом институте.  Созданный им язык программиро-

вания Модула-2 не имел большого успеха.  Как  утверждают  специалисты,

основной причиной этого является то,  что идеи, заложенные в Модула-2,

были настолько революционными, что опережали время.

    Последним изобретением  Никлауса Вирта является язык программиро-

вания Oberon. Многие специалисты пророчат Oberon большое будущее.

    Сам Никлаус  Вирт,  один  из основоположников теории структурного

программирования, бесспорно,  является одним из величайших программис-

тов современности.

    Фирма Borland International была приобретена фирмой Inprise,  и в

настоящее время продолжает выпускать свои продукты,  но уже под  лого-

типом фирмы Inprise.  Одним из продуктов этой фирмы является очень по-

пулярная на сегодняшний день среда визуального  программирования  Bor-

land Delphi,  разработанная  на базе языка программирования Turbo Pas-

cal. На сегодняшний день выпущено уже 5 версий Borland Delphi.


lab01.html

***********************************

Лабораторная работа N 1.

Знакомство с системой Turbo Pascal 7.0.

Управление окнами текстового редактора

    Вы начинаете изучение системы программирования Turbo Pascal  вер-

сии 7.0.  В настоящее время данная система является одной из самых по-

пулярных промышленных (профессиональных) систем программирования.

    Всё, что мы называем языком  программирования  Turbo  Pascal  7.0

объединено в так называемой интегрированной инструментальной оболочке.

Она включает в себя:

    - многооконный текстовый редактор, для обработки текстов программ

      на языке Turbo Pascal;

    - компоновщик программ;

    - отладчик программ;

    - система  контекстной  информационной помощи (на английском язы-

      ке);

    - компилятор  (переводчик)  текста программ на языке Turbo Pascal

      в программу на машинных кодах.

    Существует два  "вида" переводчиков языков программирования,  ос-

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

машинные екоды понятные компьютеру:

    - "Компилятор" переводчик текста программ. Он переводит всю прог-

рамму сразу и только после этого,  если в ней нет ошибок, запускает её

на выполнение.

    - "Интерпретатор",  который переводит текст программы построчно и

сразу построчно её выполняет.

   То что вы видете сейчас на экране и есть  интегрированная  инстру-

ментальная оболочка языка программирования Turbo Pascal 7.0.  По внеш-

ним признакам её можно разделить на три области.

    Первая, средняя часть экрана. Это область многооконного текстово-

го редактора. Именно в этой области размещаются и редактируются тексты

программ, или любой другой текст.

    Вторая, верхняя часть экрана.  "Меню" управления всеми  ресурсами

ИИО (Интегрированной  инструментальной оболочки).  С его помощью можно

очень быстро освоить ИИО TP, так как это меню управляет всеми функцио-

нальными возможностями данной системы.

    Третья, нижняя часть экрана.  Это строка подсказок. В этой строке

постоянно содержится подсказка,  или несколько подсказок пользователю,

(программисту), о состоянии системы и действиях доступных в данный мо-

мент.

    Вы можете работать либо в Меню,  либо в экранном текстовом редак-

торе. В данный момент Вы работаете в экранном редакторе. Это можно оп-

ределить по мигающему курсору в активном окне.  Курсор, как Вы уже за-

метили, можно передвигать в активном окне с помощью клавиш перемещения

курсора.

    Активным называется окно редактора,  ограниченное двойной,  белой

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

этим окном.  В середине верхней части рамки размещается имя файла, по-

мещённого в окне для редактирования.

    Справа и снизу окна расположены так называемые  полосы  прокрутки

(скроллинга). В каждой полосе расположен свой "курсор", который указы-

вает на текущее положение курсора окна относительно текста.  Таким об-

разом, взглянув  на полосу скроллинга,  Вы сразу можете определить,  в

каком месте текста находитесь.

    В правом верхнем углу размещается номер окна. Окна нумеруются на-

чиная с единицы. Для работы в редакторе можно использовать любое коли-

чество окон.  Но для использования окна,  его необходимо сначала "отк-

рыть". Любое  окно можно 1) открыть,  2) закрыть,  3) сделать активным

окном, 4) изменить его размеры и положение на экране.  Сколько бы окон

Вы не использовали, активным может быть только одно из всех окон.

    Все вышеперечисленные  операции  можно  выполнить  с помощью Меню

ИИО. Для этого необходимо в него перейти,  нажав клавишу (F10).  Чтобы

вернуться из  любого  места  Меню в редактор достаточно нажать клавишу

(Esc).

    Когда Вы перейдёте из редактора в Меню,  курсор в  активном  окне

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

собой подсветку зелёного цвета одной из опций Меню.  Этот курсор  тоже

можно  передвигать по Меню с помощью клавиш управления движения курсо-

ром.

    Задание.

    --------

    > А  теперь  попробуйте перейти в Меню,  подвигать в нём курсор и

вернуться обратно в редактор.

   Если получилось, - работаем дальше.

   В Меню  ИИО TP реализовано около ста различных функциональных воз-

можностей по управлению ресурсами Turbo Pascal. Изучить их за одно за-

нятие практически  невозможно.  Ваша  задача,  на этом занятии изучить

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

    Основное Меню ИИО TP содержит следующие поля (опции):

    - работа с файлами (File);

    - редактирование (Edit);

    - поиск (Search);

    - выполнение (Run);

    - компиляция (Compile);

    - отладка (Debug);

    - инструментальные средства (Tools);

    - параметры (Options);

    - окна (Window);

    - помощь (Help).

    При выборе каждой опции главного Меню, ниже его появляется "выпа-

дающее" подменю, в котором тоже есть свой курсор, передвигаемый клави-

шами управления движением курсора.

    "Выбор" опции  или  поля  главного  Меню,  -  это нажатие клавиши

(Enter). Чтобы вернуться из подменю в область многооконного текстового

редактора, достаточно нажать клавишу (Esc).

    Задание.

    --------

    > Войдите в главное Меню (F10),

    выберите опцию File (Enter),

    поперемещайте курсор в выпавшем подменю,

    вернитесь в экранный редактор(Esc).

    Назначение каждого из разделов выпадающих  подменю  нам  пока  не

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

подменю мы в дальнейшем будем писать начиная с названия поля  главного

Меню. Например - File New - это раздел New подменю опции File главного

меню.

    Итак, начнём.

    File New - открывает новый файл или,  что то же самое, новое окно

в редакторе.

    Window Close - закрывает активное окно.

    Задание.

    -------

    > Внимательно прочтите, а затем выполните.

    Откройте новое окно,  и затем сразу же его закройте. Предупрежда-

ем, окно которое Вы откроете сразу становится активным.  Оно перекроет

окно в котором размещён текст данной лабораторной работы, и Вы не смо-

жете её видеть, пока не закроете открытое Вами окно N 2. В том что ок-

но N 2 активно,  можно убедиться посмотрев на его номер в верхнем пра-

вом углу активного окна.

    Продолжаем дальше. Если Вы открываете несколько окон, то Вы може-

те сделать  активным любое из открытых окон.  Для этого необходимо на-

жать комбинацию клавиш (Alt ).  Например,  Alt 3 - сделает

активным окно номер 3 если оно открыто.

    Задание.

    --------

    > Откройте два новых окна,

    сделайте активным окно номер 2,

    сделайте активным окно номер 1,

    закройте окна номер 2 и 3.

    Будьте внимательны.  Не  закройте  окна N 1,  в котором находится

текст данной лабораторной работы.  Помните,  все операции, в том числе

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

данный момент окну.  Выполните данное задание несколько раз для трени-

ровки.

    Часто возникает  необходимость  видеть тексты которые размещены в

разных окнах.  Для этого существует возможность изменять размеры и по-

ложение окон на экране. Вот они

    Window Size/Move (изменить размеры / переместить)

    При включении этого режима активное окно можно перемещать по полю

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

Если Вы будете нажимать клавиши перемещения курсора вместе с  клавишей

(Shift), то  будут изменяться размеры этого окна.  Окончить этот режим

настройки активного окна можно нажав клавишу Enter.

    Задание.

    --------

    Откройте новое окно.  Попробуйте изменить его размеры и положение

на экране и завершите операцию. После этого закройте открытое вами ок-

но и вернитесь в окно номер 1.

    Ещё некоторые возможности по работе с окнами.

     Опции

    Window Tile -

     Размещение всех открытых окон встык.

    Window Cascade -

     Каскадное размещение всех открытых окон.

  Window Tile                                       Window Cascade

    Window Zoom -

     Увеличение размеров активного окна до размеров экрана.

    Window Next -

     Активизируется следующее по номеру окно.

    Window Previous -

     Активизируется предыдущее по номеру окно.

    Задание.

    --------

    Откройте три новых окна, и попытайтесь их разместить разными спо-

собами на экране монитора.  После этого закройте все открытые Вами ок-

на.

    Теперь Вы умеете управлять окнами редактора  с  помощью  главного

Меню.  Но у интегрированной инструментальной оболочки есть ещё некото-

рые возможности по управлению самим главным Меню.

    Выделенные буквы

    ----------------

    Если Вы  заметили,  все опции как Меню так и подменю имеют в себе

буквы выделенные красным цветом.  Если нажать клавишу Alt  и  одну  из

этих  выделенных  красным  цветом букв,  то Вы сразу попадёте в данный

раздел (минуя  F10).  Для  выбора  опции  выпавшего подменю достаточно

просто нажать выделенную красным цветом букву (без клавиши Alt).

    Задание

    -------

    Выполните задание используя только комбинации  клавиш  Alt+.

    1. Выберите опцию главного меню File.

    2. Откройте новое окно.

    3. Разместите окна на экране способом "черепица".

    4. Активизируйте окно с текстом лабораторной работы.

    5. Закройте пустое окно.

    Горячие клавиши

    ---------------

    Кроме того,  рядом с некоторымы из опций подменю (справа от  них)

указаны комбинации клавиш. Например:

    Close    Alt+F3

Это так называемые комбинации горячих клавиш,  при нажатии которых вы-

полняется именно эта опция подменю. Эти же комбинации указываются так-

же в строке подсказки.

    Задание

    -------

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

опций меню Window.

    Использование манипулятора "мышь".

    ----------------------------------

    В ИИО TP реализована  полная  поддержка  работы  с  манипулятором

"мышь".  Перемещая по столу "мышку" вы быстро найдёте на экране специ-

альный мышиный курсор.  Указав этим курсором на нужный Вам раздел меню

или подменю и нажав указательным пальцем левую кнопку мыши, Вы войдёте

в этот раздел (пробуйте).

    Используя манипулятор мышь,  можно управлять уже открытыми окнами

не используя главное меню. Для этого на рамке окна размещены специаль-

ные символы.  Если нажимать мышиным курсором на верх или низ, знакомых

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

ответственно вверх или вниз, влево или вправо.

    Закрыть окно можно нажав тем же мышиным курсором на символ,  раз-

мещённый вверху слева на рамке окна.

    Распахнуть окно,  или вернуть ему прежние размеры можно нажав мы-

шиным курсором на символ размещённый рядом с номером окна.

    Перемещать окно по экрану можно с помощью мышки,  нажав и удержи-

вая мышиный курсор на верхней части рамки окна.

    Изменять размеры окна можно используя правый нижний угол окна.  Он

всегда зелёного цвета. Необходимо просто нажать на него мышиным курсо-

ром и удерживая его перемещать мышку по экрану.

                   Расположение ключей на рамке окна.

                   ----------------------------------

   

    Задание

    -------

    Выполните задание используя только  манипулятор "мышь".

    1. Откройте два новых окна.

    2. Уменьшите их размеры приблизительно в три раза.

    3. Разместите их в разных углах экрана.

    4. Закройте одно из них.

    5. Второе окно распахните до размеров экрана.

    6. Закройте его.

                        Контрольные вопросы.

                       ---------------------

1. Назовите составные части интегрированной инструментальной  оболочки

  Turbo Pascal 7.0.

2. Чем отличаются компилятор от интерпретатора?

3. Назовите назначение опций главного меню.

4. Назовите три способа выбора опций меню.

5. Назовите три способа закрытия активного окна.

6. Перечислите известные вам комбинации горячих клавиш.

7. Перечислите  известные  вам  способы изменения размеров и положения

  окон.

8. Перечислите назначение управляющих символов на рамке окна.


lab02.html

***********************************

Лабораторная работа N 2

Дисковые операции и выполнение программ

    Эта лабораторная работа посвящена основам работы с файлами  прог-

рамм. Каждая лабораторная работа, - это работа по созданию программ на

языке Turbo Pascal.  Естественно,  Вам  неоднократно  придётся  читать

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

и т. д.

    На сегодняшний день Вы умеете:  открывать новые окна, изменять их

размеры и положение на экране,  активизировать нужное вам окно, закры-

вать уже открытые окна и всё это как с помощью меню,  так и с  помощью

манипулятора мышь и комбинаций горячих клавиш.

    Вы уже знаете, что окна используются для написания и редактирова-

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

любого окна размещается имя файла, текст которого находится в этом ок-

не.  Так в середине верхней части рамки данного окна  Вы  можете  про-

честь: L#02.PAS.  Это и есть имя файла с текстом лабораторной работы N

2.

    Если Вы открываете новое окно,  то естественно в этом новом  окне

ещё  нет никакого файла.  Но в середине верхней части рамки этого окна

тоже есть надпись:  NONAME00.PAS или NONAME01.PAS или  NONAME02.PAS  и

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

файл без имени.

    Задание.

    -------

Откройте новое окно,  и сразу же его закройте. Выполните задание любым

из известных Вам способов.

    Диалоговое окно Information.

    ----------------------------

    Это задание уже не вызывает у Вас никаких трудностей.  Но если бы

Вы попытались  написать  в только что открытом окне хотя бы одно слово

или букву,  то при попытке его закрыть,  Вам пришлось бы выполнить ряд

дополнительных операций.

    В таком случае, при попытке закрыть окно, появляется "диалоговое"

окно. "Диалоговое" окно - это специальный вид окон редактора,  которые

предназначены не для редактирования файлов,  а для диалога с пользова-

телем. Эти окна имеют серый цвет. Они могут содержать краткое информа-

ционное сообщение и "кнопки".

    "Кнопки" - это  прямоугольники зеленого цвета с тенью. Они содер-

жат название операций, которые Вы можете выполнить в данный момент.

    При попытке закрыть окно редактора,  в котором Вы  уже  работали,

появляется диалоговое окно с сообщением:

Что в переводе означает: NONAME00.PAS был изменён. Записать?

    Кроме этого в диалоговом окне Вы увидите три "кнопки":

Yes    - да

No     - нет

Cancel - отказаться от выполнения операции.

    Кнопка, которая является активной, имеет надпись белым цветом (не

считая выделенных букв),  все остальные кнопки,  - надпись чёрным цве-

том.  Если вы нажмёте клавишу Enter,  то нажата будет именно  активная

кнопка.  Сменить активную кнопку можно с помощью клавиши - Tab.  Кроме

того,  нажать её можно с помощью мышки,  или нажав на клавиатуре выде-

ленную на кнопке букву вместе с клавишей Alt.

    Задание.

    --------

1. Откройте новое окно редактора.

2. Напишите в нём свою фамилию.

3. Попытайтесь его закрыть.

4. При появлении диалогового окна смените несколько раз активную кноп-

  ку с помощью клавиши - Tab.

5. Откажитесь от выполнения операции "закрыть окно".

6. Активизируйте окно с текстом данной лабораторной работы (окно N 1).

    Диалоговое окно Save File as.

    -----------------------------

    Как Вы видите, окно N 2 при выборе кнопки "Cancel" не закрылось.

    При выборе кнопки "No" окно закрывается, а информация находящаяся

в нём не сохраняется.

    При выборе кнопки "Yes" перед вами появится диалоговое окно  Save

File  As.  С помощью этого окна Вы можете ввести имя файла,  в котором

будет храниться на диске информация,  находящаяся в  закрываемом  Вами

окне.

    Это окно содержит три кнопки:

Ok     - согласен.

Cancel - отказаться от выполнения операции.

Help   - получить помощь по этой операции (на английском).

    Кроме этого в этом окне есть ещё два так называемых "поля".

Save file as

 В этом поле Вы можете просто набрать с клавиатуры имя файла.

Files

 А в этом поле Вы можете выбрать файл из имеющихся (готовых) файлов в

активном каталоге на диске для сохранения в нём информации находящейся

в окне.

    Задание.

    -------

1. Активизируйте окно, в котором Вы написали свою фамилию.

2. Попытайтесь его закрыть.

3. В диалоговом окне "Information" выберите и выполните "Yes".

4. В диалоговом окне "Save File as"  смените  несколько  раз  активную

  кнопку и активное поле.

5. В поле "Save File as" наберите имя файла - "NAME". (для примера).

6. Выберите и выполните - Ok.

    Теперь окно  закрылось,  а информация,  которая в нём находилась,

хранится в активном каталоге, в файле под именем NAME.PAS

    Необходимо добавить,  что диалоговое окно "Save  File  as"  можно

открыть и не закрывая текущего окна с информацией. Для этого необходи-

мо выполнить опции меню

    File   Save

    При этом могут возникнуть две ситуации:

1. Вы хотите сохранить изменения в файле,  который уже имеет своё имя.

  В этом случае файл будет просто записан на диск под своим именем.

2. Вы хотите сохранить файл, который ещё не имеет своего имени (вернее

имеет имя NONAME00.PAS и т.д.) В этом случае перед Вами  появится  уже

знакомое Вам  диалоговое  окно "Save File as".  В этом случае Вы даёте

вашему файлу имя и сохраняете его не закрывая окна.

    Если Вы заметили, рядом с опцией меню File Save находится горячая

клавиша F2. А в нижней строке подсказки находится подсказка - F2 Save.

Так что сохранить информацию в файле Вы можете также нажав клавишу F2,

или нажав мышкой на соответствующую надпись внизу.

    Если вы  хотите сохранить файл,  который уже имеет своё имя,  под

другим именем,  то вместо опции File Save выберите опцию File Save As.

В этом  случае появится знакомое вам диалоговое окно и вы сможете дать

файлу другое имя. Файл со старым именем останется на диске без измене-

ний, и появится новый файл с данным вами именем.

    Мы уже умеем закрывать окна редактора (в любых ситуациях), а так-

же сохранять  информацию находящуюся в этих окнах.  Теперь Мы научимся

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

    Диалоговое окно Open a File.

    ----------------------------

    Операции по  чтению  информации с диска можно выполнить с помощью

опции меню File Open.  При выполнении этой опции перед  Вами  появится

диалоговое окно "Open a File".

    Это диалоговое окно содержит два поля:

Name

 В этом поле Вы можете набрать на клавиатуре имя необходимого файла.

Files

 А в  этом  поле  Вы можете просто выбрать нужный файл из имеющихся в

активном каталоге.

    Кроме этого окно "Open a File" содержит четыре кнопки:

Open    - открыть.

 Эта кнопка  читает  выбранный Вами файл.  Если Вы перед этим открыли

новое окно,  то выбранный вами файл будет загружен в это окно. В про-

тивном случае для выбранного Вами файла будет открыто новое окно.

Replace - заменить.

 Эта кнопка  заменяет  старую информацию в активном окне редактора на

информацию из выбранного вами файла.

Cancel  - отказаться от выполнения информации.

Help    - получить помощь по данной операции.

    Задание.

    -------

1. Выполните опцию меню  File  Open

2. Смените несколько раз активную кнопку и поле диалогового окна с по-

  мощью клавиши Tab.

3. С помощью поля Files выберите для чтения файл NAME.PAS.

4. Загрузите его спомощью кнопки Open.

5. Закройте окно NAME.PAS

    Компиляция и выполнение программ.

    ---------------------------------

    А теперь самое главное.  Кроме чтения и записи на диск информации

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

программы написанные  на языке Turbo Pascal.  Выполнение программ осу-

ществляется с помощью опции меню Run Run. При этом сначала текст прог-

раммы будет "откомпилирован", а затем сразу же выполнен.

    Задание.

    -------

1. Откройте файл VGADEMO.PAS и посмотрите, как выглядят программы напи-

  санные на языке Turbo Pascal.

2. Выполните эту программу.

3. Закройте окно VGADEMO.PAS.

    Выполнимые программы.

    ---------------------

    Как вы уже знаете,  компилятор переводит тексты программ с  языка

программирования высокого  уровня  Turbo  Pascal  7.0 на язык понятный

ЭВМ, то-есть на программу "машинных кодов". Кроме того компилятор соз-

даёт на  диске  выполнимый файл с таким же именем,  но с расширением не

PAS, а EXE.  Например, если вы выполняете программу с именем LOTOS.PAS

то на  диске  появится файл LOTOS.EXE,  который представляет собой уже

полноценную самостоятельную выполнимую программу. Для того, чтобы её не

только увидеть но и выполнить,  уже вне оболочки Turbo Pascal 7.0, не-

обходимо уметь из оболочки выходить.

    Выход из ИИО Turbo Pascal 7.0.

    ------------------------------

    Выход из ИИО Turbo Pascal 7.0.  осуществляется  с  помощью  опции

главного меню

    File   Exit

    или с помощью комбинации горячих клавиш Alt+X.

    Задание.

    --------

1. Выйдите из оболочки Turbo Pascal 7.0.

2. Найдите в текущем каталоге файл VGADEMO.EXE и просмотрите  его  со-

  держимое (F3).

3. Выполните эту программу.

4. Войдите в оболочку Turbo Pascal 7.0 (выполните turbo.exe).

    Диалоговое окно Window List.

    ----------------------------

    Опция Window List позволяет управлять окнами текстового редактора

с помощью диалогового окна "Window List".

Это диалоговое окно содержит список имён файлов,  хранящихся  в  окнах

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

личные операции, используя кнопки этого диалогового окна:

    Ok - перейти в окно содержащее данный файл;

    Delete - закрыть окно содержащее данный файл;

    Cancel - отказаться от выполнения операций;

    Help - получить помощь о данном диалоговом окне.

    Контрольные вопросы.

    --------------------

1. Как сохранить новую информацию из нового окна?

2. Как сохранить изменения в файле?

3. Как прочесть информацию из файла в окно редактора?

4. Как заменить информацию в окне?

4. Что такое диалоговое окно?

5. Как можно сменить активную кнопку диалогового окна?

6. Опишите диалоговое окно "Information".

7. Опишите диалоговое окно "Save File as".

8. Опишите диалоговое окно "Open a file".

9. Опишите диалоговое окно "Window List".

10. Опишите компиляцию и выполнение программ.

11. Как  осуществляется выход из ИИО Turbo Pascal 7.0.

12. Как войти в ИИО Turbo Pascal 7.0.


lab03.html

***********************************

Лабораторная работа N 3

Возможности текстового редактора Turbo Pascal 7.0

Перемещение по тексту, поиск и замена.

    Настоящая лабораторная  работа  посвящена  изучению  возможностей

текстового редактора системы Turbo Pascal. Мы освоим операции по поис-

ку и замене, научимся быстро перемещаться по тексту.

                Основные команды перемещения курсора

               --------------------------------------

Ctrl+"стрелка влево"

--------------------

    Переместиться на одно слово влево.

Ctrl+"стрелка вправо"

---------------------

    Переместиться на одно слово вправо.

PgUp

----

    Переместиться на страницу вверх.

PgDn

----

    Переместиться на страницу вниз.

Home

----

    Переместиться к началу строки.

End

---

    Переместиться к концу строки.

Ctrl+Home

---------

    Переместиться к первой строке окна.

Ctrl+End

--------

    Переместиться к последней строке окна.

Ctrl+PgUp

---------

    Переместиться к началу текста.

Ctrl+PgDn

---------

    Переместиться к концу текста.

                Некоторые команды вставки и удаления

               --------------------------------------

Ctrl+Y

------

    Удаление строки в которой находится курсор.

Ctrl+N

------

    Вставка пустой строки.

    Сейчас мы находимся в окне редактирования.  В нижней левой  части

рамки окна  мы видим номер строки и номер столбца (разделённые двоето-

чием). При наборе текста их значения изменяются в соответствии с пере-

мещениями курсора.

    Обратите внимание на курсор:  он сейчас имеет половинную  высоту.

Если-же мы нажмём клавишу Ins, то курсор изменит свою форму на прямоу-

гольник полной высоты.  Повторное нажатие клавиши Ins вернёт курсор  в

прежнее состояние.

    Если курсор  имеет половинную высоту,  редактор работает в режиме

вставки "Insert".  В этом режиме текст находящийся справа от  курсора,

сдвигается  вправо.  При наборе текста Вы имеете возможность вписывать

нужные слова или символы в готовый текст, не переписывая его заново.

    Если курсор имеет полную высоту, редактор работает в режиме заме-

ны "Overwrite". В этом режиме текст находящийся справа от курсора, за-

тирается новым текстом (набор поверх).

    Не следует злоупотреблять режимом замены.  Профессиональные прог-

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

информации,  при случайном нажатии на "не ту" клавишу.  Лучше  вписать

новое слово, раздвинув старую строку, после чего удалить обычными спо-

собами ненужные  символы  или  слова.  Неопытным  пользователям  режим

"Insert" не  нравится  из-за  того,  что в этом режиме нажатие клавиши

"ввод" приводит к рассечению строки.

    Вообще говоря  это довольно удобно.  Однако если на "ввод" нажали

случайно, то нужно уметь подклеить отрезанный кусок обратно. Это можно

сделать двумя способами.

    Первый способ.  Если курсор находится в начале строки, то нажатие

клавиши BS "подклеит" текущую строку в конец предыдущей.

    Второй способ. Если курсор находится в конце строки, нажатие кла-

виши Del "подклеит" следующую строку в конец текущей.

    Задание.

    --------

1. Загрузите файл VGADEMO.PAS.

2. Попробуйте поперемещаться по тексту построчно, постранично, в конец

  или начало текста и т.д.

3. Переведите курсор в режим вставки затем замены и так несколько раз.

4. Рассеките произвольную строку.

5. Попытайтесь склеить рассечённую Вами строку.

6. Вернитесь в окно с текстом данной лабораторной работы.

    К операциям  перемещения  по тексту относится переход к строке по

её номеру. Эта операция выполняется опцией:

    Search    Go to line number...

    Многоточие в конце названия пункта меню, как Вы уже знаете, озна-

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

нель очень простая, и с её работой Вы можете разобраться сами.

    Задание.

    --------

1. Перейдите в окно с файлом VGADEMO.PAS.

2. Перейдите к строке текста программы N 33, 44, 144 и т.д.

3. Вернитесь в окно с текстом лабораторной работы.

    Прежде чем продолжить изучение возможностей ИИО  ТР,  остановимся

немного подробней на общих возможностях диалоговых окон.

    Элементы диалоговых окон.

    -------------------------

   Если после команды меню указано многоточие (...),  то по этой  ко-

манде открывается диалоговое окно. Диалоговое окно предоставляет удоб-

ный способ просмотра информации и установки набора параметров.

 Строка ввода (InputLine)

 ~~~~~~~~~~~~~~~~~~~~~~~~

   Элемент для ввода и редактирования строк,  называется строкой вво-

да. В нем Вы вводите с клавиатуры ту или иную информацию: буквы, стро-

ки и числа.

 История ввода (History)

 ~~~~~~~~~~~~~~~~~~~~~~~

   История - это список, который связан со строкой ввода.

   Нажимая [стрелку вниз] в строке ввода или щелкая мышью  в  иконку,

правее строки ввода __, можно вызвать список предыдущих значений этой

строки ввода и выбрать одно из них.  Это предотвращает  от  повторного

набора.

 Кнопка (Button)

 ~~~~~~~~~~~~~~~

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

с кнопками электронных приборов.  Каждая кнопка имеет  метку,  которая

указывает, что случится, когда эта кнопка нажата.

   Нажать на кнопку можно мышкой либо,  сделав ее текущей,  нажать на

[Enter] или [пробел]. Когда Вы нажимаете кнопку, выполняется действие,

связанное с этой кнопкой. Если текущий элемент диалогового окна не яв-

ляется кнопкой,  то одна из кнопок 'выделяется' автоматически. Она на-

зывается 'кнопкой по умолчанию' (default button). Как правило, она вы-

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

просто нажать [Enter].

 Переключатели выбора (CheckBoxes, RadioButtons)

 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   Блоки для выбора и установок стандартных параметров.

   Radiobuttons                     Checkboxes

   ------------                     -------------

   ( ) Вариант1                     [ ] Параметр1

   (.) Вариант2                     [X] Параметр2

   ( ) Вариант3                     [X] Параметр3

   ------------                     -------------

 Выбор только одного из            Устнановка различных независимых

 предложенных вариантов            параметров

 

   Перемещение между  параметрами выбора осуществляется клавишами уп-

равления курсора или мышью.

 Список (ListBox)

 ~~~~~~~~~~~~~~~~

   Список параметров для выбора.  Используется для выбора файла в ди-

ректории  или  в  истории  строк ввода.  Имеет указатель в виде полос-

ки-курсора и полосы прокрутки для скроллинга.

   Продолжим изучение раздела главного меню  Search.  Опция  главного

меню Search Find...  предназначена для поиска  необходимого  фрагмента

текста в файле.

                  Описание диалогового окна  Find

                 ---------------------------------

    Это окно содержит пять полей и три кнопки.

Поле Text to find

-----------------

    Предназначено для ввода с клавиатуры выражения для поиска.

Поле Options

------------

    Содержит три выражения, напротив которых стоят квадратные скобки.

Перемещаться между выражениями в поле можно с помощью клавиш со стрел-

ками.  Каждое  выражение,  это  режим поиска,  который может быть либо

включён,  либо выключен.  Если режим включён,  то в квадратных скобках

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

или выключить режим можно с помощью клавиши пробел.

    Описание режимов:

Case sensitive      - различать большие и малые латинские буквы.

Whole words only    - поиск только целыми словами.

Regular expression  - распознавать специальные символы

Поле Scope

----------

    Содержит два выражения, напротив которых стоят круглые скобки. Их

называют радио-кнопками. Название должно нам напоминать те радиоприём-

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

ку, а кнопками, соответствующими диапазонам. Существенной особенностью

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

кнопок. Точно так же обстоят дела и в этом поле - нажатая кнопка изоб-

ражается в виде жирной точки.

    Описание "кнопок":

Global        - поиск по всему тексту.

Selected text - поиск только в выделенном тексте.

Поле Directions

---------------

    Описание "кнопок"

Forward  - поиск вперёд.

Backward - поиск назад.

Поле Origin

-----------

    Описание "кнопок"

From cursor  - искать от текущего положения курсора.

Entire scope - искать по всему диапазону поиска.

    Кнопки диалогового окна Ok, Cancel, Help - Вам уже знакомы.

    Задание

    -------

1. Перейдите в окно с файлом VGADEMO.PAS.

2. Вызовите диалоговое окно Find.

3. Попытайтесь  выбрать  различные  режимы  поиска,  переключать  "ра-

  дио-кнопки" и т.д.

4. Найдите первое вхождение строки  "end" в тексте программы.

5. Вернитесь в окно с текстом лабораторной работы.

    Найденный фрагмент инверсно выделяется. Для того чтобы продолжить

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

Search     Search again.  Для поиска третьего вхождения необходимо вы-

полнить эту опцию ещё раз и т.д.

    Задание

    -------

1. Перейдите в окно VGADEMO.PAS.

2. Найдите четвёртое вхождение строки Begin в тексте программы.

3. Вернитесь в диалоговое окно.

    Опция   Search  Replace...   предназначена  для замены фрагментов

текста.

                 Описание диалогового окно Replase

                -----------------------------------

    Диалоговое окно  Replase  содержит все те поля и кнопки,  которые

содержатся в диалоговом окне Find.  Кроме этого в этом окне  есть  ещё

одно поле

Поле New text

-------------

    Предназначено для  ввода  текста,  которым  будет заменятся текст

введённый в поле Text to find.

    В поле Options этого диалогового окна есть ещё один режим.

Promt on replase.  Если этот режим включён,  т.е.  если напротив этого

выражения в квадратных скобках стоит крестик,  то перед тем как произ-

вести замену  одного  фрагмента на другой,  система будет спрашивать у

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

    Кроме трёх известных Вам кнопок есть ещё одна -  Change  all.  Её

нажатие производит замену всех фрагментов сразу во всём тексте.

    Кнопка Ok выполняет замену только одного из всех фрагментов.  Для

замены  следующих  фрагментов  в этом случае необходимо выплнить опцию

Search again.

    Задание

    -------

1. Перейдите в окно VGADEMO.PAS.

2. Замените все "end" на "234".

3. Вернитесь в окно с лабораторной работой.

                        Контрольные вопросы.

                      ------------------------

1. Опишите все возможные способы быстрого перемещения по тексту.

2. Опишите диалоговое окно Find.

3. Опишите диалоговое окно Replase.

4. Опишите все возможные элементы диалоговых окон.

5. Какие достоинства и недостатки у режимов "вставки" и "замены"?


lab04.html

***********************************

Лабораторная работа N 4

Возможности текстового редактора Turbo Pascal 7.0.

Операции с блоками.

     Мы продолжаем изучать возможности текстового редактора системы

Turbo Pascal 7.0.  Всем работающим с этим языком программирования при-

ходится использовать возможности операций над фрагментами текста,  или

иначе - "блоками".

    Так что же представляет собой  выделенный  фрагмент  текста,  или

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

Для этого необходимо подвести курсор к началу необходимого  Вам  фраг-

мента и удерживая клавишу Shift передвигать курсор к концу этого фраг-

мента. Выделенный фрагмент инверсно выделяется на экране  (серым  цве-

том).

    Задание

   ---------

*

1. Подведите курсор к значку "*" в начале этого задания.

2. Удерживая  клавишу Shift переместите его к значку "#" в конце зада-

ния.                                                                #

    Теперь Вы имеете выделенный фрагмент текста,  - блок.  Существует

возможность выполнить обратное действие.  Снять сделанное раннее выде-

ление фрагмента текста можно  таким-же  образом.  Необходимо  подвести

курсор к  уже выделенному фрагменту текста,  и с помощью клавиши Shift

уменьшить размер выделенной области до "нуля".

    Задание

   ---------

Снимите сделанное Вами раннее выделение фрагмента текста.

    Так зачем-же нам нужны выделенные фрагменты текста? Система Turbo

Pascal позволяет выполнять целый ряд операций над выделенными фрагмен-

тами текста. Большинство из них выполняется с помощью специального ок-

на  под  названием  Clipboard,  что  можно перевести с английского как

"стол для клипов",  "монтажный столик","промежуточный буфер" или "кар-

ман".  Все операции с выделенными фрагментами текста выполняются с по-

мощью подменю Edit главного меню.

                    Описание опций подменю Edit:

                   -----------------------------

Edit Cut - Забрать, перенести или вырезать выделенный фрагмент в "кар-

    ман". В текущем тексте выделенный фрагмент будет удалён.

Edit Copy - Скопировать содержимое выделенного  фрагмента  в  "карман"

    без его удаления из текста.

Edit Paste - "Наклеить" текст выделенный в окне  Clipboard  начиная  с

    текущей позиции курсора.

Edit Clear - Удалить выделенный фрагмент.  (без записи его в "карман")

Edit Show clipboard - активизирует окно Clipboard.  В этом окне сохра-

няются все вырезанные и скопированные раннее фрагменты текста. Послед-

ний фрагмент обычно выделен. Именно этот выделенный фрагмент наклеива-

ется в текст с текущей позиции курсора. Содержимое окна Clipboard тоже

можно редактировать, выделять текст, снимать выделения текста и т.д. В

любом случае "наклеивается" только тот текст из  этого  окна,  который

выделен.

    Задание.

   ---------

1. Выделите  приведённый ниже текст программы EX_1.  Он ограничен чёр-

  точками. (без чёрточек).

2. Скопируйте выделенный Вами фрагмент программы в "карман".

3. Откройте  окно  Clipboard и убедитесь,  что там находится программа

  EX_1.

4. Откройте новое окно.

5. Начиная с 10-й строки этого окна, наклейте текст программы EX_1.

6. Запустите данную программу на выполнение.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    PROGRAM EX_1;

    USES CRT;

    BEGIN

       ClrScr;

     Writeln('ПОЗДРАВЛЯЕМ! КОПИРОВАНИЕ ПРОШЛО УСПЕШНО.');

     Writeln('  Для продолжения нажмите клавишу Enter');

       Readln;

    END.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Умение копировать участки текста из одного окна в другое сослужит

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

использовать какие-то участки уже имеющейся похожей программы.

    Выделять фрагменты  текста можно также с помощью мыши.  Для этого

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

тельным  пальцем  левую кнопку мыши и удерживая её перемещать курсор к

концу фрагмента.

    Операции с фрагментами текста всегда можно  выполнить  с  помощью

меню, но  это  не всегда удобно.  Гораздо удобней использовать уже из-

вестные Вам "горячие" комбинации клавиш.

    Задание

   ---------

1. Законспектируйте и постарайтесь запомнить все "горячие"  комбинации

  клавиш, относящихся к блочным операциям. Как Вам известно, все ком-

  бинации "горячих" клавиш записаны справа от выполняемой опции меню.

2. Выполните предыдущее задание, используя только комбинации "горячих"

  клавиш.

    Откатка изменений.

    ------------------

    Текстовый редактор системы Turbo Pascal 7.0 обладает возможностью

"откатки изменений".  Вы можете "вернуться" на несколько шагов "обрат-

но", и таким образом "отказаться" от последних, сделанных вами в текс-

те  файла  изменений.  Для  этого необходимо выполнить опцию меню Edit

Undo.

    Опция меню  Edit Redo выполняет действие противоположное действию

операции "откатка изменений".

    Задание

    -------

1. Удалите текст этого задания любым из известных вам способов.

2. Восстановите этот фрагмент с помощью операции "откатка изменений".

3. Выполните действие обратное действию "откатка изменений".

  Контрольные вопросы.

  --------------------

1. Опишите назначение всех разделов (опций) подменю Edit.

2. Перечислите все комбинации горячих клавиш меню Edit.

3. Расскажите о назначении и возможностях окна Clipboard.


lab05.html

***********************************

Лабораторная работа N 5

Программирование алгоритмов линейной структуры

    Текст программы в системе программирования Turbo Pascal представ-

ляет  собой  обычный  текстовый  файл,  который Вы будете составлять в

текстовом редакторе интегрированной инструментальной оболочки.

    Программа состоит из отдельных разделов или блоков, которые долж-

ны располагаться в следующем порядке:

[ - заголовок программы;                  ]

[ - раздел объявления меток;              ]

[ - раздел объявления констант;           ]

[ - раздел объявления типов;              ]

[ - раздел объявления переменных;         ]

[ - раздел объявления процедур и функций; ]

  - тело программы.

    Разделы, названия  которых  заключены в квадратные скобки,  могут

отсутствовать в программе.

    В данной лабораторной работе мы изучим назначение и правила  опи-

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

    Заголовок программы

    -------------------

состоит из зарезервированного слова program и имени программы, так на-

зываемого идентификатора.  Завершается заголовок,  так же как и  любая

другая строка программы,  точкой с запятой. Заголовок программы необя-

зателен и игнорируется компилятором.

    Идентификатор

    -------------

- это  имя,  свободно избираемое программистом для элементов программы

(Процедур,  Функций, Констант, Переменных и Типов данных). Идентифика-

тор должен удовлетворять следующим условиям:

   - должен начинаться с латинской буквы или с символа подчёркивания;

   - TP не различает большие и малые буквы;

   - начиная  со второй позиции можно применять наряду с буквами циф-

ры;

   - пробел  в  TP  является  разделителем  и не может присутствовать

внутри идентификатора;

   - зарезервированные слова (такие как begin, end, program в качест-

ве идентификатора не допускаются;

   - max длина идентификатора при сравнениях 63 символа.

    Тело программы

    --------------

начинается словом begin,  а заканчивается словом end с точкой, которая

является признаком конца программы.

    Раздел объявления переменных

    ----------------------------

Переменными называются параметры программы, значения которых могут из-

менятся  в процессе её выполнения.  Все используемые в программе пере-

менные должны быть определены с указанием их типов в разделе  объявле-

ния переменных. Этот раздел начинается служебным словом Var

  Var

    : ;

    : ;

    Действительные переменные  объявляются с помощью служебного слова

real, целые - с помощью служебного слова integer. Например:

    VAR

      a: integer;

      bf14: real;

    В этом примере объявлено две переменных.  Переменная  "a"  целого

типа, и переменная "bf14" вещественного типа.  Объявить целую перемен-

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

нения  любого  целого  числа.  Обратиться к этой ячейке можно по имени

(идентификатору) которое выбрано Вами в разделе объявления переменных.

    Операция присваивания

    ---------------------

применяется для записи информации в объявленную в  программе  перемен-

ную. Знак операции присваивания ":=" двоеточие равно. Например:

    а:=1996;

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

именем "а". Прочесть информацию из ячейки памяти "а" можно просто ука-

зав в программе имя этой переменной.

    Оператор ввода информации

    -------------------------

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

Для этого используются так называемые операторы ввода информации.

    Readln(a);

При выполнении этого оператора на экране  монитора  возникнет  курсор.

После этого Вы должны набрать на клавиатуре нужное число и нажать кла-

вишу Enter.

    Операторы вывода информации

    ---------------------------

    Write, Writeln.

    С помощью  этих  операторов можно вывести любую информацию на эк-

ран. Для того, чтобы вывести текстовое сообщение на экран, его необхо-

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

апострофа. Например:

    Write('Эта строка, от апострофа до апострофа, будет выведена.');

    Можно вывести значение объявленной раннее переменной.  Для  этого

необходимо просто указать её имя. Например:

    Write(a);

    Выводить можно и текстовые сообщения и значения переменных однов-

ременно. Например:

    Write('Значение переменной а равно ',a);

    Как Вы заметили, элементы выводимой информации отделяются друг от

друга запятыми.

    При выводе информации оператором Write курсор не  переводится  на

новую строку.  При выводе информации оператором Writeln курсор перехо-

дит на начало следующей строки.

    Выражения в  тексте программы взятые в фигурные скобки,  являются

комментариями и компилятором игнорируются.

  Арифметические операции

  -----------------------

  +  сложение

  -  вычитание

  *  умножение

  /  деление

  Некоторые стандартные функции

  -----------------------------

  sin(x)    синус

  cos(x)    косинус

  sqrt(x)   корень квадратный

  sqr(x)    квадрат числа

  Выполнение программ и просмотр результатов её выполнения

  --------------------------------------------------------

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

  Выполнение уже  написанной программы производится с помощью уже из-

вестной вам опции главного меню: Run Run.

  После выполнения программы ИИО сразу возвращается в окно текстового

редактора, содержащего текст данной лабораторной работы. Для просмотра

результатов  выполнения  программы можно выполнить две различные опции

главного меню:

  1. Debug    User Screen   

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

называемый  экран  пользователя,  который  сейчас просто закрыт окнами

текстового редактора.

  2. Debug    Output

"Открыть окно вывода информации". В этом окне всегда содержится инфор-

мация, которая выводится программой.

                          Примеры программ

                         ------------------

PROGRAM exampl_1;

BEGIN

    writeln('Первая программа на языке Pascal');

END.

 --------------------------------------------------------

PROGRAM exampl_2;    {заголовок программы}

VAR                  {раздел объявления переменных}

   x: integer;

   y: integer;

   Summa: integer;

BEGIN                {начало тела программы}

    Write('Введите первое число:  ');      {вывод сообщения}

    Readln(x);                             {ввод числа}

    Write('Введите второе число:  ');

    Readln(y);

    Summa:=x+y;                             {присваивание}

    Writeln('Результат суммирования:  ',summa);

END.                 {конец тела программы}

    Контрольные вопросы

    -------------------

1. Из каких разделов состоит программа, написанная на языке программи-

  рования Turbo Pascal?

2. Какие разделы в программе обязательны?

3. Что такое идентификатор?

4. Какие ограничения накладываются на идентификатор?

5. Как оформляется программа на языке программирования Turbo Pascal?

6. Назовите известные вам арифметические операции и функции.

7. Как объявляются целые или вещественные переменные?

8. Как определить значение переменной?

9. Опишите операторы ввода информации.

10. Опишите операторы вывода информации.

11. Опишите оператор присваивания и правила его использования.

              Задания для самостоятельного выполнения

             -----------------------------------------

1. Даны два действительных положительных числа.  Найти среднее арифме-

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

2. Даны катеты прямоугольного треугольника.  Найти  его  гипотенузу  и

  площадь.

3. Вычислить площадь прямоугольного треугольника  по  формуле  Герона,

  если заданы его стороны.

4. Определите расстояние пройденное физическим телом за время t,  если

  тело  движется с постоянным ускорением а и имеет в начальный момент

  скорость v0.

5. Определите время свободного падения с высоты H.

6. Определите площадь трапеции высотой h, с основаниями a, b.

7. Определите площадь и периметр прямоугольника со сторонами a и b.

8. Определите  количество  теплоты необходимое для нагревания жидкости

  массой m,  обладающей теплоёмкостью c от температуры t1 до темпера-

  туры t2.

9. Определите количество теплоты, выделяемое проводником с сопротивле-

  нием R  за  время  t при прохождении через него электрического тока

  силой I.

10.Вычислите объём параллелепипеда со сторонами a, b и c.

11.Выведите на экран своё имя высотой в восемь строчек.

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

  шись третьей переменной R для временного хранения значения.


lab06.html

***********************************

Лабораторная работа N 6

Численные переменные и типы данных.

    Система программирования Turbo Pascal 7.0 является современным  и

очень мощным средством для создания программ. В этом Вы могли неоднок-

ратно убедиться, изучая элементарные возможности редактора этой систе-

мы. Согласитесь,  -  работа  в  таком редакторе не сложна,  и зачастую

просто доставляет пользователю удовольствие разнообразием  своих  воз-

можностей.  Программы, созданные в системе TP достаточно эффективны, и

позволяют использовать всю мощь вычислительной техники.

    Одним из самых главных препятствий при создании программ, являет-

ся объём оперативной памяти компьютера. Программисту всегда приходится

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

Эту проблему можно решить ограничивая количество переменных используе-

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

    Вы уже знаете,  как объявляются переменные целого и вещественного

типа. Кроме  этих переменных в системе TP существует несколько числен-

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

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

можно хранить в этих переменных. Таким образом, программист может выб-

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

    Целые типы.

    -----------

Тип                         Диапазон            Размер в байтах

Shortint                 -128 .. 127                          1

Integer              -32768 .. 32767                          2

Longint    -2147483648 .. 2147483647                          4

Byte                        0 .. 255                          1

Word                      0 .. 65535                          2

    Тип-диапазон.

    -------------

    Все целые типы относятся к так называемым перечислимым или поряд-

ковым типам.  В любом порядковом типе можно выделить подмножество зна-

чений,  в которое входят все значения исходного типа. Тип-диапазон за-

даётся  в разделе объявления типов указанием минимального и максималь-

ного значений,  разделённых двумя  точками.  Раздел  объявления  типов

всегда начинается служебным словом Type. Например:

    Type

      vcp = 1..32.

    Вещественные типы.

    ------------------

Тип                         Диапазон     Колличество     Размер

                                               цифр   в байтах

Real          2.9E-39 .. 1.7E+38           11-12          6

Single        1.5E-45 .. 3.4E+38             7-8          4

Double      5.0E-324 .. 1.7E+308           15-16          8

Extended  3.4E-4932 .. 1.1E+4932           19-20         10

Comp           E-263+1 .. E263-1           19-20          8

     При работе  с численными переменными допускаются следующие ариф-

метические операции и функции.

     Арифметические операции.

     ------------------------

+  сложение

-  вычитание

*  умножение

/  деление

div  деление целых чисел. Например:

    a div b    если  a=10 и b=3  то результат=3.

mod  остаток от деления целых чисел. Например:

    a mod b    если  a=10 и b=3  то результат=1.

    Арифметические функции.

    -----------------------

Abs(x)     абсолютная величина (модуль)

Arctan(x)  арктангенс

Cos(x)     косинус

Exp(x)     e в степени x (експонента)

Frac(x)    дробная часть числа

Int(x)     целая часть

Ln(x)      натуральный логарифм

Pi         число пи  Pi=3.1415926535897932385

Sin(x)     синус

Sqr(x)     квадрат

Sqrt(x)    квадратный корень

    Примечание: все  тригонометрические  функции используют радианную

меру угла.

     Иногда используются функции преобразования типов данных.

     Функции преобразования типов данных.

     ------------------------------------

Round(x) - округление вещественного числа до ближайшего целого.  Аргу-

  мент функции - величина вещественного типа, а результат - округлён-

  ная до ближайшего целого числа величина типа Longint.  Если резуль-

  тат выходит за диапазон значений Longint,  то при выполнении  прог-

  раммы возникает ошибка.

Trunc(x) - получение целой части вещественного числа. Тип результата -

  Longint.  Если  результат выходит за диапазон значений Longint,  то

  при выполнении программы возникает ошибка.

    Целые типы относятся к величинам  порядкового  типа.  Допускается

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

    Функции для величин порядкового типа.

    ------------------------------------

High(x) - получение максимального значения величины данного типа.

Low(x) - получение минимального значения величины данного типа.

Pred(x) - определение предыдущего значения величины x.

Succ(x) - определение последующего значения величины x.

    Представление целых чисел

    -------------------------

    В изображении  целых чисел присутствуют лишь знак и цифры (знак +

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

нако можно использовать и шестнадцатиричную.  В этом случае перед чис-

лом следует поставить знак $.

    Представление вещественных чисел

    --------------------------------

    Вещественные числа содержат в своём изображении точку и/или пока-

затель степени (символ E или e), например:

    X = -0.5;

    Y = 1.34;

    Z = -1E-5;

    W = 7.5e+15; (выражение с плавающей запятой)

    Форматированый вывод

    --------------------

    Как вы уже знаете, вывод информации на экран монитора осуществля-

ется с помощью операторов Write и Writeln. Параметрами данных процедур

могут быть текстовые сообщения (строки заключённые в  кавычки),  и/или

имена переменных,  содержимое которых выводится на экран монитора. При

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

    E

    E:m

    E:m:n

где E - переменная, значение которoй выводится на экран.

m,n - выражения тип integer, необязательные параметры, указывающие со-

     ответственно ширину выводимого поля и количество дробных цифр.

     Конструкция вида E:m:n может использоваться только  для  вещест-

венных чисел. Для остальных типов употребляется конструкция вида E:m.

    Если выводимое данное имеет меньше знаков,  чем m то оно дополня-

ется слева пробелами. Если больше, то выводится столько знаков, сколь-

ко необходимо для корректного представления результата.

    Если параметры  m  и n опущены,  то подразумевается их некоторые,

зависящие от реализации, значения.

    Если для данных вещественного типа отсутствует параметр n, то вы-

водимое данное представляется с плавающей запятой и показателем степе-

ни. В  противном  случае при выводе используется представление числа с

фиксированной точкой, причём после точки запишется n цифр (общая длина

поля - m символов).

 Writeln(i:4)          i=5                    ___5

 Writeln(i:4,j:4)      i=-5, j=297            __-5_297

 Writeln(i:6)          i=345.6                _345.6

 Writeln(i)            i=345.6                3.45600000E+02

    Контрольные вопросы

    -------------------

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

  на.

2. Перечислите известные вам вещественные типы,  в порядке  увеличения

  диапазона.

3. Объясните необходимость использования нескольких целых и нескольких

  вещественных типов.

3. Как записываются и выполняются известные вам арифметические  опера-

  ции?

4. Перечислите известные вам стандартные арифметические функции.

5. Перечислите функции для величин порядкового типа.

6. Перечислите функции преобразования типов данных.

7. Расскажите о представлении целых чисел.

8. Расскажите о представлении вещественных чисел.

9. Для чего и как используют форматированный вывод?

10. Что такое тип-диапазон?

              Задания для самостоятельного выполнения.

             ------------------------------------------

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

  чисел, введённых с клавиатуры, и выводит результат на экран.

2. Напишите программу,  которая вычисляет квадратный корень суммы трёх

  вещественных чисел,  введённых с клавиатуры. Результат, округлённый

  до ближайшего целого, числа выводится на монитор.

3. Напишите программу,  которая вычисляет квадрат синуса вещественного

  числа, введённого с клавиатуры.  На экран выводится  дробная  часть

  результата предыдущих вычислений.

4. Напишите программу, которая вычисляет значение функции

  sin(¦a+b¦)-¦cos(a-b)¦ для a и b введённых с клавиатуры.  Результат,

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

5. Напишите программу которая вычисляет радиус окружности по введённой

  с клавиатуры площади окружности. Результат выводится на монитор.

6. Напишите программу которая вычисляет площадь треугольника. С клави-

  атуры вводятся длины двух сторон треугольника и угол  (в  градусах)

  между ними. Результат выводится на монитор.

7. Напишите программу которая преобразует угол из градусной меры в ра-

  дианную. Результат выводится на экран.

8. Напишите программу, которая вычисляет значение функции

  cos(cos(cos(a+b))+c) для a, b и c введённых с клавиатуры. Результат

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

9. Определите максимальную высоту подъёма и дальность полёта  снаряда,

  выпущенного со скоростью V0 под углом alfa к горизонту.

10.Определите высоту,  на которой кинетическая энергия тела равна  по-

  тенциальной, если оно брошено вертикально вверх со скоростью V0.

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

  ей переменной.

12.Переменная X содержит трёхзначное число.  Поместите в переменную  S

  сумму цифр этого числа.


lab07.html

***********************************

Лабораторная работа N 7

Логические переменные.

    Кроме численных переменных во всех  языках  программирования  су-

ществует возможность использовать переменные для хранения других типов

данных. Самой простой, с одной стороны, и самой "экзотической", с дру-

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

    Логический тип

    --------------

    Логический тип  Boolean может принимать лишь два значения:  False

(ложь) и True (истина). Иногда говорят, что логическая переменная име-

ет значение "да" или "+" (истина), "нет" или "-" (ложь).

    Объявляются переменные  логического типа в разделе объявления пе-

ременных следующим образом:

    Var

      a: boolean;

      d34, Done: boolean;

    Присваивание (определение значения)  для  переменных  логического

типа выполняется следующим образом:

    a:=true;

    Done:=false;

    С правой части от знака присваивания могут также находится  выра-

жения, результат которых логическая величина.

    Определить значение логической  переменной  с  помощью  оператора

ввода информации нельзя.

    Так-же как для численных переменных выполняется ряд  арифметичес-

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

операций.

    Логические операции

    -------------------

    Логические операции применяются к величинам логического типа, ре-

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

ческая операция not (ОТРИЦАНИЕ) и три бинарные операции  and  (И),  or

(ИЛИ), xor  (ИСКЛЮЧАЮЩЕЕ  ИЛИ).

    Логическая операция NOT

    -----------------------

    Ставится перед  логической  переменной (выражением).  Инвертирует

(меняет на противоположное) значение логической переменной  или  логи-

ческого выражения.

    Логическая операция AND

    -----------------------

    Объединяет две логические переменные (логические выражения).  Ре-

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

менные (оба выражения) составляющие данное выражение. В противном слу-

чае выражение ложно.

    Логическая операция OR

    ----------------------

    Объединяет две логические переменные (логические выражения).  Ре-

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

хотя-бы одна из переменных (выражений) составляющих данное  выражение.

В противном случае выражение ложно.

    Логическая операция XOR

    -----------------------

    Объединяет две логические переменные (логические выражения).  Ре-

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

ременных (выражений) различны. В противном случае выражение ложно.

    Для описания  всех  логических операций используют так называемые

таблицы истинности.  В этих таблицах X и Y - это логические переменные

(выражения), составляющие результирующее выражение.

    Таблица истинности операции NOT

    -------------------------------

+---------------------+

¦   X     ¦   not X   ¦

+---------+-----------¦

¦  False  ¦   True    ¦

¦  True   ¦   False   ¦

+---------------------+

    Таблица истинности операций AND, OR, XOR

    ----------------------------------------

+-------------------------------------------------+

¦   X    ¦  Y    ¦  X and Y ¦  X or Y  ¦  X xor Y ¦

+--------+-------+----------+----------+----------¦

¦  False ¦ False ¦  False   ¦  False   ¦  False   ¦

¦  False ¦ True  ¦  False   ¦  True    ¦  True    ¦

¦  True  ¦ False ¦  False   ¦  True    ¦  True    ¦

¦  True  ¦ True  ¦  True    ¦  True    ¦  False   ¦

+-------------------------------------------------+

    Примеры использования логических операций:

    ------------------------------------------

    a:=false; d34:=true;

    Done:=not a;               {done = true}

    done:=a and d34;           {done = false}

    done:=a or d34;            {done = true}

    done:=a xor d34;           {done = true}

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

величины логического типа.

    Операции отношения.

    -------------------

    Операции отношения предназначены для сравнения двух величин.  Ре-

зультат сравнения имеет логический (Boolean) тип.

=   равно;                <=  меньше или равно;

<>  не равно;             >=  больше или равно;

<   меньше;               >   больше.

    Примеры использования операций отношения:

    -----------------------------------------

    done:=(5<=2);             {done = true при с<=2}

    done:=(c<=10) and (c>=0); {done = true при 0>=c>=10}

    Логическая функция ODD(x)

    -------------------------

    Определяет чётность целого числа x. Возвращает значение true, ес-

ли x нечётно и false в противоположном случае.

    Упорядоченность логических переменных.

    --------------------------------------

    К логическим  переменным  могут  применяться  операции отношения.

Упорядочены логические (булевские) переменные следующим образом:

    FALSE < TRUE

    При составлении сложных арифметических или  логических  выражений

необходимо помнить  о  порядке  (очерёдности выполнения) операций того

или иного типа.  Порядок выполнения  операций  (вычисления  выражений)

часто называют приоритетом действий.

    Порядок вычисления выражений - приоритеты действий:

    ---------------------------------------------------

1. Вычисления в круглых скобках

2. Вычисления значения функций    {sin(x), cos(x), sqrt(x) и т.д.}

3. Унарные операции               { not }

4. Операции типа умножения        { *, /, div, mod, and }

5. Операции типа сложения         { +, -, or, xor }

6. Операции отношения             { =, <>, , <=, >=}

    Контрольные вопросы

    -------------------

1. Как объявляются логические переменные?

2. Как определить значение логической переменной?

3. Какие логические операции вам известны, как они работают?

4. Объясните таблицы истинности для различных логических операций.

5. Что является результатом выполнения различных операций отношения?

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

  величина.

7. Как упорядочены и как сравниваются логические переменные?

8. Расскажите о порядке выполнения различных операций.

              Задания для самостоятельного выполнения.

             ------------------------------------------

1. Определите значение логического выражения, утверждающего, что точка

  с координатами x,y принадлежит окружности радиусом r.  Цент  окруж-

  ности находится в точке a,b.

2. Определите значение логического выражения,  утверждающего что точка

  с координатами  x,y принадлежит первой или третьей четверти коорди-

  натной плоскости.

3. Определите значение величины q после выполнения каждой из следующих

  команд присваивания:

    а) q:=a<b<c and c<5

    b) q:=(a<=b) or (b>=c)

    c) q:=odd(a+b) xor odd(b+c)

    d) q:=sin(a) < sin(b) < sin(c)

  a, b,  c - целочисленные переменные,  значение которых  вводится  с

  клавиатуры.

4. Напишите программу которая вычисляет значение  логического  выраже-

  ния, утверждающего,  что  модуль  суммы двух введённых с клавиатуры

  чисел больше модуля разности этих же  чисел.  Результат  вычисления

  вывести на экран монитора.

5. Напишите программу которая вычисляет значение  логического  выраже-

  ния, утверждающего,  что  синус  суммы  трёх введённых с клавиатуры

  действительных чисел - число  положительное.  Результат  вычисления

  выводится на экран монитора.

6. Напишите программу которая определяет значение логического  выраже-

  ния, утверждающего, что два вещественных числа, введённых с клавиа-

  туры, - числа разного знака.

7. Напишите  программу которая определяет значение логического выраже-

  ния, утверждающего,  что хотя-бы одно  из  введённых  с  клавиатуры

  действительных чисел  отрицательно.  Результат вычисления выводится

  на экран монитора.

8. Напишите  программу которая определяет значение логического выраже-

  ния, утверждающего,  что синус и косинус  введённого  с  клавиатуры

  действительного числа имеют положительное значение.

9. Определите значение логического выражения,  утверждающего  что  три

  целых числа, введённых с клавиатуры, четные числа.

10.Определите значение логического выражения,  утверждающего,  что  из

  двух целых чисел a и b, одно чётное, другое нечётное.


lab08.html

***********************************

Лабораторная работа N 8

Управляющие конструкции языка.

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

    В системе  программирования  Turbo  Paskal существует возможность

составлять алгоритмы нелинейной структуры.  Для  этого  предусмотренны

специальные средства, так называемые "управляющие конструкции".

    Самым простым нелинейным алгоритмом является алгоритм организации

ветвлений. Вычислительный процесс (алгоритм) называется разветвляющим-

ся, если  в зависимости от выполнения определённых условий он реализу-

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

Каждое  отдельное направление называется ветвью вычислений.  Выбор той

или иной ветви осуществляется уже при выполении программы в результате

проверки некоторых условий.

    Управляющая конструкция для программной реализации таких алгорит-

мов называется условным оператором.

    Условный оператор.

    -----------------

    Условный оператор реализует алгоритмическую конструкцию  "развил-

ка" (ветвление) и изменяет порядок выполнения операторов в зависимости

от истинности или ложности некоторого условия. Существует два варианта

оператора.

    Полная форма:

 if <условие> then <оператор 1>

 else <оператор 2>;

    и краткая форма:

 if <условие> then <оператор 1>;

    В этих операторах:

<условие> - некоторое логическое выражение, истинность которого прове-

            ряется;

<оператор 1> - оператор,  который выполняется, если логическое выраже-

              ние <условие> истинно.

<оператор 2> - оператор,  который выполняется, если логическое выраже-

              ние <условие> ложно.

    В качестве  условия  после  служебного слова if может применяться

любое выражение,  результатом которого является  логическая  величина.

Это может быть простое логическое условие,  сложное логическое условие

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

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

    В качестве операторов после служебных слов then и else может при-

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

    Ограничение.

    -----------

    Оператор, который  располагается  после  служебного слова then не

может быть условным.  Без этого ограничения пришлось бы  рассматривать

операторы вроде следующего:

    if a>0 then if a<2 then a:=2 else a:=3;

и было бы неясно, к какому из двух if относится единственное else. При

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

не возникает.

    Важное замечание.

    ----------------

    Так как  условный  оператор  IF является самостоятельным,  единым

оператором (предложением),  ни перед then, ни перед else точку с запя-

той ставить нельзя.

    Примеры использования условного оператора:

    -----------------------------------------

    if x<0 then x:=-y;

    if x<1.5 then z:=x+y

    else z:=1.5;

    Как вы уже заметили, после служебных слов then и else может нахо-

дится (выполнятся) только один оператор.  Но ветви условного оператора

состоящие из одного оператора встречаются довольно редко. Гораздо чаще

каждая ветвь условного оператора состоит из нескольких операторов.  На

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

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

составной оператор.

    Составной оператор.

    -------------------

    В тех  случаях,  когда  в программе вместо нескольких необходимых

операторов, по правилам языка можно поставить  только  один  оператор,

применяют составной оператор.  Он представляет собой группу операторов

ограниченных так называемыми операторными скобками Begin End.  В  этом

случае данная группа операторов, состоящая из произвольного колличест-

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

    Пример составного оператора.

    ----------------------------

    Begin

     Write('Текущее сообщение');

     z:=1;

     d:=d+1;

    End;

    В данном примере три оператора, ограниченные операторными скобка-

ми, воспринимаются как один оператор.

    Пример использования составного оператора в условном операторе.

    --------------------------------------------------------------

    Write('Введите контрольное число');

    Readln(x);

    if x>=0

       then

          begin

           write('Контрольное число положительно');

           z:=z+1;

           d:=d-1;

           x:=x+10;

          end

       else

          begin

           write('Контрольное число отрицательно');

           z:=z-1;

           d:=d+1;

           x:=x-10;

          end.

    Для наглядного описания операторов и управляющих конструкций язы-

ка часто применяют блок-схемы.

    Блок-схема условного оператора.

    ------------------------------

                     |

                     V

        истина +-----------+ ложь

         +-----¦IF условие +-----+

         V     +-----------+     V

       +-----------+   +-----------+

       ¦ THEN      ¦   ¦ ELSE      ¦

       ¦ оператор 1¦   ¦ оператор 2¦

       +-----------+   +-----------+

         V                       V

         +-----------|-----------+

                     V

    Пример программы.

    ----------------

    Программа для решения квадратного уравнения.

    Program kvur;

    Var

     a,b,c: real; {коэффициенты квадратного уравнения}

     x1,x2: real; {корни квадратного уравнения}

     D: real;     {дискриминант квадратного уавнения}

    Begin

     Writeln('Решение квадратного уравнения.');

        {Ввод данных

         -----------}

     Write('Введите коэффициент a: ');

      Readln(a);

     Write('Введите коэффициент b: ');

      Readln(b);

     Write('Введите коэффициент c: ');

      Readln(c);

         {Определение дискриминанта

          -------------------------}

      D:=b*b-4*a*c;

         {Определение корней и вывод информации

          -------------------------------------}

      if D>0 then

              begin

               x1:=(-b+sqrt(D))/(2*a);

               x2:=(-b-sqrt(D))/(2*a);

               Writeln('Первый корень уравнения: ',x1);

               Writeln('Второй корень уравнения: ',x2);

              end;

       if D=0 then

               begin

                x1:=-b/(2*a);

                Writeln('Уравнение имеет один корень: ',x1);

               end;

        if D<0 then writeln('Уравнение корней не имеет.');

        Readln;

    End.

                        Контрольные вопросы.

                       ---------------------

1. Для чего предназначен условный оператор?

2. Каковы две формы записи условного оператора?

3. Может ли условный оператор содержать в себе другие условные  опера-

  торы?

4. Когда и как применяется составной оператор?

5. Нарисуйте и объясните блок-схему выполнения условного оператора.

              Задания для самостоятельного выполнения.

             ------------------------------------------

1. Определить и вывести на печать номер квадранта,  в котором располо-

  жена точка M(x,y).

2. Даны действительные числа X, Y. Меньшее из этих двух чисел заменить

  их полусуммой,  а  большее - их удвоенным произведением.  Результат

  вычисления вывести на экран монитора.

3. Даны три действительных числа. Возвести в квадрат те из них, значе-

  ния которых неотрицательны.  Результат вычисления вывести на  экран

  монитора.

4. Написать программу вычисления значения функции

        + x*x, если  0<x<2;

    y = ¦ x+4, ecли  -2<x<=0;

        + 0, в остальных случаях.

5. Написать программу выбора наибольшего из трёх чисел.

6. Даны x,  y. Если x и y отрицатеьны, то каждое значение заменить его

  модулем; если отрицательно только одно из них, то оба значения уве-

  личить на  0.5;  если оба значения неотрицательны,  то оба значения

  увеличить в 10 раз.

7. Выяснить,  принадлежит  ли точка M(x,y) кругу радиуса r с центром в

  точке с координатами a,b.

8. Определить,  принадлежит ли точка M(x,y) кольцу с центром в  начале

  координат, внешним радиусом R1, и внутренним радиусом R2.

9. Даны три числа a,  b, c. Выяснить, верно ли, что a<b<c. Ответ полу-

  чить в текстовой форме: верно или неверно.

10.Определить, является ли частное чисел a и b, округлённое до ближай-

  шего целого чётным числом.


lab09.html

***********************************

Лабораторная работа N 9

Управляющие конструкции языка.

Оператор выбора.

    В системе программирования Turbo Pascal 7.0 для организации алго-

ритмов с ветвлениями,  наряду с условным оператором применяют оператор

выбора.

    Оператор "выбор".

    ----------------

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

операторов.  Управляющая конструкция "выбор" является идеальным средс-

твом для обработки ситуаций с многими (более чем двумя) исходами, т.е.

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

"выбор" имеет слудующую структуру:

    CASE  OF

: ;

: ;

    .  .  .

: ;

[ELSE ];

    END; {CASE}

    В этой структуре:

- порядковая переменная значение которой  про-

                         веряется;

- константы,  с которыми сравнивается значение порядковой

              переменной;

- оперaторы, из которых выполняется тот, с константой котo-

              рого совпадает значение порядковой переменной;

    Ветвь оператора else является необязательной. Если она отсутству-

ет и  значение  порядковой переменной не совпадает ни с одной из пере-

численных констант,  весь оператор рассматривается как пустой. В отли-

чии от оператора IF перед словом else точку с запятой можно ставить.

    Если для нескольких констант нужно выполнять один и тот же опера-

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

ром. Существует возможность указать диапазон возможных значений.  Нап-

ример диапазон от 1 до 100 включительно указывается так:

    1 .. 100

    Пример.

    -------

CASE i OF

    0, 2, 4, 6, 8: Writeln('Чётная цифра');

    1, 3, 5, 7, 9: Writeln('Нечётная цифра');

    10 .. 100: Writeln('Число от 10 до 100');

  ELSE

    Writeln('Отрицательное число или больше 100');

END; {CASE}

    Как вы уже заметили,  в операторе выбор после после двоеточия мо-

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

колько операторов,  так же как и в условном операторе,  применяют сос-

тавной оператор.

    CASE  OF

: begin

              ;

                ...

              

             end;

: begin

              ;

                ...

              

             end;

        . . .

: begin

              ;

                ...

              

             end;

ELSE

            begin

              ;

                ...

              

             end;

    END; {CASE}

    Блок-схема оператора "выбор".

    ----------------------------

      |

      V

+----------+(+)+-------+

|=|-->¦  |->-+

+-----|----+   +-------+   ¦

      V (-)                ¦

+----------+(+)+-------+   ¦

|=|-->¦  |->-¦

+-----|----+   +-------+   ¦

      V (-)                ¦

    .  .  .

                           ¦

+----------+(+)+-------+   ¦

|=|-->¦  |->-¦

+-----|----+   +-------+   ¦

      V (-)                ¦

+----------+               ¦

|else |------------->-¦

+----------+               V

    Важное замечание.

    -----------------

    Необходимо заметить,  что из всех возможных ветвей операторов уп-

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

значение порядковой переменной совпадает с несколькими возможными зна-

чениями, отвечающими за разные ветви операторов. Выполняется та ветвь,

которая расположена раньше.  Как видно из блок-схемы значение порядко-

вой переменной сравнивается последовательно со всеми возможными значе-

ниями, и как только найдётся значение, которому равна порядковая пере-

менная, выполняется ветвь операторов,  сравнения прекращаются и управ-

ляющая конструкция  прекращает  свою  работу.  Поэтому при составлении

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

обходимо располагать более "строгие" последовательности операторов.

                        Контрольные вопросы.

                       ---------------------

1. Для чего предназначен оператор выбора?

2. Могут ли выполнится несколько ветвей оператора "выбор" за один раз?

3. Сколько  операторов  можно написать после возможного значения пере-

  менной?

4. Может ли сразу несколько констант фигурировать в качестве возможно-

  го значения переменной?

              Задания для самостоятельного выполнения.

             -----------------------------------------

1. Ввести номер дня недели и вывести соответствующий ему  день  недели

  на русском и английском языках.

2. Ввести номер месяца и вывести соответствующее ему название на русс-

  ком языке.

3. Введите номер месяца.  Напечатайте соответствующее месяцу время го-

  да: "зима", "весна", "лето", "осень".

4. Введите время (только часы). Напечатайте соответствующее этому вре-

  мени сообщение: "Доброе утро", "Добрый день", "Добрый вечер", "Доб-

  рой ночи".

5. Введите  количество  посадочных  мест.  Напечатайте соответствующий

  этому количеству вид транспорта: "велосипед", "мотоцикл", "легковой

  автомобиль", "микроавтобус", "автобус". (Возможны другие варианты)

6. Составить программу, которая выводит сообщение о своих возможностях

  {Введите номер необходимой операции:

  1 - сумма; 2 - разность; 3 - произведение; 4 - частное; }

7. Составить программу, которая выводит сообщение о своих возможностях

  {Введите номер необходимой функции:

  1 - квадрат; 2 - корень квадратный; 3 - синус; 4 - косинус}

8. Напишите программу, выводящую сообщение о возможных сообщениях

  {1 - фамилия

   2 - имя

   3 - отчество

   4 - год рождения}

9. Напишите программу для вычисления степени введённого  с  клавиатуры

  числа. Степень в диапазоне 0 .. 9.

10.Определите  количество  символов,  из которых состоит целое положи-

  тельное число x.


lab10.html

***********************************

Лабораторная работа N 10

Управляющие конструкции языка.

Оператор безусловного перехода.

                                Практически невозможно  научить

                                хорошо   программировать   студентов,

                                ориентированных первоначально на Бей-

                                сик:  как потенциальные  программисты

                                они  умственно оболванены без надежды

                                на исцеление.

                                                   Эдсгер Дейкстра.

    В языке программирования Паскаль, и следовательно в системе прог-

раммирования Turbo Pascal 7.0 поддерживаются  современные  методологии

проектирования программ (нисходящее,  модульное проектирование, струк-

турное программирование).

    Концепция структурного  программирования  пришла  в своё время на

смену линейному программированию,  реализованному в таких языках прог-

раммирования как Бейсик.  В настоящее время наиболее применяемой явля-

ется структурная концепция программирования.  В структурном программи-

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

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

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

корректировка, низкая частота ошибок.

    Описанный в  данной  лабораторной  работе  безусловный  оператор,

строго говоря просто "запрещён" структурной концепцией как грубо нару-

шающий  её  основные  принципы,  и является "атавизмом" оставшимся как

воспоминание о более примитивном  линейном  программировании.  Система

программирования Turbo  Pascal  7.0 обладает достаточно мощными средс-

твами, позволяющими полностью отказаться от  применения  этого  опера-

тора.

     Учитывая все описанные выше причины,  настоятельно рекомендуется

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

или свести его применение к минимуму.  Если же вы всё-таки решили при-

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

этот оператор следует крайне осторожно.  Широкое  его  применение  без

особых на то оснований ухудшает понимание логики работы программы. Бе-

зусловный переход можно осуществлять далеко не из каждого места  прог-

раммы. Так, нельзя с помощью этого оператора перейти из основной прог-

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

ществлять переход  внутрь  структурированного  (составного) оператора,

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

да, расположенного вне условного оператора или оператора цикла, нельзя

перейти внутрь этого условного оператора или оператора цикла и т.д.

    Оператор безусловного перехода.

    -------------------------------

    Оператор безусловного (быстрого) перехода GOTO позволяет изменить

стандартный последовательный порядок выполнения операторов и перейти к

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

    Форма записи оператора.

    -----------------------

    GOTO

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

оператора, на котором стоит .  Оператор,  на который происходит

переход,  должен быть помечен меткой. Эта же метка должна быть указана

в операторе GOTO, и описана в разделе описания меток.

    Описание меток.

    ---------------

    Метки используемые в TP, могут быть двух типов:

- целым числом в диапазоне от 0 до 9999;

- обычным идентификатором.

    Все перечисленные метки должны быть перечислены в разделе объяв-

ления меток, начинающимся зарезервированным словом label, например:

    label  1, 2, Metka;

    Одной меткой можно пометить только один оператор. Метка от поме-

ченного оператора  отделяется двоеточием.  Метка может устанавливаться

перед любым оператором,  в том числе и перед пустым оператором. Напри-

мер:

    1:  Write('Привет ');

    Пустой оператор.

    ----------------

    Пустой оператор не предписывает никаких действий.  По определению

он представляет собой пустую совокупность символов. Как и все операто-

ры, пустой оператор может быть помечен меткой.

    Примеры программ.

    -----------------

    П р и м е р   1.

    Найти частное от деления целых чисел.

PROGRAM Ex_1;

 Label

    Out;                        {описание метки}

 Var                            {описание переменных}

    X,Y,Res: Integer;

Begin

    Write('Введите делимое:  ');   {вывод сообщения на экран}

      Readln(X);                   {ввод числа}

    Write('Введите делитель:  ');

      Redln(Y);

    if Y = 0 then                  {ветвление}

             begin                          {составной оператор}

               Writeln('деление на ноль');

               GOTO Out;                    {использование GOTO}

             end;

      Res := X div Y;

    Write('Частное = ',Res);

 Out:                              {метка на "пустой" оператор}

End.

    П Р И М Е Р    2.

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

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

PROGRAMM  Ex_2;

 Label

     1, 2;

 Var

    x,y,res: real;

    s: byte;

Begin

1:  Write('Введите делимое: ');

      Readln(x);

    Write('Введите делитель: ');

      Readln(y);

    if Y = 0 then

             begin

               Writeln('деление на ноль');

               GOTO 2;

             end;

      res := x/y;

    Writeln('Частное = ',res);

 2:  Write('Продолжить вычисления? 1-да, 2-нет. : ');

      Readln(s);

    if s = 1 then GOTO 1;

End.

                        Контрольные вопросы.

                       ---------------------

1. Назовите причины нежелательного использования оператора безусловно-

  го перехода.

2. Что такое метка? Как она описывается и используется?

3. Что такое пустой оператор?

              Задания для самостоятельного выполнения.

             -----------------------------------------

1. Напишите программу "калькулятор",  позволяющую вычислять по  выбору

  одну из четырёх основных арифметических операций. Снабдите програм-

  му запросом об окончании работы.

2. Напишите программу выбора наибольшего из трёх,  введённых с клавиа-

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

  ты.

3. Напишите программу вычисления квадратного корня из числа введённого

  с клавиатуры.  Исключите  вычисление корня из отрицательных чисел и

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

4. Напишите  программу,  которая выводит название дня недели по номеру

  дня введённому с клавиатуры.  Исключите несуществующие номера  дней

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

5. Напишите программу,  которая возводит действительное число, введён-

  ное с клавиатуры,  в степень, введённую с клавиатуры в диапазоне от

  2 до 9.  Исключите несуществующие (меньше 2 и больше 9) степени,  и

  снабдите программу запросом об окончании работы.

6. Напишите программу,  которая выводит на экран квадраты целых  чисел

  от числа a до числа b.

7. Напишите программу вычисления значения функции y=x^2-16x+32  для  x

  от 1 до 10 с шагом 0,25.

8. Напишите программу вычисления функции

        + x^3,  при x>0

    y = ¦ x^2,  при -2>=x>=0

        + x,    в остальных случаях

  для x в диапазоне от -5 до 5 с шагом 0,5.

9. Напишите программу вычисления функции

         4x^2+16(x+2)

  f(x) = ------------ для x от a до b с шагом d введённым

              2x                                c клавиатуры.

  

10.  Напишите программу отпределения времени года по порядковому номеру

   недели. Снабдите программу запросом об окончании работы.


lab11.html

***********************************

Лабораторная работа N 11

Графические возможности.

Графический режим. Система координат.

    В настоящей лабораторной работе мы познакомимся с некоторымы гра-

фическими возможностями TP.

    Система программирования  Turbo Pascal снабжена несколькими моду-

лями или "библиотеками" в которых хранятся все её процедуры и функции.

Каждая  такая библиотека специализирована,  т.е.  содержит процедуры и

функции поддерживающие одно устройство,  выполняющие подобные действия

и т.д.

    GRAPH.TPU

    ---------

    Библиотека содержащая процедуры и функции для поддержки графичес-

кого режима носит имя GRAPH.TPU.  Изучению всех возможностей этой биб-

лиотеки мы посвятим несколько занятий.  Первое занятие - вводное.

    Подключение графической библиотеки.

    -----------------------------------

    Для того,  чтобы компилятор "узнавал" названия процедур и функций

содержащихся в  библиотеке GRAPH.TPU,  мы должны после заголовка прог-

раммы разместить строчку следующего вида:

    Uses Graph;

(что можно  перевести на русский язык как выражение "используется гра-

фика", или "модуль GRAPH.TPU подключён").  Формально эта строка разре-

шает нам использовать процедуры и функции библиотеки GRAPH.TPU.

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

    ----------------------------------------------

    До сих пор во время нашей работы за компьютером экран всегда  на-

ходился в текстовом режиме (поэтому на экране можно было видеть только

лишь символы.

    Для рисования прямых,  окружностей и пр. необходимо перевести эк-

ран в графический режим. Для включения графического режима использует-

ся процедура InitGraph. Простейшая программа, использующая графические

возможности, может иметь вид:

Program Ex_1;

Uses Graph;

Var Gd, Gm: integer;

Begin

   Gd:=VGA;     { графический адаптер VGA }

   Gm:=VGAhi;   { графический режим VGAhi (640x480)x16 }

      Initgraph(Gd,Gm,'');        { Включить графический режим

                                    Драйвер в текущем каталоге. }

      if GraphResult = grOk then  { Если режим включился успешно }

         begin

           line(0,0,639,479);     { нарисовать отрезок прямой }

           Readln;

           CloseGraph;            { выключений графического режима }

         end;

         End.

    InitGraph(Gd,Gm:integer; Path:string);

    --------------------

    Мы видим,  что у процедуры InitGraph три  параметра.  В  качестве

первых двух параметров должы стоять имена целых (integer) переменных.

    Первый параметр Gd является  кодом  графического  адаптера  (т.е.

электронной  схемы,  управляющей выводом информации на экран).  Дело в

том,  что на IBM-совместимых компьютерах применяется  ряд  стандартных

графических адаптеров, носящих названия CGA, EGA, VGA.

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

компьютерах используется адаптер VGA (и компилятор сам "узнаёт"  слово

VGA и заменит его на нужное целое число).

    Каждый графический  адаптер позволяет использовать несколько гра-

фических режимов,  отличающихся количеством цветов и разрешаюшей  спо-

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

бы указать, какой из режимов следует включить.

    Третий параметр Path является строкой (string), содержащей путь к

файлу,  который называется egavga.bgi. В этом файле содержится драйвер

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

VGA в графическом режиме.  И,  как видно из нашего примера,  файл этот

находится в текущем каталоге.

    GraphResult: integer;

    ---------------------

    Эта функция,  при  обращении  к  ней,  возвращает специальный код

(целое число), в зависимости от того, как прошло выполнение любой гра-

фической процедуры или функции.  Код 0 (grOk) - успешное выполнение. В

приведённом выше примере программы Ex_1,  данная  функция  применяется

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

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

GraphResult равен grOk.

    CloseGraph

    ----------

    Выключение графического режима.

    Всё вышеизложенное  необходимо знать каждому грамотному пользова-

телю IBM-совместимых компьютеров.  Однако в нашей лабораторной работе-

достаточно использовать конструкцию,  использованную в первом примере,

для включения графического режима.  (И не страшно,  если в ней не  всё

понятно.)

    Система координат.

    ------------------

    Для того, чтобы мы могли что-либо нарисовать на экране, нам нужно

уметь задавать  положение на экране того,  что мы рисуем.  Для этого с

экраном связывается система координат следующего вида:

  (0,0)                            X

    +-------------------------------->

    ¦

    ¦

    ¦

    ¦

    ¦

    V Y

Обратите внимание. Точка 0,0 находится в левом верхнем углу. Привычная

для нас система координат "перевёрнута".

    Каждая точка на экране на самом деле представляет собой очень ма-

ленький прямоугольник (и поскольку это не совсем точка,  то иногда ис-

пользуют специальный термин - "пиксел").  Количество точек (пикселов),

умещающихся на экране по вертикали и горизонтали, называют разрешающей

способностью. Разрешающая способность экрана в режиме VGAhi - 640x480.

Это означает,  что по горизонтали на экране умещается 640 точек,  а по

вертикали - 480.

         Описание некоторых графических процедур и функций.

        ---------------------------------------------------

    Line(x1,y1,x2,y2: integer);

    ---------------------------

    Как Вы уже догадались,  процедура Line(x1,y1,x2,y2) рисует на эк-

ране отрезок, соединяющий точки (x1,y1) и (x2,y2). Например:

Program Ex_2;   { нарисовать треугольник }

Uses Graph;

Var Gd, Gm: integer;

Begin

   Gd:=VGA;     { графический адаптер VGA }

   Gm:=VGAhi;   { графический режим VGAhi (640x480)x16 }

   Initgraph(Gd,Gm,'');         { Включить графический режим

                                     Драйвер в текущем каталоге. }

   if GraphResult = grOk then  { Если режим включился успешно }

         begin

           line(120,210,520,210);   { основание }

           line(120,210,320,10);    { левая сторона }

           line(320,10,520,210);    { правая сторона }

         end;

End.

    Текущий цвет рисования.

    ----------------------

    При выполнении  описанной  выше  программы мы получим изображение

треугольника из белых линий.  Обладая цветным монитором VGA  мы  можем

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

рисование происходит так называемым  "текущим  цветом  рисования".  По

умолчанию, текущий цвет рисования белый.

    SetColor(Color: word);

    ----------------------

    Для изменения  текущего цвета рисования,  т.е.  для задания цвета

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

SetColor.  В  качестве  единственного её параметра Color нужно указать

целое число,  являющееся кодом цвета.  Цвета кодируются в соответствии

со следующей таблицей:

    Black        = 0   - чёрный

    Blue         = 1   - синий

    Green        = 2   - зелёный

    Cyan         = 3   - циановый

    Red          = 4   - красный

    Magenta      = 5   - сиреневый

    Brown        = 6   - коричневый

    LightGray    = 7   - светло-серый

    DarkGray     = 8   - тёмно-серый

    LightBlue    = 9   - голубой

    LightGreen   =10   - светло-зелёный

    LightCyan    =11   - светло-циановый

    LightRed     =12   - розовый

    LightMagenta =13   - светло-сиреневый

    Yellow       =14   - жёлтый

    White        =15   - белый

    Если Вы хорошо знаете английский язык,  то Вам будет удобнее  ис-

пользовать не числа,  а соответствующие им идентификаторы;  если же Вы

английский знаете плохо,  то всё равно полезнее  запомнить  английские

названия цветов, чем запоминать числа, кодирующие цвета.

Program Ex_3;   { цветной треугольник }

Uses Graph;

Var Gd, Gm: integer;

Begin

 Gd:=VGA;     { графический адаптер VGA }

 Gm:=VGAhi;   { графический режим VGAhi (640x480)x16 }

 Initgraph(Gd,Gm,'');         { Включить графический режим

                                Драйвер в текущем каталоге. }

  if GraphResult = grOk then  { Если режим включился успешно }

    begin

       setcolor(lightmagenta);

      line(120,210,520,210);   { основание }

       setcolor(lightcyan);

      line(120,210,320,10);    { левая сторона }

       setcolor(green);

      line(320,10,520,210);    { правая сторона }

    end;

End.

    GetColor: word;

    ---------------

    Возвращает текущий цвет рисования.

    SetBkColor(color: word);

    ------------------------

    Вам ещё  не один раз придётся столкнутся с понятием-характеристи-

кой - "текущий".  Текущий цвет, текущая координата, текущее значение и

т.д.  Данная  процедура устанавливает текущий цвет фона.  По умолчанию

текущий цвет фона - чёрный.

    GetBkColor: word;

    -----------------

    Возвращает текущий цвет фона.

    ClearDevice

    -----------

    Очищает графический экран закрашивая его в текущий цвет фона, ус-

танавливает указатель текущей позиции в точку с координатами (0,0).

    PutPixel(x,y:integer; Pixel:word);

    -----------------------------------

    Рисует точку с координатами (x,y) цветом Pixel.

    GetPixel(x,y: integer): word;

    -----------------------------

    Возвращает цвет точки с координатами (x,y).

    Rectangle(x1,y1,x2,y2:integer);

    -------------------------------

    Строит контур прямоугольника из линий текущего цвета.

    Circle(x,y:integer; r:word);

    ----------------------------

    Для рисования окружностей используется процедура Circle  с  тремя

целочисленными параметрами:

     x,y - координаты центра окружности;

     r - радиус.

    Arc(x,y:integer; StA,EndA,Radius:word);

    ---------------------------------------

    Нарисует дугу  окружности текущим цветом.

    x,y - координаты центра окружности данной дуги;

    Sta - начальный угол; (в градусах)

    EndA - конечный угол; (в градусах)

    Radius - радиус дуги.

    Ellipse(x,y:integer; stA,endA:word; xr,yr: word);

    -------------------------------------------------

    Рисует дугу эллипса текущим цветом.

    x,y - координаты центра эллипса;

    stA - начальный угол;

    endA - конечный угол;

    xr,yr - горизонтальная и вертикальная полуоси эллипса.

    SetLineStyle(Ln,P,T)

    --------------------

    Рисование линий, окружностей и их элементов, контуров прямоуголь-

ников  осуществляется линиями.  Процедура SetLineStyle позволяет изме-

нять параметры этих линий. Параметры этой процедуры - целые числа.

 Ln - стиль линии:

      0 = сплошная;

      1 = пунктирная;

      2 = штрихпунктирная;

      3 = штриховая;

      4 = заданная пользователем.

 T - толщина линии:

      1 = нормальная;

      3 = толстая.

 P - шаблон:

      0 - во всех случаях для Ln от 0 до 3;

       Для Ln = 4 устанавливается шаблон линии в  виде  двухбайтового

      числа, каждый бит которого равен 1, если его надо высветить и 0

      - в противном случае.  Например линия в виде 1111111100000000 в

      шестнадцатиричной форме следует записать $AA00.

    Кратко описанные в данной лабораторной работе графические  проце-

дуры и  функции составляют лишь небольшую часть богатого арсенала биб-

лиотеки GRAPH.TPU. Несмотря на то, что в последствии мы изучим все ос-

новные возможности  этой библиотеки,  вы в любой момент можете сделать

это самостоятельно,  воспользовавшись системой помощи. Для этого необ-

ходимо войти  в  раздел  HELP главного меню,  и выбрав разделы подменю

Standart Units и Graph,  выбрать описание  необходимой  процедуры  или

функции.

    Контрольные вопросы.

   ---------------------

1. Как называется,  и как подключается библиотека графических процедур

  и функций?

2. Как инициализируется графический режим?

3. Как выключается графический режим?

4. Как изменяются параметры линий рисования?

5. Опишите процедуру рисования линий.

6. Опишите процедуры рисования окружности,  дуги окружности и дуги эл-

  липса.

7. Опишите процедуру рисования контура прямоугольника.

8. Опишите  процедуры  изменения  текущего  цвета рисования и текущего

  цвета фона.

9. Как изменить (установить) цвет точки экрана.

              Задания для самостоятельного выполнения.

             -----------------------------------------

1. Нарисуйте картинку "пейзаж" на любую тему.

2. Нарисуйте картинку "автомобиль".

3. Нарисуйте картинку "робот".

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

  ружности и эллипса

5. Нарисуйте три окружности с заключёнными в них треугольником,  квад-

  ратом и звездой. Все фигуры должны быть разного цвета.

6. Нарисуйте олимпийский флаг.

7. Нарисуйте фрагмент страницы из тетрадки в косую линейку.

8. Изобразите год вашего рождения в виде прямоугольников.

9. Нарисуйте  свои  инициалы  в  виде  разноцветных прямоугольников из

  толстых линий.

10.Нарисуйте контур прямоугольника,  в котором напишите (нарисуйте ли-

  ниями разного цвета) своё имя.

11.На белом фоне изобразите шаблон вашего индекса так, как он выглядит

  на почтовом конверте.

12.Нарисуйте разноцветную бабочку.


lab12.html

***********************************

Лабораторная работа N 12

Циклические конструкции.

Оператор цикла с предусловием.

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

многократное повторение одних и тех же действий. Многократно повторя-

емые участки вычислений называются ЦИКЛАМИ.

    Для програмной реализации таких вычислений в TP имеется несколько

типов операторов цикла.

    

    Оператор цикла с предусловием:

    -----------------------------

    Оператор цикла  с предусловием организует выполнение одного (воз-

можно составного) оператора неизвестное чило раз.  Выход из цикла осу-

ществляется, если некоторое логическое выражение окажется ложным.  Так

как истинность логического выражения проверяется вначале,  тело  цикла

может не выполнится ни разу.

    Структура оператора.

    --------------------

    WHILE  DO ;

    

    В этой структуре:

     - логическое выражение, истинность которого проверяется

вначале выполнения циклического оператора;

     - любой выполняемый оператор языка (в том числе и сос-

тавной, т. е. последовательность операторов, заключённая в операторные

скобки BEGIN - END).

    Порядок выполнения оператора.

    -----------------------------

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

словом  DO.  Как  только  условие становится ложно выпонение оператора

цикла прекращается.

    Блок-схема оператора цикла с предусловием:

    -----------------|------------------------

                     V

      ложь  +-----------------+ истина

         +--¦ WHILE <условие> +--+

         ¦  +--------|--------+  ¦

         ¦           V           ¦

         ¦  +-----------------+  ¦

         ¦  ¦  DO <оператор>  ¦<-+

         ¦  +-----------------+

         ¦

         +-----------+

                     V

    Примеры применения:

    -------------------

    { Вычислить сумму S = 1 + 1/2 + 1/3 + ... + 1/50,

    используя оператор цикла WHILE }

    PROGRAM ex_1;

    Var

      s: real;

      n: integer;

    BEGIN

        s:=0; n:=1;

        While n <= 50 do  { пока значение n не превзойдёт 50 }

          begin           { тело цикла }

            s:=s + 1/n;

            n:=n + 1

          end;

        Writeln('Сумма равна: ',s)

    END.

    { Разложение целого числа на простые множители. }

    PROGRAM Ex_2;

    VAR

      x,m: integer;

    BEGIN

     Write('Введите целое число');

     Readln(x);

     Writeln('Разложение числа ',x,' на простые множители.');

      m := 2;

     WHILE m <= x DO

      IF ( x mod m ) = 0 THEN

                         Begin

                          Write('*',m);

                          x := x div m;

                         End

                ELSE m := m + 1;

    END.

    Контрольные вопросы.

    --------------------

1. Какой вычислительный процесс называют циклическим?

2. Сколько раз выполняется оператор цикла с предусловием?

3. Как осуществляется выход из оператора цикла с предусловием?

4. Объясните структуру оператора цикла с предусловием.

5. Объясните порядок выполнения оператора цикла с предусловием.

6. Объясните блок-схему оператора цикла с предусловием.

7. Приведите примеры применения оператора цикла с предусловием.

              Задания для самостоятельного выполнения.

            --------------------------------------------

1. Нарисовать горизонтальную "линию", состоящую из 15 разноцветных пе-

  ресекающихся окружностей.

2. Нарисовать "диагональ" экрана,  состоящую из 50 разноцветных эллип-

  сов.

3. Нарисовать  вертикальную последовательность из увеличивающихся раз-

  ноцветных секторов одного радиуса. Последний сектор - окружность.

4. Нарисуйте "пилу" из 40 линий разного цвета.

5. Нарисовать "веер", состоящий из 50 разноцветных линий.

6. Нарисовать "окружность", состоящую из 36 разноцветных квадратов.

7. Нарисовать "квадрат", состоящий из 20 разноцветных окружностей.

8. Нарисуйте фрагмент синусоиды,  состоящий из 100 разноцветных окруж-

  ностей одного радиуса.

9. Вычислить значения n! для n введённого с клавиатуры.

10.Дано натуральное число N. Вычислить сумму цифр этого числа.


lab13.html

***********************************

Лабораторная работа N 13

Циклические конструкции.

Оператор цикла с постусловием.

    Оператор цикла с постусловием:

    ------------------------------

    Оператор цикла с постусловием организует выполнение цикла, состо-

ящего из любого количества операторов неизвестное  заранее  количество

раз. Выход из цикла осуществляется,  если некоторое логическое выраже-

ние окажется истинным. Так как истинность логического оператора прове-

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

    Структура оператора:

    --------------------

    REPEAT

     <Оператор 1>;

     <Оператор 2>;

         . . .

     <Оператор N>;

    UNTIL <условие>;

    

    В этой структуре:

    <Оператор 1>; <Оператор 2>; . . . <Оператор N>; - тело цикла.

    <условие> -  логическое выражение,  ложность которого проверяется

после выполнения тела цикла.

    Порядок выполнения оператора:

    -----------------------------

    Выполняются операторы, следующие за служебным словом REPEAT. Пос-

ле этого проверяется условие.  Если условие ложно, то происходит возв-

рат к выполнению операторов,  следующих за служебным словом  REPEAT  и

снова  проверяется условие.  Если условие истинно,  то выполнение тела

цикла прекращается.

    В "жаргонном" переводе на русский язык,  оператор цикла с постус-

ловием "звучит" так:

    Повторять тело цикла пока не выполнится условие.

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

    

    Блок-схема оператора цикла с постусловием:

    ---------|--------------------------------

             V

    +----------------+

    ¦ REPEAT         +-<-+

    ¦  <Оператор 1>; ¦   ¦

    ¦  <Оператор 2>; ¦   ¦

    ¦      . . .     ¦   ¦

    ¦  <Оператор N>; ¦   ¦

    +--------|-------+   ¦

             V           ¦

    +----------------+   ¦

    ¦ UNTIL <условие>+->-+

    +--------|-------+ ложь

      истина V

    Примеры применения:

    -------------------

    {Усовершенствованная программа, вычисляющая сумму двух чисел}

    Program EX1;

    Var

      x, y, sum: real;

      t: byte;

    Begin

     REPEAT

      Writeln('Введите числа x и y.')

      Readln(x, y); sum := x + y;

      Writeln('Cумма чисел равна ', sum);

      Write('Завершить программу? 1-да, 2-нет :');

      Readln(t);

     UNTIL t = 1;

    End.

    {Вычисление суммы S = 1 + 1/2 + 1/3 + ... + 1/50}

    Program EX2;

    Var

      n: integer;

      s: real;

    Begin

     s := 0; n := 1;

     REPEAT

      s := s + 1/n;

      n := n + 1;

     UNTIL n > 50;

     Writeln('Результат суммирования ... ', s);

    End.

    Контрольные вопросы:

    --------------------

1. Что представляет собой тело цикла оператора цикла с постусловием?

2. Сколько раз выполняется оператор цикла с постусловием?

3. Как осуществляется выход из оператора цикла с постусловием?

4. Объясните структуру оператора цикла с постусловием.

5. Объясните порядок выполнения оператора цикла с постусловием.

6. Объясните блок-схему оператора цикла с постусловием.

7. Приведите примеры применения оператора цикла с постусловием.

              Задания для самостоятельного выполнения.

            --------------------------------------------

1. Вычислите  значение  функции y=x^3-x^2+16x-43 для x изменяющегося в

  диапазоне от -4 до 4 включительно с шагом 0,5.

2. Напишите программу вычисления функции

      + x-4     для  x>2

    y=¦ x^2+14  для  x<-2

      + x/4     в остальных случаях

    для x изменяющегося от -5 до 3 с шагом 0,25.

3. Вычислить сумму ряда s = sin(1) + sin(2) + ...  +sin(n), для n вве-

  дённого с клавиатуры.

4. Вычислить сумму ряда s = cos(x) + cos(x)*cos(x) + ... +

  + cos(x)*cos(x)*...*cos(x), для x и n введённых с клавиатуры.

    +-------- n ----------+

5. Изобразите фрагмент дуги радуги.

6. Напишите программу,  которая рисует последовательность из n  окруж-

  ностей радиуса r и цвета с, для n, r и c введённых с клавиатуры.

7. Нарисовать  "диагональ" экрана,  состоящую из 15 разноцветных треу-

  гольников.

8. Нарисуйте ромб из 40 разноцветных прямоугольников одинакового  раз-

  мера.

9. Нарисовать сетку из пересекающихся окружностей разного цвета,  раз-

  мером nxn, для n введённого с клавиатуры.

10.Нарисуйте  окружность состоящую из 36 разноцветных окружностей уве-

  личивающегося размера.


lab14.html

***********************************

Лабораторная работа N 14

Графические возможности.

Абсолютные и относительные координаты.

Заполненные фигуры.

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

программирования Turbo Pascal 7.0 - Graph.TPU. (Смотри лаб. N 11).

    Текущая позиция. Абсолютные координаты.

    =======================================

    Кроме понятий  "текущий цвет рисования" и "текущий цвет фона" су-

ществует понятие "текущая позиция".  Текущая позиция - это  координаты

на экране  воображаемого "указателя координат".  Как правило изменение

положения "текущей позиции" происходит "незаметно",  при использовании

графических процедур и функций.

    Кроме процедур  и  функций  для управления графическим режимом вы

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

няется при  указании  абсолютных  (непосредственных) координат экрана.

Уточним координаты "текущей позиции" после их использования:

    ClearDevice                                                (0,0).

    Line(x1,y1,x2,y2:integer)           текущая позиция не изменяется

    PutPicsel(x,y:integer; Pixel:Word)  текущая позиция не изменяется

    Rectangle(x1,y1,x2,y2:integer)      текущая позиция не изменяется

    Circle(x,y,r:integer)                                      (x,y).

    Arc(x,y:integer; StA,EndA,Radius:word);                    (x,y).

    Ellipse(x,y:integer; stA,endA:word; xr,yr: word);          (x,y).

    Перемещение указателя координат. Относительные координаты.

    ==========================================================

    Кроме процедур,  которые  перемещают  текущий  указатель  выпоняя

конкретное действие (создавая изображение линии или фигуры), существу-

ют специальные процедуры для изменения  положения  текущего  указателя

координат.

    MoveTo(x,y:integer);

    --------------------

    Перемещает текущий указатель координат в точку окна с координата-

ми (x,y). Точка на экране не высвечивается.

    MoveRel(Dx,Dy:integer);

    -----------------------

    Перемещает указатель  координат  "позицию" на заданное расстояние

(Dx, Dy) по отношению к его предыдущему положению (точка на экране  не

высвечивается).

    Процедуры MoveTo  и MoveRel выполняют одно и то же действие - пе-

ремещение текущего указателя координат.  Но аргументами MoveTo - явля-

ются абсолютные координаты экрана, а аргументами MoveRel - так-называ-

емые относительные координаты. Смещение по отношению к предыдущему по-

ложению называют относительными координатами,  или координатами по от-

ношению к предыдущему положению.

    В качестве примера приведём аналоги процедур MoveTo и MoveRel

    LineTo(x,y:integer);

    --------------------

    Проводит линию  текущего цвета из текущей позиции в точку с коор-

динатами (x,y).  Текущая позиция "указатель" устанавливается  в  точке

(x,y).

    LineRel(Dx,Dy:integer);

    -----------------------

    Проводит линию текущего цвета из текущей позиции в точку, сдвину-

тую относительно исходной позиции на величины (Dx,Dy). Текущая позиция

"указатель" перемещается относительно предыдущего на величину (Dx,Dy).

    Определение координат текущей позиции

    =====================================

    GetX: integer;

    --------------

    Возвращает координату X текущей позиции на экране.

    GetY: integer;

    --------------

    Возвращает координату Y текущей позиции на экране.

    Рисование заполненных фигур.

    ============================

    Все изученные  вами  процедуры рисуют с помощью линий.  Параметры

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

SetLineStyle. В  этом  разделе описаны процедуры для рисования "запол-

ненных" фигур. Параметры рисования заполненных фигур задаются процеду-

рой SetFillStyle.  С её помощью устанавливаются текущий орнамент рисо-

вания и текущий цвет рисования.

    SetFillStyle(p:word; c:word);

    -----------------------------

    Задаёт стандартный орнамент и цвет заполнения фигур.

    p - номер стандартного орнамента;

    c - цвет заполнения фигур (номер цвета в палитре).

    Константы орнамента заполнения

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

0   EmptyFill       Заполнение цветом фона

1   SolidFill       Однородное заполнение цветом заполнения

2   LineFill        Заполнение -----------------

3   LtSlachFill     Заполнение ///

4   SlachFill       Заполнение /// толстыми линиями

5   BkSlachFill     Заполнение \\\ толстыми линиями

6   LtBkSlachFill   Заполнение \\\

7   HathFill        Заполнение клеткой

8   XHathFill       Заполнение косой клеткой

9   InterleaveFill  Заполнение частой клеткой

10  WideDotFill     Заполнение редкими точками

11  CloseDotFill    Заполнение частыми клетками

    Контур заполненных фигур.

    ~~~~~~~~~~~~~~~~~~~~~~~~~

    Обратите внимание!  Цвет заполнения фигур, ничего общего с цветом

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

Цветом, установленным процедурой SetColor рисуются контура этих фигур.

Стиль линии контура (толщина и прерывистость) устанавливается процеду-

рой SetLineStyle (Смотри лаб. N 11)

    Bar(x1,y1,x2,y2:integer)

    ------------------------

    Строит прямоугольник, закрашенный текущим орнаментом и цветом за-

полнения.

    x1,y1,x2,y2 -  координаты левого верхнего и правого нижнего углов

прямоугольника.

    Координаты текущей позиции не изменяются.

    Bar3D(x1,y1,x2,y2:integer; Depth:Word; Top:Boolean);

    ----------------------------------------------------

    Строит параллелепипед,  закрашенный  текущим  орнаментом и цветом

заполнения.

    x1,y1,x2,y2 - координаты левого верхнего и правого нижнего  углов

передней грани;

    Depth - ширина боковой грани (отсчитывается по горизонтали);

    Top -  признак включения верхней грани (если true - верхняя грань

вычерчивается, если false - верхняя грань не отображается).

    Координаты текущей  позиции  совпадают  с  координатами  правого,

дальнего,  верхнего угла паралелепипеда. При Depth=0, координаты теку-

щей позиции совпадают с координатами левого верхнего угла.

    FillEllipse(x,y:integer; xr,yr: word);

    -------------------------------------

    Строит эллипс,  закрашенный текущим орнаментом и цветом  заполне-

ния.

    x,y - координаты центра эллипса;

    xr,yr - горизонтальная и вертикальная полуоси эллипса.

    Координаты текущей позиции (x,y).

    FloodFill(x,y:integer; Border:Word);

    ------------------------------------

    Закрашивает область, ограниченную непрерывной линией, текущим ор-

наментом и цветом заполнения.

    x,y - координаты любой точки, внутри закрашиваемой области;

    Border - цвет линии, до которой производится закрашивание.

    PieSlice(x,y:integer; stA,endA,r:word);

    ---------------------------------------

    Строит сектор круга,  закрашенный текущим орнаментом и цветом за-

полнения.

    x,y - координаты центра сектора круга;

    stA - начальный угол; (в градусах)

    endA - конечный угол; (в градусах)

    r - радиус сектора.

    Координаты текущей позиции (x,y).

    Sector(x,y:integer; stA,endA,xr,yr:integer);

    --------------------------------------------

    Строит сектор  эллипса,  закрашенный  текущим орнаментом и цветом

заполнения.

    x,y - координаты центра эллипса;

    stA - начальный угол; (в градусах)

    endA - конечный угол; (в градусах)

    xr,yr - горизонтальная и вертикальная полуоси эллипса.

    Координаты текущей позиции (x,y).

    Контрольные вопросы.

    --------------------

1. Какие координаты называют абсолютными?  Приведите пример процедур с

  абсолютными координатами.

2. Какие координаты называют относительными? Приведите примет процедур

  с относительными координатами.

4. Для каких величин существует понятие "текущий"?

5. Опишите процедуры для рисования заполненных фигур.

6. Как изменяются координаты текущей позиции при применении различных

  графических процедур и функций?

7. Как изменяется текущий стиль и цвет заполнения фигур?

    Задания для самостоятельного выполнения.

    ----------------------------------------

1. Нарисуйте картинку "пейзаж" на любую тему.

2. Нарисуйте разноцветную мишень.

3. Нарисуйте круговую диаграму,  состоящую из 10 заполненных секторов,

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

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

  угольник, трапецию и звезду.

5. Нарисуйте шестигранную призму, вид сверху и сбоку. Все видимые гра-

  ни заполните различным орнаментом и цветом заполнения.

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

7. Изобразите  горизонтальную  последовательность состоящую из 16 раз-

  личных заполненных эллипсов.

8. Нарисуйте последовательность из 16 разноцветных заполненных звёзд.

9. Нарисуйте график функции синус,  состоящий  из  40  паралелепипедов

  различного цвета и высоты.

10.Нарисуйте  египетскую  "ступенчатую" пирамиду,  вид сверху и сбоку.

  Грани "освещённые" одинаково заполните одинаковым цветом и орнамен-

  том.


lab15.html

***********************************

Лабораторная работа N 15

Циклические конструкции.

Оператор цикла с параметром.

    Оператор цикла с параметром

    ---------------------------

    Оператор цикла с параметром организует выполнение одного операто-

ра заранее известное количество раз.

    Структура оператора

    -------------------

    Существует два варианта оператора.

Вариант первый:

~~~~~~~~~~~~~~~

    FOR i := start TO finish DO

Вариант второй:

~~~~~~~~~~~~~~~

    FOR i := start DOWNTO finish DO

    В этих структурах:

    i - параметр цикла;

    start - начальное значение параметра;

    finish - конечное значение параметра;

     - тело цикла.

    Тип переменной  цикла i и значений start и finish должен быть по-

рядковым !

    Порядок выполнения оператора:

    -----------------------------

1. Вычисляются и запоминаются начальное - start,  и конечное - finish,

  значения параметра цикла.  Start и finish могут быть представлены в

  виде конкретного значения (в этом случае нет необходимости в вычис-

  лениях) или в виде выражения, значение которого вычисляется в нача-

  ле выполнения цикла.

2. Параметру цикла i присваивается значение start.

3. Значение параметра цикла i сравнивается со значением finish. Опера-

  тор "тело цикла" будет выполнен при выполнении следующего условия:

     первый вариант оператора: i <= finish;

     второй вариант опеартора: i >= finish.

  В противном  случае  происходит прекращение выполнения циклического

  оператора.

4. Параметру цикла присваивается:

    первый выриант оператора: следующее большее значение;

    второй вариант оператора: следующее меньшее значение.

5. Выполняется пункт 3 данной схемы.

    Часто говорят, что первый вариант оператора цикла с параметром, -

цикл с возрастающим параметром; второй вариант, - с убывающим парамет-

ром.

    Если при  первой-же проверке,  параметр цикла не будет удовлетво-

рять условий пункта 3, тело цикла не выполнится ни разу.

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

теле цикла с параметром выполнить несколько операторов,  их необходимо

объединить операторными скобками BEGIN END.

    После прекращения выполнения оператора,  значение параметра цикла

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

осуществлён с помощью GOTO или стандартной процедуры Break.

    Блок-схема оператора цикла с параметром:

    ----------------------------------------

       Первый вариант                        Второй вариант

           НАЧАЛО                                НАЧАЛО

 +-------------------------+           +-------------------------+

 ¦ Вычисление начального и ¦           ¦ Вычисление начального и ¦

 ¦    конечного значения   ¦           ¦    конечного значения   ¦

 ¦     параметра цикла.    ¦           ¦     параметра цикла.    ¦

 +------------|------------+           +------------|------------+

 +------------V------------+           +------------V------------+

 ¦     Параметру цикла     ¦           ¦     Параметру цикла     ¦

 ¦      присваивается      ¦           ¦      присваивается      ¦

 ¦    начальное значение   ¦           ¦    начальное значение   ¦

 +------------|------------+           +------------|------------+

+--------------V---------------+      +--------------V---------------+

¦ параметр <= конечное значение¦      ¦ параметр >= конечное значение¦

+--A---------------------------+      +-A---------------------------+

  | ¦(+)+----------------+    ¦(-)     ¦ ¦(+)+----------------+    ¦(-)

  ¦ ¦  ¦      ¦     ¦        ¦ ¦   ¦      ¦    |

  ¦ +> ¦   тело цикла   ¦     V        ¦ +>  ¦   тело цикла   ¦    V

  ¦    +-------|--------+ КОНЕЦ        ¦     +-------|--------+ КОНЕЦ

  +------------V-------------+         +-------------V-------------+

  ¦увеличение параметра цикла¦         ¦ уменьшение параметра цикла¦

  +--------------------------+         +---------------------------+

    Break

    -----

    Процедура Break может использоваться во всех циклических операто-

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

выполнения условия выхода.

    Continue

    --------

    Процедура Continue  может использоваться во всех циклических опе-

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

полнению  тела  цикла,  даже  если выполнение тела цикла не завершено.

Другими словами,  эта процедура позволяет прекратить  выполнение  тела

цикла. При этом выполнение самого циклического оператора не  прекраща-

ется.

    Примеры применения

    ------------------

    П р и м е р 1. Вычислить сумму S = 1 + 1/2 + 1/3 + ... + 1/50,

    

PROGRAM ex_1;

VAR

   i:integer;

   s:real;

BEGIN

   s:=0;

   for i:=1 to 50 do s:=s + 1/i;

   Writeln('Cумма равна: ',s);

END.

    П р и м е р 2. Вычислить сумму синусов чисел от 1 до 1000. Сумми-

ровать и выводить на экран только положительные значения синусов.

PROGRAM ex_2;

VAR

    i: integer;

    s: real;

BEGIN

    s := 0;

    FOR i:=1 TO 1000 DO

     Begin

      If sin(i) < 0 then continue;

      s := s + sin(i);

      writeln('sin(',i,')=',sin(i));

     End;

     Writeln('Сумма равна: ',s);

    Readln;

END.

    Контрольные вопросы.

    --------------------

1. Сколько раз выполняется оператор цикла с параметром?

2. Сколько существует вариантов цикла с параметром?

3. Что называют параметром цикла, начальным и конечным значением пара-

  метра цикла?

4. Что называют телом цикла с параметром?

5. Объясните порядок выполнения цикла с параметром.

6. Объясните блок-схемы цикла с параметром.

7. Объясните назначение и применение процедур Break и Continue.

8. Приведите примеры применения цикла с параметром.

              Задания для самостоятельного выполнения.

            --------------------------------------------

1. Вычислите  сумму ряда S = 1 + 1/x + 1/2x + 1/3x + ...  1/nx,  для n

  введённого с клавиатуры.

2. Определите значения функции y=0,4x^2-1/x для x изменяющегося  от  2

  до 10 с шагом 0,5.

3. Вычислить значение n! для n введённого с клавиатуры.

4. Вычислить сумму ряда Y = 1!  + 2! + 3! + ... n!, для n введённого с

  клавиатуры.

5. Вычислить сумму первых n слагаемых ряда

     1   2   3   4   5   6

     - + - + - + - + - + -

     2   3   4   5   6   7       для n введённого с клавиатуры.

6. Вычислить A(A+1)(A+2)...(A+N), для A и N введённых с клавиатуры.

7. Нарисовать "сетку" размером 10x10,  состоящую из кругов одного раз-

  мера, заполненных разным орнаментом разного цвета.

8. Нарисовать "наклонённую сетку" размером 10x10, состоящую из парале-

  лепипедов одного  размера,  заполненных разным орнаментом,  разного

  цвета.

9. Нарисовать "пирамиду" сложенную из прямоугольников одинакового раз-

  мера, заполненных разным орнаментом, разного цвета. В основании пи-

  рамиды 20 прямоугольников.

10.Нарисовать "сетку" размером 15x15,  состоящую из одинаковых по раз-

  меру ромбов, заполненных разным орнаментом, разного цвета.


lab16.html

***********************************

Лабораторная работа N 16

Символьные переменные.

Тип данных "CHAR"

    Переменные, предназначенные для хранения одиночных символов,  на-

зываются символьными переменными. В языке Turbo Pascal для них опреде-

лён тип данных CHAR.  В переменную этого типа может быть помещён любой

из 256 символов расширенного кода ASCII.

                 Таблица расширенного кода ASCII.

Объявление символьных  переменных осуществляется в разделе объяв-

ления переменных с помощью служебного слова CHAR.

    Этот тип данных обладает некоторыми особенностями.  Обычно значе-

ния для переменных типа "CHAR" задаются в апострофах. Например, если в

программе есть описания

    u, v: char

то возможны операторы присваивания

    u:='a'; v:=u; v:='*' и т.д.

    Штрих ' - принятая в Паскале форма кавычки - употребляется всякий

раз, когда значение типа "CHAR" явно указывается в программе. Выполне-

ние операторов

    u:='b'; write(u)

приводит к высвечиванию на экране символа b.

    Кроме того,  имеется возможность задавать значения указанием  не-

посредственно числового  значения ASCII-кода.  В этом случае Вы должны

неред числом, обозначающим код символа ASCII, поставить знак "#"

    u:=#97

    П р и м е р 1.   Дана последовательность символов заканчивающаяся

символом "/".  Необходимо подсчитать количество восклицательных знаков

в данной последовательности.

    Program ex_1;

    var

     c: char;        { организация символьной переменной }

     n: integer;     { переменная для хранения количества "!" }

    begin

     read(c);          { чтение первого символа с клавиатуры }

     n:=0;             { обнуление cчётчика "!" }

      while c<>'/' do  { условие окончания работы водом символа '/' }

       begin

        if c='!' then n:=n+1;   { подсчёт символов "!" }

        read(c);                { чтение следующего символа }

       end;

    end.

    Обратите внимание.  В таблице ASCII большие латинские буквы и ма-

лые латинские буквы расположены подряд по алфавиту.  Такая упорядочен-

ность открывеет возможность использования в программах операторов цик-

ла с параметром, имеющим тип "CHAR". Параметр цикла пробегает последо-

вательность символов в указанных границах. Выполнение оператора цикла

    for c:='a' to 'z' do write(c)

где c символьная переменная,  приводит к высвечиванию на экране после-

довательности всех малых букв латинского алфавита:

    abcdefghhijklmnopqrstuvwxyz

Выполнение оператора цикла

    for c:='z' downto 'a' do write(c)

приведёт к выводу этих же букв в обратном порядке.

    Символьные переменные очень удобны для написания диалоговых прог-

рамм. Представим себе, что вам необходимо довольно часто получать зна-

чения некоторой функции, например значение синуса от корня квадратного

из x для разных значений x.

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

x потребуется вычислить значение функции.  Можно составить такую прог-

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

ввода нового значения дл x. Это зацикленная программа.

    program ex_2;

    label 1;

    var c: real;

    begin

    1: write('x=);read(c);

       writeln(' ,f(x)=',sin(sqrt(x)));

       goto 1;

    end.

Когда эта программа выполняется,  на экране формируется последователь-

ность строк

    x=...,f(x)=...

    x=...,f(x)=...

    x=...,f(x)=...

      . . . .

    Для того,  чтобы  прекратить  выполнение  программы,  потребуется

предпринять специальные меры - например выключить компьютер.

    Другой вариант - программа,  в ходе выполнения которой на  экране

регулярно возникает вопрос,  следует ли продолжать работу, или прекра-

тить выполнение программы:

    program ex_3;

    var

     x: real;

     s: char;

    begin

     s:='д';

     while s='д' do

      begin

       write('x=);read(c);

       writeln(' ,f(x)=',sin(sqrt(x)));

       writeln('продолжить?(д или н)');

       read(s);

       write(' ');

      end;

    end.

    Когда выполняется  эта  программа,  на экране возникает следующая

последовательность строк:

    x=...,f(x)=...

    продолжить?(д или н)

    д

    x=...,f(x)=...

    продолжить?(д или н)

    д

      . . . .

    x=...,f(x)=...

    продолжить?(д или н)

    н

    С вводом буквы н выполнение программы заканчивается.  Возможность

прочтения буквы ответов обеспечивается использованием в программе сим-

вольной переменной.

       Описание функций работающих с символьными переменными.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    CHR(x: byte): char;

    -------------------

    Преобразует целое  число,  имеющее  тип  BYTE,  в   один   символ

ASCII-кода. Следующая  программа  иллюстрирует   возможности   функции

"CHR".  Она выдаёт все символы кода ASCII на экран. При этом некоторые

символы ASCII-кода (например 7,  10, 13) при обычных условиях не имеют

изображения,  а используются для реализации специальных функций (пере-

вод курсора и т.д.) Благодаря использованному в операторе Write форма-

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

(занимает две позиции)

    Program ex_4;

    var

      i: byte;

    begin

     for i:=0 to 255 do write(chr(i):2);

    end.

    ORD(c: char): byte;

    -------------------

    Функция Ord выполняет действие,  обратное функции Chr, т.е. возв-

ращает порядковый номер символа параметра в таблице ASCII.

    UpCase(c: char): char;

    ---------------------

    Осуществляет преобразование  символов  английского  алфавита   из

строчных символов  в  прописные.  Все остальные символы при применении

этой функции остаются непреобразованными.

    Контрольные вопросы.

    --------------------

1. Какие переменные называют символьными переменными?

2. Опишите тип данных CHAR.

3. Как используется в языке Turbo Pascal символ номер 39.

4. Какие преобразования выполняет функция ODD?

5. Какие преобразования выполняет функция CHR?

7. Какие преобразования выполняет функция UpCase?

8. Как используются специальные символы - "управляющие коды"?

9. Сколько символов содержится в таблице ASCII?

10. Опишите использования формата вывода информации в операторе Write.

11. Как сравниваются символьные переменные при вычислении условий?

              Задания для самостоятельного выполнения.

             -----------------------------------------

1. Дана последовательность из n символов. Подсчитать:

 а) сколько раз среди данных символов встречается символ + и  сколько

    раз - символ *.

 б) общее число вхождений символов +,  -,  * в данную  последователь-

    ность.

2. Вывести на экран изображение всех возможных символов  вместе  с  их

  номерами.

3. Дана последовательность из n символов.  Выяснить, имеются ли в пос-

  ледовательности два подряд идущих символа ",-".

4. Дана последовательность из n символов.  Известно,  что в последова-

  тельности имеется хотя-бы одна запятая. Найти номер:

  а) первой по порядку запятой;

  б) последней по порядку запятой.

5. Дана последовательность из n символов.  Выяснить,  каких символов в

  последовательности больше,  запятых или точек с запятой. (Не исклю-

  чается случай равенства).

6. Дана последовательность символов, заканчивающаяся символом '+'. Оп-

  ределить и вывести на экран номера символов,  имеющих наибольший  и

  наименьший номер.

7. Дана последовательность из n символов.  Выяснить,  в какой половине

  последовательности, в  первой или во второй,  больше вопросительных

  знаков. (Не исключается случай равенства).

8. Дана  последовательность  из n символов.  Выяснить встречается ли в

  данной последовательности группа из трёх стоящих рядом точек.

9. Дана последовательность из n символов.  Подсчитать наибольшее число

  букв "a" идущих подряд в данной последовательности.

10.Дана  последовательность  символов,  заканчивающаяся  символом  '?'

  Подсчитать наибольшее количество символов "пробел" идущих в  строке

  подряд.


lab17.html

***********************************

Лабораторная работа N 17

Массивы

    До сих пор Вы сталкивались в основном с простыми  типами  данных.

Типы данных  в  системе  Turbo Pascal делятся на простые и сложные.  К

простым типам относятся стандартные,  перечисляемые и ограниченные;  к

сложным типам - массивы,  множества, записи, файлы. Элементами сложных

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

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

позволяет составлять эффективные программы.

    Всё сказанное можно изобразить с помощью следующей схемы:

                            ТИПЫ ДАННЫХ

               +------------------------------------+

            Простые                              Сложные

           ----+----                            ----+----

      +------------+                      +------------+

      ¦      ¦     Стандартные            ¦   ¦    ¦   Массивы

      ¦      Перечисляемые                ¦   ¦    Множества

      Ограниченные                        ¦   Записи

                                          Файлы

    Рассмотрение структурированных типов мы начнём с  так  называемых

массивов "ARRAY".  Массив объединяет элементы одного типа данных. Мас-

сивы бывают одномерными и многомерными.  Размер массива (и число изме-

рений) ограничивается только объёмом рабочей памяти ПЭВМ.

    В математике и информатике массив называется одномерным, если для

получения доступа к его элементам достаточно одной индексной  перемен-

ной.

    Декларация (объявление) одномерного  массива  выглядит  следующим

образом:

    VAR

      имя_массива: ARRAY[нач_инд..кон_инд] OF тип данных;

    Например:

    VAR

      mas: ARRAY[1..25] OF Integer;

    Таким образом мы объявили одномерный массив mas целых чисел.  Но-

мер (индекс) первого элемента 1, последний номер (индекс) 25.

    Декларация массивов может производится и немного другим способом.

Сначала объявляется  тип пользователя (в нашем случае типа "ARRAY"), а

затем и переменная на основе этого типа данных. Например:

    TYPE

      tab=ARRAY[1..25] OF Integer;

    VAR

      mas: tab;

    Эта декларация аналогична приведённой выше.  В следующем  примере

декларировано несколько переменных типа массив:

    VAR

      mas_1: ARRAY[1..10] OF Real;

      mas_2: ARRAY[5 .. 16] OF Integer;

      sst: ARRAY[20..40] OF Char;

    Обратите внимание,  что величины, обозначающие "начальный индекс"

и "конечный индекс", в квадратных скобках разделяются двумя (!) точка-

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

    Тип элементов, составляющих массив, может быть любым (в том числе

и сложным).  Тип индексов элементов массива может быть только простым,

хотя наиболее часто в качестве индексов  элементов  массива  применяют

целые числа.

    В следующем примере объявлены массивы содержащие элементы различ-

ных типов, и индексы различных простых типов:

    VAR

      mas: array [1..15] of real;

{описан массив из 15 вещественных чисел}

      www: array [(mon,tue,wed)] of integer;

{описан массив  из  трёх целых чисел,  индексы элементов массива имеют

перечислимый тип и принимают значение названий дней недели  mon,  tue,

wed}

      ast: array ['A'..'Z'] of boolean;

{описан массив элементов логического типа,  тип индексов - ограниченый

символьный}

      art: array [(black,white)] of 11..20;

{описан массив целых чисел с индексами black,  white.  Каждый  элемент

массива может принимать значения от 11 до 20}

      svz: array [byte] of integer;

{описан массив из 256 целых чисел с индексами  стандартного  типа byte

(от 0 до 256)}

                 Извлечения и присвоения в массивах

                ------------------------------------

    В отличие  от  стандартных переменных массивы не могут обрабаты-

ваться целиком. Но Вы можете получить доступ к каждому элементу-ячейке

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

скобках. Так например, с помощью оператора

    mas[2]:=34;

элементу массива с индексом 2  присваивается  значение  34. Оператор

    Writeln(mas[2]);

вызовет вывод на экран пользователя  значение  хранящегося  в  элемен-

те-ячейке N 2 массива mas.  Наряду с конкретным значением (конcтантой)

в качестве индекса может быть использована переменная,  например,  при

обработке массива поэлементно в рамках цикла "FOR ...  TO ... DO". Так

с помощью фрагмента программы

    FOR i:=1 TO 25 DO mas[i]:=0;

    всем элементом массива присваивается значение "0".

    Использование массивов вместо одиночных переменных позволяет  Вам

благодаря применению циклов "FOR ... TO ... DO" существенно сэкономить

время и объём программы. Это демонстрируется следующим примером.

    П Р И М Е Р.  Дана последовательность реальных чисел s1 ...  s30.

Организовать массив  для  хранения  этих чисел.  Определить сумму этих

элементов.

    PROGRAMM ex_1;

    VAR

      m: ARRAY[1..30] of real;    {декларация массива}

      i: integer;                 {параметр цикла FOR}

      s: real;                    {сумма элементов}

    BEGIN

     FOR i:=1 TO 30 DO            {заполнение массива}

       Begin

        Write('Введите элемент последовательности N ',i);

        Readln(m[i]);

       End;

      s:=0;                       {обнуление счётчика суммы}

     FOR i:=1 TO 30 DO s:=s+m[i]; {вычисление суммы}

     Write('Сумма элементов последовательности равна ',s);

     Readln;   { пауза }

    END.

                        Контрольные вопросы.

                       ---------------------

1. Какие типы данных Вы знаете?

2. Перечислите и приведите примеры простых типов данных.

3. Перечислите сложные типы данных.

4. Что такое массивы?

5. Что называют элементом массива?

6. Что называют индексом элемента массива?

7. Сколько элементов может содержать массив?

8. Сколько индексов может быть у одного элемента массива?

9. Элементы какого типа может содержать массив?

10. Какие типы данных допустимы для индексов элементов массива?

              Задания для самостоятельного выполнения.

             -----------------------------------------

1. Напишите программу,  которая сначала вводит десять чисел в одномер-

  ный массив,  а затем складывает отдельно все положительные элементы

  этого массива,  отдельно отрицательные элементы и выдаёт полученные

  результаты.

2. Разработайте  программу,  которая будет вводить с клавиатуры 25 ре-

  альных чисел и сохранять их в некотором одномерном массиве. Затем у

  пользователя запрашивается ввод ещё одного "контрольного" числа.

    Программа должна проверить,  содержится  ли  последнее  введённое

  число среди введённых раннее элементов массива,  и выдать соответс-

  твующее сообщение на экран.

3. Напишите программу,  которая вводит с клавиатуры 25 реальных чисел,

  организовывает их хранение в одномерном массиве, а затем определяет

  число положительных элементов данной последовательности  и  выводит

  результат на экран.

4. Напишите программу,  которая вводит с клавиатуры 20 реальных чисел,

  организовывает их хранение в одномерном массиве, а затем определяет

  каких чисел в массиве больше,  положительных или отрицательных.  Не

  исключается случай равенства.

5. Напишите программу, которая вводит с клавиатуры 15 целых чисел, ор-

  ганизовывает их  хранение  в одномерном массиве,  а затем оределяет

  среднее арифметическое элементов массива. Результат выдаётся на эк-

  ран пользователя.

6. Напишите программу которая вводит с клавиатуры 20  реальных  чисел,

  организовывает их хранение в одномерном массиве, а затем определяет

  индекс и значение максимального элемента массива. Результат выдаёт-

  ся на экран пользователя.

7. Напишите программу которая вводит с клавиатуры 30 символов, органи-

  зовывает их хранение в одномерном массиве, а затем выводит содержи-

  мое массива в обратном порядке с указанием индекса (номера) каждого

  элемента.

8. Напишите программу которая вводит с клавиатуры 20  реальных  чисел,

  организовывает их хранение в одномерном массиве, а затем определяет

  среднее арифметическое элементов с  чётными  индексами,  и  среднее

  арифметическое элементов  с нечётными номерами.  Результат выдаётся

  на экран пользователя.

9. Дан одномерный массив целых чисел размерностью 20. Определите коли-

  чество положительных групп в этом массиве. (Группой называется пос-

  ледовательность состоящая из 2-х и более положительных чисел  нахо-

  дящихся рядом.)

10.Дан массив из 20 целых чисел.  На экране нарисовать график, состоя-

  щий из  20 параллелепипедов высота которых пропорциональна значению

  элементов массива.  Цвет заполнения параллелепипедов зависит от  их

  высоты, - чем выше параллелепипед, тем больше номер цвета.

 


lab18.html

***********************************

Лабораторная работа N 18

Методы обработки массивов

    Массивы - наиболее часто применяемый  тип  данных  при  обработке

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

и т.д.  Это объясняется не столько удобством хранения информации в па-

мяти компьютера в виде массива, сколько возможностью легко производить

различного рода обработку массивов.

    В настоящей  лабораторной работе описаны наиболее простые и часто

встречающиеся ситуации при обработке информации в  массивах.  Все  они

достаточно просты,  и поэтому снабжены не подробными комментариями,  а

конкретными примерами. Рекомендуем Вам самостоятельно разобрать каждый

из предложенных примеров.  Не переходите к следующему разделу (примеру

программы), если Вам не понятно назначение каждой  строки  предыдущего

примера программы .

                      Сумма элементов массива.

                     -------------------------

    Пример программы, которая сначала вводит 30 реальных чисел, орга-

низовывает  их  хранение  в массиве,  определяет сумму элементов этого

массива и выдаёт результат на экран.

    PROGRAMM ex_1;

    VAR

      m: ARRAY[1..30] of real;    {декларация массива}

      i: integer;                 {параметр цикла FOR}

      s: real;                    {сумма элементов}

    BEGIN

     FOR i:=1 TO 30 DO            {заполнение массива}

       Begin

        Write('Введите элемент последовательности N ',i);

        Readln(m[i]);

       End;

      s:=0;                       {обнуление счётчика суммы}

     FOR i:=1 TO 30 DO s:=s+m[i]; {вычисление суммы}

     Write('Сумма элементов последовательности равна ',s);

     Readln;   { пауза }

    END.

               Число положительных элементов массива

              ---------------------------------------

    Пример программы, которая сначала вводит 30 реальных чисел, орга-

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

элементов и выдаёт сообщение на экран.

    PROGRAMM ex_2;

    VAR

      m: ARRAY[1..30] of real;    {декларация массива}

      i: integer;                 {параметр цикла FOR}

      n: integer;                 {счётчик положительных эл-ов}

    BEGIN

     FOR i:=1 TO 30 DO            {заполнение массива}

       Begin

        Write('Введите элемент последовательности N ',i);

        Readln(m[i]);

       End;

      n:=0;                       {обнуление счётчика п. эл-ов}

     FOR i:=1 TO 30 DO

      if m[i]>=0 then n:=n+1;     {вычисление количества п. эл-ов}

     Write('Последовательность содержит ',n,' положительных эл-ов');

     Readln;   { пауза }

    END.

                 Определение максимального элемента

                ------------------------------------

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

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

(номер) максимального элемента этого массива и выдаёт сообщение на эк-

ран.

    PROGRAMM ex_3;

    VAR

      m: ARRAY[1..30] of real;    {декларация массива}

      i: integer;                 {параметр цикла FOR}

      max: real;   {значение максимального элемента}

      t: integer;  {индекс (номер) макс. элемента}

    BEGIN

     FOR i:=1 TO 30 DO            {заполнение массива}

       Begin

        Write('Введите элемент последовательности N ',i);

        Readln(m[i]);

       End;

      max:=m[1];  {допустим, что 1-й элемент - максимален}

      t:=1;

     FOR i:=1 TO 30 DO

      if m[i]>max then     {проверка нашего утверждения}

                    begin

                     max:=m[i];

                     t:=i;

                    end;

      Writeln('Максимальный элемент последовательности равен ',max);

      Writeln('Номер максимального элемента ',t);

     Readln;   { пауза }

    END.

              Поиск элемента в неупорядоченном массиве

             ------------------------------------------

    Пример программы, которая сначала вводит 30 реальных чисел, орга-

низовывает их хранение в массиве,  затем  запрашивает  так  называемое

"контрольное число". После этого проверяет, есть ли в массиве элемент,

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

    PROGRAMM ex_4;

    VAR

      m: ARRAY[1..30] of real;    {декларация массива}

      i: integer;                 {параметр цикла FOR}

      p: real;     {значение искомого элемента}

      t: integer;  {индекс (номер) иском. элемента}

    BEGIN

     FOR i:=1 TO 30 DO            {заполнение массива}

       Begin

        Write('Введите элемент последовательности N ',i);

        Readln(m[i]);

       End;

     Write('Введите контрольное число ');

     Readln(p);

      t:=0; {допустим, что в массиве нет такого элемента}

     FOR i:=1 TO 30 DO

      if m[i]=p then        {проверка нашего утверждения}

                    begin

                     t:=i;

                     write('Эл. N ',i,' равен искомому');

                    end;

      if t=0 then write('В массиве нет такого элемента');

     Readln;   { пауза }

    END.

                        Контрольные вопросы.

                       ---------------------

1. Опишите порядок действий при вычислении суммы элементов массива.

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

  тов в массиве.

3. Опишите порядок действий при определении максимального  элемента  в

  массиве.

4. Опишите порядок действий при поиске элемента в неупорядоченном мас-

  сиве.

              Задания для самостоятельного выполнения

             -----------------------------------------

1. Напишите программу,  которая вводит с клавиатуры 20 реальных чисел,

  и организовывает их хранение в массиве. После этого определяет сум-

  му элементов, значение которых больше среднего арифметического эле-

  ментов массива.

2. Напишите программу,  которая вводит с клавиатуры 15 реальных чисел,

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

  максимальным и минимальным элементом массива.

3. Напишите программу,  которая вводит с клавиатуры 15 реальных чисел,

  организовывает их хранение в массиве и определяет индексы  (номера)

  элементов массива, значение которых равно значению первого элемента

  массива. Если такого элемента нет, вывести соответствующее  сообще-

  ние на экран.

4. Напишите программу,  которая вводит с клавиатуры 10 реальных чисел,

  и организовывает их хранение в массиве. После этого массив пересор-

  тировывается по закону: первый элемент меняется с последним, второй

  с предпоследним и т.д.

5. Напишите программу, которая вводит с клавиатуры 10 целых чисел, ор-

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

  количество нечётных элементов в массиве.

6. Напишите программу, которая вводит с клавиатуры 30 реальных чисел и

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

  десяти и последних десяти.  После этого определяется максимальное и

  минимальное среднее арифметическое и выводится сообщение.

7. Дан массив состоящий из 10 символов.  Определить и вывести на экран

  индексы символов равных первому символу.

8. Дан массив состоящий из 10 символов.  Организовать массив целых чи-

  сел  и  заполнить его номерами символов исходного массива.  Вывести

  содержимое массива на экран.


lab19.html

***********************************

Лабораторная работа N 19

Упорядочивание (сортировка) массива.

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

количества однотипной информации,  создания и организации баз и банков

данных и т.д.  Во многих случаях номер (индекс) элемента в массиве  не

играет большой роли.  Важно именно его значение, т.е. сама информация.

Базы и банки данных,  в свою очередь,  необходимы не только для  того,

чтобы "складывать" в них информацию,  но и для того, чтобы в любой мо-

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

"неотсортированном" массиве информацию найти можно,  но только уже из-

вестным Вам способом  последовательного  перебора-просмотра  всех  его

элементов,  до тех пор,  пока нужный элемент не будет обнаружен.  Этот

самый простой метод обладает только одним но очень существенным недос-

татком - на поиск одного элемента уходит много времени.  Все остальные

методы поиска информации намного эффективнее,  быстрее, но применяются

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

кает задача об упорядочивании массива.

    Рассмотрим простой случай такой задачи:  дан числовой массив  x1,

x2,  ... xn, элементы которого попарно различны; требуется переставить

элементы массива так, чтобы после перестановки они были упорядоченны в

порядке возрастания: x1 < x2 < ... < xn.

    Существует несколько алгоритмов решения этой задачи.  Мы рассмот-

рим два наиболее популярных.

                    Алгоритм сортировки выбором

                   -----------------------------

    Очевидно, что первое место в массиве  должен  занять  минимальный

элемент массива,  второе - наименьший из всех остальных, третий - наи-

меньший из оставшихся и т.д.

    Для этого необходимо выполнить следующую последовательность дейс-

твий:

1. Определить минимальный элемент массива;

2. Поменять его местами с первым элементом;

3. Определить минимальный элемент среди оставшихся;

4. Поменять его местами со вторым элементом и т.д.;

    Эта последовательность  действий  должна  выполняться до тех пор,

пока не будет определён последний минимальный элемент.

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

простые задачи.

    Первая - поиск минимального элемента. Предлагаемый фрагмент прог-

раммы напомнит Вам, как это делается.

      min:=m[1];  {допустим, что 1-й элемент - минимален}

      t:=1;       {и его номер = 1}

     FOR i:=1 TO 30 DO

      if m[i]m[i+1] then  {сравнение двух соседних элементов}

         begin

          buf:=m[i];     {меняем соседние элементы местами}

          m[i]:=m[i+1];

          m[i+1]:=buf;

          ind:=false;    {как оказалось, массив неотсортирован}

         end;

    UNTIL ind; {выполняем просмотры пока ind=false}

                        Контрольные вопросы.

                       ---------------------

1. Опишите идею сортировки массива методом выбора и последовательность

  действий для его реализации на языке Turbo Pascal.

2. Опишите идею сортировки массива "пузырьковым" методом и  последова-

  тельность действий для его реализации на языке Turbo Pascal.

              Задания для самостоятельного выполнения

             -----------------------------------------

1. Организуйте массив, содержащий 20 различных целых чисел. После это-

  го элементы массива упорядочиваются по убыванию и содержимое отсор-

  тированного массива выводится на экран.

2. Организуйте массив, содержащий 20 различных целых чисел. После это-

  го 10 первых элементов массива упорядочиваются по возрастанию, а 10

  последних элементов по убыванию.  Содержимое отсортированного таким

  образом массива выводится на экран.

3. Организуйте массив, содержащий 15 различных целых чисел. После это-

  го отдельно первых 5 элементов,  вторых 5 элементов и  последних  5

  элементов  сортируются по возрастанию.  Содержимое отсортированного

  таким образом массива выводится на экран.

4. Создайте массив,  содержащий 10 различных целых  чисел.  Содержимое

  массива сортируется по возрастанию,  и после этого определяются ми-

  нимальный и максимальный элементы массива.

5. Организуйте массив,  содержащий 20 различных символов. Отсортируйте

  его по возрастанию.

6. Организуйте массив содержащий 20 целых чисел. Отсортируйте отдельно

  элементы с чётными индексами по возрастанию, и элементы с нечётными

  индексами по убыванию.

7. Создайте массив содержащий 20 целых чисел. Отсортируйте его по воз-

  растанию.  После этого определите и выведите на экран сумму элемен-

  тов с чётными индексами и сумму элементов с нечётными индексами.

8. Создайте массив,  содержащий 15 целых чисел. Отдельно первых 5 эле-

  ментов массива, вторых 5 элементов и последних 5 элементов отсорти-

  руйте по убыванию.  Определите и выведите на экран сумму каждой пя-

  тёрки отсортированного таким образом массива.

9. Создайте массив, содержащий 15 различных символов. Отсортируйте его

  по  убыванию.  После этого определите и выведите на экран "наимень-

  ший" и "наибольший" символы.

10. Создайте массив, содержащий 10 различных символов. Первую половину

  массива отсортируйте по возрастанию, а вторую по убыванию. Отсорти-

  рованный массив выведите на экран.

11. Создайте массив А,  содержащий 8 различных символов.  Отсортируйте

  его  по возрастанию.  Организуйте и выведите на экран целочисленный

  массив В,  заполнив его числами, полученными преобразованием симво-

  лов массива А в целые числа.

12. Создайте  целочисленный  массив А,  содержащий 10 различных чисел.

  Отсортируйте первую половину массива А по возрастанию,  а вторую по

  убыванию.  Организуйте и выведите на экран символьный массив В, за-

  полнив его символами, полученными преобразованием чисел массива А в

  символы.

13. Создайте массив, содержащий 20 различных целых чисел. Отсортируйте

  его по возрастанию.  После этого замените все элементы  массива  на

  противоположные  и выведите содержимое обработанного массива на эк-

  ран.

14. Создайте массив, содержащий 20 различных целых чисел. Отсортируйте

  первую половину массива по возрастанию,  а вторую по убыванию.  Все

  чётные элементы массива увеличить в три раза,  а нечётные в 2 раза.

  Содержимое обработанного таким образом массива вывести на экран.


lab20.html

***********************************

Лабораторная работа N 20

Поиск элемента в упорядоченном массиве.

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

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

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

элементов массива. Для облегчения поиска необходимых данных содержимое

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

    Рассмотрим наиболее часто встречающуюся задачу поиска необходимо-

го элемента в отсортированном массиве, и алгоритм её решения.

    Дан отсортированный по возрастанию массив  вещественных  чисел  A

состоящий из n элементов.  Определить, содержит ли данный массив число

B, и если содержит,  то определить номер (индекс) данного  элемента  в

массиве.

    Предположим, что в массиве A имеется элемент,  равный B, т.е. су-

ществует такой индекс p,  что A[p]=B.  По результату любого  сравнения

A[s]<B (1<s<n) мы сразу определяем,  лежит ли p в диапазоне от 1 до s,

или же в диапазоне от s+1 до n:  второе будет иметь место,  если нера-

венство A[s]<B справедливо, а первое - если не справедливо. Это свойс-

тво данного сравнения используется в алгоритме деления пополам.

    Алгоритм деления пополам.

    -------------------------

    Первоначально номера крайних элементов массива 1 и n берут в  ка-

честве границ поиска элемента; далее, до тех пор, пока границы не сов-

падут, шаг за шагом сдвигают эти границы следующим образом: сравнить B

с  A[s],  где  s  - целая часть среднего арифметического границ;  если

A[s]<B,  то заменить прежнюю нижнюю границу на  s+1,  оставив  верхнюю

границу без изменения,  иначе оставить без изменения нижнюю ганицу,  а

вехнюю ганицу заменить на s. Поиск закончится когда ганицы совпадут.

    Сказанное можно  записать в виде последовательности операторов TP.

В этом фрагменте p и q обозначают упомянутые верхнюю и нижнюю границы.

    p:=1; q:=n;

    while p<q do

      begin

       s:=(p+q) div 2;

       if a[s]<b then p:=s+1

                 else q:=s;

      end;

    Схематически процесс поиска можно изобразить в виде схемы:

    +-------------------------0-------------------------------+

    ¦                         +---------------1---------------¦

    ¦                         +-------2--------+              ¦

    ¦                         ¦       +----3---¦              ¦

    ¦                         ¦       +--4-+   ¦              ¦

    ¦                         ¦       +-5+ ¦   ¦              ¦

    1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

    Заметим сразу следующее.  Мы исходим из предположения,  что среди

элементов массива имеется такой,  который равен B.  Если заранее неиз-

вестно, имеется или нет такой элемент,  то,  получив p,  надо дополни-

тельно проверить, действительно ли A[p]=B.

    Алгоритм поиска элемента делением пополам обладает высоким  быст-

родействием.  Вообще  идея деления пополам (сведение задачи примерно к

вдвое более простой в количественном отошении) оказывается весьма пло-

дотворной  для построения многих алгоритмов.  Для обозначения сущности

идеи алгоритма часто применяют выражение "разделяй и властвуй".

                        Контрольные вопросы.

                       ---------------------

1. В чём заключается идея поиска элемента в методом деления пополам.

2. Опишите  последовательность действий при создании алгоритма для по-

  иска элемента в массиве методом деления пополам.

              Задания для самостоятельного выполнения.

             ------------------------------------------

1. Напишите  программу,  которая организует хранение в массиве 15 раз-

  личных введённых с клавиатуры целых чисел.  Содержимое массива сор-

  тируется по  возрастанию.  После этого,  с клавиатуры запрашивается

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

  Номер элемента массива,  в положительном случае, выводится на экран

  монитора.

2. Напишите программу,  которая организует хранение в массиве 10  раз-

  личных целых чисел.  Содержимое массива сортируется по возрастанию.

  После этого, с клавиатуры вводится контрольное число. Наличие кото-

  рого в массиве необходимо проверить. В положительном случае замени-

  те элемент массива,  равный контрольному числу,  нулём.  Содержимое

  массива выводится на монитор.

3. Напишите  программу,  которая организует хранение в массиве 15 раз-

  личных введённых с клавиатуры целых чисел.  Содержимое массива сор-

  тируется по убыванию. После этого, с клавиатуры запрашивается конт-

  рольное число,  наличие которого в массиве необходимо проверить. На

  экран монитора выводится содержимое массива до "контрольного числа"

  включительно.

4. Дан  массив  из  10  целых чисел.  Отсортируйте его и найдите в нём

  контрольное число.  Все элементы до контрольного числа замените  на

  противоположные.

5. Дан массив из 20 символов.  Отсортируйте его и найдите в нём  конт-

  рольный символ.  Выведите  на  экран  содержимое  массива начиная с

  символа равного контрольному символу.

6. Дан массив, состоящий из 15 символов. Содержимое массива сортирует-

  ся по убыванию. После этого вводится контрольное целое число в диа-

  пазоне от 0-255.  Необходимо определить наличие в массиве  символа,

  имеющего номер "контрольное число". В положительном случае сам сим-

  вол и его индекс в массиве выводятся на экран.

7. Дан массив,  состоящий из 15 целых чисел,  в диапазоне от 0 до 255.

  Содержимое массива сортируется по возрастанию. После этого вводится

  контрольный символ.  Необходимо определить наличие в массиве числа,

  равного номеру контрольного символа. В положительном случае число и

  его индекс в массиве выводятся на экран.

8. Дан массив А состоящий из 10 символов.  Отсортируйте его по возрас-

  танию. Организуйте массив целых чисел Б, заполнив его номерами сим-

  волов из массива А.  Введите контрольное число в диапазоне от 0  до

  255  и  определите его наличие в массиве Б.  В положительном случае

  выведите на экран найденное число и его индекс в массиве.

9. Дан массив Б состоящий из 10 чисел в диапазоне от 0 до 255.  Отсор-

  тируйте его по возрастанию. Организуйте символьный массив А, запол-

  нив его символами с номерами элементов массива Б. Введите контроль-

  ный  сивол  и  определите его наличие в массиве А.  В положительном

  случае выведите на экран сам символ и его индекс в массиве.

10. Дан массив А состоящий из 20 целых чисел. Отсортируйте его по убы-

  ванию.  Введите с клавиатуры 2 контрольных числа a и b.  Определите

  наличие в массиве чисел,  лежащих в диапазоне от a до b.  В положи-

  тельном  случае  выведите найденные числа и их индексы в массиве на

  экран.

11. Дан массив Б состоящий из 20 символов. Отсортируйте его по возрас-

  танию. Введите с клавиатуры 2 контрольных символа a и b. Определите

  наличие в массиве символов лежащих в диапазоне от a до b. В положи-

  тельном случае выведите найденные символы и их индексы на экран.

12. Дан массив А состоящий из 20 целых чисел.  Отсортируйте первую по-

  ловину массива по возрастанию,  а вторую по убыванию. Введите конт-

  рольное число и определите его наличие в массиве А. В положительном

  случае выведите найденное число и его индекс на экран.


lab21.html

***********************************

Лабораторная работа N 21

Массивы массивов.Матрицы.

  Массивы (array) наиболее часто применяемые структурированные типы

в  системе программирования Turbo Pascal.  Они обладают рядом свойств,

которые позволяют использовать их для хранения и обработки  значитель-

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

изучению типа данных ARRAY.

    До сих пор Вы применяли тип ARRAY только для хранения и обработки

линейных массивов  информации.  В этом случае массив можно представить

как линейную таблицу содежащую однотипную информацию. Например, объяв-

лен массив a:  array [1..9] of integer,  который уже заполнен (опреде-

лён). Его можно представить следующим образом.

Имя массива   a

Индекс        1   2   3   4   5   6   7   8   9

           +-----------------------------------+

Содержимое  ¦  2¦ 12¦ -9¦  5¦  2¦143¦  4¦  7¦ -6¦

           +-----------------------------------+

    В этом случае,  для того чтобы обратиться к элементу массива, не-

обходимо указать  имя данного массива с индексом элемента в квадратных

скобках. Например: a[4].

    Для данного массива базовым типом является  стандартный,  простой

тип integer.  Поэтому содержимое каждой ячейки массива, это целое чис-

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

том числе и сам тип массив.  То-есть в Turbo Pascale может быть объяв-

лена переменная следующего вида:

    Var

      a: array [1..3] of array [1..4] of integer;

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

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