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

Общая форма записи цикла со счетчиком



for i:= A to B do begin... end;
for i:= A downto B do begin... end;

Здесь переменная i - управляющая переменная или переменная цикла,

А - начальное значение переменной цикла,

В - конечное значение переменной цикла.

При переходе к обработке оператора цикла for управляющей переменной присваивается заданное начальное значение. Затем в цикле выполняется исполнительный оператор (или составной оператор). каждый раз при выполнении исполнительного оператора управляющая переменная увеличивается на 1 (для for...to) или уменьшается на 1 (для for...downto). Цикл завершается при достижении управляющей переменной своего конечного значения.

Например,

1) for i:= 1 to ListSize do begin readln (Number): S:= S +Number; end;
2) for Dlina:= 15 downto 1 do writeln (Sqr(Dlina));
3) for x:= 1 to 10 do for y:= 1 to 10 do writeln (x,’*’,y,’=‘,x*y);
4) for Range:= Number+1 to Multi*3 do writeln (Sqrt(Range));

При использовании цикла for компьютер выполняет за программиста черновую работу по инициализации управляющей переменной и по ее увеличению (уменьшению) при каждом повторении цикла. Единственное ограничение заключается в том, что тип управляющей переменной не должен быть real. Переменная цикла не должна изменяться какими-либо операторами внутри цикла. К ней можно обращаться и использовать в вычислениях, но нельзя присваивать новое значение. Присваивания могут выполняться только механизмом самого цикла. Таким образом, следующий цикл является некорректным:

for i:= 1 to 10 do begin... i:= i-1;... end;

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

Внимание! Следует помнить, что управляющая переменная не может быть типа real.

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

for j:= 1 to 0 do writeln (j);

Однако цикл, представленный в такой форме, распечатает целые числа от единицы до десяти:

for j:= 1 to 10 do writeln (j);

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

for j:= 10 downto 1 do writeln (j);

Часто исполнительная часть одного из циклов For является новым оператором цикла For. Структуры такого рода называются вложенными циклами. При завершении внутреннего цикла управляющая переменная внешнего цикла увеличивается. Повторение этих действий будет продолжаться до вавершения внешнего цикла. Приведенный ниже вложенный цикл печатает пары чисел, начиная от (1,1), (1,2),... и кончая (10,10):

for х:= 1 to 10 do for у:= 1 to 10 do writeln (‘(‘,х,’,’,y,’), ’);

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

Циклы с постусловием.

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

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

repeat повторяй
операторы операторы
until <условие>; до тех пор, пока условие не будет верным

Есть небольшое отличие в организации цикла repeat по сравнению с while: для выполнения в цикле repeat нескольких операторов не следует помещать эти операторы в операторные скобки begin... end. Зарезервированные слова repeat и until действуют как операторные скобки.

Конструкция repeat... until работает аналогично циклу while. Различие заключается в том, что цикл while проверяет условие до выполнения действий, в то время как repeat проверяет условие после выполнения действий. это гарантирует хотя бы одно выполнение действий до завершения цикла.

Например,

a) repeat read (Number); Sum:= Sum+Number; until Number=-1 b) repeat i:= i+1; writeln (Sqr(i)) until Number=-1

Задача. Определить, является ли введенное число простым.

Алгоритм решения этой задачи будет следующий. При помощи операции mod проводим проверку всех целых чисел от 2 до введенного числа Number. Мы проверяем является ли очередное проверяемое число делителем нашего числа (значит, остаток от деления введенного числа на проверяемое число равен нулю). Если такой делитель найден, значит, цикл досрочно завершает свою работу на некотором i-том шаге. Если делитель не найден, значит цикл проверил все числа и значение переменной цикла i будет равно конечному значению, т.е. Number. Поэтому, после записи цикла следует анализ значения переменной i и выводится соответствующее сообщение.

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

Цикл не может продолжаться бесконечно, так как любое число всегда делится само на себя.

Program Prostoe; Uses Crt; Var i, {возможный делитель} Number: integer; {исследуемое число} Begin ClrScr; writeln (‘Какое число должно быть проверено? ‘); read (Number); i:= 1; repeat i:= i+1; until Number mod i = 0; if Number=i then writeln (Number,’ является простым‘) else writeln (Number,’ делится на ‘,i); readln; End.

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

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

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

1. Составьте программу для определения N!-M! N! = 1*2*3*4*.........*n

2. Запросить имя пользователя и напечатать "Привет, Вася!" 10 раз. (если Вася – имя пользователя)

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

