Основы алгоритмизации - pismo.netnado.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Реферат по информатике и икт по теме: " Разветвляющиеся алгоритмы". 1 228.49kb.
Основы логики и логические основы компьютера 4 786.22kb.
"Основы животноводства" 1 81.09kb.
Кафедра «Бухгалтерский учет, статистика», экономического факультета... 1 59.33kb.
Программа дисциплины "Основы правоведения" Модуль "Основы трудового... 1 119.77kb.
Основы буддизма 8 1075.11kb.
Методические рекомендации и рабочая программа по дисциплине «Основы... 4 758.64kb.
1. Понятие и объективные основы конкуренции в экономике. Институциональные... 1 36.62kb.
Учебный курс основы управления Для студентов, обучающихся на дневной... 1 183.13kb.
7 Квалификационные требования Цель: Формирование у учителей, классных... 1 119.56kb.
Учебное пособие по курсу «основы теории цепей» 1 728.5kb.
Моделирование систем и языки программирования 1 175.78kb.
Урок литературы «Война глазами детей» 1 78.68kb.
Основы алгоритмизации - страница №1/1

Основы алгоритмизации


Основы алгоритмизации 1

1. Понятие алгоритма и его свойства. Способы описания алгоритмов. Свойства алгоритмов. 2

2. Общие принципы построения алгоритмов. Основные алгоритмические конструкции. 2

3. Эволюции языков программирования, их классификация понятие системы программирования 4

4. Составление программ на алгоритмическом языке: основные элементы языка, структура программы, операторы и операции, управляющие структуры. 4

5. Структуры данных, файлы, классы памяти. Типы данных. 4

6. Составление библиотек программ. 5

7. Объектно-ориентированная модель программирования. 5

8. Основные принципы объектно-ориентированного программирования на примере алгоритмического языка Turbo Pascal. 6

9. Понятие классов и объектов, их свойств и методов. 6

10. Работа с файлами (поиск, копирование, переименование, удаление). 7

11. Алгоритмическая структура "ветвление". Команда ветвления. Привести пример. 7

12. Алгоритмическая структура "цикл". Команда повторения. Привести пример. 7

13. Объектно-ориентированное программирование. Классы объектов. Объекты: свойства и методы. 8

14. Строковые величины. Строковые функции и выражения. 9

15. Способы записи алгоритмов (описательный, графический, на алгоритмическом языке, на языке программирования). 10

16. Массивы и алгоритмы их обработки. 10

17. Разработка алгоритма методом последовательной детализации. 11

18. Основы языка программирования (алфавит, операторы, типы данных и т.д.). 12

19. Функция программиста. Объявление и использование функции. 12

20. Инструкция подключения модулей. Структура модуля программиста. 13

21. В общем виде записать инструкцию IF. Привести пример. 13

22. В общем виде записать инструкцию CASE. Привести пример. 14

23. В общем виде записать инструкцию FOR. Привести пример. 14

24. В общем виде записать инструкцию WHILE. Привести пример. 14

25. В общем виде записать инструкцию REPEAT. Привести пример. 15

26. Объявление и использование процедуры. 15

27. Локальные и глобальные переменные. Привести пример. 16

28. Понятие рекурсии. 16

29. Привести примеры объявления файла. Ввод в файл. 16

30. Чтение из файла. Привести примеры. 17

31. Графические возможности Turbo Pascal. Привести примеры. 17



1. Понятие алгоритма и его свойства. Способы описания алгоритмов. Свойства алгоритмов.


Алгоритм - это организованная последовательность действий, допустимая для некоторого исполнителя.

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

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

Примеры исполнителей: человек, компьютер, робот-манипулятор, станок с программным управлением. Свойства алгоритма:

1. Детерминированность означает определенность или однозначность результата вычислений при заданных исходных данных.

2. Дискретность проявляется в возможности представления алгоритма в виде отдельных элементарных действии, которые могут быть выполнены ЭВМ.

3. Массовость это возможность решения задач одного типа с; разными исходными данными.

4. Результативность (конечность). Вычислительный процесс при соответствующих исходных данных должен закончиться получением иско­мого результата за конечное время.

Способы описания алгоритмов

1. Словесный.

2. С помощью математических формул.

3. С помощью блок-схем.

4. На алгоритмическом языке.

6. С помощью языка программирования.

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

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

