Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
09. 01 ) сумма регистрационного взноса увеличивается на 30%, необходимы оригиналы гарантийного письма и договора в день начала конференции К сожалению...полностью>>
'Документ'
Фронт 1 Вечерний звон Рот Фронт 1 Маска Рот Фронт 1 Огни Москвы Рот Фронт 1 Осенний вальс Рот Фронт 1 Ромашки Рот Фронт 1 НАИМЕНОВАНИЕ ПРОИЗВ-ЛЬ КОЛ-В...полностью>>
'Решение'
Об эпидемической ситуации по заболеваемости гриппом и острыми респираторными вирусными инфекциями населения Удмуртской Республики. О введении противоэ...полностью>>
'Документ'
Напишите уравнения реакций, с помощью которых можно осуществить следующие превращения: Na 1 Na2O2 2 Na2O 3 Na OH 4 Na2SO4 Превращение 1 рассмотрите в ...полностью>>

Главная > Документ

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

Циклы

Занятие I

Тема: Циклические алгоритмы. Цикл с предусловием.

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

Определение. Цикл – это последовательность операторов, которая может выполняться более одного раза.

Определение. Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.

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

Исходными данными в этом случае являются переменная N - количество чисел и сами эти числа. Значение очередного числа обозначим переменной Х. Результатом работы алгоритма станет сумма этих чисел, которую обозначим переменной S.

S=x1+x2+x3+...+xn

Допустимые значения переменной N должны удовлетворять условию n>0, так как количество слагаемых не может быть числом отрицательным.

Как же мы должны решать эту задачу? Сначала нужно запросить, сколько чисел нужно будет сложить и считать это число в переменную N. Затем нужно так организовать операторы, чтобы программа запрашивала очередное число и каждый раз складывала его с предыдущими; и повторяла эту группу операторов N раз.

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

• цикл с предусловием;

• цикл с постусловием;

• цикл со счетчиком.

Познакомимся с первым из них – оператором цикла с предусловием while.

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

При выполнении оператора while определенная группа операторов выполняется до тех пор, пока определенное в операторе while булево условие истинно. Если условие сразу ложно, то оператор не выполнится ни разу.

Общая форма записи следующая

while <булево выражение> do

begin

группа операторов

end;

На русском языке это звучит примерно так:

пока выполняется это условие делай

от начала

группа операторов

до конца;

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

При использовании цикла с предусловием надо помнить следующее:

1) значение условия выполнения цикла должно быть определено до начала цикла;

2) если значение условия истинно, то выполняется тело цикла, после чего повторяется проверка условия. Если условие ложно, то происходит выход из цикла;

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

Вернемся к нашей задаче вычисления суммы чисел. При вычислении суммы используем следующий прием: вначале, когда еще не задано ни одно слагаемое, сумму полагают равной нулю (S:=0), а затем, получая очередное слагаемое, прибавляют его к сумме (S:=S+x) (см. программу ниже).

Очень важное значение в операторе цикла имеет так называемая переменная цикла. В нашей программе она называется i. С ее помощью мы обращаемся к пользователю за очередным числом (write (‘Введите ‘,i,’-ое число ’)) и считаем количество уже введенных чисел (i:=i+1), чтобы не запросить лишнее. Одновременно переменная цикла участвует в булевом выражении (i<=N).

Рассмотрите внимательно программу, решающую нашу задачу.

Program Summa;

Uses

Crt;

Var

i,

N : integer;

x, S : real;

Begin

ClrScr;

write (‘Сколько чисел для сложения? ‘);

readln (N);

S:=0;

i:=1;

while i<=N do

begin

write (‘Введите ‘,i,’-е число ’);

readln (x);

S:=S+x;

i:=i+1;

end;

write (‘Сумма введенных чисел равна ‘,s:5:2);

readln;

End.

Хотелось бы, чтобы Вы смогли представить работу этой программы. Давайте попробуем вместе.

