КР Третьяков. Разработка алгоритмов различной структуры и их реализация с помощью компьютерных программных средств
Скачать 2.34 Mb.
|
Схема алгоритма решения задачи и ее блок-схема: В процессе разработки алгоритма решения задачи можно выделить следующие этапы: Определение входных и выходных данных. Разработка блок – схемы алгоритма решения задачи. Входные и выходные данные: С клавиатуры вводятся N, х и сами задаем значения переменным: sum = 0, a = 1, b = 1, c = 1. Потом мы должны проверить подходят ли нам заданные числа, если да, то мы считаем значения каждого выражения и присваиваем переменной новое значение. В самом конце мы должны вывести sum (sum – это сумма значения выражения: 1 + x/1! + (x^2)/2! + (x^3)/3! +...+ (x^N)/N!). N – количество итераций (вводится с клавиатуры) x – любое число в числителе (вводится с клавиатуры) sum – переменная в которой будет хранится сумма ряда (изначально равна нулю) a – переменная в которой будет хранится x ^ i (изначально равна единице, которая потом заменится значением x ^ i) b - переменная в которой будет хранится b * i (изначально равна единице, которая потом заменится значением b * i), т.е. переменная в которой высчитывается факториал. c - переменная в которой будет хранится (a/b) (изначально равна единице, которая потом заменится значением (a/b)), т.е. переменная в которой находится сумма, которая только что вычислена. i a = x ^ i – нахождение числа а. b = b * i – нахождение факториала. c = (a/b) – нахождение частной суммы. sum = sum + c – складывание частных сумм. i = i + 1 – увеличение счетчика цикла. Для продвижения вперед и выхода из цикла. sum = sum + 1 – для нахождения всей суммы прибавляем 1, т.к. изначально ее не учитывали. sum – вывод общей суммы последовательности. Словесный алгоритм: Начало алгоритма Вводится число N. Вводится число x. Присвоение переменной sum значение 0. Присвоение переменной a значение 1. Присвоение переменной b значение 1. Присвоение переменной c значение 1. Создаем цикл от 0 до N. Присваиваем переменной a значение xi. Присваиваем переменной b значение b*i. Присваиваем переменной c значение a/b. Присваиваем переменной sum значение sum + c. Цикл увеличивается на единицу, т.е. цикл от 1 до N. Проходим цикл пока не дойдем до N. Конец цикла. Прибавляем к переменной sum единицу. Выводим сумму (переменную sum). Конец алгоритма Исходный текст программы: cls print "Данная программа вычисляет сумму последовательности: 1 + x/1! + (x^2)/2! + (x^3)/3! +...+ (x^N)/N! " M1: #Метка input "введите число N, N = ", N if N <= 0 then #Проверка условия print "N не может быть меньше нуля, т.к. факториал не может быть отрицательным " #Если N меньше нулю, тогда заново ввести переменную goto M1#Возвращение к метке end if input "Введите число x, x = ", x #Задаем начальные значение переменных sum = 0 a = 1 b = 1 c = 1 if x = 0 then #Проверка условия sum = sum + 1 print sum #Вывод значения else #Начало цикла for i = 1 to N step 1 a = x ^ i b = b * i c = (a/b) sum = sum + c next i # конец цикла sum = sum +1 print sum #Вывод значения end if end Где результаты тестирования разработанной программы с различными исходными данными? Задача №2. Постановка задачи: Методом итераций решить уравнение . Ввод исходных данных (a и b) и погрешности вычисления корня уравнения "е" с клавиатуры. Ограничение: a > 0, b > 0, b / a < 6, x0 < pi / 2. Требуется разработать алгоритм и написать программу уточнения корня нелинейного уравнения методом итераций с заданной погрешностью вычисления - e: 1 шаг. Обозначим начальное значение корня x1 и присвоим этой переменной значение середины отрезка [a-b] , полученного из рисунка отделения корней графическим способом. 2 шаг. Ведём буферную переменную x0 и присвоим её значение x1: x0=x1. 3 шаг. Вычисляем значение заданного уравнения, приведённого к виду : x=f(x). Например, x1= . 4 шаг. Далее программа сравнивает вычисленное значение x1 и x0 и если абсолютная разность этих двух величин меньше заданной погрешностью вычисления – e, то x1 считается равным искомому корню заданного уравнения 5 шаг. В противном случае осуществляем переход к шагу 2, и программа вычисляет новое значение x1= . Это продолжается до тех пор, пока не будет выполнено условие шага 4. Для этого нужно: -Ввести значения a, b и е -Вычислить значение х -Вычислить значение y - Проверить подходят ли условиям введенные значения -Решить уравнение, т.е. найти корни уравнения -Построить график по данному уравнению - исходные данные, введенные с клавиатуры; - приближенное значение корня уравнения Требования к программе: Устойчивость программы. Программа не должна терять работоспособности ни при каких, даже некорректных, действиях пользователя. Всякие действия, грозящие потерей информации, выполняются только после повторного подтверждения. Вводимая информация там, где возможно, подвергается логическому контролю. Правильное вычисление уравнения по частям () Построение графика по найденным частям уравнения Отображение на графике пересечения двух частей уравнения, которые буду являться корнями данного уравнения. Анализ задачи: Перед написанием текста программы, решающей данную задачу, можно решить её на листке бумаги или в среде Exsel. Таким образом, можно определить - как будут выглядеть графики функций уравнения и где будет располагаться точки пересечения этих графиков (корни уравнения). Так как в задаче сказано, что нужно провести графическим способом отделение корней уравнения , мы разделим его на две части и построим каждую часть отдельно. У нас получится уравнение вида и уравнение вида . После этого мы должны выразить х, тогда получится, что , отсюда и идет ограничение, что b/a должно быть меньше шести. Написание программы. Для начала нам необходимо нарисовать в графическом окне среды Basic-256 координатные оси, относительно которых будут построены графики уравнений: y1= a * x2 и у2= b * sin(x). Далее при помощи цикла for мы рисуем (с помощью точек, которые будут расположены на очень маленьких расстояниях друг от друга) графики двух функций, которое мы получили, предварительно разбив данное нам в условии уравнение на две части. После того, как мы построили два график мы можем видеть, в каких точках они будут пересекаться. С помощью построенных графиков мы можем видеть, что мы правильно высчитали до этого, количество корней. Количество корней можно посчитать на графике, это количество пересечений двух графиков. Математическая модель решения: Для начала мы смотрим, что за уравнение нам дано: . После этого определяем, какие отдельные части мы должны решить. Чтобы решить уравнение целиком. Для этого нам нужно: -Вычислить значение -Вычислить значение -Вычислить значение y -Найти корни уравнения Только после этого мы можем: -Построить график (точнее 2 график, на котором пересечение двух графиков даст нам корни уравнения) Для решения данных уравнений понадобятся знания, как решать степенные уравнения (уравнения в которых есть степень) и как решать трансцендентны уравнения (трансцендентное уравнение — уравнение, не являющееся алгебраическим. Обычно это уравнения, содержащие показательные, логарифмические, тригонометрические, обратные тригонометрические функции). Ниже описано как решать похожие уравнения на основе этого (с помощью этого), вы сможете решить данное уравнения по отдельности и целиком. При решении любое нелинейное уравнение, например , предварительно приводится к виду , т. е. . При этом функции могут быть алгебраическими, у которых над аргументом х выполняются лишь арифметические операции. А также трансцендентными, которые содержат, кроме того, показательные, логарифмические, тригонометрические функции аргумента х. Такие уравнения далеко не всегда можно решить точно, а для практических расчётов точное решение не всегда является обязательным. Поэтому особое значение с развитием вычислительной техники приобрели способы приближённого вычисления корней и оценки их точности. Данная процедура состоит из двух этапов: 1) отделение корней, т. е.. выделение таких отрезков [a, b], в каждом из которых находится только один корень уравнения или нахождение первоначальных приближений корней; 2) уточнение корней, т. е.. нахождение их на найденных отрезках с заданной степенью точности. Уравнения вида: sin(x) = a, cos(x) = a имеют смыслтолько тогда, когда−1 <= a <= 1 Уравнения вида: tg (x) = a,ctg (x)=a имеют смысл уже при всех значенияхa. а) Решить уравнение cos2x – cos2x = 0,75 . б) Укажите корни этого отрезка, принадлежащие отрезку [-2π;. Решение. Применяя формулу двойного угла для косинуса, получим: sin2x =, sin x = . Откуда х = Арифметический способ: иногда удобно находить корни, принадлежащие отрезку, способом перевода в градусную меру. Если х =+ πn, nZ, значит, х=60+180 Если х=Z, x= - 60+180n, n Условие х[-2π; можно записать в виде х[-360 Указанному промежутку принадлежат следующие значения -120или в радианах , . А можно так: х= . n= -3, х = . Данный корень не принадлежит заданному отрезку. При n = -2 и n = -1 получаем х= и х =. Данные корни принадлежат [-2π; Аналогично находим х = [-2π; при n= -1 из второй серии корней. |