Условное обозначение Пояснение к блокам

На алгоритмической языке каждое действие алгоритма записывается строго по правилам этого языка.

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

2. Общие принципы построения алгоритмов. Основные алгоритмические конструкции.


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

На стадии проектирования строится алгоритм будущей программы, например, в виде блок-схемы. В конце 60-х — начале 70-х гг. XX столетия вырабатывается дис­циплина, которая получила название структурного программирован. Ее появление и развитие связаны с именами Э.В. Дейкст-Гм, Х.Д. Милса, Д. Е. Кнута и других ученых. Структурное программирование до настоящего времени остается основой технологии программирования. Соблюдение его принципов позволяет программисту быстро научиться писать ясные, безоши­бочные, надежные программы.

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

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

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

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

- конструкции одного уровня вложенности записываются на одном вертикальном уровне (начинаются с одной позиции в строке);

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



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

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

«сверху вниз»: сначала строится основной алгоритм, затем I вспомогательные алгоритмы;

«снизу вверх»: сначала составляются вспомогательные алгоритмы, затем основной.

Первый подход еще называют методом последовательной детализации.

Основные алгоритмические конструкции.

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



Ветвление — алгоритмическая альтернатива. Управление передается одному из двух блоков в зависимости от истинности и их ложности условия. Затем происходит выход на общее продолжение:

неполная форма ветвления имеет место, когда на ветви НЕТ пусто.





Цикл — повторение некоторой группы действии по условию. Различаются два типа цикла, первый — Цикл с предусловием :

пока условие истинно, выполняется серия, образующая тело цикла.

Второй тип циклической структуры — цикл с постусловием<цикл-до>:

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



3. Эволюции языков программирования, их классификация понятие системы программирования


В 1950 - появляются первые средства автоматизации программирования – языки Автокоды. Потом они получают название – «Ассемблеры». В состав языков высокого уровня входят: Фортран, Кобол и Алгол. Языки Фортран и Алгол были ориентированы на научно-технические расчёты математического характера. Кобол - для программирования экономических задач. В 1965 – в Дартмутском ниверситете бал разработан язык Бейсик. Предназначен для программирования несложных расчётных задач. В эпоху третьего поколения ЭВМ получил широкое распостронение язык PL/1 - распространён универсальностью, разработанной фирмой IBM. В 1971 – Паскаль, учебный язык структурного программирования. Язык Си – создавался как инструментальный язык для разработки операционных систем, баз данных и других системных и прикладных программ. Позже Си++. Язык Модула-2 - основан на языке Паскаль и содержащий средства для создания больших программ. Язык ЛИСП появился в 1965, основан на понятии рекурсивно определённых функций. В 1972- язык Пролог – создан для решения проблем «искусственного интеллекта».

Системы программирования.

Современные системы программирования состоят из:

- транслятора с соответствующего языка

- редактора

- отладчика

- библиотеки подпрограмм

- компоновщика

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



4. Составление программ на алгоритмическом языке: основные элементы языка, структура программы, операторы и операции, управляющие структуры.


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

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



Структура программы имеет вид:

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



Раздел описаний:

- Описание меток

- Определение констант

- Определение типов

- Описание переменных

- Описание процедуры

- Описание функции.

Вложенные операторы цикла

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

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

Управляющие структуры:

1. if ..then….else;

2. while;

3. repeat;

4. for…i…to..;

5. case.


5. Структуры данных, файлы, классы памяти. Типы данных.


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

Целочисленный тип данных

Вещественный тип

Символьный (литерный) тип

Строковый тип

Логический (булев) тип



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

Классы памяти: Под всякую переменную, используемую в программе, должно быть место в памяти ЭВМ. Выделение памяти может происходить либо на стадии компиляции программы, либо во время её выполнения.

Существуют 4 класса памяти:

1. Автоматическая (ключевое слово Auto)

2. Внешняя (extern)

3. Статическая (static)

4. Регистровая (register)

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



6. Составление библиотек программ.


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

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

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

Структура модуля:

Unit <имя модуля>; {заголовок модуля}

Interface

{интерфейсная часть}



Implementation

{раздел реализации}



Begin

{раздел инициализации модуля}



End.

7. Объектно-ориентированная модель программирования.


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

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



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

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

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

ООП обладает рядом преимуществ при создании больших программ. К ним можно отнести:

