Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gabdullina_Alina_kursovaya.doc
Скачиваний:
16
Добавлен:
23.08.2019
Размер:
1.54 Mб
Скачать

Типы данных

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

Объекты

Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например:

var

CCircle1: TColorCircle;

CircleA: TCircle;

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

Классы

В языке Object Pascal классы — это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.

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

Объектно-ориентированные особенности языка

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

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

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

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

Полиморфизм

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

Примеры

Структура программы

Каждая написанная программа на языке Delphi состоит из заголовка программы (program NewApplication;), поля используемых модулей Uses (к примеру, Uses Windows, Messages, SysUtils и т. д.), который может не входить в саму структуру, а также блоков описания и исполнения (начинаются составным оператором begin и заканчиваются end.).

program Project1; // Заголовок программы, с её именем «Project1»

uses

Forms,

Unit1 in 'Unit1.pas' {Form1}; // модули, которые подключены к проекту и используются программой

{$R *.res}

begin

Application.Initialize; // Инициализация приложения

Application.CreateForm(TForm1, Form1); // Создание формы/окна

Application.Run; // Запуск и исполнение

end.

§3 Обзор методов алгоритмов

Полное построение алгоритма шаг за шагом

1.Постановка задачи.

2.Построение модели.

3.Проверка правильности алгоритма.

4.Реализация алгоритма.

5.Анализ алгоритма и его сложности.

6.Примеры алгоритмов

Алгоритмы

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

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

Одно из неудобств этого определения состоит в том, что термин «однозначная трактовка» весьма неоднозначен. «Однозначен» для кого? Или по отношению к чему? Поскольку ничто не является абсолютно ясным или абсолютно неясным, должен быть указан, хотя бы неявно, исполнитель. Алгоритм вычисления производной кубического поли­нома может быть вполне ясен тем, кто знаком с анализом, но для прочих он может оказаться совершенно непонятным. Таким образом, следует также указать вычислительные возможности исполнителя.

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

Очевидно, что в нашем определении есть некоторые недостатки. Можно избежать большинства этих недостатков, определив «матема­тические машины» с очень точно указанными возможностями. Тогда мы скажем, что алгоритм — это некоторая процедура, которая может выполняться такой машиной. Подобные попытки определения алго­ритма очень глубоки и трудны математически, и они слишком негибки для наших целей.

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

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

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

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

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

R(1), R(2), . . ., R(N). Основная идея алгоритма заключается в том, чтобы перебирать по очереди все числа списка и запоминать наибольшее до сих пор встретившееся чис­ло. К тому моменту, когда весь список будет проверен, запомнится наибольшее число. Попробуйте нарисовать блок-схему этого алго­ритма прежде, чем читать дальше.

Запись А^В означает оператор присваивания, т. е. переменной А присваивается текущее значение В.

Algorithm МАХ. Даны N действительных чисел в одномерном массиве R(1), R(2), . . ., R(N), найти такие М и J, что

М =R (J) = шах R(K).

1 < K<N

В случае когда два или более элементов R имеют наибольшее значение, запоминается наименьшее значение J.

Шаг 0. [Установка в начальное состояние, или инициализация]

Set M<-R (1); and

Уч-1. Шаг 1. [N= 1?] If N=l then STOP fi l).

Ч В этом алгоритме fi и od используются соответственно для обозначения кон­ца конструкций if и do. Более детально это будет обсуждаться в разд. 2.1,

Шаг 2. {Проверка каждого числа] For К-+-2 to N do шаг 3 od; and STOP.

Шаг 3. [Сравнение] If M<CR(/()then set M+-R(K); and fi (теперь M •— наибольшее число из прове­ренных, а К — его номер в массиве).

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

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