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

  • pdf
  • 14.08.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Лабораторная работа №4 Программирование алгоритмов циклической структуры.pdf

Лабораторная работа № 4

ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ

Цель работы: закрепить практические навыки работы с системой PascalABC, овладеть практическими навыками разработки, программирования циклических процессов, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, содержащих операторы цикла While, Repeat и For.

Теоретические сведения

Операторы цикла служат для того, чтобы выполнять входящие в их состав операторы (так называемые операторы тела цикла) несколько раз (в частном случае – один раз или ни разу). В языке PascalABC имеется три вида операторов цикла: While, Repeat и For.

Оператор цикла While

Синтаксис оператора цикла While: While A do ST;

где A – булевское выражение (или условие); ST – оператор (возможно составной).

Значение выражения A вычисляется перед каждым выполнением оператора ST, поэтому цикл While называют еще циклом с предусловием.

Если значение A есть TRUE, то оператор ST выполняется и управление передается на вычисление значения выражения A; если значение выражения A есть FALSE, то оператор ST не выполняется и происходит выход из цикла, то есть выполняется оператор, который записан в программе далее. В блок-схеме (рис. 4.1) оператор While реализуется следующей структурой

Замечания:

1.    Если первоначальное значение выражения A – FALSE, то оператор ST не будет выполнен ни разу.

2.    В операторе цикла While точка с запятой никогда не ставится после зарезервированного слова do.

3.    Чтобы избежать бесконечного повторения (зацикливания), необходимо хотя бы одну переменную, входящую в выражение А, изменять в теле оператора цикла. Более того, эти изменения должны быть такими, чтобы булевское выражение А рано или поздно приняло значение FALSE. Если же булевское выражение А первоначально истинно и ни при каких обстоятельствах не становится ложным, то выполнение оператора цикла никогда не завершится, происходит зацикливание.

Цикл While используется, как правило, в тех случаях, когда заранее неизвестно количество повторений цикла.

Оператор цикла Repeat

Цикл Repeat (цикл с постусловием), как правило, используется в тех случаях, когда заранее неизвестно количество повторений операторов тела цикла.

Синтаксис оператора цикла Repeat: Repeat ST until A; где ST – оператор (возможно составной); А – булевское выражение (или условие).

Оператор работает следующим образом: выполняется оператор ST, вычисляется значение выражения А; если его значение – FALSE, то вновь выполняется оператор ST, если значение выражения А – TRUE, то цикл заканчивается. Если же значение выражения А есть TRUE с самого начала, то оператор ST выполняется лишь один раз. Если выражение А никогда не принимает значение TRUE, то оператор ST выполняется бесконечное число раз, то есть происходит зацикливание.

Следует отметить, что верхняя граница операторов ST обозначена словом Repeat, а нижняя – словом until, поэтому нет необходимости заключать составной оператор ST в операторные скобки begin – end.

Блок-схема оператора Repeat ST until A; изображена на рис. 4.2.

 

Оператор цикла For

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

For по возрастающим значениям параметра i:

For i:=N1 to N2 do ST,

где i – переменная (параметр) цикла; N1 – начальное значение параметра цикла;

N2 конечное;

ST – оператор (возможно составной).

Переменные i, N1, N2 должны быть одного и того же скалярного типа, но не типа Real, и значение N2 должно быть больше, чем значение N1. Переменная i принимает последовательные значения данного типа от N1 до N2. В частном случае, когда N1 и N2 – целые числа, а i – переменная типа Integer или Byte, шаг всегда равен единице.

Например, если

For i:=1 to 20 do A:=A+1, то для i = 1, 2, 3, ..., 20 будет выполняться оператор А := А + 1.

Если же N1 и N2 символьного типа и имеют значения, например, 'A' и 'Z' соответственно, то переменная i принимает последовательные значения в порядке букв латинского алфавита: 'А', 'В', 'С', ..., 'Z'.  Блок-схема (рис. 4.3 и 4.4) оператора For i:=N1 to N2 do ST; может изображаться двумя способами

 

 

 

 

Рис. 4.3

 

Отметим, что есть возможность организовать цикл по убывающим значениям параметра i. Для этого используется зарезервированное слово downto.

