к оглавлению

Понятие о циклах. Организация циклов с использованием IF... THEN и DO.. LOOP

В теоретической части изучения дисциплины Вас ознакомили с понятием циклов, циклических алгоритмов. Циклический алгоритм – алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов.

Цикл программы – последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторого условия.

Программную реализацию организации циклов с использованием IF..THEN продемонстрируем на достаточном количестве различных примеров. Самые “яркие” и популярные задачи – это задачи на суммирование, с них и начнем демонстрацию программ по организации циклов.

1.Найти сумму всех двузначных чисел. Программа может выглядеть, например, так.

…………………Программа 8.1…………………………………….

s = 0: n = 9

10 n = n + 1

if n < 100 then s = s + n: goto 10

?”Сумма двузначных чисел равна”; s

Проверка условия n<100 проводится ДО операции суммирования.

Обратите внимание на конструкции типа n = n + 1 и s = s + n. Они на первых порах трудно воспринимаются студентами т.к. с точки зрения математики они бессмысленны.

Составим эту же программу, организовав проверку условия “число двузначное” ПОСЛЕ операции суммирования.

…………………Программа 8.1.2…………………………………….

s = 0: n = 9

10 n = n + 1

s = s + n

if n < 100 then 10

?”Сумма двузначных чисел равна”; s

Одними из самых популярных задач являются задачи на суммирование по формуле с прекращением его по различным условиям.

Обратите внимание на “золотое правило” организации суммирования: s = 0

2.Найти сумму членов числовой последовательности с общим членом an = ,

используя различные варианты по завершению суммирования, например: 2.1 сумму k членов, 2.2 суммировать до тех пор, пока общий член не станет меньше заданного ε.

…………………Программа 8.2…………………………………….

s = 0: i = 0

input”Задайте точность ε”;e

10 i = i +1: a = i^3/(2^i + i)

if a > e then s = s + a: goto 10

?”Запишите сумму”;s

Переработайте программу и найдите сумму 50 членов числовой последовательности.

Как и прежде, и в дальнейшем подчеркиваем, что приводится один из возможных вариантов программы, рекомендуем и коллегам и студентам искать и обязательно находить другие варианты.

3.Аналогично организуются циклы по нахождению произведений. Пример: найти произведение 50 сомножителей числовой последовательности с общим членом: an =

…………………Программа 8.3…………………………………….

i = :0 p = 1: ‘******Золотое правило нахождения произведения**********

10 i = i + 1

p = p*(i + 1)/(i^2 + 3)

if < 50 then 10

?”Пишите искомое произведение”;p

В QB существуют и другие способы организации циклических программ. Наиболее удобной является конструкция DO…LOOP. Законспектируйте ее форматы.

DO WHILE <условие, при ВЫПОЛЕНИИ которого выполняется цикл>

<операторы, тело цикла>

LOOP

Обратите внимание, что выполняемое условие проверяется ДО операторов цикла. Возможна проверка ПОСЛЕ цикла:

DO

<операторы, тело цикла>

LOOP WHILE <условие, при ВЫПОЛЕНИИ которого выполняется цикл>

Иногда удобнее использовать конструкции “отрицания”, т.е. исполнение цикла происходит при НЕВЫПОЛНЕНИИ условия.

DO UNTIL <условие, при НЕВЫПОЛЕНИИ которого выполняется цикл>

<операторы, тело цикла>

LOOP

или

DO

<операторы, тело цикла>

LOOP UNTIL <условие, при НЕВЫПОЛЕНИИ которого выполняется цикл>

Приведем конкретные примеры.

4.Дано a и n. Вычислить сумму .

…………………Программа 8.4…………………………………….

LOCATE 10, 25: INPUT "Введите значение а "; a

LOCATE 12, 25: INPUT "Число слагаемых"; n

i = 0: s = 0

DO WHILE i < n

i = i + 1

s = s + 1 / a ^ i

LOOP

LOCATE 14, 25: PRINT "Запишите сумму"; s

5. Вывести на экран таблицу умножения по требованию.

…………………Программа 8.5…………………………………….

REM****Таблица умножения по требованию******

LOCATE 3, 4

INPUT "Введите число для распечатки таблицы умножения"; a

n = 0

DO WHILE n < 10

n = n + 1

PRINT TAB(10); a; "x"; n; "="; a * n

LOOP

Или так:

…………………Программа 8.5.1…………………………………….

LOCATE 3, 4

INPUT "Введите число для распечатки таблицы умножения"; a

n = 0

DO

n = n + 1

PRINT TAB(10); a; "x"; n; "="; a * n

LOOP WHILE n < 10

6.Вы знаете две знаменитые математические константы: число p и число e. Эйлер открыл число, названное его именем, так: это предел на бесконечности выражения

Составим программу вычисления числа Эйлера, выдавая результат через n, кратные 10000, чтобы убедиться, что такой предел действительно существует. Эта программа не имеет естественного окончания, потому выход из нее только через “аварийный” останов.

Один из вариантов программы.

…………………Программа 8.6…………………………………….

CLS : s# = 0: n = 0

10 n = n + 1: m# = LOG(n + 1)

s = s + 1 / n

IF n / 10000 = n \ 10000 THEN PRINT "при n="; n; "c= "; s# - m#

GOTO 10

В этой программе использовались переменные, имя которых оканчивается знаком #. Это признак переменной ДВОЙНОЙ точности, запустив программу, Вы в этом убедитесь.

8.Условия могут быть “вложенными”. Рассмотрим популярную задачу. Найти все числа в пределах 1000, делящиеся, например, на 73

…………………Программа 8.8………………………………….

10 IF i < 1000 THEN

i = i + 1

IF i MOD (73) = 0 THEN PRINT i

GOTO 10

END IF

Использовалась функция MOD. Конструкцию i MOD (73) = 0 можно описать так: остаток от деления числа i на 73 равен нулю.

9.Еще одна популярная задача. Найти все делители введенного пользователем числа.

…………………Программа 8.9………………………………….

LOCATE 2, 29: INPUT "Введите число"; n

10 IF i < n THEN

i = i + 1

IF n MOD (i) = 0 THEN PRINT TAB(10); i

GOTO 10

END IF

10.В заключение урока рассмотрим еще одну задачу на суммирование.

В операторе DATA заданы 10 целых, среди которых положительные и отрицательные, чисел. Найдите количество и суммы положительных и отрицательных чисел.

…………………Программа 8.10…………………………………….

DATA 1,-3,9,-4,7,8,-3,0,-4,2

k = 0:’****Это счетчик чтения чисел

kp = 0:’****Это счетчик числа положительных чисел

kо = 0:’****Это счетчик числа отрицательных чисел

sp = 0:’****Это сумма положительных чисел

so = 0:’****Это сумма отрицательных чисел

5 READ a: k = k + 1

IF a > 0 THEN kp = kp + 1: sp = sp + a

IF a < 0 THEN ko = ko + 1: so = so + a

IF k < 10 THEN 5

?”Сумма положительных чисел”;sp;”таковых”; kp

?”Сумма отрицательных чисел”;sо;” таковых”; kо

Вам предлагается интересное домашнее задание.

.Двое любителей азартных игр поочередно бросают по две игральных кости, первый поставил на сумму очков 7, второй – на 8. Игра продолжается бесконечно. Кто из них выиграет? Генерируя бросание костей случайными числами, зациклите программу и выдавайте результат в процентах для каждого игрока через каждые 1000 бросаний костей каждым игроком. Таким образом, Вы узнаете, что чаще выпадает в сумме 7 или 8.

Что нового Вы узнали и чему научились на занятии №8

к оглавлению

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution