- •Часть 2
- •Лабораторная работа № 6. Программирование циклических вычислительных процессов. Итерационные циклы
- •Отладка модулей проекта
- •Отладка синтаксических ошибок
- •Отладка логических ошибок
- •Итерационные циклы
- •Текст модуля UnIterate
- •Пример создания приложения
- •Сохранение проекта
- •Размещение компонентов на Форме
- •6.4. Выполнение индивидуального задания
- •Лабораторная работа № 7. Программирование с использованием строк
- •Краткие теоретические сведения
- •7.1.1. Символьные типы
- •7.1.2. Строковые типы
- •7.1.3. Процедуры и функции для работы со строками
- •Применение компонентов ListBox и ComboBox для работы со строками
- •7.3. Пример создания приложения
- •7.3.1. Сохранение проекта
- •7.3.2. Размещение компонентов на Форме
- •7.3.3. Создание процедуры-обработчика события активизации Формы FormActivate.
- •7.3.4. Создание процедуры-обработчики события ComboBox1KeyPress
- •7.3.5. Создание процедуры-обработчики события нажатия клавиши «мыши» ComboBox1Click
- •7.3.6. Работа с приложением
- •7.4. Текст модуля UnStr
- •7.5. Выполнение индивидуального задания
- •С использованием записей
- •8.1. Краткие теоретические сведения
- •8.2. Пример создания приложения
- •8.2.1. Указания по созданию приложения
- •8.2.2. Размещение компонентов по Форме
- •8.2.3.Создание процедур обработки событий FormCreate и ButtonClick
- •8.2.4. Работа с приложением
- •8.2.5. Текст модуля UnZap
- •8.3. Выполнение индивидуального задания
- •Лабораторная работа № 9. Програмирование с использованием файлов
- •9.1. Краткие теоретические сведения
- •9.2. Пример создания приложения
- •9.2.1. Указания по созданию приложения
- •9.2.2.Размещение компонентов по Форме.
- •9.2.3.Создание процедур обработки событий
- •9.2.4. Текст модуля UnFile
- •9.2.5. Работа с приложением
- •9.3. Выполнение индивидуального задания
- •Лабораторная работа № 10. Программирование с использованием функций и процедур. Процедурные типы. Создание модулей
- •10.1. Краткие теоретические сведения
- •10.1.1. Объявление и описание функций и процедур
- •10.1.2. Различные варианты передачи параметров в функции и процедуры
- •10.1.3. Процедурные типы
- •Текст модуля UnFancProc
- •Текст модуля UnModul
- •Выполнение индивидуального задания
- •Лабораторная работа № 11. Программирование с использованием динамических структур данных
- •11.1. Краткие теоретические сведения
- •11.1.1. Указатели
- •11.2. Использование динамических переменных
- •Пример создания приложения
- •11.3.1. Сохранение проекта
- •Размещение компонентов на Форме
- •11.3.3. Создание процедуры обработки событий FormCreate
- •Текст модуля UnDinMas
- •11.5. Выполнение индивидуального задания
- •Лабораторная работа № 12. Программирование с использованием средств для построения и отображения графиков
- •12.1. Методика построения графиков с помощью компонента tChart
- •12.2. Пример написания программы
- •12.2.1. Настройка формы
- •12.2.2. Работа с компонентом tChart
- •12.2.3. Написание программы обработчика события создания формы
- •12.2.4. Написание программ обработчика событий нажатия на кнопки
- •12.3. Модуль программы построения и отображения графиков
- •12.4. Выполнение индивидуального задания
- •Приложение 1 п1. Свойства и методы компонентов п1.1. Общие свойства компонентов
- •2. Компоненты страницы standard
- •3. Компоненты страницы additional
- •4. Компоненты страницы dialogs
- •П2. Простые типы данных языка object pascal
- •П3. Процедуры и функции для работы со строками
- •Литература
Отладка логических ошибок
Логические ошибки можно условно разделить на ошибки алгоритма и семантические ошибки. Причинами таких ошибок могут быть несоответствие алгоритма поставленной задаче, неправильное понимание программистом смысла (семантики) операторов языка программирования, нарушение допустимых пределов и правил представления данных, невнимательность при технической подготовке проекта к обработке на компьютере.
Для выявления таких ошибок служат тесты. Тест – это такой набор исходных данных, который дает результат, не вызывающий сомнений. Промежуточные и конечные результаты теста используются для контроля правильности выполнения приложения.
Составление тестов – непростая задача. Тесты должны быть с одной стороны, достаточно простыми, чтобы результат легко проверялся, с другой стороны – достаточно сложными, чтобы комплексно проверить алгоритм.
Тесты составляются по схеме алгоритма до программирования, так как составление тестов помогает выявить многие ошибки в алгоритмизации.
Количество тестов и их сложность зависят от алгоритма. Комплекс тестов должен быть таким, чтобы все ветви схемы алгоритма были пройдены, по крайней мере, по одному разу. Несовпадение результатов, выдаваемых приложением с результатами тестов – признак наличия ошибок. Эти ошибки проявляются в том, что результат расчета оказывается неверным либо происходит переполнение, деление на 0 и другие ошибки.
Для локализации места ошибки рекомендуется поступать следующим образом: в окне Редактора Кода установите курсор в строке перед подозрительным участком и нажмите клавишу F4 (выполнить до курсора). Выполнение приложения будет остановлено на той строке модуля, в которой был установлен курсор. Текущее значение любой переменной можно увидеть, если накрыть идентификатор переменной на 1–2 сек. Нажимая клавишу F8 (пошаговое выполнение), можно построчно выполнять программу, контролируя содержимое переменных и правильность вычислений.
Итерационные циклы
Большое место среди циклов с неизвестным числом повторений занимают циклы, когда в процессе повторения тела цикла образуется последовательность значении y1, y2,…,yn,…, сходящаяся к некоторому пределу а, т. е.
.
Каждое новое значение уn в такой последовательности определяется с учетом предыдущего уn-1 и является по сравнению с ним более точным приближением к искомому результату (пределу) а. Циклы, реализующие такую последовательность приближений (итераций), называются итерационными.
В итерационных циклах условие продолжения (окончания) цикла основывается на свойстве безграничного приближения значений уn к пределу а при увеличении n. Итерационный цикл заканчивают, результат отождествляют со значением уn, т.е. считают, что уn ≈ а, если для некоторого значения n выполняется условие
,
где ε – допустимая погрешность вычисления результата.
Типичным примером итерационного циклического процесса может служить задача вычисления суммы бесконечного ряда. Понятие суммы связано с понятием сходимости бесконечного ряда. Бесконечный ряд значений t0, t1, ..., tn, ... называется сходящимся, если сумма sn = t0 + t1, ...,tn,… его первых (n + 1) слагаемых при беспредельном возрастании n стремится к некоторому пределу S, который и называется суммой ряда, т. е.
;
.
Общий член tn сходящегося ряда при этом стремится к нулю, т. е.
;
.
Следовательно, последовательность s1, s2, ..., sn, ... является искомой последовательностью значений и определяет следующее условие окончания суммирования:
или
.
Пример.
Вычислить с погрешностью ε=10-4 значение функции s=cos(x), используя разложение в ряд:
,
где
.
Для решения задачи необходимо, во-первых, определить значение очередного слагаемого tn, во-вторых, осуществлять накопление суммы по итерационной формуле:
.
Для
определения tn
в данном примере из-за наличия факториала
целесообразно использовать не прямое
вычисление, а рекуррентное соотношение:
.
Подставим в формулу, определяющую tn, вместо n величину (n-1):
.
Определим
сомножитель
:
.
Напомним, что m!=1·2·…·m, поэтому
.
Начальное значение t0=1 находится подстановкой в формулу для общего члена tn при n=0.
procedure TForm1.Button1Click(Sender: TObject);
var
eps, s, t, f, x, y: real;
n: integer;
begin
eps:=StrToFloat(Edit1.Text);
x:=StrToFloat(Edit2.Text);
s:=0;
t:=1;
n:=1;
while abs(t)>eps do
begin
s:=s+t;
f:=-sqr(x)/(2*n*(2*n-1));
t:=t*f;
n:=n+1
end;
y:=cos(x);
Memo1.Lines.Add('S= '+FloatToStr(s)+' Y= '+FloatToStr(y))
end;
end.
Так как надобности в запоминании значений всех слагаемых tn и промежуточных сумм sn нет, то в программе используются простые переменные: s – очередное значение суммы ряда, t – очередное значение члена ряда, f – очередное значение сомножителя .
Для
проверки полученного результата
осуществляется вызов стандартной
функции cos(x),
значение которой присваивается переменной
y.
Для организации цикла с предусловием,
в котором условие
является условием продолжения цикла.