1. Использование более естественных с точки зрения повседневной практике понятий, простота введения новых понятий.

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

3. Возможность создания библиотеки объектов.

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

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

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

7. Возможность разделения доступа к различным объектам программы и т.д.

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



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

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



8. Основные принципы объектно-ориентированного программирования на примере алгоритмического языка Turbo Pascal.


Язык программирования называется объектно-ориентированным, если

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

• все объекты относятся к соответствующим типам (классам);

• классы могут наследовать от суперклассов.

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

Основные принципы ООП:

1. Инкапсуляция.

Концепция сокрытия в как бы "капсуле" всей информации об объекте, то есть объединение в некое целое данных и процедур (методов) их обработки. Единицей инкапсуляции в OOD является объект, в котором содержатся и данные состояния объекта и сообщения, которые объект может обрабатывать.



2. Наследование.

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



3. Полиморфизм.

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

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

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



9. Понятие классов и объектов, их свойств и методов.


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

Однако режим доступа к элементам класса может быть изменён путём его явного указания. Для этого перед элементами класса записывается соответствующий спецификатор доступа. Их всего 3:

1. private (частный);

2. public (Общедоступный);

3. protected (Защищённый);

10. Работа с файлами (поиск, копирование, переименование, удаление).


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

Структура описания файловой переменной:



Var <имя переменной>: file of <тип переменной>;

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



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

С элементами файла можно выполнить только две операции: читать из файла и записывать в файл. Для того чтобы начать запись в файл, его следует открыть для записи. Это обеспечивает процедура Rewrite (FV); где FV — имя файловой переменной. При этом указатель устанавливается на начало файла. Если в файле есть информация, то она исчезает. Запись в файл осуществляется процедурой Write ( FV, v); где v — переменная того же типа, что и файл FV. Запись происходит туда, где установлено окно (указатель). Сначала записывается значение, затем указатель смещается в следующую позицию.

Для чтения элементов файла с его начала следует открыть файл для чтения. Это делает процедура Reset (FV). В результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется. Чтение из файла осуществляется процедурой Read (FV, v) .где v - переменная того же типа, что и файл FV. Значение текущего цемента файла записывается в переменную v; указатель смещается к следующему элементу.

Доступ к элементам файла в паскале последовательный, т.е. для того, чтобы прочитать n-тую запись файла, сначала нужно прочитать все предыдущие записи с 1-ой по (n-1)-ую. Rename(F,NewName) - переименование внешнего файла. Внешний файл, с которым связана файловая переменная F, получает новое имя, заданное параметром NewName.

Работа с файлом в программе завершается его закрытием с помощью процедуры close(<имя файловой переменной>);. Erase(F) - удаляет внешний файл, с которым связана файловая переменная F.

11. Алгоритмическая структура "ветвление". Команда ветвления. Привести пример.


Общий вид команды ветвления в блок-схеме и на алгоритмическом языке следующий:

Полное ветвление:



если условие

то серия 1

иначе серия 2

конец

Сначала проверяется условие. Если оно выполняется, то выполняется серия 1 - последовательность команд. В противном случае выполняется серия 2.

Не полное ветвление:

Если выполняется условие то выполняется серия 1 операторов, в противном случае ничего не выполняется.



12. Алгоритмическая структура "цикл". Команда повторения. Привести пример.


Цикл - повторение некоторой группы действий по условию. Различают два типа цикла. Первый цикл с предусловием (цикл-пока):

Пока условие истинно выполняется серия, образующая тело цикла.

Второй тип циклической структуры - цикл с постусловием (цикл-до):

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

Найти S=1+2+3+…+ n

i:=1;


s:=0;

while i<=n do

begin

s:=s+i;


i:=i+1;

end;


13. Объектно-ориентированное программирование. Классы объектов. Объекты: свойства и методы.


Язык программирования называется объектно-ориентированным, если

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

• все объекты относятся к соответствующим типам (классам);

• классы могут наследовать от суперклассов.

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

Основные принципы ООП:

1. Инкапсуляция.

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



2. Наследование.

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



3. Полиморфизм.

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

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

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

Существует два свойства доступа:

1 private – соответствующий элемент может использоваться функциями данного класса.

2 public - доступен в других частях программы.

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

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

14. Строковые величины. Строковые функции и выражения.


