- •Основы информационной культуры
- •2. Техническая база информационной технологии
- •2.1 Представление информации в эвм
- •2.2 Системы счисления
- •2.3 Форматы чисел в эвм
- •2.4 Представление символьной информации
- •Программное обеспечение Вычислительной системы
- •Архивация данных
- •Концепция Visual Basic
- •Основное меню
- •Объекты управления
- •Форма (Form)
- •Командная кнопка (CommandButton)
- •Метка (Label)
- •Текстовое окно (TextBox)
- •Типы данных
- •Переменные и константы
- •Область видимости переменных и констант
- •Выражения
- •Стандартные функции
- •Программирование линейных вычислительных процессов
- •Программирование разветвляющихся вычислительных процессов
- •Программирование циклических вычислительных процессов
- •Итерационные циклы
- •Добавление изображений в форму
- •Массивы
- •Поиск в массиве элементов, удовлетворяющих заданным условиям
- •Группировка объектов
- •Создание меню
- •Ввод информации с использованием переключателей и флажков проверки
- •Процедуры и функции
- •Информационно вычислительные сети
- •Базовая модель взаимодействия открытых сетей
- •Топология ивс
- •Сетевое по. (спо)
- •Глобальная компьютерная сеть Internet. Основы функционирования Интернет.
- •Структура Интернет
- •Адресация в сетях.
- •Адресация в Интернет
- •Основные службы Интернет
- •Многоуровневое представление средств сетевого взаимодействия.
- •Коммуникационные службы
- •Прямое общение в Интернет
- •Отложенное общение в Интернет
- •Информационные службы.
- •Поиск информации в Интернет.
Итерационные циклы
Это циклы с неизвестным числом повторений. Для определения момента окончания цикла выбирается какая-либо переменная (или выражение), значение которой при каждом прохождении цикла постепенно приближается к известной величине. («Итерация» - приближение). Значение переменной сравнивается с известной величиной, и выход из цикла происходит, когда значение переменной достигает указанной величины.
Итерационные ВП являются основой большинства методов вычислений с заданной точностью.
Рассмотрим итерационные циклы на примере вычисления суммы ряда с заданной точностью.
Вычисление суммы ряда с использованием рекуррентной формулы
Задача. Вычислить значение функции у = ех с погрешностью вычисления = 0,001 при заданном значении х = 0,5.
Функцию у = ех можно представить в виде суммы бесконечно сходящегося ряда (разложить в ряд):
Вычисление функции, записанной в виде ряда, с заданной погрешностью означает, что суммироваться должны те члены ряда, абсолютная величина которых больше или равна заданной погрешности . Меньшие члены, очевидно, не будут оказывать существенного влияния на результат вычислений. Анализируя величину членов ряда, видим, что они уменьшаются с увеличением n.
Вычислим сумму ряда S, учитывая члены ряда, по модулю большие величины погрешности , а остальные члены отбросим.
Обозначим:
n – текущий номер члена ряда;
аn – n –ый член ряда.
n
–ый член ряда вычисляется по формуле
.
Эта формула неудобна тем, что содержит
вычисление факториала n!,
а это целая самостоятельная задача. В
данном случае для упрощения вычислений
будем использовать рекуррентную формулу
(возвратную), позволяющую вычислять
каждый член ряда путем умножения
предыдущего члена на рекуррентный
множитель, т.е.
.
Знаем, что
и
.
Вычислим М:
- рекуррентная
формула для вычисления n-го
члена ряда, т.е. при
n = 1 – 1-го члена а1
n = 2 – 2-го члена а2 и т.д.
Введем переменные: у – сумма ряда;
n – номер члена ряда;
а – величина члена ряда.
Анализируем формулу ряда для задания начальных значений переменных:
при n = 1 получим 1-ый член
,
тогда начальное значение n
= 1;первое слагаемое ряда «1» ни при каких значениях n не получим, тогда у = 1;
вычислим а0 для вычисления
а1
= а0х
и очевидно, что для получения по
рекуррентной формуле а1
= х,
следует выбрать а0
= 1, тогда а1
= 1
х
= х.
Рассмотрим два варианта организации цикла.
а). Программный код (Do While …)
Private Sub btnCalculate_Click( ) [Calculate – вычислять]
Dim y as Single, x as Single, e as Single, Y as Single
Dim a as Single, n as Integer
x=Val (TxtX.text)
e=Val (Txte.text)
y=1
n=1
a=1
a=a+x/n ‘вычисление 1-го члена ряда
Do While abs(a) > = e ‘цикл с проверкой точности вычисления
y=y+a
n=n+1
a=a*x/n
Loop
TxtY.text = Cstr(y)
Txtn.text = Cstr(n)
Txta.text = Cstr(a)
TxtY1.text = exp(x) [txtY1.text=Cstr(exp(x))
End Sub
Блок-схема алгоритма вычисления суммы ряда
б) Блок-схема вычисления суммы ряда (if)
Этот алгоритм более рационален, поскольку запись вычисления а производится один раз, а не два раза.
Private Sub btnCalculate_Click( )
Dim …
y = 1
x = 0.5
n = 1
a = 1
M:
a = a*x/n
if abs(a) > = e then
y = y + a
n = n + 1
goto M
end if
Form1. Print “y=”;y
Form1. Print
Form1. Print “a=”;a, “n=”; n
Print “Y1=”; exp(x)
End Sub
Вычисление суммы ряда с использованием формулы накопления степени
Существуют ряды, при вычислении сумм которых пользоваться рекуррентной формулой нецелесообразно, а иногда и невозможно. Например, рассмотрим ряд:
при n
= 1 рекуррентная формула дает а1
= 0, что исключает дальнейшие вычисления.
В этом случае члены ряда следует вычислять
по формуле
,
где b
x,
т.е. b
вычисляется накоплением х.
Начальное значение b = 1
и т.д.
Зададим начальные значения переменных: n = 1, b = 1, y = 0.
Блок-схема алгоритма
Вычисление суммы ряда с вычислением факториала
Можно вычислять факториал при вычислении каждого ряда, используя формулу накапливания факториала как произведения f = f n.
Например,
Здесь члены ряда
целесообразно вычислять по формуле
,
где f
= f
n.
Начальное значение f = 1.
9.4. Вычисление суммы знакопеременного ряда
Рассмотрим ряд
.
Знак членов ряда
чередуется – знакопеременный ряд.
Модуль члена ряда an
вычисляется по формуле n-го
ряда без учета знака, т.е.
.
Для формирования знака члена ряда
используется вспомогательная переменная
с,
которая принимает значение +1 или –1.
Начальное значение с
выбирается, исходя из знака 1-го члена
ряда, для данного ряда начальное значение
с
= 1. В конце цикла при подготовке к его
повторению знак переменной с
меняется на противоположный: с
= -с.
Умножение модуля текущего члена ряда
на с
приводит к чередованию знака у членов
ряда. S
– сумма
ряда.
Private Sub btnCalculate_Click( )
Dim x as Single, y as Single, Y as Single
Dim e as Single, n as Integer
Dim c as Integer, a as Single, S as Single
x=Val (TxtX.text)
e=Val (Txte.text)
S=0
n=1
c=1
M:
A=c*sin(n*x)/n
If abs(a) > = e then
y=S+a
n=n+1
c = -c
goto M
else
Form1. Print “S=”; S, “a=”; a, “n=”; n
Print “y=” x/2
End if
End Sub
Блок-схеме алгоритма
