Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Характерные моменты циклического алгоритма



- первоначальный вход в цикл выполняется через блок подготовки;

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

- число повторений цикла должно быть конечным, однако, не всегда число повторений известно или может быть вычислено заранее. Выход из цикла осуществляется при выполнении некоторых условий. Когда число повторений известно или может быть определено заранее, выход из цикла осуществляется при достижении параметром некоторой заранее заданной величины. Для такого рода задач используется оператор цикла «FOR … NEXT». В общем виде этот оператор цикла записывается следующим образом:

FOR I = I0 TO IN STEP DN ' начало цикла

операторы «тела цикла»

NEXT I

Здесь:

I - параметр цикла (переменная),

I0 - начальное значение параметра цикла (переменная или число),

IN - конечное значение параметра цикла (переменная или число),

DN - шаг изменения параметра (переменная или число), если шаг равен единице, то его можно опустить.

Этот оператор многократно выполняет операторы «тела цикла», находящиеся между FOR и NEXT для всех значений параметра I от I0 до IN. Структура самого оператора включает и подготовку цикла, и изменение параметра, и проверку условия выхода из цикла.

ПРИМЕР 11.1(задача типа а) Составить схему алгоритма и программу вычисления всех значений функции F(x) для всех значений аргумента х: F(x) = SIN(x)+COS(x), при -p £ х £p, шаг изменения аргумента Dх=0.
Рисунок 3. Схема алгоритма к примеру 11.1 REM Циклический алгоритм CLS CONST PI=3.14 PRINT " X ", " Y " FOR X= - PI TO PI STEP 0.1 Y= SIN(x)+COS(x) PRINT X,Y NEXT X END

Результат выполнения программы на экране будет иметь вид:

Х Y -3.14 -1.001591 -3.04 -1.096262 -2.94 -1.179979 -2.84 -1.251906 …………………………………. 2.859999 -.6827266 2.959999 -.8029594 3.059999 -.9151694 Press any key to continue Чтобы продолжить, нажмите любую клавишу

Пояснения к программе:

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

ПРИМЕР 11.2(задача типа б) Вычислить сумму n слагаемых ряда:
  Рисунок 4. Схема алгоритма к примеру 11.2     REM Цикл с известным числом REM повторений INPUT "Число слагаемых:", N S = 1 FOR I=1 TO N S=S+1/(3*I) NEXT I PRINT "Сумма ряда:"; S END Результат выполнения на экране: Сумма ряда: <число>
ПРИМЕР 11.3(задача типа б) Вычислить факториал n чисел: P= n!=1*2*3*….*n
  Рис. 5. Схема алгоритма к примеру 11.3 REM Цикл с известным числом REM повторений INPUT "Число сомножителей:", N P = 1 FOR I=1 TO N P=P*I NEXT I PRINT N; "-факториал:"; P END   Результат выполнения на экране: N-факториал: <число>
     

Пояснения к программам:

- с помощью циклов в этих программах последовательно вычисляется значение суммы и факториала (произведения). При этом каждое следующее значение вычисляется через предыдущее. Результатом многократных вычислений является одна величина - сумма ряда заданного числа слагаемых (11.2) или произведение заданного числа сомножителей (11.3);

- в приведенных примерах 11.1 - 11.3 число повторений легко определяется заранее. В примере 11.1 параметром цикла является переменная «х», а в 11.2 и 11.3 - переменная «I».

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

а)DO WHILE L <операторы "тела цикла"> LOOP б)DO UNTIL L <операторы "тела цикла"> LOOP
в) DO <операторы "тела цикла"> LOOP WHILE L г) DО <операторы "тела цикла"> LOOP UNTIL L

Здесь: L - логическое выражение.

Операторы, находящиеся между DO и LOOP повторяются до тех пор, пока выражение, стоящее после WHILE - истинно или до тех пор, пока выражение, стоящее после UNTIL - ложно.

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

ПРИМЕР 11.4. Вычислить сумму S ряда с заданной точностью е и количество слагаемых N, необходимых для достижения заданной точности:
    Рисунок 6. Схема алгоритма к примеру 11.4     REM Цикл с неизвестным числом REM повторений INPUT "Введите точность", e S = 1: I=1 DO A = 1/(3*I) ' слагаемое S = S+A: I=I+1 LOOP WHILE A > e PRINT "Сумма ряда:"; S-A,"N="; I-1 END   Результат выполнения на экране: Сумма ряда:<число> N=<число>

Пояснения к программе:

- вычислить сумму ряда с точностью е - это значит производить вычисления до тех пор, пока очередной член последовательности не станет меньше или равен заданной точности;

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

Далее приведено еще несколько примеров циклических программ.

ПРИМЕР 11.5. Дано натуральное число n. Определить количество цифр в этом числе.
 
 


Рисунок 7. Схема алгоритма к примеру 11.5

CLS REM Ввод числа N REM Проверка: N - натуральное DO INPUT N LOOP N<>INT(N) OR N<=0 I%=0: X=N DO WHILE X<>0 X = X \ 10 ‘ уменьшаем число на разряд I%=I%+1 LOOP PRINT “В числе”; N; I%; “цифр”» END  

Пояснения к программе:

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

- цикл завершается, когда число становится равным нулю (т.е. число «закончилось»).

ПРИМЕР 11.6. Дано натуральное число n. Определить количество цифр в этом числе.
    Рисунок 8. Схема алгоритма к примеру 11.6 CLS REM Ввод числа N REM Проверка: N - натуральное DO INPUT N LOOP N<>INT(N) OR N<=0 I%=0: X=N DO WHILE X<>0 X = X \ 10 ‘ уменьшаем число на разряд I%=I%+1 LOOP X=N FOR J=I TO 0 STEP -1 REM получаем очередную цифру C=X MOD 10 REM уменьшаем число на разряд X=X \ 10 ‘ REM формируем новое число Z=Z + C * 10^(J-1) NEXT J PRINT Z END  

Пояснения к программе:

- этот пример является продолжением предыдущего;

- после того как мы получили количество цифр в числе I, организуем цикл, начиная с I до 0 с шагом -1, в котором формируется новое число с обратным порядком следования цифр: получаем очередную цифру исходного числа, уменьшаем число на разряд, добавляем к новому числу полученную цифру, умноженную на 10 в соответствующей степени (смотри программу).

ПРИМЕР 11.7. Определить является ли случайное число Х простым.

CLS

REM Задаем целое число с помощью датчика случайных чисел

RANDOMIZE TIMER

X=FIX(RND*100)

REM Определяем делится ли введенное число на какое-либо другое кроме 1 и REM самого себя без остатка

FOR j = 2 TO X\2 'т.к. делители числа образуют пары

REM Если находится делитель, то число не простое, дальше можно не делить

IF X MOD j = 0 THEN PRINT Х, " - это число не простое": END

NEXT j

REM Если вышли из цикла, значит делителей у числа нет

PRINT USING " простое число: "; Х

END

ПРИМЕР 11.8. Вводится последовательность чисел, 0 – конец последовательности. Определить, содержит ли последовательность хотя бы два равных соседних элемента.
 
 


Рисунок 8. Схема алгоритма к примеру 11.8

CLS INPUT “X=“, X INPUT “X=“, Y F=0 DO WHILE Y <> 0 IF X = Y THEN F = 1 X = Y INPUT “X=“, Y LOOP IF F = 0 THEN REM Равных соседних элементов нет PRINT “НЕТ” ELSE REM Есть равные соседние элементы PRINT “ДА” ‘ END IF END  

Пояснения к программе:

- вводим два первых элемента последовательности как X и Y, задаем начальное значение переменной F (признак того, что в последовательности нет равных элементов F=0 или есть равные элементы F=1);

- в цикле сравниваем два числа и, если они равны, устанавливаем значение F=1;

- запоминаем значение Y в X и вводим новое Y;

- в зависимости от значения переменной выводим результат.





Дата публикования: 2015-03-29; Прочитано: 406 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...