Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Общие сведения. Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор






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

Для организации цикла необходимо выполнить следующие действия:

· перед началом цикла задать начальное значение параметра;

· внутри цикла изменять параметр цикла с помощью оператора присваивания;

· проверять условие повторения или окончания цикла;

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

Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с пред- и постусловием).

В цикле с известным числом повторений параметр изменяется в заданном диапазоне.

Если в цикле изменяется простая переменная, то она является параметром цикла; если в цикле изменяется переменная с индексом, то индекс этой переменной является параметром цикла.

Ниже приведены графические обозначения (обозначения на блок-схемах) алгоритмов циклических структур (рисунок 1).

На схемах СЕРИЯ обозначает один или несколько любых операторов; УСЛОВИЕ есть логическое выражение (ЛВ) (если его значение ИСТИНА, переход происходит по ветви ДА, иначе — по НЕТ). На схеме цикла с параметром использованы обозначения: ПЦ — параметр цикла, НЗ — начальное значение параметра цикла, КЗ — конечное значение параметра цикла, Ш — шаг изменения параметра цикла.

     
а б   в    

Рис 2

а-цикл с предусловием (цикл ПОКА), б-цикл с постусловием (цикл ДО), в-цикл с параметром

 

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

В примерах мы будем использовать запись алгоритмов с помощью блок-схем и словесное описание.

Пример 1. Представленная на рисунке 3 блок-схема программы возводит введенное число в 10 степень и выводит результат.

Рис 3 Блоксхема программы

Пример 2. Подсчитать количество нечетных цифр в записи натурального числа n.

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

Рис 4 Примеры блоксхем 1. Ввести число n 2. K: = 0 {подготавливаем счётчик} 3. Если n = 0, переход к п. 7 4. Если n mod 10 mod 2 = 1, то K: = K +1 5. n: = n div 10 6. Переход к п. 3 7. Вывод K 8. Конец

Задача решена двумя способами. Слева решение оформлено с использованием цикла с предусловием, справа — с постусловием.

Пример 3. Дана последовательность, общий член которой определяется формулой

Вычислить при n > 2 сумму тех ее членов, которые больше заданного числа e.

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

 

Рис 6 Пример блоксхемы

 

1. Ввести e

2. S: = 0

3. A: = 1/4

4. n: = 3

5. Сравнить А с e. Если A> =e, переход к п. 10

6. S: = S + A

7. A: = (n-1)/(n*n)

8. n: = n + 1

9. Переход к п. 5

10. Вывод S

11. Конец

В рассмотренных выше примерах количество повторений заранее неизвестно. В первом оно зависит от количества цифр в записи натурального числа, во втором — от числа e.

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

Пример 4. Найти произведение первых k натуральных чисел, кратных трём.

При составлении алгоритма учтем, что первое натуральное число, кратное 3, есть тройка, а все последующие больше предыдущего на 3.

   

Рис 7 Пример блок-схемы

1. Ввод k

2. P: = 1 {здесь накапливаем произведение}

3. T: = 0 {здесь будут числа, кратные 3}

4. I: = 1

5. Если I > k, переход к п. 10

6. T: = T + 3

7. P: = P * T

8. I: = I + 1

9. Перейти к п. 5

10. Вывод P

11. Конец

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

Пример 5 Для заданного x и n вычислить

Здесь n! = 1. 2. 3.... n (читается как " n-факториал").

 

Turbo Pascal Program SumUp; Uses Crt; Var x, S, P: Real; {P - очередное слагаемое} i, n: Integer; BEGIN ClrScr; Write('Введите n = '); ReadLn(n); Write('Введите x = '); ReadLn(x); WriteLn; S: = 1; P: = 1; For i: = 1 to n do begin P: = - P*x /i; {получение очередного слагаемого} S: = S + P end; WriteLn('О т в е т: S = ', S: 7: 3); ReadLn END. Блок-схема  

 

Рис 8 Пример блоксхемы

 

Пример 6 Фрагмент программы простой парольной защиты

For I: =1 to 3 do begin {дается три попытки ввести пароль}

Write (‘Введите ПАРОЛЬ’);

ReadLn(S); {переменные S и Parol – одного типа}

IF S=Parol

