Алгоритмический язык

    Министерство образования и науки России Нижнекамский химико–технологический институт (филиал) ФГБОУ ВПО «Казанский национальный исследовательский технологический университет» Алгоритмический язык QBasic Часть III ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ Методические указания для самостоятельной работы студентов     Нижнекамск  

 


Министерство образования и науки России

Нижнекамский химико–технологический институт (филиал)

ФГБОУ ВПО «Казанский национальный исследовательский

технологический университет»

 

 

Алгоритмический язык QBASIC

ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ

  Часть 3  

Табулирование функции

Вычислить значение функции некоторой переменной х, изменяющейся от начального значения х0 до конечного хk с постоянным шагом h. При программной реализации данного алгоритма на печать выводится множество пар…  

Вычисление конечной суммы

где i – номер слагаемого; f(i) – слагаемое с номером i. Вычисление конечной суммы организуется в виде циклического алгоритма, когда при каждом прохождении цикла номер…

Вычисление конечного произведения

Как и суммирование вычисление произведения организуется с помощью циклического…

Вложенные циклы

WEND

где

условие - выражение логического типа, которое QBasic оценивает как истинное (не-ноль) или ложное (ноль);

тело цикла - любое количество операторов.

Пока условие истинно (его значение не равно нулю), операторы будут циклически выполняться. Если условие ложно (его значение равно нулю), выполняется оператор, следующий за WEND. Важнейшим требованием при использовании описанного цикла является необходимость изменения условия выполнения цикла при исполнении тела цикла. В противном случае цикл будет повторяться до бесконечности (такая ситуация на жаргоне программистов называется "зацикливанием"). Таким образом, для организации цикла необходимо выполнять следующие действия:

1) перед началом цикла задать начальное значение параметров (переменных, используемых в логическом выражении, отвечающем за продолжение или завершение цикла);

2) внутри цикла изменять переменную (или переменные), которая сменит значение логического выражения, за счет которого продолжается цикл, на противоположное (для того чтобы цикл в определенный момент завершился);

3) вычислять логическое выражение — проверять условие продолжения или окончания цикла;

4) выполнять операторы внутри цикла;

5) управлять циклом, то есть переходить к его началу, если он не закончен, или выходить из цикла в противном случае.

Другой разновидностью оператора цикла с условием является цикл DO ... LOOP. Оператор DO ... LOOP, как и предыдущий оператор цикла WHILE … WEND, используется в программе в том случае, когда необходимо организовать цикл, причем число повторений неизвестно. Существует два варианта цикла DO... LOOP:

· цикл DO ... LOOP с проверкой условия в начале:


DO WHILEусловие [ тело цикла ] [ EXIT DO ] LOOP

где

условие - выражение логического типа, которое QBasic оценивает как истинное (не ноль) или ложное (ноль);

тело цикла - любое количество операторов.

WHILE в операторе цикла DO ... LOOP означает, что операторы в теле цикла будут выполняться если условие истинно. Опишем схематически как работает этот вид цикла:

шаг 1 вычисляется значение условия;
шаг 2 если условие принимает значение «истина», то переход к следующему шагу 3, иначе к шагу 5;
шаг 3 выполняются операторы в теле цикла;
шаг 4 переход к шагу 1;
шаг 5 конец цикла.

DO UNTILусловие

[ тело цикла ]

[ EXIT DO ]

LOOP

UNTIL в операторе цикла DO ... LOOP означает, что операторы цикла будут выполняться если условие ложное. Если условие истинно, то управление передается на оператор, следующий за оператором LOOP. Опишем схематически как работает этот вид цикла:

шаг 1 вычисляется значение условия;
шаг 2 если условие принимает значение «ложь», то переход к следующему шагу 3, иначе к шагу 5;
шаг 3 выполняются операторы в теле цикла;
шаг 4 переход к шагу 1;
шаг 5 конец цикла.

· цикл DO ... LOOP с проверкой условия в конце:

DO [ тело цикла ] [ EXIT DO ] LOOP WHILEусловие

 

Главное отличие оператора цикла с проверкой условия в конце от оператора с проверкой вначале состоит в том, что находящиеся между словами DO ... LOOP операторы цикла в любом случае выполняются по крайней мере один раз. Так, например, схема цикла с постусловием с WHILE будет следующей:

  шаг 1 выполняются операторы в теле цикла;
  шаг 2 вычисляется значение условия;
  шаг 3 если условие принимает значение «истина», то переход к шагу 1, иначе к следующему шагу 4
  шаг 4 конец цикла.
DO [тело цикла ] [ EXIT DO ] LOOP UNTILусловие  
       

Тогда как для UNTIL цикл с постусловием будет следующим:

шаг 1 выполняются операторы в теле цикла;
шаг 2 вычисляется значение условия;
шаг 3 если условие принимает значение «ложь», то переход к шагу 1, иначе к следующему шагу 4
шаг 4 конец цикла.

Если опустить проверку условия в начале или в конце цикла DO ... LOOP, то получим бесконечный цикл. Чтобы выйти из бесконечного цикла DO ... LOOP необходимо использовать оператор EXIT DO.

 

 


