Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Углубленный курс информатики. Учебное пособие
.pdf
Реализация методом Рунге–Кутта:
Построение Модуля SISE DIFUR
Unit SISTEMDIFUR;
Interface
Label 1,2;
Type a=array[1..2] of real;
Var k:integer;
x,xk,h:real;y,k1,k2,k3,k4,f:a;
Procedure P(x:real; var y,f:a);
Procedure Eylersistem(x,xk,h:real;y,f:a; k:integer);
Procedure RUNGsistem(x,xk,h:real;y,f:a; k:integer);
Implementation
Procedure P(x:real; var y,f:a);
Begin f[1]:= y[2];f[2]:=exp(-x*y[1]);end;
Procedure Eylersistem(x,xk,h:real;y,f:a;k:integer);
Label1,2;
Begin
1:write (x:5:2,y[1]:5:2,y[2]:5:2,k:5);k:=k+1;
If x>xk then goto 2; P(x,y,f);
51

Y[1]:=Y[1]+h*f[1]; y[2]:= y[2]+h*f[2]; x:=x+h;
goto 1;
2:end;
Procedure RUNGsistem(x,xk,h:real;y,f:a;k:integer);
Label 1,2; type a=array[1..2]; k1,k2,k3,k4,Y1:a;
Begin
1:write (x:5:2,y[1]:5:2,y[2]:5:2,k:5);k:=k+1;
If x>xk then goto 2;
P(x,y,f);
K1[1]:=h*f[1];k1[2]:=h*f[2];
y1[1]:=y[1]+0.5*k1[1];Y1[2]:=y[2]+0.5*k1[2]; P(x+0.5*h,y1,f);
K2[1]:=h*f[1]; k2[2]:=h*f[2];
Y1[1]:=y[1]+0.5*k2[1]; y1[2]:=y[2]+0.5*k2[2];
P(x,y1,f);K3[1]:=h*f[1];k3[2]:=h*f[2];
y1[1]:= y[1]+k3[1]; y1[2]:= y[2]+k3[2]; P(x,y1,f);
K4[1]:=h*f[1];k4[2]:=h*f[2];
Y[1]:=Y[1]+(1/6)*(K1[1]+2*K2[1]+2*K3[1]+K4[1]);
Y[2]:=Y[2]+(1/6)*(K1[2]+2*K2[2]+2*K3[2]+K4[2]); x:=x+h; goto 1;
2:end;end.
Вопросы для самоконтроля
1. В чем заключается суть метода Эйлера?
2.
В чем заключается суть метода Рунге-Кутта?
3.
Какими преимуществами обладает модульный принцип програм-
мирования решения нелинейных уравнений?
Какими преимуществами обладает модульный принцип програм-
4.
мирования решения дифференциальных уравнений?
Какими преимуществами обладает модульный принцип програм-
5.
мирования решения систем дифференциальных уравнений?
52

5. ОСНОВЫ РАБОТЫ В СРЕДЕ ОБЪЕКТНО-
ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ DELHI
5.1. Знакомство со средой Delphi
Delphi – это система визуального объектно-ориентированного
программирования на языке Object Pascal для операционной системы
Windows.
Delphi объединяет в себе редактор кода и средства визуальной
разработки
Object Pascal и других языков (создание функций, процедур, модулей),
но и ряд дополнительных средств для максимального ускорения и
упрощения разработки программ.
Так, например, Delphi содержит большое количество стандартных
объектов, что значительно упрощает процесс программирования (текстовые надписи, кнопки, переключатели, текстовые поля, панели и иные повсеместно используемые элементы пользовательского интерфейса). При
помощи стандартных объектов за считанные минуты и без лишних усилий можно создать полноценно выглядящую программу, а также прочие
составные части визуальной составляющей разработки программ.
Наряду с этим, в паскале нет готовых объектов, их можно создать
своими руками путем просчитывания вручную расположения каждого
элемента пользовательского интерфейса, но это очень сложно, неудобно
и значительно увеличивает время разработки программы.
Программирование в Delphi состоит из двух основных этапов:
1. Визуальное построение программы.
Написание программного кода.
2.
Программа в Delphi состоит как минимум из четырех типов файлов:
1. *.dpr – файл-проект (например, Project1.dpr) связывает осталь-
ные файлы в единую программу. Опции проекта (настройки компилятора, имена служебных каталогов…) хранятся в файле *.dof (редактор
схемы расположения).
2. *.pas – файлы модулей (например, Unit1.pas) содержат описа-
ния и операторы, подготовленные программистом для
либо частей программируемой задачи. Откомпилированный модуль –
это файл *.dcu (скомпилированный модуль, который можно использо-
вать в других программах).
3. *.res – двоичный файл ресурсов (например, Project1.res) хранит
используемые в программе ресурсы Delphi – пиктограммы, изображение
курсора мыши и т. п. Создается автоматически при создании проекта.
, содержит не только все средства для работы с языком
решения каких-
53