Строка в Турбо Паскале – последовательность символов произвольной длины до 255 символов. для определения данных строкового типа используется идентификатор String, за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается, то по умолчанию длина строки равна 255 байт.

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

Переменную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе описания переменных. Строковые данные могут использоваться в программе также в качестве констант. Недопустимо применение строковых переменных в качестве селектора в операторе Case. Определение строкового типа устанавливает максимальное количество символов, которое может содержать строка.

Формат:

Type


<имя типа> = string [максимальная длина строки];

var


<идентификатор,…> : <имя типа>;

Переменную типа string можно задать и без описания типа:

var

<идентификатор,…> : string [максимальная длина строки];

Пример:

const


Address=’ул. Переверткина, 25’; {строковая константа}

Type


Flot = string[125];

Var


Fstr : Flot; {описание с задание типа}

St1 : String; {по умолчанию длина строки = 255}

St2, St3 : String[50];

Nazv : String[280]; {ошибка, длина превышает 255}


Строка в языке Турбо Паскаль трактуется как цепочка символов. (Для строки из N символов отводится N+1 байт; N байт – для хранения символов строки, а один байт – для значения текущей длины строки.)

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



Строковые выражения. Выражения, в которых операндами служат строковые данные, называются строковыми. Они состоят из строковых констант, переменных, указателей функций и знаков операций. Над строковыми данными допустимы операция конкатенации и операции сравнения.

Конкатенация – применяется для объединения нескольких строк в одну результирующую строку.

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

Запись подобная Str[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Значение нулевого байта не должно превышать 255, но нарушение этого правила не вызывает программного прерывания, так как директива компилятора R по умолчанию находится в пассивном состоянии {$R-}. Для обеспечения строкового контроля за диапазоном допустимых значений индекса следует перевести директиву R в активное состояние {$R+}. В этом случае компилятор активизирует дополнительные команды для проверки правильности диапазона. Обычно активный режим R устанавливается на стадии отладки программ.



Строковые процедуры и функции.

Delite (St,Poz,N) – удаление N символов строки St, начиная с позиции Poz. если значение Poz>255, возникает программное прерывание.

Insert (Str1, Str2, Poz) – вставка строки Str1 в Str2, начиная с позиции Poz.

В результате выполнения последнего выражения значение строки S2 станет равным ‘ЭВМ ЕС 1841’.



Str (IBR, St) – преобразование числового значения величины IBR и помещение результата в строку St. После IBR может записываться формат, аналогичный формату вывода. Если в формате указано недостаточное для вывода количество разрядов, поле вывода расширяется автоматически до нужной длины.

Val (St, IBR, Code) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в IBR. Значение St не должно содержать незначащих пробелов в начале и конце. Code – целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно нулю, если же ошибка обнаружена (литерное значение переводится в цифровое), Code будет содержать номер позиции первого ошибочного символа, а значение IBR не определено.
Copy (St, Poz, N) – выделяет из St подстроку длиной N символов, начиная с позиции Poz. Если Poz>Lengh(St), то результатом будет пробел; если Poz>255, возникнет ошибка при выполнении. Poz, N – целочисленные значения.

Concat (Str1, Str2,…,StrN) – выполняет сцепление строк Str1, Str2,…,StrN в том порядке, в каком они указаны в списке параметров.

Сумма символов всех сцепленных строк не должна превышать 255, например:



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

15. Способы записи алгоритмов (описательный, графический, на алгоритмическом языке, на языке программирования).


Алгоритм - это организованная последовательность действий, допустимая для некоторого исполнителя.

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

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



Способы описания алгоритмов

1. Словесный.

2. Формул.

3. С помощью блок-схем.

4. На алгоритмическом языке.

5. С помощью языка программирования.

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

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


16. Массивы и алгоритмы их обработки.


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

Type


<имя типа>=аrrау[<тип индекса(индексов)>] of <тип компонент>

Пример, объявление типов-массивов:

Type


Arr=array[ 1.3] of Real; {Тип-массив из трех вещественных чисел}

Matrix =array[1.,3, 1..2] of Integer;{Тип - двумерный массив целых чисел, состоящий из 3 строк и 2 столбцов}

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

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



Пример, другое задание переменных-массивов:

VAR


М1, М2: array[1..3J of Real;

Matr: array[1..3. 1..2) of Integer.

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

Пример обращения к элементам массива:

Ml [2],


MatrfX, YJ, и т. д.

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

VAR

А, В: array[1..5] of Integer;



С: arrayfl..5] of real;

то допустим оператор А:= В; С другой стороны, оператор С:=А; недопустим, так как массивы А и С - неидентичных типов.



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

For I:=l To 12 Do ReadLn(T[I]);

For I:=l To IMax Do

For J:=l To JMax Do ReadLn(Mas[I,J]);

Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода используется оператор Read.

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

For I:=l То 12 Do Write (Т [ I] : 8 : 4) ;

Следующий фрагмент программы организует построчный вывод матрицы на экран:

For I:=l To IMax Do

Begin For J:=l To JMax Do

Write(Mas[I, J] :6) ;

WriteLn


End;

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



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

for I:=l To N-l Do

For K:=l To N-I Do

If X[K]>X [K+l] Then Begin

A:=X[K];

X[K]:=X[K+1];

X[K+1]:=A

End;


17. Разработка алгоритма методом последовательной детализации.


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

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

2. снизу – вверх, когда сначала вспомогательный, затем основные.

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



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

Пример: проссумировать элементы одномерного массива из 10 элементов.

Начнём с того что представим в общем виде алгоритм как линейную последовательность этапов решения задач:

1. ввод массива с клавиатуры;

2. подсчёт суммы элементов в массиве;

3. вывод результата.

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

Program Sum_ma;

Var A: array [1…10] of real;

I: integer;

Begin


Procedure Wwod_mas; {введите массив с клавиатуры};

Function Sum (A: array [1…10] of real): real; {подсчитать сумму в массиве};

Writeln (Sum(A));

End.


Второй шаг детализации – составим подпрограмму:

Procedure Wwod_mas;

Var

A: array [1…10] of real;



Begin

Writeln (“Введите массив”);

For i:=1 to 10 do

Readln (A [i]);

End.

Function Sum (A: array [1…10] of real): real;



Var

I: integer;

S: integer;

Begin For i:=1 to 10 do

S: = S+A[i];

Sum: = S;

End.

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



18. Основы языка программирования (алфавит, операторы, типы данных и т.д.).


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

Цыфры: 0,1,2,3,…,9.

Специальные символы: +,-,*,:,=,<,>, @,#,$,^,& и т.д.

К специальным символом относятся служебные слова (Begin,End,Var,и т.д) К специальным символам относится знак пробел. Идентификатор называется символическое имя определенного программного обьекта. Такими обьектами являются имена констант,переменных,типов данных,процедуры и ф-ции.



Типы данных.

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



Типы

1. Простые

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

б)вещественные

