
- •Технология программирования
- •Технология программирования
- •Оглавление
- •§1. Классификация и эволюция программного обеспечения
- •§2. Модульное и объектно-ориентированное программирование
- •Основные понятия ооп
- •Составные части объектного подхода
- •Инкапсуляция. Свойства
- •Наследование. Методы
- •Полиморфизм
- •§3. Визуальная среда программирования Структура проекта Delphi
- •Библиотека компонентов Delphi
- •Класс tButton (кнопки)
- •Класс tShape (фигуры)
- •§4. Основные типы данных в языке Паскаль
- •Класс tLabel (надписи)
- •Класс tEdit
- •Класс tMemo
- •Класс tMainMenu
- •Стандартные диалоги
- •Классы tOpenDialog и tSaveDialog
- •Класс tFontDialog
- •Инструкция case
- •§6. Программирование циклических алгоритмов
- •Цикл с параметром. Инструкция for
- •Цикл с предусловием. Инструкция while
- •Цикл с постусловием. Инструкция repeat … until
- •§7. Простейшие вычислительные методы
- •Метод прямоугольников
- •Метод Монте-Карло
- •Метод деления пополам
- •§8. Процедуры и функции
- •§9. Одномерные массивы
- •Класс tListBox
- •Класс tComboBox
- •§10. Двумерные и многомерные массивы
- •Класс tStringGrid
- •Алгоритмы поиска наименьшего и наибольшего элемента
- •§11. Алгоритмы поиска и сортировки. Понятие вычислительной сложности алгоритма
- •Алгоритм простого перебора
- •Алгоритм бинарного поиска
- •Алгоритм сортировки методом «пузырька»
- •Алгоритм сортировки включением
- •Понятие вычислительной сложности алгоритма
- •§12. Обработка исключительных ситуаций
- •§13. Программирование процессов реального времени
- •Класс tTimer
- •§14. Графическая подсистема Delphi Класс tImage
- •Класс tCanvas
- •§15. Динамическое создание компонентов. Конструкторы и деструкторы
- •§16. Тестирование и отладка программ
- •Методы тестирования программ
- •Средства отладки программ в Delphi
- •Трассировка программы
- •Точки останова программы
- •Наблюдение значений переменных
- •§17. Жизненный цикл программного обеспечения
- •Последовательный (каскадный) тип
- •Эволюционный (спиральный) тип
- •Библиографический список
- •Технология программирования
- •Редактор с.В.Пилюгина
- •620034, Екатеринбург, ул. Колмогорова, 66, УрГупс Редакционно-издательский отдел
Метод прямоугольников
Допустим,
нам нужно найти приближенно площадь
фигуры, ограниченной осью абсцисс и
кривой
на промежутке[a;b].
Идея метода: криволинейная фигура разбивается на много узких полосок, каждая полоска заменяется прямоугольником. Площадь фигуры приближенно равна сумме площадей этих прямоугольников.
Для
решения задачи разобьем фигуру на n
полосок. Каждую из них заменим
прямоугольником шириной, равной 1/n
отрезка [a,b],
и высотой,
равной значению функции
в средней точке разбиения1.
Площадь каждого из них равна произведению
ширины на высоту.
Понятно, что чем больше полосок, тем точнее получается результат2.
Для вычисления суммы можно воспользоваться любой инструкцией цикла из описанных в предыдущем параграфе. Воспользуемся циклом в предусловием.
Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:
w:=(b-a)/n; {вычисляем ширину полоски}
s:=0; {переменная для накопления площади}
x:=a; {начальное значение х}
while x < b do {продолжаем вычисление, пока не дошли до конца отрезка }
begin
s:=s+w*f(x); {добавляем к s площадь очередной полоски}
x:=x+w; {переходим к следующей полоске}
end;
Для того чтобы программа была работоспособной и выдавала результат, следует добавить описание всех используемых переменных и предусмотреть выдачу результата (переменной s) с помощью какого-либо подходящего компонента (Edit или Label) с соответствующим преобразованием данных.
Метод Монте-Карло
Метод Монте-Карло – общее название вычислительных методов, в которых для вычисления какой-либо величины используется датчик случайных чисел (по названию города Монте-Карло, где расположено множество игорных заведений).
Идея метода: смоделировать случайное «бросание» большого количества точек в прямоугольник, содержащий криволинейную фигуру. При этом отношение числа точек, попавших внутрь фигуры, к общему числу точек будет приближенно равно отношению площади фигуры к площади прямоугольника. Понятно, что чем больше точек, тем точнее результат, однако оценить точность при использовании метода Монте-Карло не удается.
Для программирования этого метода в Паскале (как и в большинстве языков программирования) имеется функция random, моделирующая датчик случайных чисел. У этой функции есть два варианта написания (еще одно проявление полиморфизма).
k:=random(n);
– дает
целое случайное число в диапазоне
, гдеn
тоже целое число;
a:=random;
– дает
вещественное число в диапазоне
.
Для решения нашей задачи более удобен второй вариант, т. к. размеры фигуры могут быть маленькие, и целочисленных точек там может вообще не оказаться.
Из рассмотренных типов цикла можно выбрать любой. Воспользуемся циклом с параметром.
Возьмем,
к примеру, n=10000
точек. Прямоугольник, содержащий фигуру,
имеет размеры
,
где
–
наибольшее значение функции на отрезке.
Фрагмент программы, предназначенный для вычисления площади, может выглядеть примерно так:
k:=0; {количество точек, попавших в фигуру}
for i:=1 to n do {моделируем n бросаний }
begin
x:=random*(b-a)+a;{случайная координата x}
y:=random*h; {случайная координата y}
if y<=f(x) {если точка попала в фигуру}
then k:=k+1;
end;
s:=(b-a)*h*k/n;{площадь прямоугольника (b-a)*h умножаем на число попавших в фигуру точек и делим на общее число точек }