- •1.Этапы подготовки и решения задач на эвм
- •1.Этапы подготовки и решения задач на эвм
- •Характеристика переменных задач.
- •Основные этапы процесса подготовки и решения задач на эвм
- •2 . Алгоритмизация вычислительных процессов
- •2.1 Графический метод описания алгоритмов
- •2.2 Виды вычислительных процессов Основные структуры алгоритмов
- •2.2.1. Вычислительный процесс линейной структуры
- •2.2.2. Вычислительный процесс разветвляющейся структуры
- •2.2.3.Вычислительный процесс циклической структуры.
- •3.Языки программирования.
- •4.Основные понятия языка qbasic
- •4.1.Алфавит
- •4.2.Структура данных
- •4.3.Операторы языка
- •4.4.Операторы ввода-вывода
- •5.Примеры работы с символьными переменными.
- •6.Работа с файлами
- •6.1.Требования к имени файла
- •6.2.Операции над файлами
- •6.3.Открытие файла
- •6.4.Запись в файл
- •6.5.Чтение из файла
- •6.6.Изменения данных в файле
- •6.7.Добавление данных в файл
- •Команда Действие
- •Cn Значение нового цвета. Действует во всех дальнейших командах до нового назначения
- •О u(p)сновные команды перемещения изображены на рисунке.
- •9.Методические указания
- •10. Тестовые задания по теме:
- •11.Краткий справочник по языкуQbasic.
- •12.Сообщения об ошибках и их коды
2.2.3.Вычислительный процесс циклической структуры.
Вычислительный процесс, многократно повторяющийся при изменении значений некоторых переменных при каждом повторении, называется циклическим или циклом.
Последовательность действий, которая многократно выполняется в цикле, называется телом цикла. Для выполнения тела цикла необходимо определенным образом задавать значения тех переменных, которые изменяются в цикле. Выход из цикла осуществляется при выполнении некоторого условия. Это может быть достижение переменной цикла ее конечного значения, либо достижение заданной точности вычислений.
В различных языках программирования проверка условия выхода из цикла может осуществляться либо до выполнения тела цикла (цикл с предусловием), либо после его выполнения (цикл с постусловием). В соответствии с вышеизложенным циклический процесс можно изобразить двумя вариантами(рис.16, 17).
Цикл с постусловием Цикл с предусловием
Рис.16 Рис. 17
Тело цикла может иметь различную структуру. Это может быть линейный или разветвляющийся процесс, а также и цикл, в котором тоже должны быть выполнены все перечисленные этапы, циклы такой структуры иногда называют «цикл в цикле » или «вложенные циклы». При подготовке новых значений переменной цикла обычно используют рекуррентное соотношение, которое определяет формулу получения нового значения переменной на основе ее предыдущего значения.
Например: Х = Х + Х
и т.д.
Если конечное значение переменной цикла в задаче определено, то при заданном шаге вычислений количество повторений в цикле может быть вычислено по следующей формуле:
N = (Xк - Хн) / Х + 1,
т.е. число повторений известно. Такие циклы носят название циклов с известным числом повторений. Однако не всегда такое число можно рассчитать, т.к. в некоторых задачах конечное значение переменной цикла неизвестно и выход из цикла осуществляется по выполнении некоторого условия /цикл типа “пока”/. Подобного рода циклы встречаются при решении задач численными методами и называются итерационными циклами или циклами с неизвестным числом повторений.
Циклы с известным числом повторений
Типичным примером арифметического цикла является алгоритм табулирования функции.
Пример 8.
Вычислить значения функции y = x – sin(x) для всехx [xн,хк]; шаг изменения аргументах равенх; хн и хк соответственно начальное и конечное значение аргументах.
Блок-схема алгоритма решения задачи представлена на рис. 18.
Блок 1.Переменнымхн, хк ихзадаются их числовые значения путем ввода, например, с пульта дисплея.
Блоки 2, 6.Непосредственно циклическая часть задачи. Тело цикла – это линейный процесс /блоки 3, 4/. В блоках 2 и 5 задаются соответственно начальное значение переменной цикла и ее последующие значения. В блоке 6 проверяется условие выхода из цикла.
Другая форма структуры алгоритма этой задачи представлена на рис. 19.Здесь блок проверки условия выхода из цикла расположен сразу после задания переменной цикла.
Рис. 18 Рис. 19
Программа для решения примера, блок-схема алгоритма которого приведена
На рис.18 |
На рис.19 |
inputxн,xk,x x=xн m:y=x-sin(3.14*x)^2 print x,y x=x+x if xxк then goto M end |
input xн, xk, x x=xн m: If xxк then y=x-sin(3.14*x)^2 print x,y x=x+x goto M end if end |
Используя оператор цикла программа может быть записана как
input xн, xk, x
for x=xн to xk step x
y=x-sin(3,14*x)^2
print x,y
nextx
end
Рассмотрим пример циклического процесса, в котором тело цикла является вычислительным процессом разветвляющейся структуры.
Пример 9.
Вычислить значения
3cos x , если 2 x < 3
y =
2 sin x , если3 x5
Для всех значений х [2,5] с шагом изменения аргументах.
Алгоритм решения данной задачи может иметь структуру, представленную нарис. 21.
Рис.21
Пример программы:
inputx
x=2
1: y=3*cos(x)
print x,y
x=x+x
if x<3 then goto 1
2: y=2*sin(x)
x=x+x
if x<=5 then goto 2
end
В данном алгоритме два последовательно расположенных цикла. В первом цикле табулируется функция Y = 3cos X на интервале ХС [2, 3] с шагом Х.. Это происходит в блоках 2 6 . Второй цикл включает блоки 711 и в нем происходит табулирование функцииy = 2 sin xна интервале x [3 +x, 5 ]. Однако такой алгоритм неэффективен с точки зрения повторов однотипных действий в одном и другом циклах. Избежать этого можно, применив для решения задачи алгоритм, представленный на рис. 21.
В данном алгоритме при вычислении функции y = 3 cos x будут «работать» блоки 1,2,3,5,6,7,8. Тело цикла включает блоки 3,4,5,6 и является процессом разветвляющейся структуры.
Х = 2
нет
да
Y
= 3 cos x
Y = 2 sin X
X =X +
X
да
нет
Рис. 21
Пример программы, где использован оператор цикла:
input x
for x=2 to 5 step x
if x3 then
y=3*cos(x)
else
y=2*sin(x)
end if
print x,y
next x
end
Пример 10.
Пусть та же задача поставлена в общем виде. Вычислить
3 cos x , если a < x < в
Y =
2 sin x если в < x < c, где a < c
для всех значений x [ a, c ] шагомх. Тогда свойство массовости алгоритма будет выполнено.
x = a
нет
y = 3 cos x
y = 2 sin x
да
x = x +
x
да
нет
Рис. 22
Пример программы
inputa,b,c,x
for x=a to c step x
if x<b then y=3xCos(x)
else y=2xSin(x)
print x,y
end if
next x
end.
Рассмотрим пример, когда телом цикла является также циклический процесс.
Пример 11.
Вычислить Z = cos x y для каждогоx [ xн, xк ] с шагомx и
X + y
каждого y [ yн, yк ] с шагомy.
Для наглядности процесса вычислений результаты вычисления могут быть представлены в таблице.
Таблица 3
X |
|
x1=xн |
X1 |
X1 |
X1 |
|
X2 |
X2 |
X2 |
X2 |
|
… |
Xк |
Xк |
… |
Xк |
y |
|
y1=yн |
Y2 |
… |
Yк |
|
Y1 |
Y2 |
… |
Yк |
|
… |
Y1 |
Y2 |
… |
Yк |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменная «х» принимает новое значение только тогда, когда«y» изменит все свои значения отyн доyк. Причем, при новом значении «х» переменная«y» опять изменяется на интервалеyн, yк. Блок-схема алгоритма задачи представлена нарис. 23.
Рис. 23
Пример программы:
inputxн,xк,x,yн ,yк ,y
for x= xн to xк step x
for y= yн to yк step y
z=cos(x+y)/(x+y)
print x,y,z
nexty
nextx
end
Блоки 2+9 составляют внешний цикл, блоки 3 + 8 являются телом внешнего цикла и одновременно являются циклом, который называется внутренним.
Выше уже упоминалось понятие рекуррентного соотношения и его использование в циклических процессах для получения нового значения переменной цикла. Рекуррентное соотношение также применяется в циклических структурах в качестве тела цикла при вычислении суммы или произведения, определения максимального или минимального значения из ряда чисел.
Пример 12.
Вычислить сумму N слагаемых
Раскроем эту запись
Процесс вычисления суммы на ЭВМ представляется как циклический процесс накопления суммы. Причем, каждый новый повтор вычислений в цикле добавляет в ячейку суммы еще одно слагаемое. Используя правило записи рекуррентного соотношения, вычисления тела цикла можно записать в виде следующего соотношения:
Для выполнения тела цикла первый раз необходимо задать начальные значения переменной s и i :
s = 0,
i = 1.
Блок-схема алгоритма представлена на рис. 24.
Примечание. Здесь и в дальнейшем мы будем использовать алгоритмы циклической структуры с постусловием, т.е. блок проверки условия выхода из цикла мы будем размещать после блока подготовки новых значений переменной цикла.
Пример 13.
Вычислить произведение
Рекуррентное соотношение для вычисления тела цикла
Начальное значение Р = 1; к = 1. Алгоритм задачи представлен на рис. 25
Рис. 24 Рис. 25
Программа на Qbasicдля задачи рис 24: remвычисление суммы inputn,x s=0 for i=1 to n s=s+xi/(i+2) nexti printS end
|
Программа на Qbasicдля задачи рис 25: remвычисление произведения inputm,x p=1 for k=1 to m p=p*k2/(k+1) next k print p end
|
Пример 14.
Табулировать функцию у =F(x) на интервалеХ [Xн ,Xк] c
шагом Х определить ее наибольшее и наименьшее значения на этом отрезке.
Математическая постановка задачи
Определить МАХ =
МIN =, где Х[Xн ,Xк]
Таким образом, после выхода из цикла значение переменной МАХ должно быть равно большему из всех значений функции y(x) на заданном отрезке, а значение переменной МINсоответственно меньшему.
При каждом очередном выполнении цикла сравниваются значения двух пар переменных: Н и МАХ; У и МIN
МАХ = /1/
МIN = /2/
Для выполнения первого цикла значения переменных МАХ и МIN уже должны быть определены. Это может быть начальное значение функции У н =f(xн)
МАХ =F(Xн)
МIN=F(Xк)
Однако чаще в качестве начальных значений переменных МАХ и МIN берутся числа заведомо меньшее /для МАХ/ или большее /для МIN/, чем начальное значение функции. Пусть, например, МАХ = -1020, МIN = 1020. Тогда при первом же сравнении значения У(Хн) будет присвоено в соответствии с формулами /1/ и /2/ переменным МАХ и МIN. Блок-схема алгоритма решения данной задачи представлена нарис. 26.
Циклы с неизвестным числом повторений
Типичным примером интерационного цикла служат задачи вычисления с заданной точностью.
Итерационные циклы широко используются в численных методах решениях алгоритмических и трансцендентных уравнений, при вычислении интегралов, определении суммы бесконечного ряда и т.д. Во всех этих задачах вычисления прекращаются при достижении некоторой точности (результатов).
Рассмотрим пример вычисления суммы бесконечного ряда чисел.
Пример 15.
Вычислить значение sin x по формуле
SinX =
Блок – схема алгоритма определения максимального и минимального значения функции
Рис.26
Пример программы:
remвычислениеmax,minфункции
inputХн,Xк,х
max=-1010
min=1010
for x= Хн to Xк step x
y=F(x)
print x,y
if y>=max then max=y
if y<=min then min=y
next x
print max,min
end
В операторе y=F(x) в правой части уравнения должно быть записано арифметическое выражение (по условию задачи).
Общая формула члена ряда гдеn– номер члена ряда n
Вычисления продолжать до тех пор пока >E, это условие и есть условие выхода из цикла, где Е – точность вычислений.
При достаточно большом n возведение в степень занимает значительное машинное время . Поэтому каждый член ряда следует получать в соответствии с рекуррентным соотношением
R = Rx
Где n = 3,5,7……..; R начальное = х. Тогда рекуррентное соотношение для получения суммы ряда будет S = S+R (-1), где Sначальное= Х. Блок – схема алгоритма вычисления суммы ряда представлены на рисунке 27.
Вычисления ведутся до тех пор , пока величина члена ряда R не станет меньше , либо равной некоторой малой величине Е. Значение R с каждым циклом уменьшается. После выполнения цикла первый раз имеем
R =
S =
После выполнения цикла второй раз
R =
S =
И т.д.
Структурный подход предполагает использование простейших структур, перечисленных и списанных выше, для построения блок – схемы алгоритмов любой сложной задачи. Рассмотрим это на примере.
Рис.27
Программа на Qbasicимеет вид:
input x,e
s=x
r=x
n=3
do while r>e
r=r*x2/((n-1)*n)*(-1)
s=s+r
n=n+2
loop
print s
end
Пример 16.
Для каждого значения Х [Xn,Xk] c шагомХ и для каждого У[Yn,Yk] с шагомУ определить:
если Z3,5
W =
Z + 0.7 tgz если Z <3,5
Определить наибольшее и наименьшее значения из всех вычисленных значений W и соответствующие ему значения Х и У.
Блок – схема алгоритма задачи представлена на рис. 28.
Блок 1– ввод исходных данных
Блок 2 – подготовка начальных значений переменных MAX и MIN.
Блоки 3 + 31 = внешний цикл , переменная цикла Х. Тело этого цикла составляют блоки 4+ 30.
Блоки 3, 4, 31 – определяют интервал изменения переменной Х.
Блоки 7-29 – тело внутреннего цикла , переменная цикла У.
Блоки – 5, 6, 30 – определяют интервал изменения переменной У.
Блоки 7+17 – определение значений переменной Z. Это два последовательно расположенных друг за другом цикла, в которых определяется последовательно значения слагаемых 51 и 52, входящих в формулу определения Z.
Блоки 19-25 – определение и печать значения W.Это разветвляющийся вычислительный процесс, одной из ветвей которого (блоки 19-23) является циклический процесс накопления произведения.
Блоки 26 - 29 – определяют наибольшее и наименьшее значения переменной W и ее координаты.
Одним из приемов разработки алгоритмов решения более сложных задач является метод пошаговой детализации . метод пошаговой детализации заключается в том , что первоначально продумывается общая структура алгоритма без детальной проработки отдельных ее частей, , но при этом также используются основные виды структур алгоритмов. Обычно блоки, требующие дальнейшей детализации, обозначают пунктирной линией. Далее они детализируются на следующем шаге и так, пока не будет полностью осуществлена детализация всех блоков. Такой метод называется программированием сверху вниз. Так, блок – схему алгоритма (рис. 28) можно получить, используя метод пошаговой детализации (рис. 29).
Блок – схема для решения задачи 16.
Рис. 28
Первый шаг.
2
Рис. 29
Второй шаг.
Детализируем вычисление блоков 7 и 8 блок – схемы рис. 30,31
Блок 7: вычисление Z
Рис.30
Блок 6: вычисление W
Рис.31
Третий шаг.
Детализация блоков 1 и 2 блок – схемы рис. 30.
Детализация блока 1
Детализация блока 2
Рис.32
Детализация блока 3 рис.31
Рис.33
После такой пошаговой детализации мы и получим подробную блок – схему алгоритма решения задачи, представленную на рис. 28.
Программа для решения примера имеет вид:
remсложный цикл
inputn,m,l,Xн ,Xк ,x,Yн ,Yк ,y
max=-1010 : min=1010
for x= Xн to Xк step x
for y= Yн to Yк step y
s1=0
for i=1 to n
s1=S1+cos(x*y+i)
next i
s2=0
sor k=1 to m
s2=S2+sin(x*y+k)
next k
z=S1+S2
if z>=3.5 then
w=1
for n=1 to l
w=W*z(n+2)
next n
else
w=z+0.7*tan(z)
end if
print w,x,y,z
if W>=max then
max=w
xmax=x
ymax=y
end if
if W<=min then
min=W
xmin=x
ymin=y
end if
next y
next x
print max, xmax, ymax
Print min, Xmin, Ymin
end