4. *.dfm – аналогичен *.res, хранит свойства настройки интерфей-
са (формы) программы.
После компиляции мы получаем один исполнимый *.exe файл,
например, Project1.exe, который содержит в себе файлы *.res и *.dfm.
После запуска Delphi автоматически создается текст проекта
на языке Object Pascal (файл Project1.dpr) и заготовка для основного
модуля (файл Unit1.pas) с макетом интерфейса, называемым формой –
(Form1).
Рис. 3. Главное окно Delphi
После запуска программы на экране появляются стандартные ок-
на для программирования в среде Delphi:
1.
Стандартные кнопки (поле Project1), с помощью которых можно со-
здавать различные визуальные объекты (кнопки, поля, подписи и
др.), запускать программу на расчет, сохранять, копировать и т. д.
2. Дерево объектов (поле Object TreeView) – предназначено для
наглядного отображения связей между отдельными компонентами, размещенными на активной форме или в активном модуле
данных. Щелчок по любому компоненту в этом окне активизирует
соответствующий компонент в окне формы и отображает свойства этого компонента в окне Инспектора объектов.
3.
Поле формы (Form1) – это заготовка окна, на котором будут
отображаться визуальные объекты (кнопки, поля, подписи и др.).
Инспектор объектов (поле Object Inspector) описывает парамет-
4.
ры и свойства визуальных объектов (названия кнопок, шрифты
подписей, цвет, размер и др.).
54

5. Код программы (поле Unit1.pas) строится на модульном принци-
пе, где имеется блок описания
ствия (блок процедур)
implementation.
interface и блок выполнения дей-
По умолчанию программа создаётся в папке C:\Program
Files\Borland\Delphi7\Projects.
Визуальное программирование заключается в следующем:
1) необходимо щелчком мыши выбрать желаемый компонент (тип
объекта) из палитры компонент, например кнопку, окошко ввода, область размещения рисунка и т. п.;
2) указать вторым щелчком мыши место на форме где сразу же
будет создан визуальный объект в виде рабочей копии компонента;
3) в инспекторе объектов необходимо выбрать требуемые свой-
ства (properties) выделенного объекта и настроить их значения, например изменить заголовок объекта, тип шрифта, цвет фона и т. д.;
4) там же можно выбрать события (events), например, нажатие
кнопки мыши, операция Drag&Drop и т. д., на которые должен реагировать выбранный объект на Вашей форме. При этом автоматически генерируется Pascal-текст программы и заносится
в указанные ранее файлы.
Текст программы доступен в окнах редактора кодов.
Свойства объектов в среде Delphi
Основные свойства разных объектов Delphi (рис. 4).
Рис. 4. Свойства объекта в Delphi
Align – выбор выравнивания компонента относительно окна формы;
alBottom – по нижнему краю;
alClient – вся пользовательская (клиентская) область;
alCustom – выравнивание определяется вызовом методом
объекта-родителя;
alLeft – по левому краю;
55

