- •Интернет, как источник информации для разработки пакета программ для курса программирования и основы алгоритмизации
- •Гл2. Интернет, как источник информации для разработки пакета программ для курса программирования и основы алгоритмизации
- •Глава 1 Cправка языков программирования
- •§1 Справка языков программирования
- •§2 Историческая справка развития Delphi
- •Целевая платформа
- •История языка
- •Компиляторы
- •Синтаксис языка Операторы
- •Выражения
- •Типы данных
- •Объекты
- •§3 Обзор методов алгоритмов
- •1.3. Основные этапы полного построения алгоритма
- •2.Построение модели
- •3.Правильность алгоритма
- •4.Реализация алгоритма
- •5.Анализ алгоритма и его сложности
- •§4 Программа Delphi, обьектно-ориентированное программирование
- •Краеугольные камни ооп Формула объекта
- •Природа объекта
- •Объекты и компоненты
- •Классы объектов
- •Три кита ооп
- •Объекты
- •Конструкторы и деструкторы
- •Свойства Понятие свойства
- •Методы получения и установки значений свойств
- •Свойства-массивы
- •Свойство-массив как основное свойство объекта
- •Методы, обслуживающие несколько свойств
- •§5 Общая структура пакета программирования и алгоритмитизации
- •1. Алгоритмизация и алгоритмы
- •1.1 Понятие алгоритмизации и алгоритмов
- •1.2 Свойства алгоритмов
- •2. Программирование
- •2.1 Понятие программирования
- •2.2 Понятие компьютерной программы
- •§6 Инструкция для Программы htm2chm
- •Введение
- •Эволюция средств разработки Web приложений в Delphi Средства разработки Internet-приложений §1. Средства разработки Internet-приложений из состава Borland Kylix
- •§2 Средства разработки Internet-приложений из состава Borland Delphi 6
- •§3. Форматы приложений для web
- •§5. Разработка web приложения
- •П2. Использование шаблонов
- •§6. Первый проект
- •П2 Использование tAdapter
- •П3. Работа с базами данных
- •§7. Использование Web Services
- •П2. Протокол soap
- •П3. Разработка сервера Web Services в Delphi6
- •П4. Описание интерфейса сервера
- •П5. Реализация методов сервера
- •П6. Создание проекта приложения Web Services в Delphi
- •П7. Разработка клиента Web Services в Delphi6
- •Заключение
Типы данных
Обрабатываемые в программе данные подразделяются на переменные, константы и литералы. Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы.
Объекты
Объекты как экземпляры класса объявляются в программе в разделе 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 •— наибольшее число из проверенных, а К — его номер в массиве).
Алгоритм МАХ не закодирован на каком-то языке, а записан в форме, которую легче воспринять; он выражен в виде шагов, которые легко реализуются в каждом общепринятом языке программирования. От такого представления нетрудно перейти к кодовой форме. Однако так бывает не всегда. Некоторые алгоритмы слишком сложны, чтобы перейти за один шаг от предварительного словесного описания к кодам машины. Может потребоваться ввести по крайней мере один промежуточный этап разработки.