THEN BREAK {прерывание цикла защиты}

ELSE IF I< 3 THEN CONTINUE; {даем еще попытки}

WriteLn(‘Не знаете Пароль! ’); {сработает при I=3}

ReadLn;

HALT {прерывание программы}

End;

{ Защищаемый участок программы }

Пример 7. Числа Фибоначчи (Fi) определяются по формулам F0 = F1 = 1; Fi = Fi –1 + Fi –2 при i = 2, 3,... (каждое очередное число равно сумме двух предыдущих). Вычислить сумму всех чисел Фибоначчи, которые не превосходят заданного натурального числа М.

  Блок-схема

Рис 9 Пример блок-схемы

 

Turbo Pascal

Program SummaFib; Uses Crt; Var M, {заданное число } F0, F1, F2, {три последовательных числа Фибоначчи} S: Integer; {сумма чисел Фибоначчи}BEGIN ClrScr; Write(’Введите натуральное М: ’); ReadLn(M); F0: =1; F1: =1; F2: =2; S: =4; {4 – сумма первых трех чисел Фибоначчи} Write(’Числа Фибоначчи, не превосходящие ’, M, ’: ’, F0: 4, F1: 4); While F2< =M do begin F0: =F1; F1: =F2; Write(F1: 4); F2: =F0+F1; S: =S+F2; end; S: =S–F2; {вычитание из суммы последнего числа, которое превосходит М} WriteLn; WriteLn; WriteLn(’О т в е т: Сумма этих чисел равна ’, S); ReadLnEND.

Пример 8 Определим сумму ряда , пока очередной член ряда не станет меньше 10-8.

Var S, a, eps: real;

N: word;

Begin

Eps: =1e-8; {точность вычислений}

S: =0; N: =0; {начальные значения параметров}

REPEAT

a: =1/(2*N+1)/(2*N+1); {текущий член ряда}

inc(N); {счетчик членов ряда}

S: =S+a; {частичная сумма ряда}

UNTIL a< eps;

WriteLn(‘S=’, S: 10: 8);

ReadLn

END.

Пример 9 Предотвращение неверного ввода данных. Модернизируем программу определения площади треугольника по трем сторонам (из предыдущего практического занятия) так, чтобы при неверном вводе данных происходило не просто прерывание программы, а возникал запрос на их корректировку (с повтором до выполнения нужных условий).

Var a, b, c, p, S: real;

Begin

REPEAT {проверка корректности ввода данных}

REPEAT

Write(‘Ввести сторону а=’); ReadLn(a);

IF a< =0 THEN WriteLn(‘должно быть a> 0! ’) Until a> 0;

REPEAT

Write(‘Ввести сторону b=’); ReadLn(b);

IF b< =0 THEN WriteLn(‘должно быть b> 0! ’) Until b> 0;

REPEAT

Write(‘Ввести сторону c=’); ReadLn(c);

IF с< =0 THEN WriteLn(‘должно быть с> 0! ’) Until с> 0;

IF (a+b< =c) and (a+c< =b) and (c+b< =a)

THEN WriteLn(‘сумма двух сторон должна больше третьей! ’)

UNTIL (a+b> c) and (a+c> b) and (c+b> a);

{Расчет по проверенным данным}

p: =(a+b+c)/2;

S: =sqrt(p*(p-a)*(p-b)*(p-c));

WriteLn(‘Площадь: ’, S: 15: 5);

ReadLn

END.

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

Пример 10 Рассчитать период (в месяцах) роста банковского вклада в m раз при известной ежемесячной процентной ставке pr (1% cсоответствует pr=1).

Var pr, m, s, s0: double;

N: word;

Begin

Repeat

Write (‘Введи проценты по вкладу: ’); redLn(pr);

Write (‘Введи коэффициент роста вклада: ’); redLn(m)

Until (m> 1) and (pr> 0);

N: =0: {счетчик месяцев}

s0: =1000; {начальная сумма вклада – произвольно}

s: =s0; {текущая сумма вклада}

Repeat {перебор по месяцам}

s: =s*(1+pr/100);

inc(N)

Until s/s0> =m;

WriteLn (‘количество месяцев вклада: ’, N);

ReadLn

End.







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.