Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора на медникову.doc
Скачиваний:
0
Добавлен:
02.08.2019
Размер:
285.7 Кб
Скачать

1

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

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

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

2

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

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

-Алгоритм Прима;

Описание

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

-Алгоритм Краскала (или алгоритм Крускала);

Формулировка

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

-Алгоритм Борувки.

Алгоритм

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

Сложность алгоритма

На каждой итерации число деревьев в остовном лесу уменьшается по крайней мере в два раза, поэтому всего алгоритм совершает не более O(log V) итераций. Каждая итерация может быть реализована со сложностью O(E), поэтому общее время работы алгоритмы составляет O(Elog V) времени (здесь V и E — число вершин и рёбер в графе, соответственно).

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

3

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

Файловые типы языка Паскаль бывают стандартные и определяемые программистом. Стандартными являются текстовый файл (text) и бестиповой файл(file). Они описываются в программе, например, так:

var ft : text;

fb : file;

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

var fc : file of <тип_компонент>.

Компонентные файлы-файл с объявленным типом его компонент.

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

4

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

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

5

Оператор ввода

Readln (x1[,x2,x3,...]) - сначала идет имя процедуры Readln, затем имена переменных, которым будут присвоены значения. Их может быть несколько либо одно. Но необходимо помнить, что Readln после ввода каждой переменной требует переход на новую строку, иначе часть введенной строки отбрасывается.

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

Оператор вывода

Writeln (['Текст пояснения ',]x1[,x2,x3,...]) - сначала идет имя процедуры Writeln, затем текст, имена переменных, арифметические выражения. Их может быть несколько либо одно имя.

Но необходимо помнить, что Writeln переводит курсор на новую строку в отличии от Write.

Арифметические выражения вычисляются, а затем выводятся.

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

Writeln(real2:5:2); Здесь переменная real2 выводится на экран ограниченная по ширине в 5 символов, а также с 2 знаками после запятой.

6

Виды параметров:

-значения

-переменная

-константы

-нетипизированные параметры

Параметры-значения

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

имя : тип;

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

procedure P(x : integer);

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

var x : integer;

c : byte;

y : longint;

Параметры-переменные

Признаком параметра-переменной является ключевое слово var перед описанием параметра:

var имя : тип;

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

procedure P(var x : integer);

ВНИМАНИЕ При вызове подпрограммы на месте параметра-переменной может находиться только ссылка на переменную точно того же типа.

Параметры-константы

Параметр-константу можно узнать по ключевому слову const перед описанием параметра:

const имя : тип;

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

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

Нетипизированные параметры

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

procedure P(const a, b; var y);

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

7

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

8

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

Динамическая структура данных характеризуется тем что:

-она не имеет имени;

-ей выделяется память в процессе выполнения программы;

-количество элементов структуры может не фиксироваться;

-размерность структуры может меняться в процессе выполнения программы;

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

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

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

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

-Когда размер данных, обрабатываемых в программе, превышает объем сегмента данных.

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

Порядок работы с динамическими структурами данных следующий:

-создать (отвести место в динамической памяти);

-работать при помощи указателя;

-удалить (освободить занятое структурой место).

Классификация динамических структур данных

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

-однонаправленные (односвязные) списки;

-двунаправленные (двусвязные) списки;

-циклические списки;

-стек;

-дек;

-очередь;

-бинарные деревья.

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

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

9

ЗАПИСИ

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

Структура объявления типа записи такова:

<имя типа> = RECORD <спюполей> END

Здесь <имя типа> - правильный индификатор;

RECORD, END – зарезервированые слова (запись, конец);

<сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

МНОЖЕСТВА

Множества – это набор однотипных логическх связанных друг с другом объектов. Характер связей между объектами лишь подразумевается програмистом и никак не контролируется Турбо Паскалем.количество элементов, входящих в множество, может менятся в пределах от 0до 256 (множество, не содержащее элементов, называется пустым).именно непостоянством количества своих элементов множества отличаются от массивов и записей.

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

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

<имя типа> = SET OF <баз.тип>

Здесь <имя типа> - правильный индификатор;

SET, OF – зарезирвированные слова (множество, из);

<баз.тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER и LONGINT.

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

10

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

11

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

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

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

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

12

Линейной наз. программа, все операторы которой выполняются последовательно, в том порядке, в котором они записаны.Это самый простой вид программы.

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