alNone – без выравнивания;
alRight – по правому краю;
alTop – по верхнему краю.
Border…– настройка границ объекта.
Borderlcons
– определяет, какие оконные кнопки появляются в
области заголовка формы.
BorderStyle – определяет поведение границ окна и общий тип окна:
bsDialog – диалоговое окно (из кнопок – только «Закрыть»,
иконки в заголовке окна нет);
bsNone – «чистый лист» (отсутствие у окна границ и заго-
ловка) – применяется обычно для создания заставок во время запуска программы;
bsSingle – обычное окно, но с запретом изменения размеров;
bsSizeable – обычное окно (по
умолчанию) – размеры формы
можно изменять;
bsSizeToolWin – упрощённое окно с уменьшенным заголовком;
bsToolWindow – упрощённое окно с уменьшенным заголовком без возможности изменения размеров.
BorderWidth – ширина границы окна в пикселах. Граница являет-
ся невидимой и расположена в пользовательской части формы.
Caption – заголовок объекта.
Color – цвет объекта и его элементов.
Enable – доступность объекта, т. е. он должен/нет (значения дан-
ного свойства – True/False) реагировать на мышь, клавиатуру, время.
+Font –шрифт (название, размер, цвет). Двойной щелчок мыши на
знаке «+» раскрывает детальные характеристики свойства.
Height – высота объекта в пикселях.
Hint – текст всплывающей подсказки.
Left – координата левой границы объекта в пикселях.
Name – идентификатор, т. е. программное имя объекта.
Parent… – взять свойство… или не брать из родительского объекта.
ShowHint
– показывать или нет подсказку Hint.
Top – позиция формы (левого верхнего угла) на экране в пикселах.
Visible – объект видимый или невидимый.
Width – ширина объекта в пикселях.
ComboBox – объединяет функции компонентов ListBox – списка,
и Edit – окно редактирования, дает возможность пользователю сделать
выбор необходимой строки или реализовать свою строку текста в качестве выбора.
Label1 – метка подпись к объекту.
Items – элементы объекта, если они есть.
56

LabelEdit – объединяет свойства Label и Edit, т. е. надпись привя-
зана к полю ввода.
Checkbox – для обозначения включения или отключения какой
либо опции.
Style – стиль шрифта;
fsBold
– True – полужирный шрифт.
Edit – однострочное текстовое поле, служащее для ввода данных
пользователем.
T:=
StrToFloat (Edit6.Text); – переводит строковые данные в
число
Ср:=… – расчет теплоемкости
Edit7.Text:=FloatToStr(Cp); – переводит число в строковые
данные
Для чисел типа integer: StrToInt, IntToStr.
Button – командная кнопка.
Объект Таблица – StringGrid (Вкладка «Additional»)
Каждая ячейка таблицы имеет свои координаты [i, j], где i – номер
столбца; j – номер строки. Нумерация столбцов и строк начинается с
нуля. Рассмотрим пример:
Данная таблица имеет 5 столбцов и 5 строк.
Свойства:
RowCount
ColCount – число столбцов таблицы
Заполнение ячейки таблицы:
StringGrid1.Cells[i,j]:=’Текст’;
Если в ячейку таблицы вносится число, его нужно перевести в
формат строки:
StringGrid1.Cells[i,j]:= FloatToStr(Cp);
действий с таблицей f:=StrToFloat(Cells[1,
1])+StrToFloat(Cells[1, 2])*x + StrToFloat(Cells[1, 3])*sqr(x) +
StrToFloat(Cells[1, 4])*sqr(x)*x + StrToFloat(Cells[1,
5])*sqr(x)*sqr(x)
– число строк таблицы
with StringGrid1 do // оператор обеспечивает выполнение
57

