Разработка программы на языке программирования Delphi
Содержание
Введение
1.Математическая постановка задачи
2. Решение примера заданным методом
3. Листинг программы
4. Описание программы
Заключение
Литература
Введение
- императивный, структурированный, объектно-ориентированный
язык программирования, диалект Object Pascal. Начиная со среды разработки
Delphi 7.0, в официальных документах Borland стала использовать название Delphi
для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi
(производный от Object Pascal) начал жить своей самостоятельной жизнью и
претерпевал различные изменения, связанные с современными тенденциями
(например, с развитием платформы.net) развития языков программирования:
появились class helpers, перегрузки операторов и другое.
Изначально среда разработки Delphi была предназначена
исключительно для разработки приложений Microsoft Windows, затем был реализован
вариант для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix
3 его разработка была прекращена, и вскоре было объявлено о поддержке
Microsoft.net, которая, в свою очередь, была прекращена с выходом Delphi 2007.
На сегодняшний день, наряду с поддержкой разработки 32 и
64-разрядных программ для Windows, реализована возможность создавать приложения
для Apple Mac OS X (начиная с Embarcadero Delphi XE2), IOS (включая симулятор,
начиная с XE4 посредством собственного компилятора), а также, в Delphi XE5,
приложения для Google Android (непосредственно исполняемые на ARM процессоре).
Независимая, сторонняя реализация среды разработки проектом
Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет
использовать его для создания приложений на Delphi для таких платформ, как
Linux, Mac OS X и Windows CE.
Также предпринимались попытки использования языка в проектах
GNU (например, Notepad GNU) и написания компилятора для GCC.
язык программирование delphi программа
В Delphi формальное начало любой программы четко отличается
от других участков кода, и расположено в определенном, единственном в рамках
проекта, исходном файле с расширением dpr (тогда как другие файлы исходных
текстов программы расположены в файлах с расширением pas).
Program Project32;
{$APPTYPE CONSOLE}
{$R *. res}. SysUtils;
{TODO - user - console Main: Insert code here}E:
Exception do(E. ClassName, ': ', E. Message);
end;.
В Delphi, в исходных файла pas (которые, как правило, и
содержат основное тело программы), на уровне языковых средств введено строгое
разделение на интерфейсный раздел, и раздел реализации. В интерфейсной части
содержатся лишь объявления типов и методов, тогда как код реализации в
интерфейсной части не допускается на уровне компиляции. Подобное разделение
свойственно также языкам C/C++, где условно, в рамках культуры и парадигмы
программирования вводится разделение на заголовочные и собственно, файлы
реализации, но подобное разделение не обеспечивается на уровне этого языка или
компилятора.
В Delphi метод или функция четко определяются
зарезервированными для этого ключевыми словами procedure или function, тогда
как C-подобных языках обозначается лишь скобками:
/DelphiDo Something (aParam: integer); // не возвращает значенияCalculate
(aParam1, aParam2: integer): integer; // возвращает целочисленный результат
// C#DoSomething (int aParam); // не возвращает значения
{
// code
}Calculate (int aParam1,aParam2); // возвращает целочисленный результат
{
// code
}
В Delphi начало, и конец программного блока выделяются
ключевыми словами begin и end, тогда как в C-подобных языках программирования
для этих целей используются фигурные скобки: {}. Таким образом, в Delphi достигается
лучшая читаемость кода, особенно для лиц с ослабленным зрением.
Метод доступа в C# всегда относится к одному, и только к
одному свойству, тогда как для Delphi это утверждение, вообще говоря, неверно.
Более того, один и тот же метод может быть использован для реализации доступа к
существенно различным свойствам.
Как Delphi, так и C# допускает использование индексируемых
свойств: в этом случае синтаксис доступа к такому свойству аналогичен доступу к
элементу массива. Однако, если в Delphi число индексируемых свойств, равно как
и число индексаторов, может быть произвольным, в C# индексатор применим лишь к
специальному свойству по умолчанию. Кроме того, в Delphi свойство по умолчанию
не только может быть индексируемым, также оно может быть перегружено по типу
индексатора.
TMyObject=classgetStr (name: string): string;
virtual;getStrByIx (ix: integer): string; virtual;getBy2Indicies (X,Y:
integer): string; virtual;Value [name: string]: string read getStr;
default;Value [ix: integer]: string read getStrByIx; default;Value [x,y:
integer]: string read getBy2Indicies; default; // количество
end;
Pascal (Delphi) является результатом функционального
расширения Turbo Pascal.оказал огромное влияние на создание концепции языка C#
для платформы.net. [источник не указан 749 дней] Многие его элементы и
концептуальные решения вошли в состав. С#. Одной из причин называют переход
Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland
Ltd. в Microsoft Corp.
Версия 8 способна генерировать байт-код исключительно для
платформы.net. Это первая среда, ориентированная на разработку мульти язычных
приложений (лишь для платформы.net);
Последующие версии (обозначаемые годами выхода, а не
порядковыми номерами, как это было ранее) могут создавать как приложения Win32,
так и байт-код для платформы.net.for.net - среда разработки Delphi, а также
язык Delphi (Object Pascal), ориентированные на разработку приложений для.net.
Первая версия полноценной среды разработки Delphi для.net -
Delphi 8. Она позволяла писать приложения только для.net. Delphi 2006
поддерживает технологию MDA с помощью ECO (Enterprise Core Object) версии 3.0.
В марте 2006 года компания Borland приняла решение о
прекращении дальнейшего совершенствования интегрированных сред разработки
Builder, Delphi и C++ Builder по причине убыточности этого направления.
Планировалась продажа IDE-сектора компании. Группа сторонников свободного
программного обеспечения организовала сбор средств для покупки у Borland прав
на среду разработки и компилятор.
Однако в ноябре того же года было принято решение отказаться
от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет
заниматься новая компания - CodeGear, которая будет финансово полностью
подконтрольна Borland.
В августе 2006 года Borland выпустил облегченную версию RAD Studio под именем Turbo: Turbo
Delphi (для Win32 и.net), Turbo C#, Turbo
C++.
В марте 2008 года было объявлено о прекращении развития этой
линейки продуктов.
В марте 2007 года CodeGear порадовала пользователей
обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно
нового продукта Delphi 2007 for PHP.
1.
Математическая постановка задачи
Условие:
Результаты эксперимента хранятся в двумерном массиве m x n
(n>=3, m=2*n). Найти пересечение двух множеств и сформировать одномерный
массив (заштрихованная часть).
Найти среднее арифметическое значение элементов одномерного
массива.
В одномерном массиве подсчитать, сколько элементов отличаются
от ср. арифм. значения на 50%. Вспомогательные массивы не создавать.
Входные данные:
1. Количество столбцов двумерного массива n;
. Результаты эксперимента, которые хранятся в двумерном
массиве
Выходные данные:
1. Размер полученного одномерного массива
. Среднее арифметическое значение элементов одномерного
массива
. Количество элементов массива, которые отличаются от ср.
арифм. значения на 50%.
Требования к программе:
Программа написана на языке Delphi (консольный режим)
Оформить в подпрограммы:
. Ввод данных эксперимента.
. Формирование одномерного массива
. Подсчет количества элементов массива, которые отличаются от
ср. арифм. значения на 50%.
2. Решение
примера заданным методом
Находим ср. арифм. и, сравнивая, сколько
элементов массива, отличаются от ср. арифм. На 50 %.
Блок-схема
Рис 1. Блок-схема основной подпрограммы.
Рис 3. Блок-схема подпрограммы нахождения пересечения двух
множеств и формирования одномерного массива peresech.
Рис 4. Блок-схема подпрограммы расчета среднего арифметического
значения элементов одномерного массива srednee.
Рис 5. Блок-схема подпрограммы формирования откорректированного
одномерного массива correct.
Рис 6. Блок-схема подпрограммы вывода одномерного массива
vyvodmas.
3. Листинг
программы
unit kurs_gui;
interface, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,, Grids, StdCtrls;// раздел описания типов данных
// описание типа - динамический одномерный массивdArray =
array of Real;
// описание типа - динамический двумерный массив
t2dArray = array of array of Real;
TForm1 = class (TForm)_n: TLabel;_n: TEdit;_n:
TButton;
// ввод значений массива_mn: TStringGrid;
// кнопка запуска основной подпрограммы: TButton;_len:
TLabel;
// вывод размера полученного одномерного массива_xlen: TEdit;
// вывод среднего арифметическое значение элементов массива X
edt_xsr: TEdit;_xsr: TLabel;
lbl_del: TLabel;
// вывод количества удаленных элементов массива X
edt_del: TEdit;_ylen: TLabel;
// вывод размер откорректированного массива Y_ylen:
TEdit;_ysr: TLabel;
// вывод cреднее арифметическое значение элементов
откорректированного массива Y
edt_ysr: TEdit;_y: TLabel;
// вывод значений массива_y: TStringGrid;
procedure btn_nClick (Sender:
TObject);btnRaschetClick (Sender: TObject);FormCreate (Sender: TObject);
private
{ Private declarations }
// массив с результатами эксперимента: t2dArray;
// одномерный массив полученный в результате пересечения двух
множеств: t1dArray;
// откорректированный одномерный массив: t1dArray;: Integer;
// размер массива X: Integer; // размер массива Y: Real; // среднее
арифметическое значение элементов массива X: Real; // среднее арифметическое
значение элементов откорректированного массива Y: Integer; // количество строк
массива A: Integer; // количество столбцов массива A
// инициализация strgrd_mn
// col - введенное количество столбцов
procedure vvod_n (col: Integer);
// подпрограмма формирования двумерного массива и ввода
данных эксперимента
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает введенный массив m2d [0. row-1] [0. col-1]
// true - если массив успешно сформированvvodmas (Var
m2d: t2dArray; row: Integer; col: Integer): Boolean;
// функция нахождения пересечения двух множеств и
формирования одномерного массива
// m2d - двумерный массив с результатами эксперимента [0.
row-1] [0. col-1]
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает полученный одномерный массив m1d и его длину
function peresech (m2d: t2dArray; row: Integer;
col: Integer;
var m1d: t1dArray): Integer;
// функция расчета среднего арифметического значения
элементов одномерного массива
// m1d - одномерный массив [0. len-1]
// len - длина массива m1d
// возвращает среднее арифметическое значение элементов
массива m1d
function srednee (m1d: t1dArray; len: Integer):
Real;
// функция формирования откорректированного одномерного
массива
// m1d - одномерный массив [0. len-1]
// len - длина массива m1d
// sr - среднее арифметическое значение элементов массива
m1d;
// возвращает откорректированный одномерный массив m1d1 и его
длину
function correct (m1d: t1dArray; len: Integer;
sr: Real;
var m1d1: t1dArray): Integer;
// процедура вывода одномерного массива
// m1d - одномерный массив [0. len-1]
// len - длина массива m1d
procedure vyvodmas (m1d: t1dArray; len: Integer);
{ Public declarations };// раздел объявления переменных: TForm1;
{$R *. dfm}
// инициализация strgrd_mn
// col - введенное количество столбцовTForm1. vvod_n (col: Integer);,j: Integer; // индексы
if (col<3) then
// выводим сообщение('Значение n должно быть не менее 3');
// завершаем подпрограмму;;: =col; // количество столбцов: =
2 * n; // находим количество строк
// количество столбцов n + 1 фиксированная строка_mn.
ColCount: =n+1;
// подпишем строки и столбцы
strgrd_mn. Cells [0,0]: ='m\n';
// строкиi: =1 to m do strgrd_mn. Cells [0, i]:
=IntToStr (i);
// столбцыj: =1 to n do strgrd_mn. Cells [j,0]:
=IntToStr (j);
// очистим ячейки
// строкиi: =1 to m do
// столбцыj: =1 to n do
// очистим ячейку_mn. Cells [j, i]: ='';
end;;;
// подпрограмма формирования двумерного массива и ввода
данных эксперимента
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает введенный массив m2d [0. row-1] [0. col-1]
// true - если массив успешно сформированTForm1.
vvodmas (Var m2d: t2dArray; row: Integer; col: Integer): Boolean;, j: Integer;
// индексы массива: Real;:
=False;
SetLength (m2d, row); // задаем количествл строк массива
// задаем количество столбцов для каждой строки
for i: = 0 to row - 1 do(m2d [i], col);i: = 0 to
row - 1 doj: = 0 to col - 1 do
try
// преобразуем строку в вещественное значение
r: =StrToFloat (strgrd_mn. Cells [j+1, i+1]);
except
// если значение строки нельзя преобразовать в вещественное
значение
on E: Exception do('Ошибка в ячейке m='+IntToStr
(i+1) +', n='+IntToStr (j+1) +#$0d+#$0a+E. Message);
// завершаем работу подпрограммы;;;
// присваиваем элементу массива значениеd [i, j]: =r;
end;;: =True;;TForm1. btn_nClick (Sender:
TObject);_n (StrToInt (edt_n. Text));
end;
// функция нахождения пересечения двух множеств и
формирования одномерного массива
// m2d - двумерный массив с результатами эксперимента [0.
row-1] [0. col-1]
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает полученный одномерный массив m1d и его длину
function TForm1. peresech (m2d: t2dArray; row:
Integer; col: Integer;m1d: t1dArray): Integer;, j, k, p: Integer; // индексы массива
len: Integer; // количество элементов массива m1d: Boolean;
// переход к следующему элементу: = 0;
// первая половина строк матрицы - первое множество
for i: = 0 to (row div 2) - 1 doj: = 0 to col - 1
do
begin: = False;
// вторая половина строк матрицы - второе множество
for k: = (row div 2) to row - 1 dop: = 0 to col -
1 do
begin
// каждый элемент первого множества проверяем на равенство
// с каждым из элементов второго множества
if m2d [i, j] = m2d [k, p] then
begin(m1d, len + 1); // увеличиваем длину массива m1d на 1d
[len]: = m2d [i, j]; // сохраним элемент массива m2d в массиве m1d: = len + 1;
// увеличим на 1 количество элементов массива m1d: = True; // переходим к
следующему элементу
Break; // выходим из цикла for p: =0 to
col-1 do;;next then; // выходим из цикла for k: = (row
div 2) to row-1 do
end;;;: = len; // возвращаем длину полученного одномерного
массива;
// функция расчета среднего арифметического значения
элементов одномерного массива
// m1d - одномерный массив [0. len-1]
// len - длина массива m1d
// возвращает среднее арифметическое значение элементов
массива m1d
function TForm1. srednee (m1d: t1dArray; len:
Integer): Real;
var: Real; // сумма элементов массива
i: Integer; // индекс массива: = 0;
// находим сумму элементов массиваi: = 0 to len - 1 do: = sum
+ m1d [i];
// находим и возвращаем среднее арифметическое значене
элементов массива m1d: = sum / len;;
// функция формирования откорректированного одномерного
массива
// m1d - одномерный массив [0. len-1]
// len - длина массива m1d
// sr - среднее арифметическое значение элементов массива
m1d;
// возвращает откорректированный одномерный массив m1d1 и его
длину
function TForm1. correct (m1d: t1dArray; len:
Integer; sr: Real;m1d1: t1dArray): Integer;: Integer; // индекс массива
len1: Integer; // количество элементов откорректированного
массива
begin: = 0;i: = 0 to len - 1 do
begin
// если элемент отличается от среднего арифметического
значения
// более чем на 50%, то не включаем его в откорректированный
// одномерный массивnot ( ( (m1d [i] / sr) > 1.5)) thennot ( (m1d
[i] / sr) < 0.5) then begin
SetLength (m1d1, len1 + 1); // увеличиваем длину массива m1d1
на 1d1 [len1]: = m1d [i]; // сохраним элемент массива m1d в массиве m1d1: =
len1 + 1; // увеличим на 1 количество элементов массива m1d1;;: = len1; // возвращаем
количество элементов массива m1d1;
// процедура вывода одномерного массива
// len - длина массива m1dTForm1. vyvodmas (m1d: t1dArray; len:
Integer);: Integer; // индекс массива
// зададим количество столбцов_y. ColCount: =len;
// подпишем столбцыi: = 0 to len - 1 do strgrd_y. Cells [i,0]:
=IntToStr (i+1);
// заполним таблицу значениями одномерного массиваi: = 0 to len
- 1 do strgrd_y. Cells [i,1]: =FloatToStr (m1d [i]);;TForm1. btnRaschetClick
(Sender: TObject);
begin
// формируем двумерный массив c данными эксперимента
if (vvodmas (A, m, n)) then
begin
// нахождения пересечения двух множеств и формирования
одномерного массива
xlen: = peresech (A, m, n, X);
// находим среднее арифметическое значене элементов массива
X: = srednee (X, xlen);
// формируем откорректированный одномерный массив
ylen: = correct (X, xlen, xsr, Y);
// находим среднее арифметическое значене элементов массива
Y: = srednee (Y, ylen);
// вывод результатов
// Размер полученного одномерного массива
edt_xlen. Text: =IntToStr (xlen);
// Среднее арифметическое значение элементов массива_xsr.
Text: =FloatToStr (xsr);
// Количество удаленных элементов массива
edt_del. Text: =IntToStr (xlen-ylen);
// Размер откорректированного массива_ylen. Text: =IntToStr
(ylen);
// Среднее арифметическое значение элементов
откорректированного массива
edt_ysr. Text: =FloatToStr (ysr);
// Элементы откорректированного массива(Y, ylen);
end;;TForm1. FormCreate (Sender: TObject);_n
(3);;.
4.
Описание программы
Запускаем программу. В открывшемся окне (Рисунок 1.1) вводим
нужный размер массива, с которым будем работать. Нажимаем "Изменить".
Записываем нужные нам цифры (Рисунок 1.2). Нажимаем "Рассчитать". В edt_xlen заносится размер
полученного одномерного массива. После чего мы находим среднее арифметическое
значение элементов массива и записываем это число в edt_xsr. Следующим действием мы
узнаю количество удаленных элементов массива, и полученный результат заносим в edt_del. Из выполнимых действий
мы формируем новый откорректированный массив и заносим полученные числа в
стрингрид, и находим среднее арифметическое значение элементов этого массива.
Рисунок 1.1
Рисунок 1.2
Рисунок 1.3
Заключение
Целью данной курсовой работы является написание
работоспособной программы по заданным условиям. Ознакомился и чётко усвоил
основы алгоритмизации и особенности написания объектно-ориентированных программ
по сравнению с консольными приложениями.
Полученные знания станут существенным подспорьем в дальнейшей
работе.
Литература
1. Архангельский,
А.Я. Программирование в Delphi: учебник по классическим версиям Delphi / А.Я.
Архангельский. - Москва: Бином, 2008. - 1154 с.
2. Бобровский,
С.И. Delphi 7: учебный курс / С.И. Бобровский. - Санкт-Петербург: Питер, 2008.
- 736 с.
. Графические
средства Delphi: методические указания для самостоятельной работы студентов
механических специальностей дневной и заочной форм обучения по дисциплинам:
"Информатика", "Вычислительная техника, программирование и
расчеты на ЭВМ" / УО "ВГТУ"; сост.В.П. Терентьев, Т.П. Стасеня.
- Витебск, 2007. - 61 с.
. Климов,
Ю.С. Программирование в среде Turbo Pascal 6.0: справ. пособие / Ю.С. Климов,
А.И. Касаткин, С.М. Мороз. - Минск: Вышэйшая школа, 1992. - 158 с.
. Методические
указания к курсовому проектированию для студентов механических специальностей
по предметам цикла "Информатика" / УО "ВГТУ"; сост.В.П.
Терентьев, А.С. Дягилев, Т.П. Стасеня. - Витебск: УО "ВГТУ", 2004. -
81 с.
. Программирование
на персональных ЭВМ: практикум / под ред. Д.В. Офицерова. - Минск: Вышэйшая
школа, 1993. - 256 с.
. Сурков,
Д.А. Программирование в среде Borland Pascal для Windows: справочное пособие /
Д.А. Сурков, К.А. Сурков, А.Н. Вальвачев. - Минск: Вышэйшая школа, 1996. - 432
с.
. Фаронов,
В.В. Delphi: учебник / В.В. Фаронов. - Санкт-Петербург: Питер, 2010. - 640 с.
. Фаронов,
В.В. Delphi. Программирование на языке высокого уровня: учебник для студентов
вузов, обучающихся по направлению подготовки дипломированных специалистов
"Информатика и вычислительная техника" / В.В. Фаронов. -
Санкт-Петербург: Питер, 2010, 2007. - 640 с.
. Фаронов,
В.В. Основы Турбо Паскаля: учеб. пособие / В.В. Фаронов. - Москва: Учебно-инженерный
центр "МВТУ-ФЕСТО ДИДАКТИК", 1992. - 304 с.
. Язык
программирования Object Pascal (Delphi): курс лекций по дисциплине
"Вычислительная техника, программирование и расчеты на ЭВМ" для
студентов механических спец. / УО "ВГТУ"; сост.В.П. Терентьев. -
Витебск: УО "ВГТУ", 2005. - 75 с.