2. Структурированные

а)массивы

б)строки

в)множество

г)записи

д)файлы


Операторы

Простые операторы – простыми являются те операторы , которые не содержат в себе других операторов. К ним относятся:

1. Оператор присваивания - с помощью этого оператора переменной или функции присваивается значение выражения. Для этой операции используется знак присваивания ..=, слева от которого записывается имя переменной или ф-ции,которой присваивается значение, а с право выражение значение которого вычисляется перед присваиванием

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

3. Оператор без условного перехода GOTO – позволяет изменить стандартный последовательный порядок выполнения операторов и перейти к выполнению программы начиная с заданного оператора. Оператор, на который происходит переход, должен быть помечен меткой. Этаже метка должна быть указана и в операторе GOTO

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

19. Функция программиста. Объявление и использование функции.


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

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

Рассмотрим этот вопрос на примере следующей задачи: даны два натуральных числа a и b. Требуется определить наибольший общий делитель трех величин: a +b, а-b, a*b

Program N0D;

Var

А,В,Rez:Integer;



Function Evklid(M,N:Integer):Integer;

Begin


While MON Do

If M>N Then M:=M-N

Else N:=N-M;

Evklid:=M

End;

Begin


Write('a=');

ReadLn(A);

Write('b=');

ReadLn(B);

Rez:=Evklid(Evklid(A+B, Abs(A-B)),A*B);

WriteLnCNOD равен', Rez)

End.

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



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

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

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

<Имя функции> (<Список фактических параметров>)

20. Инструкция подключения модулей. Структура модуля программиста.


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

Модуль имеет следующую структуру:



Unit <имя модуля>; {заголовок модуля}

