Блок-схема Delphi
Содержание
- Введение
- История Delphi ……………………………………………… 2
- Постановка задачи ………………………………………….. 5
- Блок-схема
- Основного алгоритма……………………………………….. 6
- Подпрограмм ………………………………………………... 7
- Листинг программы …………………………………………….. 10
- Описание ………………………………………………………… 22
- Заключение ……………………………………………………… 24
- Список использованной литературы ………………………….. 25
Введение
Delphi— императивный, структурированный,
объектно-ориентированный язык
Изначально среда разработки 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 формальное начало любой программы четко отличается от других участков кода, и расположено в определенном, единственном в рамках проекта, исходном файле с расширением dpr (тогда как другие файлы исходных текстов программы расположены в файлах с расширением pas).
Program Project32;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
Begin
Try
{TODO -user -console Main: Insert code here}
Except
on E: Exception do
Writeln (E.ClassName, ': ', E.Message);
end;
end.
В Delphi, в исходных файла pas (которые, как правило, и содержат основное тело программы), на уровне языковых средств введено строгое разделение на интерфейсный раздел, и раздел реализации. В интерфейсной части содержатся лишь объявления типов и методов, тогда как код реализации в интерфейсной части не допускается на уровне компиляции. Подобное разделение свойственно также языкам C/C++, где условно, в рамках культуры и парадигмы программирования вводится разделение на заголовочные и собственно, файлы реализации, но подобное разделение не обеспечивается на уровне этого языка или компилятора.
В Delphi метод или функция четко определяются зарезервированными для этого ключевыми словами procedure или function, тогда как C-подобных языках обозначается лишь скобками:
/Delphi
Procedure Do Something (aParam: integer);//не возвращает значения
Function Calculate (aParam1, aParam2: integer): integer; //возвращает целочисленный результат
//C#
void DoSomething (int aParam);//не возвращает значения
{
//code
}
int Calculate(int aParam1,aParam2);//возвращает целочисленный результат
{
//code
}
В Delphi начало, и конец программного блока выделяются ключевыми словами begin и end, тогда как в C-подобных языках программирования для этих целей используются фигурные скобки: {}. Таким образом, в Delphi достигается лучшая читаемость кода, особенно для лиц с ослабленным зрением.
Метод доступа в C# всегда относится к одному, и только к одному свойству, тогда как для Delphi это утверждение, вообще говоря, неверно. Более того, один и тот же метод может быть использован для реализации доступа к существенно различным свойствам.
Как Delphi, так и C# допускает использование индексируемых свойств: в этом случае синтаксис доступа к такому свойству аналогичен доступу к элементу массива. Однако, если в Delphi число индексируемых свойств, равно как и число индексаторов, может быть произвольным, в C# индексатор применим лишь к специальному свойству по умолчанию. Кроме того, в Delphi свойство по умолчанию не только может быть индексируемым, также оно может быть перегружено по типу индексатора.
TMyObject=class
Protected
Function getStr (name: string):string; virtual;
Function getStrByIx (ix:integer):string;virtual;
Function getBy2Indicies(X,Y:integer):
Public
Property Value[name:string]:string read getStr;default;
Property Value[ix:integer]:string read getStrByIx;default;
Property Value[x,y:integer]:string
read getBy2Indicies;default;//
end;
Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal.
Delphi оказал огромное влияние
на создание концепции языка C#
для платформы .NET.[источник не
указан 749 дней] Многие его элементы
и концептуальные решения
Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мульти язычных приложений (лишь для платформы .NET);
Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET.
Delphi 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.2.Математическая постановка задачи
Условие:
Результаты эксперимента хранятся в двумерном массиве m x n (n>=3, m=2*n). Найти пересечение двух множеств и сформировать одномерный массив (заштрихованная часть)..
Найти среднее арифметическое значение элементов одномерного массива.
В одномерном массиве подсчитать, сколько элементов отличаются от ср. арифм. значения на 50%. Вспомогательные массивы не создавать.
Входные данные:
1. Количество столбцов
2. Результаты эксперимента, которые хранятся в двумерном массиве
Выходные данные:
1. Размер полученного одномерного массива
2. Среднее арифметическое
3. Количество элементов массива, которые отличаются от ср. арифм. значения на 50%.
Требования к программе:
Программа написана на языке Delphi (консольный режим)
Оформить в подпрограммы:
1. Ввод данных эксперимента.
2. Формирование одномерного
3. Подсчет количества элементов массива, которые отличаются от ср. арифм. значения на 50%.
1.3. Решение примера заданным методом
Находим ср. арифм. и, сравнивая, сколько элементов массива, отличаются от ср. арифм. На 50 %.
2. Блок-схема
Рис 1. Блок-схема основной подпрограммы.
Рис 2. Блок-схема подпрограммы формирования двумерного массива и ввода данных эксперимента vvodmas.
Рис 3. Блок-схема подпрограммы
нахождения пересечения двух множеств
и формирования одномерного массива peresech.
Рис 4. Блок-схема подпрограммы расчета среднего арифметического значения элементов одномерного массива srednee.
Рис 5. Блок-схема подпрограммы формирования откорректированного одномерного массива correct.
Рис 6. Блок-схема подпрограммы вывода одномерного массива vyvodmas.
3. Листинг программы
unit kurs_gui;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type // раздел описания типов данных
// описание типа - динамический одномерный массив
t1dArray = array of Real;
// описание типа - динамический двумерный массив
t2dArray = array of array of Real;
TForm1 = class(TForm)
lbl_n: TLabel;
edt_n: TEdit;
btn_n: TButton;
//ввод значений массива
strgrd_mn: TStringGrid;
//кнопка запуска основной подпрограммы
btnRaschet: TButton;
lblx_len: TLabel;
// вывод размера
полученного одномерного
edt_xlen: TEdit;
// вывод среднего
арифметическое значение
edt_xsr: TEdit;
lbl_xsr: TLabel;
lbl_del: TLabel;
// вывод количества удаленных элементов массива X
edt_del: TEdit;
lbl_ylen: TLabel;
// вывод размер откорректированного массива Y
edt_ylen: TEdit;
lbl_ysr: TLabel;
// вывод cреднее
арифметическое значение
edt_ysr: TEdit;
lbl_y: TLabel;
//вывод значений массива
strgrd_y: TStringGrid;
procedure btn_nClick(Sender: TObject);
procedure btnRaschetClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
// массив с результатами эксперимента
A: t2dArray;
// одномерный массив
полученный в результате
X: t1dArray;
// откорректированный одномерный массив
Y: t1dArray;
xlen: Integer; // размер массива X
ylen: Integer; // размер массива Y
xsr: Real; // среднее арифметическое значение элементов массива X
ysr: Real; // среднее арифметическое
значение элементов
m: Integer; // количество строк массива A
n: Integer; // количество столбцов массива A
//инициализация strgrd_mn
//col - введенное количество столбцов
procedure vvod_n(col:Integer);
// подпрограмма формирования двумерного массива и ввода данных эксперимента
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает введенный массив m2d[0..row-1][0..col-1]
// true - если массив успешно сформирован
function 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
// возвращает среднее
арифметическое значение
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
{ Public declarations }
end;
var // раздел объявления переменных
Form1: TForm1;
implementation
{$R *.dfm}
//инициализация strgrd_mn
//col - введенное количество столбцов
procedure TForm1.vvod_n(col:Integer);
var
i,j:Integer; // индексы
begin
if (col<3) then
begin
//выводим сообщение
ShowMessage('Значение n должно быть не менее 3');
//завершаем подпрограмму
Exit;
end;
n:=col; // количество столбцов
m := 2 * n; // находим количество строк
//количество строк m + 1 фиксированный столбец
strgrd_mn.RowCount:=m+1;
//количество столбцов n + 1 фиксированная строка
strgrd_mn.ColCount:=n+1;
//подпишем строки и столбцы
strgrd_mn.Cells[0,0]:='m\n';
//строки
for i:=1 to m do strgrd_mn.Cells[0,i]:=
//столбцы
for j:=1 to n do strgrd_mn.Cells[j,0]:=
//очистим ячейки
//строки
for i:=1 to m do
begin
//столбцы
for j:=1 to n do
begin
//очистим ячейку
strgrd_mn.Cells[j,i]:='';
end;
end;
end;
// подпрограмма формирования двумерного массива и ввода данных эксперимента
// row - количество строк массива m2d
// col - количество столбцов массива m2d
// возвращает введенный массив m2d[0..row-1][0..col-1]
// true - если массив успешно сформирован
function TForm1.vvodmas(Var m2d: t2dArray; row: Integer; col: Integer):Boolean;
var
i, j: Integer; // индексы массива
r:Real;
begin
result:=False;
SetLength(m2d, row); // задаем количествл строк массива
// задаем количество столбцов для каждой строки
for i := 0 to row - 1 do
SetLength(m2d[i], col);
for i := 0 to row - 1 do
begin
for j := 0 to col - 1 do
begin
try
//преобразуем строку в вещественное значение
r:=StrToFloat(strgrd_mn.Cells[
except
//если
значение строки нельзя
on E : Exception do
begin
ShowMessage('Ошибка в ячейке m='+IntToStr(i+1)+', n='+IntToStr(j+1)+#$0d+#$0a+E.
//завершаем работу подпрограммы
Exit;
end;
end;
//присваиваем элементу массива значение
m2d[i, j]:=r;
end;
end;
result:=True;
end;
procedure TForm1.btn_nClick(Sender: TObject);
begin
vvod_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;
var m1d: t1dArray): Integer;
var
i, j, k, p: Integer; // индексы массива
len: Integer; // количество элементов массива m1d
next: Boolean; // переход к следующему элементу
begin
len := 0;
// первая половина строк матрицы - первое множество
for i := 0 to (row div 2) - 1 do
begin
for j := 0 to col - 1 do
begin
next := False;
// вторая половина строк матрицы - второе множество
for k := (row div 2) to row - 1 do
begin
for p := 0 to col - 1 do
begin
// каждый элемент первого
// с каждым из элементов второго множества
if m2d[i, j] = m2d[k, p] then
begin
SetLength(m1d, len + 1); // увеличиваем длину массива m1d на 1
m1d[len] := m2d[i, j]; // сохраним элемент массива m2d в массиве m1d
len := len + 1; // увеличим на 1 количество элементов массива m1d
next := True; // переходим к следующему элементу
Break; // выходим из цикла for p:=0 to col-1 do
end;
end;
if next then
Break; // выходим из цикла for k:=(row div 2) to row-1 do
end;
end;
end;
result := len; // возвращаем длину полученного одномерного массива
end;
// функция расчета среднего
арифметического значения
// m1d - одномерный массив [0..len-1]
// len - длина массива m1d
// возвращает среднее
арифметическое значение
function TForm1.srednee(m1d: t1dArray; len: Integer): Real;
var
sum: Real; // сумма элементов массива
i: Integer; // индекс массива
begin
sum := 0;
// находим сумму элементов массива
for i := 0 to len - 1 do
sum := sum + m1d[i];
// находим и возвращаем
среднее арифметическое
result := sum / len;
end;
// функция формирования
откорректированного
// m1d - одномерный массив [0..len-1]
// len - длина массива m1d
// sr - среднее арифметическое значение элементов массива m1d;
// возвращает откорректированный одномерный массив m1d1 и его длину
function TForm1.correct(m1d: t1dArray; len: Integer; sr: Real;
var m1d1: t1dArray): Integer;
var
i: Integer; // индекс массива
len1: Integer; // количество элементов откоректированного массива
begin
len1 := 0;
for i := 0 to len - 1 do
begin
// если элемент
отличается от среднего
// более чем на 50%, то не включаем его в откорректированный
// одномерный массив
if not(((m1d[i] / sr) > 1.5)) then
if not ((m1d[i] / sr) < 0.5) then begin
SetLength(m1d1, len1 + 1); // увеличиваем длину массива m1d1 на 1
m1d1[len1] := m1d[i]; // сохраним элемент массива m1d в массиве m1d1
len1 := len1 + 1; // увеличим на 1 количество элементов массива m1d1
end;
end;
result := len1; // возвращаем количество элементов массива m1d1
end;
// процедура вывода одномерного массива
// m1d - одномерный массив [0..len-1]
// len - длина массива m1d
procedure TForm1.vyvodmas(m1d: t1dArray; len: Integer);
var
i: Integer; // индекс массива
begin
//зададим количество столбцов
strgrd_y.ColCount:=len;
//подпишем столбцы
for i := 0 to len - 1 do strgrd_y.Cells[i,0]:=IntToStr(
//заполним таблицу значениями одномерного массива
for i := 0 to len - 1 do strgrd_y.Cells[i,1]:=
end;
procedure TForm1.btnRaschetClick(Sender: TObject);
begin
// формируем двумерный массив c данными эксперимента
if (vvodmas(A, m, n)) then
begin
// нахождения пересечения двух множеств и формирования одномерного массива
xlen := peresech(A, m, n, X);
// находим среднее арифметическое значене элементов массива X
xsr := srednee(X, xlen);
// формируем откорректированный одномерный массив
ylen := correct(X, xlen, xsr, Y);
// находим среднее арифметическое значене элементов массива Y
ysr := srednee(Y, ylen);
// вывод результатов
// Размер полученного одномерного массива
edt_xlen.Text:=IntToStr(xlen);
// Среднее арифметическое значение элементов массива
edt_xsr.Text:=FloatToStr(xsr);
// Количество удаленных элементов массива
edt_del.Text:=IntToStr(xlen-
// Размер откорректированного массива
edt_ylen.Text:=IntToStr(ylen);
// Среднее арифметическое
значение элементов
edt_ysr.Text:=FloatToStr(ysr);
// Элементы откорректированного массива
vyvodmas(Y, ylen);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
vvod_n(3);
end;
end.
4.Описание программы
Запускаем программу. В открывшемся окне (Рисунок 1.1) вводим нужный размер массива, с которым будем работать. Нажимаем «Изменить». Записываем нужные нам цифры (Рисунок 1.2). Нажимаем «Рассчитать». В edt_xlen заносится размер полученного одномерного массива. После чего мы находим среднее арифметическое значение элементов массива и записываем это число в edt_xsr. Следующим действием мы узнаю количество удаленных элементов массива, и полученный результат заносим в edt_del. Из выполнимых действий мы формируем новый откорректированный массив и заносим полученные числа в стрингрид, и находим среднее арифметическое значение элементов этого массива.
Рисунок 1.1
Рисунок 1.2
Рисунок 1.3
5. Заключение
Целью данной курсовой работы является написание работоспособной программы по заданным условиям. Ознакомился и чётко усвоил основы алгоритмизации и особенности написания объектно-ориентированных программ по сравнению с консольными приложениями.
Полученные знания станут существенным подспорьем в дальнейшей работе.
6.Литература
- Архангельский, А. Я. Программирование в Delphi : учебник по классическим версиям Delphi / А. Я. Архангельский. – Москва : Бином, 2008. – 1154 с.
- Бобровский, С. И. 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 с.

- Блок-схема виробництва йогурта резервуарним способом потужністю 8 т на добу
- Блок-схемы
- Блок управления для выполнения операции умножения в АЛУ
- Блок управления для выполнения операций сложения и вычитания в АЛУ
- Блок управления для выполнения операций сложения и вычитания в АЛУ
- Блок управления модулятором добротности твердотельного лазера
- Блок управления стеклоочистителем
- Блокированный жилой дом
- Блок питания
- Блок питания для систем безопасности
- Блок питания трансформатора Тесла с микроконтроллерным управлением
- Блок – секция 4-этажная 16-квартирная 3-4 рядовая с торцовыми окончаниями
- Блок секция крупнопанельная 9-этажная 18-квартирная торцевая 4Б-3А
- Блок-секция, торцевая левая, 5 этажная, 20-квартирная