Синтаксис оператора For по убывающим значениям параметра i: For i:= N2 downto N1 do ST; где i – переменная (параметр) цикла; N2 – начальное значение параметра цикла;

N1 – конечное;

ST – оператор (возможно составной).

В этом случае параметр i принимает последовательные убывающие значения данного типа от N2 до N1

Например, если

For i:=20 downto 1 do A:=A+1, то для i = 20, 19, 18, ..., 1 будет выполняться оператор А := А + 1.

Блок-схема (рис.4.5 и 4.6) оператора For i:= N2 downto N1 do ST; может изображаться двумя способами.

                                                               Рис. 4.5                                                                  Рис. 4.6

 

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

Пример 1. Составьте блок-схему и напишите программу решения следующей задачи: вычислите сумму S = 1 +  +  + 

а) с использованием цикла For (рис. 4.7 и 4.8): PROGRAM Primer_1a;  var n: Integer; s: Real; 

BEGIN 

S:=0;

For n:=1 to 50 do

S:=S+1/n; 

WriteLn ('Сумма равна: ',S); END.

Или в другом виде блок-схема

 

 

 

 Рис. 4.8

 

 

Рис. 4.7

 

б) С использованием цикла While (рис. 4.9):

 

PROGRAM Primer_1b; var S: Real; N: Integer;

BEGIN  

S:=0; N:=1; While N<=50 do 

begin  S:=S+1/N; N:=N+1

end;

WriteLn ('Сумма равна: ',S) END.

 

 Рис. 4.9.

 

в) С использованием оператора цикла Repeat (рис. 4.10):

 

PROGRAM Primer_1c;

var N: Integer; S: Real; { Результат суммирования }

BEGIN

S:=0; N:=1;

Repeat { Повторить... }

S:=S+1/N; N:=N+1;

until N>50; { пока значение N не превзойдет 50 }

WriteLn ('Результат суммирования... ',S) END.

 

 

 

 

Рис. 4.10

Пример 2. Напишите программу, моделирующую микрокалькулятор. После нажатия знака «=» на экране отображается значение выражения. PROGRAM Primer_2;

var Operacij, Operat: Char; {Символ арифметической операции}

n,m: Real; Answer: Real; { Результат вычисления } BEGIN

Answer:=0; { Вначале обнулим результат... }

WriteLn ('Введите арифметическое выражение');

WriteLn ('(каждую часть выражения – с новой строки, например:)...');

Writeln('(первое слагаемое – одна часть)'); Writeln('(знак "+" – вторая часть)'); Writeln('(второе слагаемое – третья часть)'); Writeln('(знак "=" – четвертая часть)'); Repeat

ReadLn (n); {Вводимый первый операнд слагаемое} 

ReadLn (Operacij); {Знак вводимой операции} 

ReadLn (m); {Вводимый второй операнд}

Case Operacij of 

'+': Answer:=n+m;

'-': Answer:=n-m;

'*': Answer:=n*m; '/': Answer:=n/m end;

Readln(Operat); until Operat='=';  WriteLn (Answer:10:4) END.

Пример 3. Напишите программу решения следующей задачи: пусть A и B – положительные вещественные числа и A > B. Найдите такое натуральное m, что m * B > A. PROGRAM Primer_3;

var A,B: Real; m : Integer;

BEGIN

Write ('Введите числа A и B... '); 

Read (A);

Write (' ');

ReadLn (B);  m:=1;

While m*B<=A do m:=m+1;

WriteLn ('Результат... ', m:3 ,'*', B:3:2, ' > ', A:6:2)

END.

Пример           4.         Напишите       программу      решения          следующей     задачи:            определение наименьшего положительного числа Eps такого, что 1 + Eps > 1.

PROGRAM Primer_4;

const C1 = 1.0; C2 = 2.0;

var Eps, Eps1: Real; 

BEGIN

Eps:=C1; Eps1:=C2;

While Eps1>1.0 do begin 

Eps:=Eps/2; 

Eps1:=Eps+1 end; 

Eps:=Eps*2;

WriteLn ('Приближенное значение Eps равно: ',Eps) END.

Пример 5. Напишите программу решения следующей задачи: разложите целое число на простые множители. PROGRAM Primer_5;

var x,m: Integer; 

BEGIN

Write ('Введите целое число... '); ReadLn (x);