Пусть нам требуется сложить следующие числа: 5, 7, -4, 0, 8, 20. Посчитаем, сколько их всего – шесть. Это число мы введем, когда программа задаст вопрос: Сколько чисел для сложения? Теперь наша программа запросит ввести 1-ое число, т. к. на первом шаге переменная i равна 1. Мы введем число 5. Программа считает его в переменную х. Теперь число 5 сложим с числом 0 и результат присвоим переменной S (оператор S:=S+x). В этот момент S становится равной 5. Чтобы перейти к следующему числу, увеличим значение переменной i на 1 (оператор i:=i+1). Выполнение операторов тела цикла закончено. Теперь программа переходит опять к анализу условия вхождения в цикл (i<=N). Переменная цикла i=2, переменная N=6, поэтому значение логического условия 2<=6 равно True. Значит снова выполняется тело цикла:

while i<=N do {2<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 2-е число}

readln (x); {Считали число 7}

S:=S+x; {S:=5+7}

i:=i+1; {i:=2+1}

end;

Итак, мы сложили два числа и переходим опять к проверке условия. Ответим на вопрос: 3<=6? Да. Поэтому снова начинаю работать операторы тела цикла и мы переходим к третьему числу:

while i<=N do {3<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 3-е число}

readln (x); {Считали число -4}

S:=S+x; {S:=12 + (-4)}

i:=i+1; {i:=3+1}

end;

Аналогично, мы сложим и остальные числа. Но когда же операторы цикла выполнятся последний раз и остановится работа цикла? Когда сложим последнее число. Проверим это.

while i<=N do {6<=6}

begin

write (‘Введите ‘,i,’-ое число ’); {Введите 6-е число}

readln (x); {Считали число 20}

S:=S+x; {S:=16+20}

i:=i+1; {i:=6+1}

end;

Проверяется опять условие 7<=6. Значение этого условия равно False, а значит тело цикла выполняться не будет. Цикл закончил свою работу. А мы получили результат: посчитали сумму всех шести чисел S=32.

В этом примере известно заранее количество повторений - N раз. Но чаще всего этот вид цикла используется тогда, когда количество повторений заранее не известно и зависит от выполнения какого-либо условия. Рассмотрим еще один пример.

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

Например, рассмотрите следующие циклические алгоритмы

а) Пока не сдал выпускные экзамены делай

начало

готовь уроки;

посещай школу;

конец;

б) Пока есть желание, возможность и здоровье делай

посещай занятия спортом

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

а) “Репка”. “Дед тянет-потянет, вытянуть не может. Позвал бабку. Бабка за дедку , дедка за репку, тянут потянут, вытянуть не могут. Позвала бабка внучку... И вытянули репку”.

б) “Курочка ряба”. “Снесла курочка яичко. Дед бил, бил, не разбил. Баба била, била, не разбила. Мышка бежала, хвостиком задела, яичко упало и разбилось”.

в) “Колобок”. “... Катится колобок по лесу. От зайца ушел, от медведя ушел, от волка ушел. Встретил лису, она его и съела”.

г) “Волк и лиса”. “... Сидит волк у проруби, хвост в воду опустил и приговаривает: “Ловись, ловись, рыбка, большая и маленькая”. Пришла за водой баба. Прогнала волка.

д) “Горшочек каши”. “... Варит горшок кашу, варит. Каша из дома на улицу потекла. Не знает мать девочки, что надо горшочку сказать. Пришла девочка, сказала: “Горшочек, не вари”. Перестал горшок кашу варить”.

Цикл с предусловием.

Продолжим изучение цикла с предусловием на примере решения следующей задачи.

Задача. Найти сумму чисел в непустой последовательности.

Рассмотрим алгоритм решения. Пусть нам дана такая последовательность чисел:

3, -4, 0, 5, 19, -20, 6, 2

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

1 2 3 4 5 6 7 8

3, -4, 0, 5, 19, -20, 6, 2

Получилось, что всего у нас чисел восемь, на первом месте стоит число 3, на втором - число (-4), на третьем - число 0 и т.д. Тогда переменная цикла i будет пробегать числа от 1 до 8, становясь на каждом шаге больше на 1 и запрашивая каждый раз очередное число. Поэтому общая схема цикла будет выглядеть так:

i:=1;

