Задания для самостоятельной работы. Порядок выполнения работы Изучить теоретические сведения по теме “Реализация алгоритмов с циклами в Паскале ”
Порядок выполнения работы
- Изучить теоретические сведения по теме “Реализация алгоритмов с циклами в Паскале ”.
- Получить индивидуальное задание у преподавателя и разработать программу в соответствии с поставленной задачей.
- Показать работающую программу преподавателю.
- Ответить на контрольные вопросы.
- Подготовить письменный отчет.
Форма представления отчета:
1. Тема работы.
2. Условия задания.
3. Текст программы и исходные данные при вводе.
4. Результаты выполнения программы.
Краткие теоретические сведения.
Цикл – многократное повторение одних и тех же действий.
Цикл с предусловием
Такой цикл называют «пока». Механизм его работы: пока условие истинно, повторять…
Пример. Вывести все «-» члены арифметической прогрессии -11; -7…
Пусть a – очередной член прогрессии.
а:=a+4 – следующий член прогрессии.
Пока a<0, повторять a:=a+4.
Цикл с предусловием может не выполниться ни разу, если условие сразу оказалось ложным.
Пример. Найти сумму первых десяти натуральных чисел.
S=1+2+…+10
S – сумма
а – очередное слагаемое.
S:=S+a a:=a+1 | Выполнять, пока a<=10 |
Цикл с постусловием.
Механизм работы: повторять, пока условие не станет истинным.
Этот цикл всегда выполняется хотя бы 1 раз.
Пример. Найти сумму положительных членов арифметической прогрессии: 17; 11 …
S=a+S a:=a-6 | тело цикла повторять до тех пор, пока не выполнится условие a<=0 |
Пример. Вычислить n!
F=F*k k=k+1 | тело цикла повторять до тех пор, пока не выполнится условие k>N |
Циклы в Pascal
Паскаль предусматривает использование трех операторов цикла:
• оператор цикла с параметром for
• оператор цикла с предусловием while
• оператор цикла с постусловием repeat
Цикл с параметром
Цикл с параметром используется в тех случаях, когда число повторений заранее известно.
Общий вид: for <параметр>:=<начальное значение> to <конечное значение> do <оператор>;
Значение параметра меняется с шагом 1. Оператор представляет тело цикла, которое может быть простым или составным оператором.
Пример 1.Вывести квадраты первых десяти натуральных чисел.
Program primer;
Var i, x: integer;
begin
for i:=1 to 10 do begin {перебираем натуральные числа от 1 до 10}
x:=sqr(i); {возводим очередное число в квадрат}
write(x, ' '); {выводим полученное значение}
end;
end.
Результат:
1 4 9 16 25 36 49 64 81 100
Если необходимо, чтобы параметр цикла менялся с шагом -1, следует вместо to записать downto.
for i:=1 to 10 do begin
x:=sqr(i);
write(x, ' ');
end;
Результат:
100 81 64 49 36 25 16 9 4 1
Пример 2.Найти сумму 1 + 1/3 + 1/5 +...(N слагаемых).
Program primer;
Var I, N: integer;
S: real;
begin
Write('N='); Readln(N); {вводим количество слагаемых}
S:=0; {обнуляем сумму}
For I:=1 to N do {выполняем цикл N раз, добавляя к сумме по од ному слагаемому}
S:=S+1/(2*I-1);
Writeln('S=',S:5:2); {выводим значение суммы с двумя десятичными знаками}
end.
Пример 3. Подсчитать количество двузначных чисел, кратных 3.
Program primer;
Var i, k: integer;
begin
k:=0; for i:=10 to 99 do begin
if i mod 3=1 then k:=k+1;
end;
writeln ('k=', k);
end.
Пример 4. Найти сумму четных делителей введенного целого числа.
Program primer;
Var i, S, n: integer;
begin
Write (‘n=’); Readln(n);
S:=0;
for i:=2 to (n div 2) do
if (n mod i=0) and (i mod 2=0) then s:=s+i;
writeln('S=', S);
end.
Цикл с предусловием.
While <условие> do <оператор>;
Цикл выполняется, пока условие остается истинным.
Пример. Первоначальный вклад составил S рублей. Через сколько лет сумма вклада более, чем в 2 раза превысит первоначальный вклад, если годовой процент составляет x%.
Например, S=1000 р, x=10%
1 год S=1000+1000*10/100=1100
2 год S=1100+1100*10/100=1210
Program primer;
Var s, sum, x: real;
n: integer;
Begin
Write(‘S=’); Readln(S);
Write(‘x=’); Readln(x);
Sum:=2*s; n:=0;
While S<=Sum do begin
s:=s+s*x/100;
n:=n+1;
end;
write('через ', n, ‘ лет’);
end.
Пример 5.Задана арифметическая прогрессия -21; - 16;… Определить номер первого положительного члена прогрессии.
a – очередной член прогрессии, n – его порядковый номер
a=a+5 n=n+1 | повторять, пока a<=0 |
Program primer; var a, n: integer; begin a:= -21; n:=1; while a<=0 do begin a:=a+5; n:=n+1; end; writeln(‘n=’, n); end. | Program primer; var a, n: integer; begin a:= -21; n:=1; repeat a:=a+5; n:=n+1; until a>0; writeln(‘n=’, n); end. |
Примечание: необходимо учитывать, что тело цикла должно содержать по крайней мере, одну команду, влияющую на значение логического выражения (условия) таким образом, чтобы цикл завершился за конечное число шагов. Например, в рассмотренном примере это команда a:=a+5;
Цикл с постусловием
Repeat
<опреаторы>;
Until <условие>
Оператор повторяет последовательность команд пока условие не станет истинным. Этот цикл всегда выполняется хотя бы 1 раз.
Пример. Найти сумму цифр введенного натурального числа.
Program primer;
var
a, n, s: integer;
begin
Write(‘n=’); Readln(n);
S:=0;
repeat
a:=n mod 10;
s:=s+a;
n:=n div 10;
until n=0;
writeln(‘s=’, s);
end.
Пример 6. Протабулировать (вывести на экран таблицу значений) функции y=2x+1 интервале [-3; 3] с шагом 0.5.
x= - 3 y=…
x= - 2.5 y=…
…
x=3 y=…
Program primer;
var
x, y: real;
begin
x:=0;
repeat
y:=sqrt(sqr(sin(x)+2));
writeln(‘x=’, x:6:2, ‘y=’, y:8:4);
x:=x+0.2;
until x>1;
end.
Пример 7.Вычислить сумму с заданной точностью E=0.0001.
Program primer;
Var S, e, slag: real;
k: integer;
begin
e:=0.0001; s:=0; k:=1;
slag:= k/sqr(k+1);
repeat
s:=s+slag;
k:=k+1;
slag:=k/sqr(k+1);
until slag<e;
write (‘s=’, s:6:2);
end.
Вложенные циклы
Циклическая конструкция может содержать в теле цикла другой цикл. Такие конструкции называют вложенными циклами. Глубина вложения и тип циклов может быть различными.
Например, a) For . . . do – внешний цикл
While . . . do – внутренний цикл (в данном случае глубина = 2)
b) While . . . do
For . . . do
Repeat
. . .
Until (глубина =3)
Рассмотрим механизм работы вложенных циклов на примере:
For a:=1 to 2 do
For b:=1 to 3 do
Writeln(‘a=’, a, ‘ b=’, b);
a=1 a=1 a=1 | b=1 b=2 b=3 | выполняется внутренний цикл по b при a=1 |
a=2 a=2 a=2 | b=1 b=2 b=3 | выполняется внутренний цикл по b при a=2 |
Параметр внешнего цикла не меняет свое значение до тех пор, пока внутренний цикл не завершит свою работу.
Пример: вывести на экран таблицу Пифагора.
внутренний цикл | ||||||||||
внешний цикл | ||||||||||
Program primer;
var
i, j: integer;
begin
for i:=1 to 9 do
begin
for j:= 1 to 9 do
write(i*j:4);
writeln;
end;
end.
Внутренний цикл формирует каждую строку таблицы. Writeln – перевод курсора на новую строку.
Пример. Вводятся k натуральных чисел. Найти сумму цифр каждого из них.
повторить | 1. Ввести число N 2. Найти сумму его цифр 3. Вывести результат |
Program primer;
var
n, s, a, i, k: integer;
begin
write (‘k=’); readln(k);
for i:=1 to k do
begin
Write(‘n=’); readln (n); s:=0;
Repeat
a:=n mod 10;
s:=s+a;
n:=n div 10;
until n=0;
writeln (‘s=’,s);
end;
end.
Контрольные вопросы
1. Операторы повтора. Общая характеристика.
2. Оператор повтора for. Форматы записи, описание работы цикла, ограничения использования параметра цикла.
3. Примеры использования оператора for. Различие to и downto.
4. Оператор повтора Repeat. Формат записи, особенности использования.
5. Примеры программ с использованием оператора repeat.
6. Оператор повтора while. Формат записи, описание работы цикла.
7. Пример использования оператора while. Описание работы программы.
Задания для самостоятельной работы
1. Вычислить: .
2. Вычислить: 1!+2!+...+n!.
3. Вычислить: sin x+sin 2x+sin 3x +….(n слагаемых).
4. Вычислить: cos(x)+cos(cos(x))+... +cos(...cos(x)) (n cлагаемых).
5. Вычислить: 1*2+2*3+...+n*(n+1).
6.Вводится натуральное число n. Вычислить 21+22+…+2n .
7. Вводится натуральное число n. Найти сумму S= (n слагаемых)
8. Вводится натуральное число n. Вычислить n! ( )
9. Найти произведение: Р = (1 + х)·(3+2х)·(5+3х)·... . (n множителей)
10. Найти значение суммы ряда c точностью e=10-4.
11. Найти значение суммы c точностью e=10-6.
12. В 1626 году индейцы продали остров Манхеттен за 20 долларов. Если бы эти деньги были помещены в банк на текущий счет и ежегодный прирост составлял бы 4%, какова была бы стоимость капитала в 2003 году?
13. Вы положили c S рублей в банк под p% ежегодного прироста. Определить: а) когда сумма вклада утроится? б) какой будет сумма вклада после 10 лет?
14. Готовясь к соревнованиям, лыжник в первый день побежал 10 км, затем каждый день увеличивал расстояние на 10%. Сколько километров пробежал он за неделю тренировок? На какой день он пробежал больше 15 км?
15. Малое предприятие в первый день работы выпустило P единиц товарной продукции. Каждый последующий день оно выпускало продукции на Q единиц больше, чем в предыдущий. Сколько дней потребуется предприятию, чтобы общее количество выпущенной продукции за все время работы впервые превысило запланированный объем Т?
16. Чтобы открыть секретный сейф, агент 007 решил набирать в возрастающем порядке все трехзначные числа, в записи которых нет одинаковых цифр. Составить программу, которая бы печатала все такие числа. Определить, сколько времени потребуется ему в худшем случае для вскрытия сейфа, если для набора одного числа он тратит 2с?
17. Подсчитать сумму двухзначных чисел, сумма цифр которых не превышает 7.
18. Составить программу, которая находит и выводит на печать все четырехзначные числа abcd, для которых выполняются следующие условия:1) a, b, c, d - разные цифры и2) ab-cd=a+b+c+d. Здесь запись ab означает, что число составлено из цифр a и b.19. Числа Фибоначчи определяются как а(0)=1, а(1)=1, а(i)=a(i-1)+a(i-2). Найти десятое число Фибоначчи. Найти: а) N-ое число Фибоначчи. б) сумму первых N чисел Фибоначчи.
20. Определить, является ли число n простым.
21. Найти сумму делителей числа n.
22. Определить, является ли число n совершенным. Совершенное число́ — натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого́ числа). Например, 6=1+2+3
23. Найти среди дву- и трехзначных чисел совершенные.
24. Найти наименьшее общее кратное(НОК) двух натуральных чисел.
25. Задана арифметическая прогрессия 2; 5; … . Определите наименьшее количество членов прогрессии, начиная с первого, сумма которых превышает 50.
26. Задана арифметическая прогрессия 22; 18; …. Определите номер первого отрицательного члена прогрессии.
27. Вывести таблицу значений функции y= sin2 x – cos x на интервале [-p,p] с шагом p/10.
28. Составить программу, запрашивающую с клавиатуры два натуральных числа А и В -стороны прямоугольника - и определяющую на сколько квадратов его можно разрезать, отрезая каждый раз квадрат максимальной площади с целой длиной стороны. Вывести количество и размер всех квадратов. Например, при A = 20, B = 10 ответ: 2 со стороной 10;
при A = 20, B = 15 ответ: 1 со стороной 15, 3 со стороной 5.