WriteLn ('Разложение числа ',x,' на простые множители');  m:=2;

While m<=x do 

If (x MOD m)=0 then begin Write (' * ',m); x:=x DIV m end  else m:=m+1; END.

Пример 6. Напишите программу, позволяющую угадать целое число из отрезка [1, 100].

PROGRAM Primer_6;

var x,z : Integer; ugadal: Boolean; 

BEGIN

WriteLn ('Угадай число'); 

WriteLn ('от 1 до 100');

Randomize; z:=Random (100)+1; ugadal:=FALSE;

While NOT ugadal do begin

Write ('число='); 

Read (x);

If x=z then begin ugadal:=TRUE; WriteLn ('Правильно') end

else If x<z then WriteLn ('Мало...')  else If x>z then WriteLn ('Много...') end

END.

Пример 7. Напишите программу следующей задачи: вычислите целую часть квадратного корня из положительного числа. Идея алгоритма заключается в том, что сумма К первых нечетных чисел равна, например, 1 + 3 = 22 , 1 + 3 + 5 = 32 и т. д.

PROGRAM Primer_7;

var i,j: Integer;x : Real; { Результат } 

BEGIN

Write ('Введите положительное число, из которого хотите извлечь корень:'); 

ReadLn (x); i:=-1; j:=0;

While j<=x do begin i:=i+2; j:=j+i end;

Write ('Результат: ',(i-1) DIV 2) END.

Пример 8. Напишите программу решения следующей задачи: найдите все простые числа на заданном отрезке (используйте цикл с параметром) PROGRAM Primer_8;

var M : Integer; { Нижняя граница отрезка } N : Integer; { Верхняя граница отрезка } i,j: Integer; { Параметры циклов } kl : Integer;

BEGIN

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

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

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

For i:=M to N do begin kl:=0;

For j:=2 to Round (Sqrt(i)) do 

If (i MOD j)=0 then kl:=kl+1; 

If kl=0 then Write (i,' ') end

END.

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

1.    Для чего предназначены операторы цикла?

2.    Виды операторов цикла.

3.    Синтаксис оператора цикла с предусловием.

4.    Каково минимальное количество повторений цикла WHILE?

5.    Почему в операторе цикла WHILE после DO не ставиться «;»?

6.    Как работает оператор цикла WHILE?

7.    Как избежать зацикливания при организации цикла WHILE?

8.    В каких случаях используется цикл WHILE?

9.    В каком случае произойдет зацикливание оператора WHILE? 10. В каком случае тело цикла WHILE заключается в операторные скобки?

11.                   В каких случаях используется цикл REPEAT?

12.                   Синтаксис оператора цикла с постусловием.

13.                   Как работает оператор цикла REPEAT?

14.                   Почему тело цикла REPEAT не заключается в операторные скобки?

15.                   В каком случае произойдет зацикливание оператора REPEAT?

16.                   Как избежать зацикливания при организации цикла REPEAT?

17.                   Каково минимальное количество повторений цикла REPEAT?

18.                   Синтаксис оператора цикла с параметром по возрастающим значениям параметра.

19.                   Синтаксис оператора цикла с параметром по убывающим значениям параметра.

20.                   В каком случае тело цикла FOR заключается в операторные скобки?

21.                   В каких случаях используется цикл FOR?

22.                   While A do ST; Поясните, что такое A и ST?

23.                   Repeat ST until A; Поясните что такое ST и А?

24.                   For i:=N1 to N2 do ST; Поясните, что такое i, N1, N2, ST?

25.                   For i:=N1 to N2 do ST; К какому типу данных должны при- надлежать переменные i, N1, N2.

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

27.                   Какому значению равен шаг изменения параметра в цикле  For i:=N1 to N2 do ST, если i, N1, N2 – целые числа? 

28.                   Какому значению равен шаг изменения параметра в цикле For i:=N1 downto N2 do ST, если i, N1, N2 – целые числа?

29.                   Как работает оператор цикла с параметром (по возрастающей)?

30.                   Как работает оператор цикла с параметром (по убывающей)?

31.                   For i:=N1 downto N2 do ST. Какое соотношение верно: N1 > N2 или N1 < N2.

32.                   Из какого количества операторов состоит тело цикла в данном фрагменте программы? Как

называется этот цикл?

