Лабораторная работа № 4
Цель работы: закрепить практические навыки работы с системой PascalABC, овладеть практическими навыками разработки, программирования циклических процессов, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, содержащих операторы цикла While, Repeat и For.
Операторы цикла служат для того, чтобы выполнять входящие в их состав операторы (так называемые операторы тела цикла) несколько раз (в частном случае – один раз или ни разу). В языке PascalABC имеется три вида операторов цикла: While, Repeat и For.
Синтаксис оператора цикла 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 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 по возрастающим значениям параметра 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; { Результат суммирования }
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;
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;
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. Составьте таблицу значений функции y= x2 – 2x +5 на отрезке [a; b] с шагом h.
2. Сумма в А, руб., лежит на расчетном счету. На сумму начисляется в % каждый год прибыли на ту сумму, которая находится на счету. Прибыль со счета не снимается. Через сколько лет данная сумма удвоится?
3. Дан натуральный отрезок [a; b]. Выведите из него все четные числа.
4. В каких двузначных числах удвоенная сумма цифр равна их произведению? Вариант № 2
1. Составьте таблицу значений функции y = (x – 2)/(x2 + 4) на отрезке [a; b] с шагом h.
2. Спортсмен марафонец, готовясь к соревнованиям в первый день тренировки пробежал А км. Каждый следующий день он наращивал норму тренировки на В % от предыдущего дня. В какой день тренировок норма его пробега превысит С км?
3. Дан целочисленный отрезок [a; b]. Выведите из него все отрицательные числа.
4. Найдите двузначное число, равное утроенному произведению его цифр.
1. Составьте таблицу значений функции y=x3+ 2x2 – 4x + 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. Найдите двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.
1. Составьте таблицу значений функции y = (x + 2)3 на отрезке [a; b] с шагом h.
2. Сумма в А руб. лежит на расчетном счету. На сумму начисляется В % каждый год прибыли.
Прибыль со счета не снимается. Через сколько лет данная сумма превысит С, руб.?
3. Найдите сумму всех нечетных двухзначных чисел.
4. Найдите все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры. Вариант № 6
1. Составьте таблицу значений функции y = x 4 – 2x + 8 на отрезке [a; b] с шагом h.
2. Количество граждан некоторого города увеличивается ежегодно на В %. Через сколько лет население города возрастет в два раза, если вначале было А человек.
3. Найдите сумму всех четных двузначных чисел.
4. Найдите все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр.
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.
1. Составьте таблицу значений функции y = ex + 6x –3 на отрезке [a; b] с шагом h.
2. Гриб за сутки увеличивает свою массу на 40 %. Через сколько суток масса гриба увеличится в 2,5 раза, если первоначально его масса составляла А?
3. Найдите сумму всех двузначных чисел кратных 6.
4. Найдите все трехзначные числа, сумма цифр которых равна данному целому числу.
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. В каких трехзначных числах удвоенная сумма цифр равна их произведению?
1. Около стены наклонно стоит палка длиной Х. Один ее конец находиться на расстоянии Y от стены. Определите значение угла между палкой и полом для Y, изменяющегося от 2 до 4 с шагом 0,2 м.
2. Числа Фибоначчи определяются по следующему закону: a1 = 1, a2 = 1, an + 1 = an + an – 1. Суммируйте члены Фибоначчи, идущие под ряд, до тех пор, пока сумма не станет больше заданного числа Х.
3. Дан натуральный отрезок [a; b]. Выведите из него все числа, меньшие данного числа Х.
4. Найдите все двузначные числа, сумма цифр которых делится на 9.
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. Найдите все трехзначные числа, третья цифра которых равна сумме первой и второй цифр.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.