Оператор присваивания

переменная := выражение;

Операторы ввода данных

Read (список_переменныx);

Операторы вывода данных

Write ('комментарий',список_переменныx);

13

МАССИВЫ

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

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

Описание массива задаётся следующим образом:

<имя типа> = array [<сп.инд.типов>] of <тип>

Здесь <имя типа> - правильный индификатор;

Array, of – зарезирвированые слова (массив, из);

<спюиндютипов> - список из одного или нескольких индексных типов, разделённых запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;

<тип> - любой тип Турбо Паскаля.

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

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

14

Этот вопрос для идиота!

-умножение

-деление

-сложение

-вычитание

div-целочисленное деление

mod-остаток от деления

15

Метод ветвей и границ был впервые предложен в 1960 году Ленд и Дой для решения задач целочисленного программирования.

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

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

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

16

Поиск элемента в неупорядоченном массиве

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

Если у нас нет дополнительной информации об организации элементов массива, то при поиске элемента в массиве следует воспользоваться алгоритмом, который получил название линейный поиск. Согласно этому алгоритму будем сравнивать поочередно все элементы массива с v с образцом t. Если очередной элемент совпадает с t, то задача решена. Если искомого элемента в массиве нет, то убедиться в этом можем, лишь просмотрев все элементы массива. В качестве результата работы функции можно выдавать логическое значение true, если элемент найден и false в противном случае. Иногда удобно выдавать номер найденного элемента, если же элемента в массиве нет, то некоторое заданное значение, например, -1.

function linsear (v,t)

{ var k=-1

for (var i=0; i <= v.length-1; i++)

if (v[i] == t)

{k=i; break}

return k

}

Поиск элемента в упорядоченном массиве

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

Если элементы массива упорядочены, то организовать поиск элемента с заданным значением можно согласно алгоритму бинарного поиска. Пусть переменная i - индекс левого элемента, значение j - индекс правого элемента, для элементов массива, среди которых осуществляется поиск. Определяется индекс элемента k, находящегося посередине. Далее k-ый элемент массива v[k] сравнивается с образцом t. Если окажется, что t <= v[k], то поиск следует продолжать среди элементов с индексами [i,k]., если же t > v[k], искать надо среди элементов [k+1,j]. Процесс поиска продолжается до тех пор, пока исследуемая часть массива не станет равной одному элементу, тогда результат будет зависеть от того, равен этот элемент образцу или нет.

function binsear (v,t)

{ var i=0

var j= v.length-1

var k

while (i < j)

{ k=Math.round( (i+j)/2+0.5)-1

if (t <= v[k])

j=k

else

i=k+1

}

if (v[i] == t) { return i}

else return -1

}

17

Метод простого выбора

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

Сортировка методом «пузырька»

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

Метод Шелла

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

18

1) Классификация моделей по области использования:

Учебные модели – используются при обучении;

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

Научно - технические - создаются для исследования процессов и явлений

Игровые – репетиция поведения объекта в различных условиях

Имитационные – отражение реальности в той или иной степени (это метод проб и ошибок)

2) Классификация моделей по фактору времени:

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

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

3) Классификация моделей по отрасли знаний - это классификация по отрасли деятельности человека: Математические, биологические, химические, социальные, экономические, исторические и тд

4) Классификация моделей по форме представления :

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

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

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

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

Информационные модели – целенаправленно отобранная информация об объекте, которая отражает наиболее существенные для исследователя свойств этого объекта.

Типы информационных моделей :

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

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

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

По степени формализации информационные модели бывают образно-знаковые и знаковые. Напримеры:

Образно-знаковые модели :

-Геометрические (рисунок, пиктограмма, чертеж, карта, план, объемное изображение)

-Структурные (таблица, граф, схема, диаграмма)

-Словесные (описание естественными языками)

-Алгоритмические (нумерованный список, пошаговое перечисление, блок-схема)

Знаковые модели:

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

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

-Алгоритмические – программы

Признаки классификаций моделей:Классификация моделей по области использования

19

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

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

20

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

Модуль характеризуют:

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

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

21

Модульное программирование

Принцип модульности требует разработки программы в виде совокупности модулей (подпрограмм). При этом разделение на модули должно исходить из логики программы:

- размер модуля должен быть ограничен;

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

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

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

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

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

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

МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ - представление текста программы в виде нескольких файлов, каждый из которых транслируется отдельно. С модульным программированием мы сталкиваемся в двух случаях:

-когда сами пишем модульную программу;

-когда используем стандартные библиотечные функции.

БИБЛИОТЕКА ОБЪЕКТНЫХ МОДУЛЕЙ - это файл (библиотечный файл), содержащий набор объектных модулей и собственный внутренний каталог. Объектные модули библиотеки извлекаются из нее целиком при наличии в них требуемых внешних функций и переменных и используются в процессе компоновки программы.

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

22

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

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

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

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

Абстракция

Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.

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

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

Класс

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

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

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

Объект

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

Полиморфизм

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Прототип

Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

23

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

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

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

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

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

Конте́йнер в программировании — структура (АТД), позволяющая инкапсулировать в себя объекты разных типов. Среди «широких масс» программистов наиболее известны контейнеры, построенные на основе шаблонов, однако существуют и реализации в виде библиотек (наиболее широко известна библиотека GLib). Кроме того, применяются и узкоспециализированные решения. Примерами контейнеров являются контейнеры из стандартной библиотеки (STL) — map, vector и др. В контейнерах часто встречается реализация алгоритмов для них. В ряде языков программирования (особенно скриптовых типа Perl или PHP) контейнеры и работа с ними встроена в язык.

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

24

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

Виды условных инструкций

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

Условный оператор

Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В большинстве языков программирования условный оператор начинается с ключевого слова if.

Условный оператор с одной ветвью

if условие then команды end

Условный оператор с двумя ветвями

if условие then команды1 else команды2 end

25

Счетный оператор цикла For:

For <параметр цикла>:=<начальное значение> to <конечное значение> do Р;

P- простой или составной оператор.

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

Другой вариант записи оператора For:

For <параметр цикла >:=< начальное значение> downto <конечное значение> do Р;

В этом случае при каждом прохождении цикла < параметр цикла > уменьшается на единицу от <начального значения> до <конечного значения>.

Оператор цикла While с проверкой предусловия:

While <условие> do P; {Пока выполняется условие, делать}

Цикл выполняется, пока условие истинно (true).

Оператор цикла Repeat … until с проверкой постусловия:

Repeat P until <условие>; {Выполнять до тех пор, пока не будет выполнено условие}

Цикл выполняется, пока условие ложно (false).

26

Основными операциями над списками являются:

1) построение списка;

2) циклический переход от текущего элемента к следующему (просмотр списка);

3) включение нового элемента в список;

4) исключение элемента из списка;

5) уничтожение списка.

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

28

Состав языка:

Алгоритмический язык содержит:

-символы

-слова называют -элементарными конструкциями

-словосочетания-выражениями

-предложения –операторами

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

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

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

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

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

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

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

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

year: integer = 2001;

symb: char = '?';

money: real = 57.23;

Const

r = 2.7182818; // Вещественная константа

i = 2; // Порядковая (целая) константа

c = ’4′; // Символьная константа

s = ‘Это строковая константа’; // Константа типа String

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

Требования к идентификаторам:

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

высота букв не различается (за исключением внешних имен для DLL),

не могут начинаться с цифр,

длина произвольна,

значимы 255 первых символов, остальные – уточнение смысла.

Примеры правильных идентификаторов:

Myprogram

MyProgram

My_Program

MoyaProgramma

My1program

MyFirstProgram

MoyaPervayaProgramma

Венге́рская нота́ция— соглашение об именовании переменных, констант и прочих идентификаторов в коде программ.

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

КЛЮЧЕВЫЕ СЛОВА ЯЗЫКА ПАСКАЛЬ.

САМИ НАПЛЕТЕТЕ!

29

Очереди

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

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

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

30

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

1)избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;

2)улучшают структуру программы, облегчая ее понимание;

3)повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификациях программы.

Подпрограммы записываются в разделе описания программы (до раздела var основной программы)

У подпрограмм два вида переменных – формальные и фактические.

Формальные – Это, те переменные, которые записаны при создании подпрограммы.

Фактические – Это, те переменные, которые записываются при вызове функций. То есть формальные => в фактические.

Виды подпрограмм.

Существует два вида подпрограмм для паскаля – это функций(function) и процедуры(procedure).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]