Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

Программирование циклических вычислительных процессов

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

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

Обычно ЦВП содержит 4 части:

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

2). Выполнение тела цикла (группы повторяющихся операторов).

3). Подготовка к повторению цикла – изменение значений переменных, управляющих циклом.

4). Проверка условий окончания цикла – по результатам проверки принимается решение о возврате к началу цикла для его повторения или о выходе из цикла.

Различают циклы с проверкой предусловия, когда проверка условия окончания цикла производится перед очередным повторением цикла, и циклы с проверкой постусловия, когда проверка условия окончания цикла производится после очередного его повторения.

Блок-схема цикла Блок-схема цикла

с предусловием с постусловием

Для организации циклов в программном коде могут быть использованы операторы If, Do …Loop и For …Next.

Оператор ForNext

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

Синтаксис:

For Имя_переменной = m1 To m2 [Step h]

Оператор 1

Оператор 2

Оператор n

Next Имя_переменной ,где

Имя_переменной – переменная, которую определяет программист в качестве счетчика цикла,

m1 – число, задающее начальное значение счетчика;

m2 – конечное значение счетчика,

Step – ключевое слово, используемое для задания шага изменения счетчика цикла, необязательный элемент, если шаг = 1,

h – число, задающее шаг изменения счетчика цикла, т. е. значение, на которое увеличивается (если шаг >0) или уменьшается (если шаг <0)значение счетчика после каждого выполнения тела цикла,

Next – конец цикла.

В строке с оператором For сначала счетчику цикла присваивается начальное значение m1 и оно сравнивается с конечным значением m2. Если шаг >0 и значение счетчика > m2, то цикл ни разу не выполняется и управление передается оператору, следующему за словом Next, т. е. происходит выход из цикла. Если же значение счетчика < или = m2, то выполняется тело цикла, затем изменяется значение счетчика на величину шага и происходит возврат на строку с оператором For. Здесь текущее значение счетчика сравнивается с m2:

  • если оно > m2 и шаг > 0, то происходит выход из цикла;

  • если шаг < 0, то цикл выполняется пока значение счетчика > или = m2, выход из цикла – при значении счетчика < m2;

Если шаг = 1, то ключевое слово Step можно не писать и шаг не указывать.

Примеры.

1). For i=1 to 10 2). For i=1 to 10 step 2

… …

next i next i

3). For j=12 to 1 step -1 …

next i

В блок-схеме цикл с оператором For изображается следующим образом:

Из цикла с оператором For возможен досрочный выход с использованием оператора Exit For.

Задача 1

Требуется вычислить сумму 10 значений функции f (x) = x + sin x при значениях аргумента х, изменяющихся от начального значения хнач = 1 с шагом Δх = 0,1 т. е. вычислить сумму

при хнач = 1 и Δх = 0,1.

Составим алгоритм решения задачи, который строится по принципу накопления суммы, т. е. каждое вычисленное значение функции f(xi) добавляется к сумме предыдущих значений:

S = S + f(xi), где f(xi) = xi + sin xi

Введем переменные:

S сумма значений функции

x значение аргумента

dx шаг изменения аргумента

i счетчик цикла

Зададим начальные значения переменных

i=0, S=0 присвоим

x=1, dx=0.1 введем с клавиатуры

  1. Вычисляем 1-е значение функции при х = 1

f(x)=f(1)

--Добавляем вычисленное значение к сумме

S=S+f(1)

--Изменяем значение х

х=х+dx

--Увеличиваем значение счетчика на 1

i=i+1

--Проверяем число вычисленных значений:

i<10? Да

  1. Вычисляем 2-е значение функции: f(x)= f(1,1)

--Добавляем вычисленное значение к сумме: S=S+f(1,1)

--Изменяем значение х: х=х+dx x=1,2

--Увеличиваем значение счетчика на 1: i=i+1 i=2

--i<10? Да

  1. Вычисляем 3-е значение функции: f(x)= f(1,2)

-- и т. д….

10. Вычисляем 10-е значение функции: f(x)= f(1,9)

--Добавляем вычисленное значение к сумме: S=S+f(1,9)

--Изменяем значение х: х=х+dx x=2

--Увеличиваем значение счетчика на 1: i=i+1 i=10

--i<10? Нет, i=10

Вычисление закончено. Выводим на экран значение суммы S.

В пунктах 1 – 10 выполняются одни и те же действия с различными значениями переменных. Их можно оформить в виде цикла.

Блок-схема алгоритма

Напишем программный код процедуры для вычисления суммы.

Private Sub btnOption_Click()

Dim x, dx, S as single, i as byte

x=Val(txtX.Text)

dx=Val(txtdX.Text)

S=0

i=0

For i=1 to 10

S=S+x+sin(x)

