Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Составить программы используя разные циклы (с предусловием, с постусловием, с параметром)

Поиск

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

 

6.7.2. Итерационные циклы

Найти с точностью E=0.01 суммы бесконечных степенных, числовых и функциональных рядов.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

 

Лабораторная работа №4: Вложенные циклы

 

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

 

Общие сведения

 

На практике часто встречаются задачи, в которых число переменных, являющихся параметрами цикла, две и более. В таких случаях алгоритм и программа предполагают несколько циклов, вложенных один в другой. Следовательно, вложенным называют любой цикл, содержащий внутри себя один или несколько других циклов (т.е. их схема напоминает “матрёшку”). Цикл, охватывающий другие называется внешним, а остальные по отношению к нему - внутренние. Глубина вложений на практике ограничивается только объёмом памяти конкретного ПК, теоретически она не ограничена. Вложенные циклы представляют собой многоуровневую схему, где на каждом уровне управляющая переменная (параметр цикла) может изменяться в соответствии с условием задачи, т.е. в таких задачах можно использовать любой из операторов цикла: For (Рис. 7.1), While (Рис. 7.2), Repeat (Рис. 7.3).

 

Рис. 7.1. Общая схема вложенных циклов (цикл с параметром - внешний цикл)

 

Рис. 7.2. Общая схема вложенных циклов (цикл с предусловием - внешний цикл)

 

Рис. 7.1. Общая схема вложенных циклов (цикл с постусловием - внешний цикл)

 

Параметры циклов разных уровней изменяются не одновременно. Вначале все возможные значения последовательно принимает параметр самого внутреннего цикла при заданных (неизменных) значениях параметров внешних циклов. После чего на один шаг возрастает параметр цикла на ранг выше внутреннего и при этом вновь переменная внутреннего цикла “пробегает” все свои значения. Такая схема повторяется до тех пор, пока параметры всех циклов не примут все свои возможные значения. Для подсчёта числа повторных вычислений в схеме вложенного цикла можно воспользоваться следующей формулой, если X=Xнач.(Xшаг)Xкон. и Y=Yнач.(Yшаг)Yкон., типа Real: N=NX·NY,

где : .

Рассмотрим несколько примеров проектирования программ с вложенными циклами.

 

7.2. Примеры выполнения задания

Пример 1. Найти все простые числа на заданном отрезке (использовать цикл с параметром)

 

Для организации выполнения программы определим целочисленные переменные n, k для обозначения начального и конечного значения отрезка, i, j - для обозначения параметров соответственно внешнего и внутреннего циклов, m -счётчик для количества делителей проверяемого числа. Во внешнем цикле последовательно перебираются значения отрезка от начального до конечного. Во внутреннем цикле параметр j изменяется от 2 до округлённого значения корня квадратного проверяемого значения, при этом, если остаток от деления числа на параметр j равен нулю, то параметр является делителем данного числа. После каждого завершения работы внутреннего цикла проверяется переменная m, и если она равна нулю, то найдено простое число.

 

Program Example_7_1;

Uses Crt; { Подключаем модуль }

Var n: Integer; { Описываем переменные }

k: Integer; { используемые в программе }

i,j: Integer;

m: Integer;

Begin { Начало основной программы }

ClrScr; { Команда очистки экрана }

Write ('Введите нижнюю границу отрезка - ');

ReadLn (n); { Вводим данные с клавиатуры }

Write ('Введите верхнюю границу отрезка - ');

ReadLn (k); { Вводим данные с клавиатуры }

WriteLn ('Все простые числа из отрезка [',n,',',k,']');

For i:=n To k do { Задаем внешний цикл }

Begin { Начало внешнего цикла }

m:=0; { Счётчик количества чисел }

For j:=2 To Round (Sqrt(i)) Do { Задаем внутренний цикл }

If (i Mod j)=0 Then m:=m+1; { Тело внутреннего цикла }

If m=0 Then Write (i,' ') { Тело внешнего цикла }

End; { Конец внешнего цикла }

End. { Конец основной программы }

 

Задача 2. Билет на городском транспорте имеет шестизначную нумерацию от 000000 до 999999. Билет считается "счастливым", если сумма трех первых цифр равна сумме трех правых цифр. Составьте алгоритм и напишите программу подсчета числа "счастливых" билетов.

 