Алгоритм решения задачи:

Программа:

CLS

S = 0

i = 1

WHILE i <= 10

INPUT "a="; a

IF a > 0 THEN S = S + a

i = i + 1

WEND

PRINT "S="; S

END

Результаты работы программы:

a=? 1

a=? -2

a=? 0

a=? 3

a=? 6

a=? -9

a=? 5

a=? 5

a=? -8

a=? 3

S= 23

 

 

 


В данной задаче нам необходимо получить все цифры, которые используются для записи числа 103 062, то есть цифры 1, 0, 3, 0, 6. Их получим последовательно, начиная с конца. Для этого сначала воспользуемся операцией МОD, которая позволяет получить остаток от деления одного числа на другие. Пусть n=103 062, тогда n MOD 10=2, то есть

103 062
103 060 10 306
 

 

Чтобы получить следующую цифру уменьшим число n в 10 раз, воспользовавшись операцией целочисленного деления, то есть n10= 10 306. Таким образом повторяем эти действия пока n>0/

Алгоритм решения задачи:

Программа:

CLS

INPUT "n="; n

max = 0

DO WHILE n > 0

cifra = n MOD 10

IF cifra > max THEN

max = cifra

ENF IF

n = n 10

LOOP

PRINT "max="; max

END

Результаты работы программы:

n=? 102106

max= 6

 


Алгоритм решения задачи:

Программа:

CLS

INPUT "a="; a

s = 0

DO WHILE s < a

i = i + 1

s = s + 1 / i

LOOP

PRINT "s="; s

END

Результаты работы программы:

a=? 4

s= 4.027246

 

 

4. Итерационные циклы

Циклы, характеризующиеся последовательным приближением вычисляемых величин к искомому значению, называются итерационными.

Для итерационных циклов характерно то, что количество повторений до реализации вычислительного процесса неизвестно. Циклом управляет не параметр цикла, а заданная погрешность вычислений e. Путем последовательного приближения к заданному значению e по рекуррентной формуле получается искомый результат. Если на очередной итерации погрешность больше или равна e, то цикл продолжается для вычисления очередного приближенного результата, иначе происходит выход из цикла. К итерационным циклам приводят задачи вычисления сумм бесконечных рядов, реализации численных методов интегрирования, решения алгебраических и нелинейных уравнений, решения систем уравнений, задачи оптимизации.

В итерационных процессах результаты, полученные на текущем шаге, используются в качестве исходных данных для расчета на следующем шаге цикла. При реализации итерационного циклического процесса на ЭВМ необходимо задавать начальные значения и критерий, в соответствии с которым произойдет окончание процесса.

В задачах с итерационными процессами, как правило, требуется определить:

- значение текущего элемента числового ряда;

- значение предыдущего элемента ряда;

- сумму элементов ряда;

- количество элементов ряда.

В конкретной задаче на числовой ряд обычно задается условие прекращения суммирования элементов ряда, например:

- значение текущего элемента ряда меньше (больше) заданного числа;

- сумма элементов ряда больше заданного числа;

- разность между текущим и предыдущим элементами ряда больше (меньше) заданного числа;

- номер элемента ряда больше заданного числа.

Рассмотрим пример итерационного процесса.

 
 


Программа:

CLS

x = 3!

e = .00001

y1 = -.5

DO

y0 = y1

y1 = (y0 - x) / (2 * x)

LOOP UNTIL ABS(y1 - y0) < e

PRINT "yn="; y1

END

Алгоритм решения задачи:

Результаты работы программы:

yn=-.5999997

 

 

 

 

 

5. Вычисление суммы ряда

Задача сводится к нахождению суммы:

каждое слагаемое которой является функцией от номера n, определяющего место этого слагаемого в сумме, а также может являться функцией одного или нескольких дополнительных параметров, например

или

 

 

Особенностью решения задачи является то, что число суммируемых слагаемых заранее неизвестно. Условием окончания цикла по накоплению суммы является достижение заданной точности. Если член ряда по абсолютной величине становится меньше заданной точности e (), то производится выход из цикла.

Обычно формула общего члена ряда принадлежит к одному из двух типов:

1)

2)

В первом случае каждый член ряда вычисляется по формуле общего члена ряда, подставляя нужное значение n. Примером этого случая является следующая задача.

 

Программа:

CLS

e = .001

s = 0

n = 1

a = 1 / ((2 * n - 1) * (2 * n + 1))

DO WHILE ABS(a) >= e

s = s + a

n = n + 1

a = 1 / ((2 * n - 1) * (2 * n + 1))

LOOP

PRINT "s="; s

END

Алгоритм решения задачи:

Результаты работы программы:

s= .483871

 

 

 

 

Во втором случае для вычисления члена ряда целесообразно пользоваться реккурентной формулой, то есть выражать каждый последующий член ряда через предыдущий. Это позволит существенно сократить объем вычислительной работы.