4. Вывести на печать все трёхзначные натуральные числа, сумма цифр которых равна заданному числу N. (Операции div и mod не использовать.)

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

6. Население города увеличивается на 3% каждый год. В 1983 году население города составляло 65000. Напишите программу, которая выведет на экран предсказываемую численность населения города в каждом году вплоть до 1999г.

7. Найдите все натуральные числа от 1 до 1000, кратные 3.

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

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

10. Произведение N первых нечетных чисел равно р. Сколько сомножителей взято?

11. Числа Фибоначчи (fn) определяются формулами: f0=f1=1; fn=fn-1+fn-2 при n=2,3,...
Cоставить программу:
а) определения f - 40-е число Фибоначчи;
б) поиска f - первого числа Фибоначчи, большего m (m>1);
в) вычисления S - суммы всех чисел Фибоначчи, которые не превосходят 1000.

12. Самостоятельно придумать и решить задачу на применение цикла с постусловием.

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

1. Найдите количество точек с целочисленными координатами попадающих в круг радиуса R.

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

3. Найдите все трёхзначные числа, равные сумме кубов своих цифр. Учтите, что abc=100a+10b+c

4. Составить программу вывода всех трёхзначных чисел, сумма цифр которых равна данному целому числу. Программа должна печатать именно числа, а не набор цифр.

5. Имитировать на экране работу электронных часов.

6. Напишите программу отгадывания буквы.

7. Задано n троек чисел a,b,c. Определить, сколько из предложенных троек можно использовать для построения треугольника, если a,b,c - длины его сторон. (Известно, что a ≤ b ≤ c)

8. Найти сумму целых положительных чисел, больших 20, меньших 100 и кратных 3.

9. Укажите все целые числа, которые увеличатся на 20%, если их цифры записать в обратном порядке.

10. Составьте программу взвешивания продавцом 2,5 кг муки.

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

12. Замените буквы цифрами так, чтобы равенство ФАКТ+ФАКТ=НАУКА стало верным. Одинаковым буквам должны соответствовать одинаковые цифры, разным - разные.

13. Написать программу для создания на экране зигзага, бегущего снизу вверх звездочками.

14. В бригаде, работающей на уборке сена, имеется N косилок. Первая из них работала m ч., а каждай следующая на 10 мин. больше, чем предыдущая. Сколько часов проработала вся бригада?

15. В компьютер вводятся по очереди данные о росте N учащихся класса. Определить средний рост учащихся класса.

16. Составьте программу вычисления степени числа а с натуральным показателем n.

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

18. Дана последовательность из N целых чисел. Определить произведение максимального и минимального элементов этой последовательности.

19. Для двух последовательностей из N и M элементов соответственно найти произведение максимального элемента первой последовательности и минимального элемента второй последовательности.

20. Дано целое n>0 и последовательность из n действительных чисел, среди которых есть хотя бы одно отрицательное число. Найти величину наибольшего из отрицательных чисел этой последовательности.

Проверьте себя, ответив на вопросы:

1. Что называется циклом? Приведите пример.

2. Какой алгоритм называется циклическим? Приведите примеры.

3. Какие виды циклов Вы знаете? Почему они имеют такие названия?

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

5. Каким должно быть условие, чтобы тело цикла while ни разу не выполнилось? Почему?

6. Каким должно быть условие, чтобы тело цикла repeat выполнилось один раз? Почему?

7. Каким должно быть условие, чтобы тело цикла for ни разу не выполнилось? Почему?

8. Чему равен шаг изменения параметра цикла в операторе for?

9. Укажите отличительные особенности каждой из конструкций циклов.

10. Будет ли выполняться циклическая часть программы, если логическое выражение в конструкции REPEAT истинно с самого начала?

11. Что такое стоп-код? Когда его применяют?

12. Какие условия предъявляются к переменной цикла?

13. Какого типа должна быть переменная цикла?

14. Может ли переменная цикла использоваться в вычислениях?

15. Что называется шагом? Что означает выражение “шаг равен пяти”?

16. Что происходит на каждом шаге выполнения тела цикла при выполнении оператора Summa:=Summa+Chislo?

17. Какой цикл Вы применяете чаще? Каковы его достоинства и недостатки?

18. Функция ReadKey и ее применение в программах.

19. Функция KeyPressed и ее применение в программах.

20. Какие клавиши входят в основной набор?

21. Какие клавиши входят в расширенный набор? Как обратится к этим клавишам в программе?

22. Что обозначает слово downto в операторе цикла for?





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



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