Обозначим через A,B,C,D,E,F соответственно разряды шестизначного числа слева направо. Каждый из разрядов этого числа изменяется от 0 до 9. Все переменные A,B,C,D,E,F являются параметрами цикла. В целом алгоритм можно построить по схеме вложенных циклов. Внешний цикл организуем по переменной А, все другие по B,C,D,E и F будут соответственно вложенными. Самый внутренний цикл организован по F. Далее согласно задаче внутри цикла по F необходим логический блок проверки условия A+B+C=D+E+F. Если оно выполняется, то счетчик числа "счастливых" билетов K=K+1. После чего ветвь "нет" и выход линейного блока K=K+1 объединяются и процесс многократно повторяется.

Program Example_7_2;

Uses Crt; { Подключаем модуль }

Var

a,b,c,d,e,f: Integer; { Описываем переменные }

k: Longint; { используемые в программе }

Begin { Начало основной программы }

ClrScr; { Команда очистки экрана }

For a:=0 To 9 Do { Задаем внешний цикл }

For b:=0 To 9 Do { Задаем внутренний цикл 1 }

For c:=0 To 9 Do { Задаем внутренний цикл 2 }

For d:=0 To 9 Do { Задаем внутренний цикл 3 }

For e:=0 To 9 Do { Задаем внутренний цикл 4 }

For f:=0 To 9 Do { Задаем внутренний цикл 5 }

If (a+b+c)=(d+e+f) Then k:=k+1; { Проверка на счастливые }

{ билеты и подсчет количества }

WriteLn ('k=',k); { Вывод кол-ва счастливых билетов }

End. { Конец основной программы }

Задача 3. Вычислить таблицу значений функции , где для X:=0.1,(0.1),1.

Program Example_7_3;

Uses Crt; { Подключаем модуль }

Var

n: Integer; { Описываем переменные }

x,a,b,s,Xn,Xk,Xh,y: Real; { используемые в программе }

Begin { Начало основной программы }

ClrScr; { Команда очистки экрана }

Write ('Введите Xn,Xh,Xk'); { Вывод текста на экран }

Read (Xn,Xh,Xk); { Ввод данных с клавиатуры }

S:=0; { Начальная установка суммы }

Repeat { Внешний цикл }

For n:=0 to 10 do { Внутренний цикл }

begin { Начало тела цикла }

If Xn<=0.4 then { Проверка условия }

a:=2*n { Условие истинно }

Else

a:=n/2; { Условие ложно }

b:=a*Exp(n*Ln(Xn)); { Вычисление функции }

s:=s+b; { Суммирование }

End; { Конец внутренн. цикла по N }

Y:=((Sin(Xn)+2)/(3+Cos(Xn)))*s; { Вычисление функции }

WriteLn('X=',Xn,'Y=',Y); { Вывод значений функций }

Xn:=Xn+Xh { Увеличение значения внешнего }

{ цикла на значение шага }

Until Xn>Xk; { Проверка истинности }

{ внешнего цикла }

End. { Конец основной программы }

 

7.3. Контрольные вопросы

 

1. Какие циклы называются вложенными?

2. Верно ли, что цикл, содержащий в себе другой цикл, называется внешним?

3. Какой цикл называется внутренним?

4. Какому условию должны удовлетворять вложенные циклы?

5. Может ли внешний цикл быть циклом For, а внутренний — циклом Repeat?

6. Могут ли внутренний и внешний циклы быть циклами разных видов?

7. Могут ли внутренний и внешний циклы быть циклами одного вида?

8. Может ли вещественная переменная быть параметром цикла for?

9. Можно ли в качестве параметров вложенных циклов for использовать одну и ту же переменную?

10. Дайте определение вложенного цикла.

11. Основные правила построения вложенных циклов.

12. Какова последовательность изменения параметров вложенного цикла?

13. Какие синтаксические схемы используются при построении вложенных циклов?

14. Чем определяется максимальная глубина вложенного цикла?

15. Может ли итерационный цикл быть внешним?

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

17. Могут ли быть внутри итерационного цикла разветвления?

18. Приведите примеры вложенных циклов с глубиной вложения равной 4.

19. Можно ли для вложенных циклов последовательно трижды записать Repeat, Repeat, Repeat?

20. Можно ли для вложенных циклов последовательно дважды записать While X £ Xk Do While A £ Ak Do?

21. Как определить объём выводных данных для вложенного цикла?

Варианты заданий

 

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 968; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.116.61 (0.008 с.)