X=x+dx

Next i

txtS.Text=Str(S)

End Sub

Оператор DoLoop

Оператор организует цикл с условием, т. е. цикл с неизвестным заранее числом повторений цикла.

Он имеет 4 формы записи.

а) цикл с предусловием б) цикл с постусловием

D

Do

оператор 1

оператор 2

оператор m

Loop While Условие

делать пока истина

o While Условие

оператор 1

оператор 2

оператор m

Loop

Условие – это логическое выражение, имеющее значение «истина» или «ложь». Такие циклы выполняются пока Условие имеет значение «истина». Когда Условие принимает значение «ложь», происходит выход из цикла и выполняется оператор, следующий за циклом.

Вместо слова While можно использовать служебное слово Until (пока не):

в) цикл с предусловием г) цикл с постусловием

D

Do

оператор 1

оператор 2

оператор m

Loop Until Условие

делать пока не истина

o Until Условие

оператор 1

оператор 2

оператор m

Loop

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

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

Возможен досрочный выход из цикла, не дожидаясь выполнения условия выхода. Для этого используется оператор Exit Do.

Р ассмотрим несколько вариантов алгоритма решения задачи нахождения суммы 10 значений функции, используя для организации цикла различные формы оператора Do…Loop.

а) Do While …Loop

Блок-схема:

Программный код процедуры вычисления суммы.

Private Sub btnOption_Click()

Dim x, dx, S as single, i as byte

x=Val(txtX.Text)

dx=Val(txtdX.Text)

S=0

i=0

Do While i< 10

S=S+x+sin(x)

x=x+dx

i=i+1

Loop

txtS.Text=Str(S)

End Sub

b) Do …Loop While

Блок-схема: Программный код:

Private Sub btnOption_Click()

Dim x, dx, S as single, i as byte

x=Val(txtX.Text)

dx=Val(txtdX.Text)

S=0

i=0

Do

S=S+x+sin(x)

x=x+dx

i=i+1

Loop While i< 10

txtS.Text=Str(S)

End Sub

в) Do Until…Loop

Блок-схема та же как в случае а), отличается только условием:

Фрагмент программного кода:

Do Until i>= 10

S=S+x+sin(x)

x=x+dx

i=i+1

Loop

Задача 2

Вычислить произведение 10 значений функции f(x)=x+sinx при значениях аргументах, изменяющихся от начального значения х = хнач с шагом = dx, т. е. вычислить произведение P:

при х = хнач и шагом dx

Для вычисления произведения используем рекуррентное выражение Р=Р*f(xi), где f(xi) = xi+sinxi

Начальное значение Р возьмем равным 1. Алгоритм аналогичен алгоритму для вычисления суммы.

Фрагмент программного кода:

Р=1

i=0

Do

P=P*(x+sin(x))

x=x+dx

i=i+1

Loop Until i >= 10

Бесконечные циклы

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

--пропуск оператора, в котором изменяется значение переменной, входящей в условие окончания цикла:

i=0

Do While i<5 ‘в теле цикла пропущена строка i=i+1

y=x+5

x=x+dx

Loop

-- переменная, входящая в условие окончания цикла, никогда не примет значения, при котором происходит выход из цикла:

n=100

Do While n<=100

y=x+sin(x)

x=x+dx

n=n-1

Loop

--размещение оператора для изменения переменной цикла внутри оператора If.

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

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

- внешний цикл не может закрываться внутри вложенного цикла;

- внешние циклы закрываются после закрытия вложенных циклов;

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

внешний и вложенные циклы должны быть организованы по разным переменным (счетчикам).

П римеры вложенных циклов:

Задача 3 Табулирование функции.

Вычислить таблицу значений функции f(x)=sinx для , шаг изменения аргумента – dx. Вывести таблицу на экран.

Таблицу выведем на форму при щелчке на командной кнопке Start. Для вывода таблицы используем метод Print, который позволяет выводить значения x и y в определенные позиции строк на форме. для этого используют функции Tab(n) и Spc(m).

n - аргумент функции Tab(n) – это номер позиции в строке, начиная с которой выводится следующее за функцией выражение. Например,

Form1.Print Tab(8); “x=”;

Функция Spc(m) позволяет вывести m пробелов перед выводом следующего за ней выражения. Например,

Form1.Print Tab(8); “x”; Spc(7); “y”

Блок-схема:

Программный код:

Private Sub btnStart_Click()

Dim x,y, a, b, dx, S as single

a=Val(txta.Text)

b=Val(txtb.Text)

dx=Val(txtdX.Text)

Form1.Print Tab(8); “x”; Spc(7); “y”

x=a

Do While x <= b

y=sin(x)

Form1.Print Tab(6); x; Tab(12; y

x=x+dx

Loop

End Sub