...S:=0;

For i:=1 to 50 do S:=S+1/i; WriteLn ('Сумма равна: ',S); ...

33.                   Из какого количества операторов состоит тело цикла в данном фрагменте программы? Как называется этот цикл? ...S:=0; N:=1;

While N<=50 do

begin S:=S+1/N; N:=N+1 end; WriteLn ('Сумма равна: ',S)

34.     Из какого количества операторов состоит тело цикла в данном фрагменте программы? Как называется этот цикл? ...ReadLn (B); m:=1;

While m*B<=A do m:=m+1;

WriteLn ('Результат... ',m:3,'*',B:3:2,' > ',A:6:2)

35.     Из какого количества операторов состоит тело цикла в данном фрагменте программы? Как называется этот цикл? ...S:=0; N:=1;

Repeat

S:=S+1/N; N:=N+1 until N>50;

WriteLn ('Результат суммирования... ',S); ...

36.     Каково условие выхода из цикла в данном фрагменте программы? ...While Eps1>1.0 do begin Eps:=Eps/2; Eps1:=Eps+1 end; ...

37.     Каково условие повторения тела цикла в данном фрагменте программы? ...Repeat

S:=S+1/N; N:=N+1 until N>50; ...

38.     Какому оператору будет передано управление в данном фрагменте программы, если условие j <= x станет ложным? ...While j<=x do begin i:=i+2; j:=j+i end;

Write ('Результат: ',(i-1) DIV 2) End.

39.     Сколько раз выполниться тело цикла в данном фрагменте программы? For i:=1 to 50 do S:=S+1/i;

 

Задания для самостоятельного выполнения

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

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

3.         Для задачи 1 использовать оператор цикла с постусловием, для задачи 2 – оператор цикла с предусловием, для задачи 3 – оператор цикла с параметром, для задачи 4 любой оператор цикла.

Вариант № 1

1.    Составьте таблицу значений функции y= x22x +5 на отрезке [a; b] с шагом h.

2.    Сумма в А, руб., лежит на расчетном счету. На сумму начисляется в % каждый год прибыли на ту сумму, которая находится на счету. Прибыль со счета не снимается. Через сколько лет данная сумма удвоится?

3.    Дан натуральный отрезок [a; b]. Выведите из него все четные числа.

4.    В каких двузначных числах удвоенная сумма цифр равна их произведению? Вариант № 2

1.                      Составьте таблицу значений функции y = (x – 2)/(x2 + 4) на отрезке [a; b] с шагом h.

2.                      Спортсмен марафонец, готовясь к соревнованиям в первый день тренировки пробежал А км. Каждый следующий день он наращивал норму тренировки на В % от предыдущего дня. В какой день тренировок норма его пробега превысит С км?

3.                      Дан целочисленный отрезок [a; b]. Выведите из него все отрицательные числа.

4.                      Найдите двузначное число, равное утроенному произведению его цифр.

Вариант № 3

1.    Составьте таблицу значений функции y=x3+ 2x24x + 7 на отрезке [a; b] с шагом h.

2.    В 1626 г. индейцы продали остров Манхеттен за 20 долларов. Если бы эти деньги были помещены в банк под 5 % годовых, то сколько бы денег было на счету в 2010 г.? Справка. Проценты со счета не снимать. Они начисляются каждый год на ту сумму, которая находится на счету.

3.    Дан натуральный отрезок [a; b]. Выведите из него все числа, которые делятся на данное число Х.

4.    Найдите все двузначные числа, сумма квадратов цифр кото- рых делится на 17. Вариант № 4

1. Составьте таблицу значений функции y = sin(x) – cos(x) на отрезке [a; b] с шагом h. 2. Спортсмен-марафонец, готовясь к соревнованиям, в первый день тренировки пробежал А км. Каждый следующий день он наращивал норму тренировки на В % от предыдущего дня. В какой день тренировок общий пробег за все дни превысит С км?

3.    Дан натуральный отрезок [a; b]. Выведите из него все нечетные числа.

4.    Найдите двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.

Вариант № 5

1.                      Составьте таблицу значений функции y = (x + 2)3 на отрезке [a; b] с шагом h.

2.                      Сумма в А руб. лежит на расчетном счету. На сумму начисляется В % каждый год прибыли.