while i<=N do

begin

write (‘Введите ‘,i,’-ое число’);

readln (x);

. . .

i:=i+1;

end;

Здесь N - количество чисел последовательности (в нашем случае 8), х - член последовательности, i - порядковый номер очередного члена последовательности. Просмотрим, как будет работать этот цикл.

1 шаг

i:=1;

while i<=N do {Проверяется условие 1<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 1-ое число”}

readln (x); {Считываем число 3 в переменную х}

. . .

i:=i+1; {Переходим к следующему по порядку числу: i=2}

end;

2 шаг

i:=1;

while i<=N do {Проверяется условие 2<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 2-ое число”}

readln (x); {Считываем число (-4) в переменную х}

. . .

i:=i+1; {Переходим к следующему по порядку числу: i=3}

end;

3 шаг

i:=1;

while i<=N do {Проверяется условие 3<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 3-ое число”}

readln (x); {Считываем число 0 в переменную х}

. . .

i:=i+1; {Переходим к следующему по порядку числу: i=4}

end;

и т. д.

8 шаг

i:=1;

while i<=N do {Проверяется условие 8<=8? Да. Значит выполняем тело цикла}

begin

write (‘Введите ‘,i,’-ое число’);{Вывод на экран “Введите 8-ое число”}

readln (x); {Считываем число 2 в переменную х}

. . .

i:=i+1; {Переходим к следующему по порядку числу: i=9}

end;

9 шаг

i:=1;

while i<=N do {Проверяется условие 9<=8? Нет. Значит цикл закончил свою работу и компьютер переходит к обработке следующего за end оператора}

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

Summa:=Summa+x;

Если Вам не совсем понятно, что происходит при выполнении этого оператора, Вам нужно вспомнить, как происходит присваивание значение переменной: сначала вычисляется значение выражения в правой части (в нашем случае Summa+x, т.е, значение переменной Summa увеличиваем на х), а затем присваиваем это значение переменной с именем, записанным в левой части (Summa). Таким образом, в переменной Summa собирается сумма всех считанных чисел.

Задание. Напишите полный текст программы, находящей сумму N чисел последовательности. Дополните программу нахождением среднего арифметического этих чисел.

Примечание. Средним арифметическим чисел называется сумма этих чисел, деленная на их количество.

Задачи для самостоятельного решения

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

2. Вводятся 15 чисел. Определить, сколько среди целых чисел.

3. Вывести все чётные числа начиная с числа N и до числа M. Числа N и M задает пользователь.

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

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

6. Составить программу нахождения суммы чётных чисел, находящихся в промежутке от 26 до 88.

7. Найти наибольший общий делитель двух натуральных чисел a и b.

8. Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал норму на 10% от нормы предыдущего дня.

а) Определить через сколько дней спортсмен пробежит суммарный путь более 100 км.

б) Определить через сколько дней спортсмен будет пробегать более 20 км.

в) Какой путь пробежит спортсмен на 7-й день.

9. Вводятся 14 чисел. Определить, сколько среди них положительных (включая 0) и сколько отрицательных. (Числа вводятся в одну переменную в цикле)

10. Запросите 16 чисел и выведите на экран для каждого, делится ли оно нацело на 11. Спросите у пользователя, сколько нужно проанализировать чисел, а затем запросите эти числа и сделайте для каждого вывод, является ли оно четным или отрицательным.

12. Найдите сумму следующей последовательности

а1234-...+аn, где n - количество элементов, задаваемых пользователем.

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

14. Вывести на экран числа, кратные К из промежутка [А,В]. Числа А, В, К задает пользователь.

15. Запросите у пользователя положительное число А и найдите сумму всех натуральных чисел из промежутка [1, А].

Занятие II

Тема: Цикл с предусловием в графике.

Задача. Построить множество концентрических окружностей (с общим центром), удовлетворяющих следующим условиям:

а) радиус следующей окружности на m меньше предыдущей;

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

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

Program Krugi;

Uses

Crt, Graph;

Var

i,

m,

R,

a,

DV,

DM : integer;

Begin

ClrScr;

Randomize;

