Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования и науки Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
«Национальный исследовательский Томский политехнический Университет»
Институт
электронного обучения
Автоматизация технологических процессов
и производств (в нефтегазовой области)
Индивидуальное домашнее задание № 1
Вариант№7 по дисциплине:
Программирование и алгоритмизация
Исполнитель: |
|||||
студент группы |
|||||
Руководитель: |
|||||
преподаватель |
|||||
Томск 2015г.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 3
1. РЕШЕНИЕ ВЫЧИСЛИТЕЛЬНОЙ ЗАДАЧИ 4
1.1 Формулировка задания 4
1.2 Краткое пояснение метода решения задачи 4
1.3 Блок-схема алгоритма, выполненная в соответствии с ЕСПД 7
1.4. Пояснения к блок-схеме, приведенные отдельно от блок-схемы
и оформленные в виде обычных предложений 8
1.5. Листинг программы 9
1.6. Скриншоты экрана монитора, отражающие спроектированную
форму, введённые данные и полученные результаты. 11
1.7. Выкладки, подтверждающие правильность полученных результатов 12
2. СОЗДАНИЕ КОМПОНЕНТА DELPHI 13
2.1 Формулировка задания 13
2.2 Общая технология создания компонента Delphi 13
2.3 Технология создания компонента с обоснованием принятых решений 16
2.4 Листинг модуля 18
2.5 Листинг программы обращения к модулю 21
2.6 Скриншоты 24
2.7 Выкладки, подтверждающие правильность полученных результатов 25
ЗАКЛЮЧЕНИЕ 27
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 28
ВВЕДЕНИЕ
Процесс программирования представляет собой это кодирование и тестирование программы в рамках некоторого конкретного проекта. Для повышения эффективности подобных процессов, необходимо вначале исследовать предметную область и выделить основные понятия и цели. Поэтому развитие информатики как науки привело к необходимости создания нового метода, так называемого алгоритмизация. Алгоритм понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели или решение поставленной задачи. Следовательно, программирование это составление необходимой программы по заданному алгоритму.
Алгоритм точно описывает, какой либо процесс, а так же инструкцию по его выполнению. Разрабатывать данный алгоритм это трудоемкий и сложный процесс. Технику разработки алгоритма для решения задач на ЭВМ называют алгоритмизацией.
Часто автоматизацию процессов используют на определенных классах задач, таких как сложные вычислительные расчеты или решение практических задач производства, регулярно повторяющихся во времени. Данная курсовая работа также имеет целью отработать навыки создания программ на основе алгоритмов для решения вычислительной задачи, а также задачи практического значения для производства нефтяных продуктов.
Для решения данных задач планируется изучить особенности создания алгоритмов вычислительных задач и их оформления в виде блок-схем в соответствии с ЕСПД; приобрести навыки визуального программирования стандартных компонентов среды программирования Delphi; изучить процесс создания и создать собственный компонент Delphi для решения производственной задачи.
Решение данной задачи должно позволить в будущем использовать приобретенные знания и навыки в решении практических задач по профилю работы.
1. РЕШЕНИЕ ВЫЧИСЛИТЕЛЬНОЙ ЗАДАЧИ
1.1 Формулировка задания
Первая задача носит ярко выраженный вычислительный характер. Суть работы состоит в разработке алгоритма решения первой задачи и написания соответствующей программы на языке программирования Delphi.
Текст задачи: Написать программу, которая вычисляет периметр и площадь правильного n-угольника, вписанного в окружность заданного радиуса.
Для первой задачи должны быть представлены:
1. Краткое пояснение метода решения задачи, т.е. применяемого алгоритма.
2. Блок-схема алгоритма, выполненная в соответствии с ЕСПД.
3. Пояснения к блок-схеме, приведенные отдельно от блок-схемы и оформленные в виде обычных предложений.
4. Листинг программы.
5. Скриншоты экрана монитора, отражающие спроектированную форму, введённые данные и полученные результаты.
6. Выкладки, подтверждающие правильность полученных результатов.
Студент должен предоставить преподавателю файлы, позволяющие проверить работоспособность предлагаемых решений и при необходимости внести коррективы. Как правило, это файлы с расширениями pas, dpr, dfm.
1.2 Краткое пояснение метода решения задачи
Окружностью называется фигура которая состоит из всех точек плоскости равноудаленных от данной точки. Эта точка называется центром окружности. Радиусом называется любой отрезок соединяющий точку окружности с ее центром.
Рисунок 1 Окружность и радиус окружности
Для любого натурального n на плоскости существует правильный n-угольник. Многогранник называется правильным, если все его грани равные между собой правильные многоугольники, из каждой его вершины выходит одинаковое число ребер и все двугранные углы равны.
Рисунок 2 Правильные n-угольники
В любой правильный многоугольник можно вписать окружность. Около любого правильного многоугольника можно описать окружность. Центры вписанной в правильный многоугольник окружности и описанной около правильного многоугольника окружности совпадают. Эту точку называют центром правильного многоугольника.
Рисунок 3- Вписанная и описанная окружности вокруг правильного шестиугольника
Число вершин правильного многоугольника обычно обозначается как n, сторона правильного многоугольника- a, радиус вписанной окружности r, радиус описанной окружности R, периметр P, площадь S.
Найдем периметр и площадь правильного n-угольника, вписанного в окружность заданного радиуса, используя следующую таблицу 1 (см.ниже) [2].
Таблица 1 Определение длины стороны, периметра и площади правильного n-угольника, вписанного в окружность
Величина |
Рисунок |
Формула |
Описание |
Сторона |
Выражение стороны через радиус описанной окружности |
||
Периметр |
Выражение периметра через радиус описанной окружности
|
||
Площадь |
Выражение площади через радиус описанной окружности |
1.3 Блок-схема алгоритма, выполненная в соответствии с ЕСПД
Блок-схема функции GetValue
1.4. Пояснения к блок-схеме, приведенные отдельно от блок-схемы и
оформленные в виде обычных предложений
Пояснение я блок-схеме 1.
Вначале мы обнуляем переменные, где будут храниться значения числа сторон правильного n-угольника и радиус описанной вокруг него окружности r.
Затем обращаемся к функции GetValue, которая помогает ввести в переменную n значение из визуального компонента Edit1, расположенного на форме. Функция проверяет ввод на соответствие формату целого числа. Если число нецелое, или если введено не число, то функция вернет n=0. Проверяем условие n<>0. Если число сторон равно 0, то расчет не имеет смысла и мы заканчиваем работу с процедурой. Если n<>0, то затем аналогично с помощью функции GetValue вводим значение в переменную r из визуального компонента Edit2, расположенного на форме. Проверяем условие (n>0) and (r>0). Если условие ложно, то заканчиваем работу с процедурой. Если оно истинно, то считаем длину стороны многоугольника (a), его периметр (P), и площадь (S), преобразуем формат вывода в более приемлемый и выводим значения на форму в компоненты TLabel. На этом процедура заканчивается.
Пояснение я блок-схеме 2.
С помощью стандартной функции val преобразуем входной параметр функции userval в переменную uservalue. Если при преобразовании происходит ошибка, то функция val в переменную kod запишет не нулевое значение. Если ошибки при переводе ввода в целое число нет, то проверим еще ввод на то, чтобы было введено положительное число больше 0. Если все правильно, то присвоим значение целого числа результату функции. Если есть ошибки при преобразовании, то присвоим 0 результату функции.
1.5. Листинг программы
{Собственно расчет}
procedure TFormZad3.Button1Click(Sender: TObject);
var
i: Integer; // вспомогательная переменная
n: Integer; // число сторон n-угольника
r: Integer; // радиус окружности
a: Real; // длина стороны n-угольника
begin
//проверим ввод - определим число сторон n-угольника
n:=GetValue(Edit1.Text);
//проверим ввод - определим радиус окружности
if n<>0 then R:=GetValue(Edit2.Text) else exit;
// если число скважин введено успешно и правильно, то установим
// нужный размер колонок StringGrid1
if (n>0) and (r>0) then begin
a:=2*R*Sin(pi/n); // длина стороны многоугольника
Label5.Caption:=FormatFloat('0.##', n*a); // периметр многоугольника
Label6.Caption:=FormatFloat('0.##',(n/2)*R*R*Sin(2*pi/n)); // площадь многоугольника
end {else
ShowMessage('Неверно ввели данные')};
end;
// проверка числового ввода
Function TFormZad3.GetValue(userval: string): Integer;
var
kod: integer;
uservalue: integer;
n: Integer;
begin
// проверим правильно ли ввели число
val(userval,uservalue,kod);
if (kod=0) and (uservalue>0) then begin
// конвертируем строку в целое число
n:=StrToInt(userval);
end else begin
MessageDlg('Неверно введено число', mtWarning, [mbOK],0);
n:=0;
end;
Result:=n; // Вернуть число, усеченное до целой величины
end;
1.6. Скриншоты экрана монитора, отражающие спроектированную форму,
введённые данные и полученные результаты.
1.7. Выкладки, подтверждающие правильность полученных результатов
Для проверки работы программы мы произвели расчеты в Mathcad и построили решение визуально. Для радиуса описанной окружности R=10 и правильного четырехугольника (квадрата), длина стороны квадрата, вписанного в данную окружность составила a=14,142. Это решение подтверждают графические построения. Это же решение получено в программе.
Также совпали значения периметра и площади квадрата, вписанного в окружность радиусом 10, полученные по программе и в Mathcad.
Рисунок 4- Проверка работы программы в Mathcad и графически
2. СОЗДАНИЕ КОМПОНЕНТА DELPHI
2.1 Формулировка задания
В системе Delphi создать заказной (авторский) компонент. Причём этот компонент должен помогать решать задачу, выполненную студентом в 4-ом семестре в рамках индивидуального домашнего задания.
Текст задания: Объявить в Delphi класс, позволяющий объекту хранить информацию о количестве скважин куста на нефтяном промысле. Предусмотреть в созданном классе наличие метода, который по введённому суточному дебиту каждой скважины определяет номера двух скважин с минимальной производительностью. Применить класс в проекте, реально определяющем такие номера. Для ввода данных в проекте обязательно использовать компонент StringGrid. Перед окончанием работы проекта освободить динамическую память, выделенную под объект.
Для этого задания надо представить описание технологии создания компонента с необходимым обоснованием принятых решений, листинги модулей, скриншоты.
Студент должен предоставить преподавателю файлы, позволяющие проверить работоспособность предлагаемых решений и при необходимости внести коррективы. Как правило, это файлы с расширениями pas, dpr, dfm.
2.2 Общая технология создания компонента Delphi
Среда визуального программирования Borland Delphi содержит в себе большое количество готовых к использованию компонентов, но при разработке сложных приложений даже такого многообразия не хватает. В таких случаях можно устанавливать в среду компоненты сторонних производителей либо разрабатывать собственные компоненты [3].
Компонент - это разновидность класса, обладающая способностью взаимодействовать с интегрированной средой разработки (IDE) Delphi во время проектирования приложений.
Когда разработчик приложения помещает компонент на форму, то дизайнер форм создает экземпляр выбранного компонента из соответствующего компонентного класса. Компонент отображается на форме, а его опубликованные свойства становятся доступными для редактирования на этапе разработки либо с помощью инспектора объектов, либо через созданные разработчиком компонента редакторы компонентов и редакторы свойств [4]. Базовую функциональность компонентов обеспечивает класс TComponent, являющийся предком всех компонентов. Например, TComponent реализует свойства Name и Tag, которые наследуются всеми компонентами. Более того, TComponent содержит методы и свойства, которые предоставляют компонентам возможность обрабатываться дизайнером форм.
Хотя компоненты и реализуются с использованием классов языка Delphi, но объявление класса не является объявлением компонента, если класс не порожден от TComponent. Экземпляры классов, которые произведены от TComponent, называются компонентами, а экземпляры всех других классов называются объектами. Главная разница между этими двумя понятиями заключается в том, что компонентами можно манипулировать на форме, тогда как объектами - нельзя.
Особенности построения компонентов:
- компоненты имеют других конечных пользователей;
- компоненты являются инструментами и используются разработчиками приложений;
- написание компонентов является объектно-ориентированным невизуальным процессом.
В общем случае процесс разработки компонента должен включать следующие этапы:
- формулировка требований к компоненту и выбор класса-предка;
- написание кода компонента;
- отладка и предварительное тестирование компонента;
- включение компонента в среду Delphi;
- окончательное тестирование.
Рассмотрим процесс создания компонента. Его можно использовать для разработки любого компонента Delphi, независимо от его сложности [5]:
1. Процесс начинается с создания каталога, в который будет записан модуль компонента и тестовое приложение. Компоненты строятся внутри модулей Delphi способом, очень похожим на модули форм Delphi с объявлением класса для компонента, появляющимся в разделе интерфейса и определением методов, которые появляются в разделе реализации.
2. Следующий шаг заключается в создании модуля компонента. Это можно выполнить либо вручную, либо задействовав Эксперта компонентов (Component Expert).
3. После того как определены базовые элементы модуля, выполняется следующий шаг, заключающийся в объявлении класса и написании поддерживающих методов.
4. Далее компонент можно тестировать. Так как у компонента есть два интерфейса - времени выполнения и времени проектирования, то и тестирование выполняется в два шага. Тестирование времени выполнения можно делать сразу же после окончания кодирования, но тестирование времени проектирования можно проводить только после того, как компонент будет зарегистрирован в Delphi и появится на палитре компонентов.
Рассмотрим перечисленные шаги более подробно.
Поначалу каталог будет содержать один файл модуля компонента, но на стадии тестирования в каталоге появятся все файлы, ассоциирующиеся с отдельным проектом Delphi.
Исходный код компонента располагается в модуле. Хотя возможно поместить в единственный модуль любое количество компонентов, обычно в модуль помещаются только элементы управления, близкие по смыслу.
Существует два способа создания модуля компонента - «ручной» и с использованием эксперта компонентов.
Эксперт компонентов упрощает задачу создания модуля компонента. Он генерирует синтаксически корректный модуль Delphi, содержащий базовую реализацию компонента. Он также создает «заглушки», включающие пустое объявление класса и процедуру Register, а также заполненный раздел uses модуля компонента. Эксперт не генерирует никакой функциональности, обеспечивая только каркас или фундамент, на котором строится компонент.
Имя, которое будет выбрано для класса компонента, будет предписывать способ обращения к нему в среде Delphi. Если имя класса начинается с Т, то Delphi убирает первый символ и использует оставшуюся строку как имя компонента. Если имя класса не начинается с Т, то используется все имя. Результирующее имя отображается в виде подсказки, если позиционировать курсор над компонентом в палитре компонентов. Для того чтобы Delphi могла установить компонент, его имя должно быть уникальным.
В дополнение к выбору имени компонента необходимо выбрать и имя для файла модуля. Во избежание неоднозначности лучше всего иметь уникальные имена файлов. Например, неразумно для компонента, выбранного для примера, использовать имя модуля Button, так как в Delphi модуль с таким именем уже есть. Поддержание имен файлов модулей уникальными особенно важно тогда, когда устанавливается много компонентов из разных источников.
Следуя упомянутым выше соглашениям, назовём класс создаваемого компонента TMyButton. Объявление класса - это то место, где объявляются различные интерфейсы компонента. Конкретно, с пользовательской точки зрения, наиболее важными являются разделы public и published, поскольку именно они определяют интерфейсы времени выполнения (runtime) и времени проектирования (design-time) соответственно.
Свойства, методы и события, объявленные в разделе public, составляют интерфейс времени выполнения. На эти элементы можно сослаться или их можно использовать только тогда, когда приложение, использующее компонент, выполняется. Свойства и события, объявленные в разделе published, также доступны во время выполнения, но более важно то, что они доступны в Инспекторе объектов во время проектирования.
Эксперт компонентов не заполняет всех разделов генерируемого класса компонента. Он ограничивается объявлением четырех различных разделов.
2.3 Технология создания компонента с обоснованием принятых решений
Компонент курсовой работы мы создавали с помощью Эксперта компонентов. Создали новый проект типа Component (см.рис.1 слева), после чего заполнили требуемые данные в Эксперте компонентов (рис.2 справа).
Рисунок 1 - Создание нового компонента с помощью эксперта компонентов
Эксперт компонентов требует ввести следующую информацию:
- имя класса-предка, от которого будет порожден новый компонент (Tcomponent);
- имя класса нового компонента (ComponentClassOil);
- имя страницы палитры компонентов (Samples);
- имя модуля компонента (ComponentClassOil.pas);
- пути для поиска файлов.
Эксперт компонентов сгенерировал минимально заполненный шаблон компонента. После создания каркаса для компонента мы внесли в его текст изменения, которыми ранее, при написании ИДЗ, мы описывали класс, позволяющий объекту хранить информацию о количестве скважин куста на нефтяном промысле. Предусмотрено также в созданном классе компонента наличие метода, который по введённому суточному дебиту каждой скважины определяет номера двух скважин с минимальной производительностью.
Часть переменных мы определили как приватные (видимые только самому модулю), для них перед именем файла нужно добавить букву F. Часть переменных определили как Public, эти переменные видят программы, которые обращаются к компоненту. Остальные переменные, процедуры и свойства, а также конструктор, мы разместили в разделе Published, чтобы Инспектор объектов Delphi видел эти процедуры и свойства.
type
TComponentClassOil = class(TComponent)
private // элементы класса, которые видно только внутри класса
FOil: array of Integer;
Fn: Integer;
protected
{ Protected declarations }
public
{ Public declarations }
NWells: array of Real;
published // эти методы видны из других модулей и доступны в Инспекторе объектов
// количество скважин
property n: Integer read Fn write Fn;
// динамический массив под дебет каждой скважины
Constructor Create(AOwner: TComponent); override; // метод создает объект класса
procedure GetValueWells(userval:string); // считать число скважин в кусту
procedure SortWells(var n1, n2: Integer); // сортировка скважин по дебету
procedure ShowValue(); // показывает значение i
end;
Процедуру регистрации компонента на панели Samples нам уже создал Эксперт:
// процедура регистрации компонента на вкладке Sample
procedure Register;
begin
RegisterComponents('Samples', [TComponentClassOil]);
end;
Нам осталось только добавить тело конструктора и трех процедур, описанных в разделе implementation (см.листинг ниже). После чего делаем сохранение и компиляцию полученного компонента, что дает нам файл myoilpack.dpk. Этот файл нужно запустить в среде Delphi, чтобы он зарегистрировался в системе и установился на панель Sample.
Далее нужно в основной программе курсовой работы:
- описать переменную типа класса созданного компонента;
- обратиться к конструктору и создать экземпляр класса;
- заполнить значениями переменные, необходимые для вычислительной работы класса компонента (число скважин и суточный дебет каждой скважины). При этом осуществляем контроль за правильностью числового ввода;
- выполнить вычисления, обратившись к компоненту и вернуть результат в программу, показать его на форме;
- уничтожить экземпляр класса компонента в памяти и обнулить его переменную.
Реализацию описанный шагов см.листинг ниже.
2.4 Листинг модуля
unit ComponentClassOil;
interface
uses
SysUtils, Classes, Dialogs;
// описываем тип класса, позволяющий объекту хранить информацию
// о количестве скважин куста на нефтяном промысле
type
TComponentClassOil = class(TComponent)
private // элементы класса, которые видно только внутри класса
FOil: array of Integer;
Fn: Integer;
protected
{ Protected declarations }
public
{ Public declarations }
NWells: array of Real;
published // эти методы видны из других модулей и доступны в Инспекторе объектов
// количество скважин
property n: Integer read Fn write Fn;
// динамический массив под дебет каждой скважины
Constructor Create(AOwner: TComponent); override; // метод создает объект класса
procedure GetValueWells(userval:string); // считать число скважин в кусту
procedure SortWells(var n1, n2: Integer); // сортировка скважин по дебету
procedure ShowValue(); // показывает значение i
end;
// процедура регистрации компонента на вкладке Sample
procedure Register;
// раздел реализации
implementation
// процедура регистрации компонента на вкладке Sample
procedure Register;
begin
RegisterComponents('Samples', [TComponentClassOil]);
end;
// конструктор класса - создает класс в памяти
constructor TComponentClassOil.Create(AOwner: TComponent);
begin
// насколько нам известно скважин в кусте нет на момент создания объекта класса
Fn:=0;
end;
// сортировка скважин по дебету для определения 2-х скважин
// с минимальным дебетом
procedure TComponentClassOil.SortWells(var n1, n2: Integer);
// n1, n2- номера скважин с минимальным дебетом
var
i,j: Integer; // вспомогательная переменная
Temp: Integer; // вспомогательная переменная
begin
// сортировка методом пузырька с помощью индексного массива
SetLength (FOil, n); //отвели место в памяти под массив номеров
// заполним массив индексов порядковыми номерами
for i:=0 to Fn-1 do FOil[i]:=i;
// отсортируем методом пузырька индексы исходного массива
for i:=0 to Fn-2 do
for j:=0 to Fn-2 do
// если впереди оказывается больший элемент, сдвигает его назад
if NWells[FOil[j]]>NWells[FOil[j+1]] then begin
Temp:=FOil[j];
FOil[j]:=FOil[j+1];
FOil[j+1]:=Temp;
end;
// после сортировки первых два элемента индексного массива - минимальные
// так как массив начинается с 0 элемента, то добавим 1
n1:=FOil[0]+1; n2:=FOil[1]+1;
end;
procedure TComponentClassOil.ShowValue;
begin
ShowMessage('Число скважин установлено равным '+intToStr(Fn));
end;
// считать число скважин в кусту
Procedure TComponentClassOil.GetValueWells(userval: string);
var
kod: integer;
uservalue: integer;
begin
// проверим правильно ли ввели число (может быть целое или не целое)
val(userval,uservalue,kod);
if (kod=0) and (uservalue>0) then begin
// конвертируем строку в целое число
n:=StrToInt(userval);
ShowValue; // обратиться к процедура которая показывает число скважин
end else begin
MessageDlg('Неверно введено число скважин', mtWarning, [mbOK],0);
n:=0;
end;
end;
end.
2.5 Листинг программы обращения к модулю
unit UnitZad2;
// раздел описаний
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, ComponentClassOil;
type
TFormZad2 = class(TForm) // с модулем связана форма с виз.элементами
BitBtn1: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
Button2: TButton;
StringGrid1: TStringGrid;
Edit2: TEdit;
Edit3: TEdit;
Button3: TButton;
Label3: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormZad2: TFormZad2;
ClassOil: TComponentClassOil;
// раздел реализации
implementation
uses UnitZad1;
{$R *.dfm}
// Кнопка выхода из формы
procedure TFormZad2.BitBtn1Click(Sender: TObject);
begin
Hide; // закрыли форму
FormZad1.Show; // показали главную форму
end;
// Нажали кнопку ввода числа скважин
procedure TFormZad2.Button2Click(Sender: TObject);
var
i: Integer; // вспомогательная переменная
begin
//передаем ввод в класс - определим число скважин
ClassOil.GetValueWells(Edit1.Text);
// если число скважин введено успешно и правильно, то установим
// нужный размер колонок StringGrid1
if ClassOil.n>0 then begin
with StringGrid1 do begin
ColCount:=ClassOil.n+1;
// И запишем заголовки колонок
for i:=1 to ColCount-1 do
Cells[i,0]:='Скв.'+IntToStr(i);
// а также установим названия строк
Cells[0,0]:='N скв.';
Cells[0,1]:='Дебет (м^3/сут)';
ColWidths[0]:=100; // а также изменим ширину 1 колонки
Enabled:=True; // дадим доступ к редактирвоанию StringGrid1
end;
end else
// запретим доступ к редактирвоанию StringGrid1 если что-то не так с числом скважин
StringGrid1.Enabled:=False;
end;
// Ищем две скважины с минимальным дебетом
procedure TFormZad2.Button3Click(Sender: TObject);
var
i, n1, n2: Integer; // вспомогательная переменная
begin
// если еще не ввели число скважин или ввели неверно
if ClassOil.n=0 then begin
ShowMessage('Не определено число скважин куста');
exit; // выход из процедуры
end;
// если число скважин задано, определим размер динамического массива
SetLength (ClassOil.NWells, ClassOil.n); //отвели место в памяти под массив
// введем данные в массив
For i:=1 to ClassOil.n do
ClassOil.NWells[i-1]:=StrToFloat(StringGrid1.Cells[i,1]); //массив А(1,2,3,4,5)
ClassOil.SortWells(n1, n2);
Edit2.Text:=IntToStr(n1);
Edit3.Text:=IntToStr(n2);
end;
// в момент создания формы в памяти создаем объект класса
procedure TFormZad2.FormCreate(Sender: TObject);
begin
ClassOil:=TComponentClassOil.Create(ClassOil); //создаем в памяти объект класса
end;
// в момент уничтожения формы освобождаем память, занятую под объект класса
procedure TFormZad2.FormDestroy(Sender: TObject);
begin
//ClassOil.Free; //уничтожаем объект
FreeAndNil(ClassOil); // уничтожение и объекта и переменной
end;
// в элемент разрешается вводить только числа и разделители вещ. чисел
procedure TFormZad2.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8, DecimalSeparator]) then Key:=#0;
end;
end.
2.6 Скриншоты
2.7 Выкладки, подтверждающие правильность полученных результатов
Имеем 5 скважин со следующими значениями дебетом:
1 3453 м3/сутки
2 3 м3/сутки
3 5324 м3/сутки
4 11 м3/сутки
5 43 м3/сутки
По суточному дебиту каждой скважины определим номера двух скважин с минимальной производительностью: это скважины 2 и 4. Программа выдала то же решение.
ЗАКЛЮЧЕНИЕ
Наука программирования (computer science) занимается исследованием свойств алгоритмов и разработкой методов построения программ. Актуальность изучения науки определяется современными тенденциями развития информатики как науки, в частности, переходом к программированию на основе объектно-ориентированной методологии. Объектно-ориентированное программирование (object-oriented rogramming) - это технология реализации программ, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
Писать сложные программы в тысячи и десятки тысяч строк без расчленения на самостоятельные фрагменты, т. е. без структурирования, просто невозможно. Object Pascal имеет различные средства для структурирования программ. На нижнем уровне деления (для элементарных подзадач) чаще всего используются процедуры и функции, а на верхнем уровне (для больших задач) используются модули. Часто используемые визуальные и невизуальные объекты в Delphi вынесены в виде отдельных так называемых компонентов, которые основаны на иерархии классов.
В данной курсовой работе мы, используя алгоритмизацию, создали алгоритм решения вычислительной задачи в соответствии с ЕСПЧ, на основании этого алгоритма написали решение задачи на языке Object Pascal, который используется средой программирования Delphi. Поскольку мы в задаче задействуем визуальный ввод и вывод информации, то для решения использован ряд визуальных стандартных компонентов. Процесс и результаты решения задачи приведены в разделе 1 курсовой работы.
Также в курсовой работе решалась задача производственного характера мы искали номера нефтяных скважин с минимальным суточным дебетом. Для решения данной задачи мы создали собственный невизуальный компонент и программу, которая обращается к компоненту и позволяет пользователю взаимодействовать с ним. Процесс и результаты решения задачи приведены в разделе 2 курсовой работы.
Какая бы технология решения задач мы не использовали, необходимым этап было получение и анализ результата: проверялось соответствие полученных результатов ожидаемому в рамках построенной информационной модели задачи, а также оценивалось, насколько полученный результат соотносится с реальной практикой.
В результаты выполнения курсовой работы мы овладели структурной методикой построения алгоритмов и создания программ на этой основе, а также приемами создания объектно-ориентированных программ.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Справочник по математике. Геометрия (Планиметрия) URL: http://www.resolventa.ru/spr/planimetry.htm
2. Справочные материалы по планиметрии URL: http://www.gazpromschool.ru/students/projects/geometry/index.htm
3. Г.Э. Вощинская, В.Г. Рудалев, М.А. Артемов РАЗРАБОТКА КОМПОНЕНТОВ В DELPHI. Учебно-методическое пособие для вузов. Воронеж: Издательско-полиграфический центр Воронежского государственного университета, 2007.- 58 с.
4. Александровский А.Д. Delphi 5.0. Разработка корпоративных приложений. М. : ДМК, 2000. 512 с.
5. Конопка Р. Создание оригинальных компонентов в среде DELPHI. Киев: НИПФ-ДиаСофтЛтд, 1996. 512 с.
6. Фаронов В.В. Искусство создания компонент Delphi. Библиотека программиста.- СПб.: Питер, 2005.- 464 с.
7. Гофман, В.Э.; Хомоненко, А.Д. Delphi 5; СПб: БХВ - Москва, 2000. - 800 c.
8. Дарахвелидзе, П.Г.; Марков, Е.П. Delphi 2005 для Win32 наиболее полное руководство; БХВ-Петербург - Москва, 2005. - 602 c.
9. Понамарев, В. Базы данных в Delphi 7. Самоучитель; СПб: Питер - Москва, 2003. - 224 c.
10. Сван, Том Секреты 32-разрядного программирования в Delphi (+ дискета); К.: Диалектика - Москва, 1997. - 480 c.
10. Федоров, А. Delphi 2.0 для всех; М.: Компьютер-пресс - Москва, 1997. - 464 c.
11. Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. М.: ООО «Бином-Пресс», 2006. 1152 с.: ил.
12. Архангельский А.Я. Программирование в Delphi. М.: ООО «Бином-Пресс», 2004. 1152 с.: ил.
Начало
n:=GetValue(Edit1.Text)
n<>0
Останов
Нет
Да
R:=GetValue(Edit2.Text)
n:=0; r:=0;
(n>0) and (r>0)
Да
a:=2*R*Sin(pi/n)
Label5.Caption:=FormatFloat('0.##', n*a)
Label6.Caption:=FormatFloat('0.##',(n/2)*R*R*Sin(2*pi/n));
Нет
Начало
val(userval,uservalue,kod)
Нет
(kod=0) and (uservalue>0)
Да
Вывод 'Неверно введено число
:=StrToInt(userval)
n:=0
Result:=n
Останов