Для вывода реккурентных соотношений многих стандартных математических функций используются их разложения в степенные ряды (ряды Тейлора). Например, функцию cos(x) можно разложить в такой ряд:

 

Выражение для n-го слагаемого имеет вид , ряд начинается с n=0, a0=1.

Одним из свойств «хороших» степенных рядов является то, что любое слагаемое превышает оставшуюся бесконечную сумму «хвоста» ряда. На этом основании точность вычисления может быть оценена значением очередного слагаемого.

Для «экономии вычислений» степеней, факториалов и других регулярных выражений выводится рекуррентная формула, позволяющая вычислить текущее слагаемое через предыдущее. Это можно сделать аналитически, разделив в общем виде выражение an на an-1

Таким образом, чтобы получить текущее слагаемое необходимо умножить предыдущее на K(x,n):

Программа:

CLS

INPUT "x="; x

s = 0

n = 0

a = 1

e = .000001

WHILE ABS(a) >= e

s = s + a

n = n + 1

a = a * (-1) * x ^ 2 / ((2 * n - 1) * (2 * n))

WEND

PRINT "s="; s

PRINT "cos("; x; ")="; COS(x)

END

Алгоритм решения задачи:

Результаты работы программы:

x=? 0

s= 1

cos( 0 )= 1

x=? 1.57

s= 7.957619E-04

cos( 1.57 )= 7.962743E-04

x=? 3.14

s=-.9999988

cos( 3.14 )=-.9999987

x=? 4.71

s=-2.389011E-03

cos( 4.71 )=-2.38894E-03

 

Вычислим формулу вычисления текущего слагаемого:

Таким образом, чтобы получить текущее слагаемое необходимо умножить предыдущее на K(x,n):

Программа:

CLS

INPUT "x="; x

s = 0

n = 0

a = 1

e = .000001

WHILE ABS(a) >= e

s = s + a

n = n + 1

a = a * x * LOG(3) / n

WEND

PRINT "s="; s

PRINT "3^"; x; "="; 3 ^ x

END

 

Алгоритм решения задачи:

Результаты работы программы:

x=? 4

s= 80.99998

3^ 4 = 81

6. Контрольные вопросы

1. Какой алгоритм называется циклическим?

2. Какие структуры циклических алгоритмов Вы знаете?

3. Опишите работу оператора организации цикла с параметром.

4. В каких случаях применяется оператор FOR …NEXT?

5. Как работает оператор FOR …NEXT, если в его записи отсутствует величина шага, т. е. нет оператора STEP?

6. По какому правилу изменяется параметр цикла?

7. В каких случаях оператор организации цикла с параметром не выполнится ни разу?

8. В каких случаях оператор FOR …NEXT будет работать бесконечно?

9. Для чего предназначен оператор EXIT FOR?

10. Опишите работу оператора WHILE…WEND.

11. Опишите работу оператора DO…LOOP.

12. В чём отличие конструкции WHILE от конструкции UNTIL?

13. В чем отличие между операторами DO…LOOP с проверкой условия в начале и в конце?

14. Какие операторы относятся к циклической структуре типа «До»?

15. Какие операторы относятся к циклической структуре типа «После»?

7. Задачи для самостоятельной работы

Табулирование функции

1. при изменении аргумента а от 30 с шагом 40 до получения 20 значений. 2. , а = 0,4 (0,2) до получения 15 значений. 3. , а = 0,4 (0,2) до получения 17 значений.

Вычисление конечных суммы и произведения

1. а) Вычислить: б) Дано натуральное n. Вычислить: 2. а) Вычислить:

Цикл с условием

1. Верно ли, что сумма его цифр больше 10? 1. Верно ли, что произведение его цифр меньше 50? 2. Верно ли, что количество его цифр есть четное число?

Итерационные циклы

1. при х = 3,0 и . Начальные значения: n = 0, у0­­ = -0,5. 2. при х = 2,1 и .

Вычисление суммы ряда

1. при если 2.

Содержание

1. Понятие циклического алгоритма.. 4

2. Организация циклов с параметром... 5

2.1. табулирование функции.. 6

2.2. Вычисление конечной суммы.. 13

2.3. Вычисление конечного произведения. 16

2.4. Вложенные циклы.. 19

3. Организация циклов с предусловием и постусловием... 21

4. Итерационные циклы... 27

5. Вычисление суммы ряда.. 29

6. Контрольные вопросы... 35

7. Задачи для самостоятельной работы... 36

7.1. Табулирование функции.. 36

7.2 Вычисление конечных суммы и произведения. 53

7.3. Цикл с условием.. 63

7.4. Итерационные циклы.. 64

7.5. Вычисление суммы ряда.. 67


Алгоритмический язык QBASIC

ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ

Методические указания

 

Часть 3

 

 

Составители: Т.А.Хрузина

В.А.Садыкова

 

 

Лицензия № от

 

Подписано в печать Формат 60х84 1/16

Бумага писчая. Печать Riso. усл.печ.л.

уч.-изд.л. Тираж 200 экз. Заказ

 

Издательство Нижнекамского химико-технологического института

423570, г.Нижнекамск, Строителей, 47