Interface

{интерфейсная часть}



Implementation

{раздел реализации}



Begin

{раздел инициализации модуля}



End.

После служебного слова unit записывается имя модуля, которое (для удобства дальнейших действий) должно совпадать с именем файла, содержащего данный модуль. Поэтому (как принято в MS DOS) имя не должно содержать более 8 символов. В разделе interface объявляются все ресурсы, которые будут в дальнейшем доступны программисту при подключении модуля. Для подпрограмм здесь лишь указывается полный заголовок.

В разделе implementation описываются все подпрограммы, которые были ранее объявлены. Кроме того, в нем могут содер¬жаться свои константы, переменные, типы, подпрограммы и т.д., которые носят вспомогательный характер и используются для написания основных подпрограмм. В отличие от ресурсов, объявленных в разделе interface, все, что дополнительно объявляется в Implementation, уже не будет доступно при подключении модуля. При описании основной подпрограммы достаточно указать ее имя (т.е. не требуется полностью переписывать весь заголовок), а затем записать тело подпрограммы.

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

1. Спроектировать модуль, т.е. определить основные и вспомогательные подпрограммы и другие ресурсы.

2. Описать компоненты модуля.

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

Сохраним текст разработанной программы в файле DROBY. PAS * скомпилируем наш модуль. Для этого можно воспользоваться внешним компилятором, поставляемым вместе с Турбо Паскалем. Команда будет выглядеть так: ТРС DROBY . PAS. Если в тексте нет синтаксических ошибок, получим файл DROBY.TPU, иначе, будет выведено соответствующее сообщение с указанием строки, содержащей ошибку. Другой вариант компиляции: в меню системы программирования Турбо Паскаль выбрать Compile/Destination Disk, затем — Compile/Build. Для того, чтобы использовать модуль в программе его необходимо подключить. Для этого поселе зарезервированного слова USES указывают имя подключаемого модуля. После подключения модуля в программе можно вызывать любые его процедуры, и пользоваться ими как будто они описаны в программе.

Program <имя программы>;

Uses <имя модуля>;



21. В общем виде записать инструкцию IF. Привести пример.


Алгоритмическая структура ветвления программируется в Пас­кале с помощью условного оператора. Он записывается в виде:

If <условие>

Then <оператор 1>

Else <оператор 2>;

Кроме того, возможно использование неполной формы услов­ного оператора:

If <условие>

Then <оператор>;

Условием, есть логическое выраже­ние, которое вычисляется в первую очередь. Если его значение рав­но true, то будет выполняться <оператор 1> (после Then), если false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).



Пример:

If X <0 then X:=-Y;

If X< 1.5 then Z:=X+Y

Else Z:=1.5;



22. В общем виде записать инструкцию CASE. Привести пример.


Для ситуаций, где имеется несколько (три и более) альтернатив, больше подходит оператор case. Он состоит из выражения, называемого селектором, и списка параметров, каждому из которых предшествует список констант выбора.

Формат записи оператора имеет вид:

Case выражение-селекторof

список1: оператор1;

список2: оператор2;

список N: оператор N;



Else оператор

End;


Оператор case работает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словом else. Если слово else отсутствует, активизируется оператор, находящийся за словом end, т.е. первый оператор за границей case. Ветвь оператора else является необязательной. Если она отсутствует и значение выражения-селектора не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора If перед словом else точку с запятой можно ставить.

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



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

- Значения выражения «переключателя», записанного после служебного слова case, должны принадлежать дискретному типу; для целого типа они должны лежать в диапазоне integer.

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

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



23. В общем виде записать инструкцию FOR. Привести пример.


Оператор for. Cинтаксичес­кая диаграмма оператора цикла For:

Здесь <параметр цикла>:=<имя простой переменной порядкового типа>

Выполнение оператора For в первом варианте (То) происхо­дит по следующей схеме:

1. Вычисляются значения <Выражения 1> и <Выражения 2>. Это делается только один раз при входе в цикл.

2. Параметру цикла присваивается значение <Выражения 1>.

3. Значение параметра цикла сравнивается со значением вы­ражения 2>. Если параметр цикла меньше или равен этому значе­нию, то выполняется тело цикла, в противном случае выполне­ние цикла заканчивается.

