- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
1) – Следование или линейная;
2) Развилка или ветвление;
3) Цикл.
Рассмотрим каждую из них на примерах:
Структура Следование - одна из самых важных структур. Она означает, что два действия должны быть выполнены друг за другом. Например, блок схема алгоритма вычисления значения гипотенузы по теореме Пифагора выглядит так. Здесь можно видеть операции ввода исходных данных, вычисления и вывра
Структура Развилка обеспечивает выбор одной из двух альтернатив:
если < условие > то
< действие 1 >
иначе
< действие 2 >
все
Существует сокращенная форма структуры Развилка, которая позволяет выполнить действие или пропустить его:
если < условие > то
< действие >
все
Обобщением структуры Развилка является Множественный выбор:
если Var = Const1 то < действие 1 >
если Var = Const2 то < действие 2 >
. . .
если Var = Constn то < действие n >
все
В зависимости от значения переменной Var выполняется одно из указанных действий, например, если Var = Const3, то выполняется <действие3>.
Примером этой структуры может служить алгоритм вычисления корней квадратного уравнения:
Третьей базовой структурой является Цикл, который предусматривает повторное выполнение определенных действий, необходимое для большинства программ. Различают следующие типы структур Цикл :
- цикл "от до"
- цикл "пока"
- цикл "до"
Цикл "от до" управляет повторением выполнения действия с помощью переменной цикла:
цикл от I := N1 до N2
< действие >
кц {конец цикла}
Здесь I - переменная цикла, N1, N2 - начальное и конечное значения переменной цикла, вычисляются один раз при входе в цикл. Переменная цикла пробегает все следующие друг за другом в порядке возрастания значения от начального до конечного. Изменение значения переменной цикла происходит автоматически после каждого выполнения действия, указанного внутри цикла. В зависимости от соотношения N1 и N2 цикл может не выполниться ни разу (N1 > N2) или выполниться ( N2 - N1 + 1 ) раз.
В цикле "пока" управление внутри цикла осуществляется с помощью логического условия:
цикл пока < условие >
< действие >
кц {конец цикла}
Выполнение действия повторяется до тех пор, пока истинно условие. Проверка условия осуществляется в начале цикла. Это означает, что действие может не выполниться ни разу. Чтобы такой цикл не был бесконечным, внутри цикла необходимо предусмотреть изменение значения условия с истинного на ложное.
Третий тип структуры цикл "до" имеет вид:
цикл < действие > до < условие >
Как только значение условия становиться истинным, цикл прекращается. Цикл "до" независимо от значения условия будет выполняться по меньшей мере один раз, т.к. проверка условия производится после выполнения действия. Для завершения цикла необходимо внутри цикла изменить условие с ложного на истинное. Выбор структуры цикла определяется особенностями алгоритма решения конкретной задачи.
Пример: вычисление суммы Nпервых натуральных чисел.
Существенная особенность перечисленных базовых структур состоит в том, что каждая из них имеет один вход и один выход. Их можно соединять друг с другом в любой последовательности. В качестве действия может использоваться любая из перечисленных структур, что обеспечивает возможность вложенности одних структур в другие. Возврат назад выполняется только в циклах. С помощью определенных базовых структур можно писать ясные, надежные программы без операторов Goto, что является основой технологии структурного программирования. Еще один результат использования только базовых структур состоит в том, что управление в программе будет осуществляться сверху вниз, т.е. все инструкции выполняются в том порядке, в котором они появляются в тексте программы, все ветвления будут направлены только вперед. Это облегчает чтение и модификацию программы.
Краски, палитры, заполнения
Процедура SetCOlor. Устанавливает текущий цвет для вводимых линий и символов. Заголовок:
Procedure SetColor(Color: Word);
Здесь Color – текущий цвет.
Процедура SetBkColor. Устанавливает цвет фона. Заголовок:
Procedure SetBkColor (Color: Word);
Здесь Color - цвет фона.
В отличие от текстового режима, в котором цвет фона может быть только темного оттенка, в графическом режиме он может быть любым. Установка нового цвета фона, немедленно изменяет цвет графического экрана. Это означает, что нельзя создать изображение, два участка которого имели бы разный цвет фона. Для GGA-адаптера в режиме высокого разрешения установка цвета фона изменяет цвет активных пикселей. Замечу, что после замены цвета фона на любой, отличный от 0 (Black) цвет. Вы не сможете более использовать цвет 0 как черный, он будет заменяться на цвет фона, т.к. процедуры модуля Graph интерпретируют цвет с номером 0 как цвет фона. Это означает, в частности, что Вы уже не сможете вернуть фону черный цвет!
Если Ваш ПК оснащен цветным экраном, следующая программа продемонстрирует работу процедуры SetBkColor. Программа выводит десять вложенных друг в друга прямоугольников, после чего циклически меняет цвет фона. Для выхода из программы достаточно нажать на любую клавишу.
Процедура SetFillStyle. Устанавливает стиль (тип и цвет). Заголовок:
Procedure SetFillStile(Fill, Color: Word);
Здесь Fill – тип заполнения; Color – цвет заполнения.
С помощью заполнения можно покрывать какие-либо фрагменты изображения периодически повторяющимся узором.
Процедура FloodFill. Заполняет произвольную замкнутую фигуру, используя текущий стиль заполнения(узор и цвет). Заголовок:
Procedure FloodFill(X, Y: Integer; Border: Word);
Здесь X, Y – координаты любой точки внутри замкнутой фигуры; Border – цвет граничной линии. Если фигура не замкнута, заполнение «разольется по всему экрану.
Сохранение и выдача изображений
Функция ImageSize. Возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения. Заголовок:
Function ImageSize(X1, Y2, X2, Y2: Integer): Word;
Здесь X1..Y2 – координаты левого верхнего(X1,Y1) и правого нижнего(X2,Y2) углов фрагмента изображения.
Процедура GetImage. Помещает в память копию прямоугольного фрагмента изображения. Заголовок:
Procedure GetImage(X1, Y1, X2, Y2: Integer; var Buf);
Здесь X1..Y2 – координаты углов фрагмента изображения; Buf – переменная или участок кучи, куда будут помещена копия видеопамяти с фрагментом изображения.
Размер Buf должен быть не меньше значения, возвращаемого функцией ImageSize с теме же координатами X1..Y2.
Процедура PutImage. Выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. Заголовок:
Procedure PutImage(X, Y: Integer; var Buf; Mode: Word);
Здесь X, Y –координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf – переменная или участок кучи, откуда берется изображение; Mode – способ копирования.
Как видим, координаты правого нижнего угла не указываются, так как они полностью определяются размерами вновь выводимой на экран копии изображения. Координаты левого верхнего угла могут быть какими угодно, лишь бы только выводимая копия уместилась в пределах экрана(если копия не сможет разместиться на экране, она не выводится и экран остается без изменений).
Параметр Mode определяет способ взаимодействия вновь размещаемой копии уже имеющимся на экране изображением. Взаимодействие осуществляется путем применения кодируемых этим параметром логических операций к каждому биту копии и изображения.
Лекция 2. Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия.
Паскаль - язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623-1662) и разработан в 1968-1971 гг. Никлаусом Виртом. Первоначально был разработан для обучения, но вскоре стал использоваться для разработки программных средств в профессиональном программировании.
Паскаль популярен среди программистов по следующим причинам:
Прост для обучения.
Отражает фундаментальные идеи алгоритмов в легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
Позволяет четко реализовать идеи структурного программирования и структурной организации данных.
Использование простых и гибких структур управления: ветвлений, циклов.
Надежность разрабатываемых программ.
Турбо Паскаль - это система программирования, созданная для повышения качества и скорости разработки программ (80-е гг.). Слово Турбо в названии системы программирования - это отражение торговой марки фирмы-разработчика Borland International (США).
Систему программирования Турбо Паскаль называют интегрированной (integration - объединение отдельных элементов в единое целое) средой программирования, т.к. она включает в себя редактор, компилятор, отладчик, имеет сервисные возможности.
В соответствии с синтаксисом языка Турбо-Паскаль программу принято начинать зарезервированным словом Program, после которого указывается имя программы. Завершается строка специальным разделителем - точкой с запятой. Программа состоит из двух секций:
- секции объявлений, - секции операторов обработки данных.
Секция объявлений должна предшествовать секции выполняемых операторов. Она может включать:
- объявление меток ( секция Label ); - объявление констант ( секция Const ); - объявление типов ( секция Type ); - объявление переменных ( секция Var ); - объявление процедур и функций ( секция Procedure и Function).
Любое из перечисленных объявлений находится в соответствующем разделе и может отсутствовать в конкретной программе. Порядок следования разделов в современной реализации Турбо-Паскаля произвольный.
Секция операторов обработки данных обязательна, она начинается с ключевого слова Begin, содержит последовательность выполняемых операторов, разделенных точкой с запятой, и завершается словом End с точкой после него. Эту секцию называют телом программы.
При записи программы на Паскале можно использовать только символы, входящие в алфавит языка:
- заглавные, строчные латинские буквы от a до z и от A до Z и символ подчеркивания _ - арабские цифры от 0 до 9 - специальные символы: + - * / = , . : ; < > [ ] ( ) { } ^ ' @ $ #
В Турбо-Паскале зарезервировано 52 служебных слова. К ним относятся названия операторов, операций и др. Эти слова не могут быть использованы в качестве имен в программе.
Инструкции отделяются одна от другой точкой с запятой. На одной строке могут размещаться несколько инструкций и одна инструкция может располагаться на нескольких строках.
Для создания легкочитаемой программы, что является признаком хорошего стиля программирования, следует придерживаться следующих рекомендаций:
- Выбор осмысленных имен переменных; - Использование комментариев. Комментарии - это примечания, помогающие понять смысл программы, они игнорируются компилятором и предназначены для пояснения назначения отдельных инструкций. В качестве ограничителей комментария допускается использовать фигурные скобки и пары символов (*, *), например:
{комментарий 1} (* комментарий 2 *)
Длинный комментарий может занимать несколько строк;
Использование пустых строк и отступов, повышающих наглядность программы. Пустые строки вставляются для того, чтобы отделить одну логическую часть программы от другой. Благодаря отступам, т.е. смещению инструкции вправо (обычно на две позиции) легче проследить вложенность одних конструкций в другие.
Размещение по возможности каждого оператора на отдельной строке.
Важным инструментом в Турбо-Паскале является понятие составного оператора.
Составной оператор представляет собой последовательность инструкций, заключенную в операторные скобки Begin...End.
В программе допускается использовать метки, с помощью которых можно указать те операторы, на которые будет передано управление из других точек программы. Метки представляют собой целые числа от 1 до 9999 в стандартном Паскале или произвольные идентификаторы в Турбо-Паскале и описываются в секции меток, например:
label 10, 20, 35, Loop, M1, M2;
Для обозначения в программе переменных, констант, типов, меток, процедур и функций используются идентификаторы.
Идентификаторы всегда начинаются с буквы, за которой могут следовать буквы, цифры и символ подчеркивания. Пробелы и специальные символы не могут входить в идентификатор. Длина идентификатора может быть произвольной, однако значащими являются только первые 63 символа. Важно помнить, что соответствующие заглавные и строчные буквы в идентификаторах и служебных словах не различаются, например, идентификаторы Massiv, MASSIV и massiv обозначают одну и ту же переменную.Примеры правильных идентификаторов:
N, Epsilon, Lab23, Prog_Sortirov
При написании Паскаль-программ распространено правило, по которому идентификатор начинается с заглавной буквы. Если он состоит из нескольких слов, то они пишутся слитно, но каждое с большой буквы.
Программирование на языке Турбо Паскаль, как я уже говорил, происходит в интегрированной среде, включающей в себя редактор, компилятор и отладчик. Рассмотрим основные составляющие этой среды.
Итак, Турбо-Паскаль - это многофайловая программа, состоящая из одного главного файла и нескольких вспомогательных, подключаемых к работе по мере необходимости. Обычно все файлы, относящиеся к Турбо-Паскалю, хранятся на диске в каталоге под произвольным именем: Pascal, T_Pascal, TP55, TP70 и т.п. Файлы системы должны сохранять имена, данные им фирмой-разработчиком. Основные файлы, обеспечивающие работу Турбо-Паскаля, достаточно малы, что позволяет хранить их на одной дискете. Как минимум, требуются 2 файла - Turbo.exe и Turbo.tpl. Это базовый набор для разработки программ, не использующих графический режим. Для работы Турбо-Паскаля требуется не менее 512 Кбайт оперативной памяти.
Главный файл, TURBO.EXE, хранит ядро системы Турбо-Паскаль. Вспомогательный файл TURBO.TPL содержит резидентную библиотеку модулей.
Чтобы инициировать работу Турбо-Паскаля, надо запустить программу из файла Turbo.exe на выполнение. Это можно сделать, либо введя с клавиатуры имя TURBO в командной строке DOS, либо с помощью Norton Cоmmander'a. В последнем случае надо в текущем каталоге поместить курсор на имя файла Turbo.exe и нажать клавишу "Enter". При запуске Турбо-Паскаля, на экране появляется окно редактора с определенными элементами:
|
Экран Турбо-Паскаля содержит 4 основные части, сверху вниз:
|
главное меню (File, Edit, Run, Compile, Options, Debug, Break/Watch); |
|
окно редактирования (Edit) со служебной информацией редактора в верху; |
|
окно просмотра (Watch) для отладки программ; |
|
строку подсказки о назначении функциональных клавиш (F1..F10). |
Назначение функциональных клавиш системы Турбо-Паскаль
Функциональные клавиши, помеченные надписями F1...F10, занимают на клавиатуре верхний ряд. С каждой из этих клавиш связана определенная команда, управляющая средой (например, считывание информации с диска или запись ее на диск). Поскольку число потребных команд может быть больше имеющегося количества функциональных клавиш, назначение F-клавиш можно разнообразить при помощи двух специальных клавиш: Alt (Alternative, дополнительная) и Ctrl (Control, управление). Клавиши Alt и Ctrl используются в сочетании с функциональными клавишами подобно клавишам смены регистра: сначала нужно нажать Alt или Ctrl, а затем, не отпуская ее, нажать нужную функциональную клавишу.
Функциональные клавиши имеют следующее назначение:
F1 - вызов подсказки (справочной программы);
F2 - запись текста редактируемой программы в текущий каталог, в файл под именем, указанным в правом верхнем углу экрана редактора EDIT;
F3 - загрузка (считывание) текста программы с дискового файла в окно редактора;
F4 - выполнение программы от начала до строки, на которой расположен курсор;
F5 - окно редактора раскрывается на весь экран (повторное нажатие возвращает исходное изображение);
F6 - меняет окно редактора EDIT на окно отладки WATCH;
F7 - трассировка программы - при каждом повторном нажатии этой клавиши выполняется очередная строка программы; если в этой строке есть обращение к процедуре или функции, то эта процедура или функция также будет выполнена строка за строкой по мере нажатия клавиши (режим трассировки используется для отладки составляемых программ);
F8 - то же, что и F7, но при выполнении процедуры последняя будет выполняться за один шаг, как строка;
F9 - компилировать программу, текст которой находится в окне редактирования, но не выполнять ее;
F10 - переход из окна редактирования в меню Турбо-Паскаля (меню занимает верхнюю строку экрана).
Работа с текстовым редактором Турбо-Паскаля
При запуске Турбо-Паскаля, окно редактирования EDIT может быть заполнено чьей-либо программой или рекламной заставкой. Для очистки окна от заставки достаточно нажать любую клавишу. Для очистки окна от текста чужой программы, надо:
|
войти в меню, нажав F10; |
|
выбрать клавишами управления курсором пункт меню "File" и нажать клавишу "Enter"; |
|
в развернувшемся дополнительном меню выбрать клавишами управления курсором пункт меню "New" и нажать "Enter"; окно EDIT очистится. Признак готовности редактора к работе - мигающий курсор в верхнем левом углу окна Edit. |
Окно редактора имитирует длинный широкий лист бумаги, фрагмент которого виден в окне. Если курсор доходит до нижнего края окна, то лист "прокручивается" на строку вверх. Если курсор достиг правой границы окна, окно по мере ввода последующих символов будет смещаться вправо. В текстовом редакторе Турбо-Паскаля можно набирать текст строками не длиннее 245 символов.
Вертикальный размер листа с набираемым текстом ограничивается лишь общим количеством символов в тексте, которое должно быть не более 65535. Следует помнить, что компилятор Турбо-Паскаля воспринимает строки не длиннее 126 символов, поэтому при написании программы бессмысленно набирать строки длиной более 126 символов - все лишнее будет игнорироваться.
Текст можно набирать русскими либо латинскими буквами, в виде цифр и других символов, доступных на клавиатуре. Курсор указывает место на экране, куда будет помещен очередной символ. Для удаления предыдущего введенного символа используется клавиша "¬ " (Backspace). Если требуется удалить символ, расположенный над курсором, надо нажать клавишу "Delete" или "Del". Наряду с видимыми символами, в текст программы вставляются невидимые символы: пробел и EOL (End Of Line - признак окончания строки, находится в конце каждой строки). Невидимые символы, как и видимые, можно стирать или забивать другими символами. При стирании EOL соседние строки сливаются в одну. При вставке символа EOL в какую-либо строку, она делится на две строки. Невидимый символ EOL помещается в текст нажатием клавиши Enter.
Редактируя текст, можно полностью удалить строку, на которой находится курсор, нажав сочетание клавиш “Ctrl” и “Y”. Восстановить только что измененную строку можно, нажав сочетание клавиш “Ctrl”, “Q” и “L”.
