|
Алгоритмы итеративных циклических структурСтр 1 из 3Следующая ⇒ Тема 4.6 Алгоритмы итеративных циклических структур Средства программирования итеративных циклических структур Базовые алгоритмы итеративных циклических структур и примеры их программирования 4.6.3. Тестовые задания Лабораторная работа по теме Программирование алгоритмов итеративных циклических структур Вопросы, подлежащие изучению 4.6.4.2. Общее задание на разработку проекта Варианты индивидуальных заданий Содержание отчёта 4.6.4.5. Первый пример выполнения задания 4.6.4.6. Второй пример выполнения задания 4.6.4.7. Контрольные вопросы Примера 4.6.1-2
Пример 4.6.1-3. Написать процедуры вывода, которые могут использоваться в алгоритмах итеративных циклических структур. Некоторые процедуры ввода и вывода приведены в Теме 4. Остальные процедуры ввода и вывода, которые используются при написании базовых алгоритмов итеративных циклических структур, представлены на
Рис. 4.6.1-3. Программный код процедуры vivodID11() вывода значений двух переменных типа Integer и Double в TextBox Примера 4.6.1-3
Рис. 4.6.1-4. Программный код процедуры vivodIntLs12() вывода целого результата в ListBox Примера 4.6.1-3
Рис. 4.6.1-5. Программный код процедуры vivodDblLs13() вывода вещественного результата в ListBox Примера 4.6.1-3
Рис. 4.6.1-6. Программный код процедуры vodFxn14() форматного вывода значений двух переменных типа Integer в ТextBox Примера 4.6.1-3
Примера 4.6.2-1
Процедура-функция Pr621() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-2.
Рис. 4.6.2-2. Пример обращения к процедуре Pr621()
Решение данного примера может быть реализовано также с использованием конструкции Do Until…Loop (рис. 4.6.2-3), а цикл с предусловием можно заменить на цикл с постусловием и соответствующим ему изменением настройки цикла (рис. 4.6.2-4).
Рис. 4.6.2-3. Схема алгоритма и программный код процедуры Pr621(), Примера 4.6.2-1
Изменим в цикле условие продолжения выполнения цикла Тогда алгоритм и функция будут выглядеть, как на рис.4.6.2-3. Если вычисление членов последовательности проводится в теле цикла, начиная с первого, то алгоритм и процедура-функция примут вид, показанный на рис 4.6.2-4.
Рис. 4.6.2-4. Схема алгоритма и программный код процедуры Pr624(), Примера 4.6.2-1 Мы получили структуру итеративного цикла с постусловием, изменив настройку цикла: n = 0, b = 0. В данном случае условием окончания вычислительного процесса служит значение True логического выражения Изменив условие на b <= a, получим конструкцию цикла с Следовательно, задача может быть решена с использованием как цикла с предусловием, так и цикла с постусловием.
Пример 4.6.1-2. Написать процедуру-Function, которая вводит натуральное число n, значение которого находится на отрезке [1;15], с проверкой ввода (т.е. должны выполняться условия n>=1 AND n<=15). Воспользуемся известной итерационной формулой, где i=0, 1, 2,...; x0=0. Следует закончить итеративный процесс, как только |xi+1-xi| станет меньше ε=10-4. Для решения этой задачи необходимо из очередного приближения вычисленного корня xi+1 вычитать значение предыдущего приближения корня xi . Для этого при каждом повторении цикла перед вычислением очередного значения корня x сохраняем в переменной a текущее значение x (оно становится предыдущим). Цикл прекращаем, если разность между a (т.е. xi) и x (т.е. xi+1) станет меньше e=10-4.
Алгоритм решения данной задачи относится к итерационным алгоритмам (рис. 4.6.2-5) и может быть реализован, например, с помощью конструкции Do... Loop Until c постусловием.
Рис. 4.6.2-5. Схема алгоритма и программный код процедуры Pr625(), которая реализует ввод данных с их проверкой Примера 4.6.2-2 Процедура- Function Pr625() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-4.6.
Рис. 4.6.2-6. Пример обращения к процедуре Pr625() Примера 4.6.2-2 Пример 4.6.2-3. Задана возрастающая последовательность Требуется написать программу, которая вычисляет все члены последовательности, до тех пор, пока значение очередного члена не превысит некоторое заданное число d, например, (3 <d <100). В нашей задаче для вычисления любого члена последовательности можно воспользоваться формулой, , где n=0, 1, 2,…- номер члена. В задачах, использующих итеративные алгоритмические структуры, рекомендуется предусмотреть так называемую «страховку от зацикливания», так как иногда условие продолжения цикла может оставаться истинным бесконечно. В данном примере цикл с постусловием будет выполняться не более 100 раз, даже если очередной член последовательности будет оставаться меньше d (рис. 4.6.2-7). Так как вывод в TextBox членов последовательности должен происходить в процессе вычисления (внутри цикла), то для решения задачи напишем процедуру- Sub.
Рис. 4.6.2-7. Схема алгоритма и программный код процедуры Pr627(), которая вычисляет члены последовательности Примера 4.6.2-3 Процедура- Sub Pr627() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-8.
Рис. 4.6.2-8. Пример обращения к процедуре Pr627() Примера 4.6.2-3 Пример 4.6.2-4. Написать процедуру-функцию, которая вычисляет сумму членов знакопеременной убывающей последовательности с заданной точностью ε: . Вычисление с заданной точностью ε означает, что суммирование членов ряда надо продолжать до тех пор, пока очередной вычисленный член ряда не станет меньше по абсолютной величине числа ε. Отметим, что во многих задачах непосредственный подсчет очередного члена связан с вычислительными трудностями. В этом случае целесообразно использовать рекуррентную формулу, которая позволяет вычислить значение переменной на следующем шаге, используя ее значение на текущем шаге – . Выражение для q можно получить, разделив an+1 член на an член.
Рис. 4.6.2-9. Схема алгоритма и программный код процедуры Pr629(), которая вычисляет сумму членов знакопеременной убывающей последовательности с точностью ε Примера 4.6.2-4
Приведем вывод рекуррентной формулы для заданного в примере ряда. Формула для n-го члена приведена в задании: Приведем вывод рекуррентной формулы для заданного в примере ряда. Формула для n-го члена приведена в задании: тогда формула n+1 члена Разделив an+1 член на an, получим выражение для q Таким образом, рекуррентная формула для данного ряда: Выбор начального значения номера члена ряда (n) для нашего случая будет n=0, так как при подстановке этого значения в формулу n-го члена ряда мы получим значение первого члена, равного x-1 или a0=x-1. Схема алгоритма и процедура- Function приведены на рис. 4.6.2-9, причем алгоритм этот с предусловием, в котором предусмотрено выполнение цикла не более 100 раз, чтобы избежать зацикливания. Процедура-Function Pr629() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-10.
Рис. 4.6.2-10. Пример обращения к процедуре Pr629() Примера 4.6.2-4
Приведем вывод рекуррентной формулы для заданного в примере ряда. Формула для n-го члена приведена в задании: тогда формула n+1 члена Разделив an+1 член на an, получим выражение для q Таким образом, рекуррентная формула для данного ряда: Выбор начального значения номера члена ряда (n) для нашего случая будет n=0, так как при подстановке этого значения в формулу n-го члена ряда мы получим значение первого члена, равного x-1 или a0=x-1.
Рис. 4.6.2-11. Схема алгоритма и программный код процедуры Pr6211(), которая вычисляет сумму членов знакопеременной убывающей последовательности с точностью ε Примера 4.6.2-4 Схема алгоритма и код процедуры-функции приведены на
Примера 4.6.2-5 Схема алгоритма и код процедуры- Sub приведены на рис. 4.6.2-12. Процедура- Sub Pr6212() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-13.
Рис. 4.6.2-13. Пример обращения к процедуре Pr6212() Примера 4.6.2-5
Пример 4.6.2-6. Написать процедуру-Function, которая вычисляет с точностью e=0.001 сумму членов ряда . Задана знакопеременная убывающая последовательность, поэтому для вычисления суммы ряда с точностью e будем вычислять и суммировать члены последовательности до тех пор, пока очередной член ряда не станет меньше заданной точности по модулю. Заданный ряд вычислять через рекуррентную формулу нецелесообразно, так как это, во-первых, трудно, а во-вторых, скорее всего, невозможно вывести общую формулу n -гол члена ряда. Поэтому можно воспользоваться следующим универсальным приемом вычисления подобных рядов. Каждый член последовательности можно представить, как где z – множитель, равный 1 или -1 (знак члена ряда); n – первый сомножитель в числителе каждого слагаемого (в данном случае совпадает с номером члена ряда); b – второй сомножитель в числителе; с – знаменатель каждого слагаемого. В свою очередь, знаменатель члена ряда представляет собой произведение нескольких сомножителей, причем с увеличением номера члена ряда увеличивается и количество сомножителей в знаменателе. Таким образом, знаменатель можно представить, как с = с * d, где d – сомножитель, добавленный к значению знаменателя предыдущего члена ряда. Схема алгоритма и код процедуры-функции приведены на
Рис. 4.6.2-14. Схема алгоритма и программный код процедуры Pr6214(), которая вычисляет с точностью e=0.001 сумму членов заданного ряда Примера 4.6.2-6 Процедура-Function Pr6214() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.6.2-15.
Рис. 4.6.2-15. Пример обращения к процедуре Pr6214() Примера 4.6.2-6 4.6.3. Тестовые задания 1. Оператор Dо…Lооp – это: 1) оператор итеративного цикла;2) оператор выбора3) оператор регулярного цикла4) составной оператор. 2. В итеративной циклической структуре число повторений операторов тела цикла 1) может быть известно заранее2) заранее неизвестно3) заранее известно или может быть предварительно вычислено4) нет верного ответа 3. Телом цикла в операторе Do…Loop могут быть 1) только оператор условного перехода или оператор присваивания2) только арифметические или логические выражения3) любые операторы4) нет верного ответа 4. Для досрочного прекращения итеративного цикла используется оператор 1) Exit Do 2) Exit 3) Break 4) нет верного ответа 5. Алгоритмическая структура цикла итеративного типа может быть 1) с предусловием или с постусловием2) только с предусловием3) только с постусловием4) безусловная 6. Если при программировании циклической структуры используется операторDo while…Loop, то тело цикла 1) обязательно выполнится хотя бы 1 раз2) выполняется заданное число раз3) оператор не относится к средствам программирования итеративного цикла4) может ни разу не выполниться 7. Если при программировании циклической структуры используется оператор Do…Loop While, то тело цикла 1) обязательно выполнится хотя бы 1 раз2) может ни разу не выполниться3) выполняется заданное число раз4) оператор не относится к средствам программирования итеративного цикла 8. Если при программировании циклической структуры используется оператор Do…Loop Until, то тело цикла 1) обязательно выполнится хотя бы 1 раз2) может ни разу не выполниться3) выполняется заданное число раз4) оператор не относится к средствам программирования итеративного цикла 9. После ключевых слов While или Until в операторе итеративного цикла Do…Loop записывается 1) арифметическое или логическое выражение2) оператор выбора3) любой оператор4) нет верного ответа 10. Результатом работы фрагмента программы
16. Определить выходные значения переменных А и С после выполнения алгоритма 4.6.4. Лабораторная работа по теме
Цель данной лабораторной работы состоит в получении практических навыков формализации, разработки, написания и отладки проектов, использующих итеративные циклические структуры.
Вопросы, подлежащие изучению
1) Алгоритмы организации итеративных циклических структур: цикл с предусловием; цикл с постусловием. 2) Базовые алгоритмы, использующие итеративные циклические структуры: алгоритм вычисления суммы (или произведения) членов бесконечной последовательности; алгоритмы вычислений по итеративным формулам. 3) Операторы, реализующие выполнение итеративных циклов: Do While…Loop; Do Until…Loop; Do...Loop While…; Do…Loop…Until. 4.6.4.2. Общее задание на разработку проекта
1) Изучите вопросы программирование алгоритмов итеративных 2) Создайте приложение с именем Проект-4.6. 3) Выберите вариант задания из таблицы табл. 4.6.4-1. 4) Проведите формализацию поставленной задачи. 5) Разработайте графический интерфейс пользователя. Предусмотрите отображение на форме номера итерации и значения вычисляемого члена бесконечной последовательности или корня уравнения. 6) Разработайте схемы алгоритмов решения поставленной задачи. 7) Напишите программный код процедур пользователя в соответствии со схемами алгоритмов. Обмен данными между процедурами должен осуществляться через параметры, без использования глобальных переменных. Событийная процедура должна содержать только операторы вызова пользовательских (общих) процедур. 8) Выполните созданный проект. 9) полученных результатов на заранее разработанных тестах. Варианты индивидуальных заданий
Таблица 4.6.4-1
Содержание отчёта
1) Тема и название лабораторной работы. 2) Фамилия, имя студента, номер группы, номер варианта. 3) Задание на разработку проекта. 4) Формализация и уточнение задания. 5) Элементы, разрабатываемого проекта: 5.1) графический интерфейс пользователя; 5.2) таблица свойств объектов; 5.3) схемы алгоритмов процедур проекта; 5.4) программный код проекта. 6) Результаты выполнения проектов. 7) Доказательство правильности работы проекта. 4.6.4.5. Первый пример выполнения задания 1) Тема и название лабораторной работы: Программирование алгоритмов итеративных циклических структур. Вычисление с заданной точностью корня заданного уравнения. 2) Фамилия, имя студента, номер группы, номер варианта: Иванов И., БИН1405, вариант 13. 3) Задание на разработку проекта: Создайте проект с именем Проект-6-1 для вычисления с точностью формулой 4) Формализация и уточнение задания: Проверьте правильность решения подстановкой найденного корня в уравнение. Разработайте схему алгоритма и напишите программный код проекта в соответствии с заданием. Вычислите производную f’(x)=3x2-4x+1 и обозначьте: · x – текущее приближение к корню; · a – предыдущее приближение; · f – значение функции f(x) для предыдущего значения; · p – значение производной f'(x) для предыдущего значения; · i – номер итерации, совпадающий с номером текущего приближения к корню; · y – значение функции f(x) для найденного с заданной точностью корня.
Будем считать, что заданная точность ε обеспечена, если модуль разности между текущим и предыдущим значениями корня меньше точности ε, то есть для нашего случая |x-a| < ε. Для решения поставленной задачи необходимо реализовать процедуру 5) Элементы, разрабатываемого проекта: 5.1) Графический интерфейс пользователя: Разработанная форма проекта имеет вид, как на рис. 4.6.4-1. Рис. 4.6.4-1. Форма проекта 1-го задания Проект 6-1:
5.2) Таблица свойств объектов: установите и сведите в табл. 4.6.4-2 свойства объектов.
Таблица 4.6.4-2
5.3) Схемы алгоритмов процедур проекта: схема алгоритма процедуры Kop() представлена на рис. 4.6.4-2.
Рис. 4.6.4-2. Схема алгоритма процедуры Kop(x) проекта Проект 6-1: Вычисление с заданной точностью корня уравнения x3-2x2+x-3=0 5.4) Программный код проекта: разработанный программный код проекта приведен на
Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)... Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|