4. Значение параметра цикла изменяется на следующее значе­ние в его типе (для целых чисел — увеличивается на единицу); происходит возврат к пункту 3.

Слово DownTo буквально можно перевести как «вниз до». В та­ком случае параметр цикла изменяется по убыванию, т.е. при каж-1ом повторении цикла параметр изменяет свое значение на пре­дыдущее

Посчитать сумму чисел в интервале от М до N(M

Summa:=0;

For I:=M To N Do

Summa:=Summa+I;

Summa:=0;

For I:=N DownTo M Do

Summa:=Summa+I;

24. В общем виде записать инструкцию WHILE. Привести пример.


Оператор while (пока) часто называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

Формат записи:

While условие продолжения повторений do

тело цикла;



Условие – булевское выражение, тело цикла – простой или составной оператор. Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, то тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, то происходят выход из цикла и переход к первому после while оператору.

Посчитать S=1+2+3+4+5

Program Hl;

Var


I: integer;

Begin


I:=1; s:=0;

While I<=5 do

Begin

S:=s+1;


I:=I+1;

End;


25. В общем виде записать инструкцию REPEAT. Привести пример.


Цикл repeat часто называют циклом с постусловием, или циклом «ДО», так как он прекращает выполняться, как только значение выражения условия, записанного после слова until, равно True.

Оператор повтора repeat состоит из заголовка repeat, тела и условия окончания until.

Формат записи:

Repeat


оператор;

оператор



until условие окончания цикла;

Посчитать S=1+2+3+4+5

Program Hl;

Var


I: integer;

Begin


I:=1; s:=0;

Repeat


S:=s+1;

I:=I+1;


Until I>5;

End;


26. Объявление и использование процедуры.


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

Procedure <имя процедуры> (<список формальных параметров>);

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

Пример: процедура ввода N целых чисел.

Пусть в основной программе определен тип:

Type tArr = array[1..100] of integer;

Процедура может иметь вид:

Procedure InpInt (var Mas: tArr; N: integer);

{заголовок со списком формальных параметров, проверка N<= 100 – в основной программе}

Var I: integer; {локальный параметр – параметр цикла}

Begin

Writeln (‘Введите’,N,’целых чисел’);



For I:= 1 to N do

Read (Mas[i]);

End;

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



InpInt (M, K);

означает, что вызывается процедура InpInt для ввода К целых чисел в массив М. Естественно, что в этом случае параметр К целого типа, а М – массив типа tArr.



27. Локальные и глобальные переменные. Привести пример.


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

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

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

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

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

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

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

- если в некотором блоке описан объект, имя которого совпадает с именем объекта описанного в объемлющем блоке, то это последнее имя становится недоступным в данном блоке (оно как бы экранируется одноименным объектом данного блока).

Если применить эти правила к приведенной схеме, можно сказать, что объекты, описанные в блоке В, известны (видимы) кроме самого блока В еще и в блоках С и D, но невидимы в блоке А. Объекты, описанные в блоке F, известны только в пределах этого блока.

Например:

Program Exampl;

Procedure P;

Procedure A;

Var j : integer; {локальная переменная j, является глобальной по отношению к процедуре В}

Procedure B;

Var j : integer; { локальная переменная j, экранирует глобальную переменную j, описанную в вызывающей процедуре А}

Begin

Writeln (j);



End;

Begin


J:=1;

B; {вызов процедуры В}

End;

Begin


A; {вызов процедуры А}

End.


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

28. Понятие рекурсии.


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

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

Пример: вариант функции, рекурсивно вычисляющей факториал числа N.

Function Factorial (N: Byte): LongInt;

Begin

If N in [0..1]



Then Factorial :=1

Else Factorial := N* Factorial(N-1)

End;

29. Привести примеры объявления файла. Ввод в файл.


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

Структура описания файловой переменной:

Var <имя переменной>: file of <тип переменной>;

Файловая переменная после описания связывается с не­которым файлом, после чего операции, выполняемые с ней, приводят к со­ответствующим изменениям в файле.

Assign (<имя файловой переменной>,<идентификатор внешнего файла>);-организует связь между файловой переменной и внешним файлом.

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

Для того чтобы начать ввести в файл данные, его следует открыть для записи. Это обеспечивает процедура Rewrite (FV) ; где fv — имя файловой переменной. При этом указатель устанавливается на на­чало файла. Если в файле есть информация, то она исчезает. Запись в файл осуществляется процедурой Write ( fv, v); где v — переменная того же типа, что и файл fv. Запись происходит туда, где установлено окно (указатель). Сначала записывается значение, затем указатель смещается в следующую позицию.

Подведем итог сказанному. Для создания и заполнения файла требуется следующая последовательность действий:

1. Описать файловую переменную.

2. Описать переменную того же типа, что и файл.

3. Произвести назначение (Assign).

4. Открыть файл для записи (Rewrite).

5. Записать в файл данные (write).

6. Закрыть файл (Close).



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

Program Таski;

Var Ft: File Of Real; T: Real;{описываем файловую переменную}

Begin


Assign(Ft,'Temp.dat');{связываем файл с файловой переменной}

Rewrite(Ft);

WriteLn('Вводите данные. Признак конца -9999');

ReadLn (T) ;

While T<>9999 Do Begin

Write (Ft,T) ; {записываем переменную Т в файл Ft}

Write('?');

ReadLn(T)

End;

WriteLn('Ввод данных закончен!');



Close(Ft)

End.


30. Чтение из файла. Привести примеры.


Чтение из файла осуществляется процедурой Read (FV,V); где V- переменная того же типа, что и файл FV. Значение текущего элемента файла записывается в переменную V; указатель смещается к следующему элементу.

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

Принцип последовательного доступа: для того чтобы прочитать п-ю запись файла, сначала нужно прочитать все предыдущие записи с 1-й по {п-1)-ю.

Для последовательного чтения данных из файла требуется вы­полнить следующие действия:

1. Описать файловую переменную.

2. Описать переменную того же типа.

3. Выполнить назначение (Assign).

4. Открыть файл для чтения (Reset).

5. В цикле читать из файла (Read).

6. Закрыть файл (Close).

Пример. В переменной х получить 10-й элемент файла Nom.dat.

Program A;

Var

Fx: File Of Real;



X: Real;

Begin


Assign(Fx,’Nom.dat’);

Reset(Fx) ;

For I:=l To 10 Do Read(Fx,X);

Closr(Fx);

End.

31. Графические возможности Turbo Pascal. Привести примеры.


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

Начиная с четвертой версии Турбо Паскаля для IBM PC по­явилась мощная графическая библиотека, организованная в мо­дуль Graph. В приложении 2 в справочной форме дано описание эсновных компонент этого модуля. В рассмотренных ниже при­мерах программ используется модуль Graph. Для его подключения в начале программы необходимо написать строку:

Uses Graph;

Графические режимы экрана. Для вывода графических изобра­жений необходимо перевести экран в один из графических режи­мов. В графическом режиме можно из программы управлять состо­янием каждого пиксела (точечного элемента) экрана.



Графические режимы отличаются:

• размером графической сетки (Мх N, где М— число точек по горизонтали, N — число точек по вертикали);

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

Для установки графического режима экрана существуют соот­ветствующие процедуры. В модуле Graph процедура установки гра­фического режима экрана имеет следующий заголовок:

Procedure InitGraph(Var Driver,Mode: Integer; Path: String);

Список констант модуля Graph, определяющих типы драйве­ров и режимы.

Цвет фона и цвет рисунка. На цветном мониторе можно менять окраску экрана. Установленная окраска экрана называется цветом фона. Рисунок на этом фоне наносится с помощью разнообраз­ных линий: прямых, окружностей, прямоугольников, ломаных и т.д. Цвета этих линий также могут меняться.



Заголовок процедуры установки цвета фона:

Procedure SetBkColor(Color: Word);

Здесь Color — выражение целого типа, определяющее номер цвета фона.

Заголовок процедуры установки цвета линий:

Procedure SetColor (Color: Word);

Заметим, что если в качестве номера цвета линии указывает­ся 0, то это всегда совпадает с цветом фона (невидимая линия).

Если необходимо очистить графический экран (стереть рису­нок), то для этого используется процедура очистки экрана.



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

Procedure ClearDevice;

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

Графические координаты. Положение каждого пикселя графи­ческой сетки однозначно определяется указанием его координат.

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

Procedure SetViewPort(XI,Yl,Х2,Y2: Integer; Clip: Boolean);

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

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



Процедура назначения координат графического курсора:

Procedure MoveTo (X,Y: Integer);



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