Прибыль со счета не снимается. Через сколько лет данная сумма превысит С, руб.?

3.                      Найдите сумму всех нечетных двухзначных чисел.

4.                      Найдите все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры. Вариант № 6

1.                       Составьте таблицу значений функции y = x 4 – 2x + 8 на отрезке [a; b] с шагом h.

2.                       Количество граждан некоторого города увеличивается ежегодно на В %. Через сколько лет население города возрастет в два раза, если вначале было А человек.

3.                       Найдите сумму всех четных двузначных чисел.

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

Вариант № 7

1.         Напечатайте таблицу соответствия между расстоянием в футах, ярдах и метрах, если известно, что 1 фут = 0,305 м, 1 ярд = 0,914 м, для значений от 1 до 10 км с шагом 0,5.

2.         Мячик упал с высоты Р. Ударился о землю и поднялся на 2/3 предыдущей высоты. Через сколько ударов мячик поднимется на высоту H?

3.         Числа Фибоначчи вычисляются по следующему закону: a1 = 1, a2 = 1, an = an-2 + an-1. Найдите k-е число Фибоначчи.

4.         Подсчитайте k – количество цифр в десятичной записи целого неотрицательного числа N.

Вариант № 8

1.                      Составьте таблицу значений функции y = ex + 6x –3 на отрезке [a; b] с шагом h.

2.                      Гриб за сутки увеличивает свою массу на 40 %. Через сколько суток масса гриба увеличится в 2,5 раза, если первоначально его масса составляла А?

3.                      Найдите сумму всех двузначных чисел кратных 6.

4.                      Найдите все трехзначные числа, сумма цифр которых равна данному целому числу.

Вариант № 9

1.         Напечатайте таблицу значений y = sin x, y = cos x, y = tg x, если х меняется от 1 до 5 с шагом 0,25.

2.         Дано целое число А. Это число умножают на 2 и к произведению прибавляют 1. Полученное число опять умножают на 2 и прибавляют 1. Сколько раз необходимо умножить на 2 и прибавить единицу к данному числу, чтобы получилось число больше Y.

3.         Спортсмен, готовясь к соревнованиям по бегу на длинные дистанции, в первый день тренировок пробежал А км. Каждый следующий день он увеличивал норму пробега на В %. Какая норма пробега будет у спортсмена в k-й день тренировок?

4.         Даны натуральные числа n и k. Проверьте, есть ли в записи числа х = nk цифра m. Вариант № 10

1.    Напечатайте таблицу соответствия между весом в фунтах, килограммах и граммах для значений от 1 до 15 фунтов с шагом 0,5 фунта (1 фунт = 453 г.).

2.    Числа Фибоначчи определяются по следующему закону: a1 = 1, a2 = 1, an + 1 = an + an - 1. Определить член Фибоначчи, который больше заданного числа Х.

3.    Дан натуральный отрезок [a; b]. Выведите из него все числа, кратные 7.

4.    В каких трехзначных числах удвоенная сумма цифр равна их произведению?

Вариант № 11

1.    Около стены наклонно стоит палка длиной Х. Один ее конец находиться на расстоянии Y от стены. Определите значение угла между палкой и полом для Y, изменяющегося от 2 до 4 с шагом 0,2 м.

2.    Числа Фибоначчи определяются по следующему закону: a1 = 1, a2 = 1, an + 1 = an + an 1. Суммируйте члены Фибоначчи, идущие под ряд, до тех пор, пока сумма не станет больше заданного числа Х.

3.    Дан натуральный отрезок [a; b]. Выведите из него все числа, меньшие данного числа Х.

4.    Найдите все двузначные числа, сумма цифр которых делится на 9.

Вариант № 12

1.    Плотность воздуха убывает с высотой по закону ρ = ρ0 e hz . Считая, что ρ0 = 1,29 кг/м3, z=1,2510–4 1/м, определите зависимости плотности воздуха от высоты для значений от 0 до 1000 м с шагом 100 м. Результаты представьте в виде таблицы.

2.    Числа Фибоначчи определяются по следующему закону: a1 = 1, a2 = 1, an + 1 = an + an 1. Между какими членами Фибоначчи находится данное число К?

3.    Найдите сумму всех четырехзначных чисел, кратных k.

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