write (‘Введите шаг изменения радиуса окружностей ‘);

readln (m);

write (‘Введите радиус большей окружности ‘);

readln (R);

write (‘Введите радиус меньшей окружности ‘);

readln (а);

write (‘Введите координаты центра ‘);

readln (X, Y);

DV:=detect;

InitGraph (DV, DM, ‘..\BGI’);

SetBkColor (7);

while R>=a do

begin

SetColor (Random(15));

Circle (X, Y, R);

R:=R-m;

end;

readln;

CloseGraph;

End.

Примечание. Здесь применена процедура Randomise, которая инициализирует генератор случайных чисел. Значения же случайных чисел можно получить с помощью функции Random (Х), где Х - параметр, указывающий диапазон значений случайного числа. Оно изменяется в пределах [0,Х[. Результат в этом случае будет типа Word. Если параметр Х не задан, то результат буде типа real в пределах [0.0,1.0[.

Задачи для самостоятельного решения

1. Составить программу, перемещающую отрезок заданной длины слева направо. Имитация движения осуществляется закраской цветом фона линии на предыдущем шаге и построением ее по новой координате Х на следующем шаге.

2. Составить программу, перемещающую отрезок заданной длины сверху вниз.

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

4. Нарисовать веер, состоящий из секторов круга, разукрашенных разным цветом.

5. Нарисовать окружность, меняющую цвет заданное число раз.

6. Изобразить движущуюся окружность заданного радиуса и цвета.

7. Изобразить движение выбранной Вами фигуры.

8. Изобразить движение грузовика.

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

10. Нарисуйте последовательность вложенных квадратов с общим центром в центре экрана так, чтобы расстояние между сторонами уменьшалось до тех пор, пока не стало меньше трех точек.

11. Составьте программу “Растущая ель”. Рост ели имитируется добавлением к нижнему основанию треугольника (кроне ели) линии на одну точку шире основания как слева, так и справа. К основанию ствола добавляется прямая линия. Программа прекращает работу при увеличении высоты дерева вдвое.

12. Составьте программу “Рост лиственного дерева”. Рост кроны изображается добавлением окружностей.

13. Нарисуйте действующую модель часов с кукушкой. Часы должны тикать, кукушка куковать.

14. Нарисуйте движение маятника.

15. Нарисуйте движение фигуры, используя уже имеющийся файл с программой из темы “Операторы графики”.

Занятие III



Похожие документы:

  1. «Циклы в языке программирования Pascal»

    Методическая разработка
    ... циклами. По месту проверки окончания итерационного цикла различают два вида циклических алгоритмов: цикл с предусловием (цикл ПОКА) и цикл с постусловием (цикл ...
  2. Тема «Оператор цикла с предусловием» Класс

    План урока
    ... одним цикломциклом с предусловием. Запишите тему урока ... циклическая конструкция – цикл «пока». Давайте посмотрим на графическое представление цикла с предусловием ... d:=d+I; Раздаточный материал Цикл с предусловием. Задача. Алгоритм Евклида. Нахождение ...
  3. Лабораторная работа Программирование циклических алгоритмов

    Документ
    ... . Определение. Циклический алгоритм – это алгоритм, содержащий один или несколько циклов. В языке ... циклов: цикл со счетчиком; цикл с предусловием; цикл с постусловием. Цикл со счетчиком. Циклы ... в вычислении суммы, тем более точным получается результат ...
  4. Тема урока: Цикл с предусловием

    Урок
    ... определение циклического алгоритма. Перечислите основные структуры циклического алгоритма. Приведите примеры циклических алгоритмов. Запишите формат оператора цикла с параметром, цикла ...
  5. Дополнительное задание. Рассмотрим два вида организации цикла в программе. Цикл типа для (цикл с параметром)

    Документ
    Тема: Циклические алгоритмы Задание: Прочитать материал и рассмотреть ... – любое большее К) Цикл типа ПОКА (цикл с предусловием) Предписывает выполнять тело цикла до тех пор ... любые повторяющиеся фрагменты алгоритмов. Чаще всего цикл пока используют когда ...

Другие похожие документы..