Присваивание числу значения из ячейки таблицы:
Cp:=StrToFloat(StringGrid1.Cells[i,j]);
5.2. Структура проекта в среде Delphi
program
<Заголовок программы (совпадает с именем файла про-
екта)>;
(* Раздел объявлений (до первого
begin): *)
Uses <Перечень используемых модулей>;
[Объявления меток; констант; типов; переменных; процедур и
функций]
begin
(* Раздел операторов: *)
<оператор1>; <оператор2>; <…> <операторN>;
end.
// Конец проекта
Здесь использованы следующие обозначения: [...] – необязатель-
ная часть программы; – часть программы, представленная в форме редакционных разъяснений; (*…*) – блок комментариев программиста;
// – однострочные комментарии.
Комментарии:
1.
Следует отметить, что каждый визуальный объект имеет такую
характеристику, как имя (
Name) и название (Caption). В коде
программы обращение к объекту осуществляется по имени,
поэтому, изменив имя объекта в
Object Inspector, следует так-
же проверить, чтобы в программе были внесены соответствующие изменения.
2. Поскольку название проекта совпадает с именем файла проек-
та, то не следует изменять их названия «вручную», используйте для этого команды главного меню: File → Save All (сохраняются файлы Unit1 (оставить название Unit1), Project1, а можно поменять название).
Каждый новый проект следует располагать в отдельной папке,
3.
чтобы избежать путаницы с файлами от разных проектов.
Оператор Uses указывает на необходимость подключения к
4.
программе различных модулей – внешних программ-блоков.
Всегда автоматически подключается стандартный модуль
Forms, при помощи которого создается форма и главный модуль – Unit1.pas.
5.
Первый Begin означает конец объявлений и начало алгоритми-
ческой части программы, которая состоит из операторов, раз-
58

делённых символом “;”. Заканчивается программа словом end.
(с точкой).
Операторы состоят из идентификаторов и операций над ними.
Идентификаторы:
Идентификаторы – это символические имена констант, перемен-
ных, функций и т. п. Они могут состоять из латинских букв (прописные
и строчные буквы не различаются), цифр и символа подчёркивания “_”.
Рекомендуется начинать идентификатор и каждую его отдельную
смысловую часть с большой буквы, например ThisIdentificatorIsRight.
Когда открывается новый проект, его текст (код) создается авто-
матически и выглядит следующим образом:
Подключает модуль Forms, Unit1,
файл ресурсов –
$R должен иметь
расширение res
Подключает модуль Unit1 из файла
Unit1.pas
В фигурных скобках – блок комментария
компилятора Object Pascal
Тело проекта
Application.Initialize; //инициализация приложения
Application.CreateForm(TForm1, Form1); //создание формы
Application.Run; //запуск приложения
Рис. 5. Код проекта в Delphi
5.3. Структура модуля в среде Delphi
Все модули можно разбить на две группы:
•
стандартные (созданные разработчиками языка Object Pascal);
•
модули созданные пользователем.
На основе главной формы – объект Form1, принадлежащий классу
TForm1, пользователь создает главный модуль Unit1, который сохраняется в файле Unit1.pas. Модуль имеет следующую структуру (рис. 6).
59

Конец модуля
Заголовок модуля (совпадает с именем модуля)
Интерфейсный раздел объявлений и описаний
(объявления модулей; меток; констант;
типов данных; переменных; процедур и функций, все объявления доступны для других
модулей)
Раздел реализации алгоритмов данного модуля
(объявления модулей; меток; констант;
типов данных; переменных; процедур и функций,
все объявления доступны только для в этом модуле)
Рис. 6. Структура модуля в Delphi
Блок Implementation может включать
<Обработчики событий. Объявления в них – локальные>
[initialization] // Раздел инициализации данных
[операторы, которые необходимо выполнить первыми при запуске
приложения (открыть файлы, задать начальные значения переменным
из раздела Implementation..)]
[finalization] // Раздел завершения модуля
[операторы, которые необходимо выполнить перед завершением
программы (
Закрыть файлы, сохранить данные и др.)]
Используется только с
секцией initialization, возможно и пустой
end. // Конец модуля
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
