Задачи с алгоритмами цикл
Цель: изучение алгоритмической структуры циклы, создание моделей и алгоритмов для решения практических задач.
Ход урока
I. Актуализация знаний
- Повторить понятие алгоритма, основные конструкции алгоритмического языка.
- Уметь разрабатывать математическую модель, алгоритм и блок схему решения задачи.
- Иметь понятие о языках программирования и их назначении.
- Уметь работать в среде программирования.
- Знать структуры программы.
- Уметь записывать выражения, содержащие числовые и символьные величины.
- Знать структуры операторов и особенности их работы.
- Уметь применять операторы при написании программ с линейными и ветвящимися структурами.
- Уметь на компьютере создавать и запускать программы на отладку.
II. Теоретический материал урока
Большинство практических задач требует многократного повторения одних и тех же действий, т. е. повторного использования одного или нескольких операторов. (Презентация)
Пусть требуется ввести и обработать последовательность чисел. Если чисел всего пять, можно составить линейный алгоритм. Если их тысяча, записать линейный алгоритм можно, но очень утомительно и нерационально. Если количество чисел к моменту разработки алгоритма неизвестно, то линейный алгоритм принципиально невозможен.
Другой пример. Чтобы найти фамилию человека в списке, надо проверить первую фамилию списка, затем вторую, третью и т.д. до тех пор, пока не будет найдена нужная или не будет достигнут конец списка. Преодолеть подобные трудности можно с помощью циклов.
Циклом называется многократно исполняемый участок алгоритма (программы). Соответственно циклический алгоритм – это алгоритм, содержащий циклы.
Различают два типа циклов: с известным числом повторений и с неизвестным числом повторений. При этом в обоих случаях имеется в виду число повторений на стадии разработки алгоритма.
Существует 3 типа циклических структур:
- Цикл с предусловием;
- Цикл с послеусловием;
- Цикл с параметром;
Иначе данные структуры называют циклами типа «Пока», «До», «Для».
Графическая форма записи данных алгоритмических структур:
Цикл с предусловием (иначе цикл пока) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
Пока (условие) нц серия команд кц | while условие do begin серия команд; end; |
где
условие – выражение логического типа.
Цикл может не выполняться ни разу, если значение логического выражения сразу же оказывается ложь.
Серия команд, находящихся между begin и end, выполняются до тех пор, пока условие истинно.
Для того чтобы цикл завершился, необходимо, чтобы последовательность инструкций между BEGIN и END изменяла значение переменных, входящих в условие.
Цикл с постусловием (иначе цикл до) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
В алгоритмическом языке нет команды которая могла бы описать данную структуру, но ее можно выразить с помощью других команд (Например, ветвления). | repeat серия команд until условие |
где
условие – выражение логического типа.
Обратите внимание:
Последовательность инструкций между repeat и until всегда будет выполнено хотя бы один раз;
Для того чтобы цикл завершился, необходимо, чтобы последовательность операторов между repeat и until изменяла значения переменных, входящих в выражение условие.
Инструкция repeat, как и инструкция while, используется в программе, если надо провести некоторые повторяющиеся вычисления (цикл), однако число повторов заранее не известно и определяется самим ходом вычисления.
Цикл с параметром (иначе цикл для) имеет вид:
Форматы записи операторов алгоритма | Блок-схема | Форматы записи операторов на Паскале |
Для i от а до b шаг h делай Нц Серия команд кц | h = +1 for i:= a to b do begin серия команд end; h = -1 for i:= b downto a do begin Cерия команд; end; |
где
i – параметр цикла;
a – начальное значение цикла;
b – конечное значение цикла;
h – шаг изменения параметра.
Структура данного цикла иначе называют циклом i раз.
Эта команда выполняется таким образом: параметру i присваивается начальное значение а, сравнивается с конечным значением b и, если оно меньше или равно конечному значению b, выполняется серия команд. Параметру присваивается значение предыдущего, увеличенного на величину h – шага изменения параметра и вновь сравнивается с конечным значением b.
На языке программирования Паскаль шаг изменения параметра может быть равным одному или минус одному.
Если между begin и end находится только один оператор, то операторные скобки можно не писать. Это правило работает для цикла типа «Пока» и «Для».
Рассмотрим пример решения задач с использованием данных структур
Пример.
Вычислить произведение чисел от 1 до 5 используя различные варианты цикла
Математическая модель:
Р= 1· 2· 3· 4· 5=120
Составим алгоритм в виде блок-схемы.
Для проверки правильности алгоритма заполним трассировочную таблицу.
Шаг | Операция | Р | i | Проверка условия |
1 | P:=1 | 1 | ||
2 | i:=1; | 1 | 1 | |
3 | i<=5 P:=P*I i:=i+1 | 1 | 1 | 1<=5, да (истина) |
4 | i<=5 P:=P*I i:=i+1 | 2 | 2 | 2<=5, да (истина) |
5 | i<=5 P:=P*I i:=i+1 | 6 | 3 | 3<=5, да (истина) |
6 | i<=5 P:=P*I i:=i+1 | 24 | 4 | 4<=5, да (истина) |
7 | i<=5 P:=P*I i:=i+1 | 120 | 5 | 5<=5, да (истина) |
8 | i<=5 P:=P*I i:=i+1 | 6<=5, нет (ложь) |
Проверка условия происходит в несколько шагов: проверка условия и выполнение команд на одной из ветвей. Поэтому в трассировочной таблице записываются не команды алгоритма, а отдельные операции, выполняемые компьютером на каждом шаге.
Шаг первый: Р присваивается значение один.
Шаг второй: i присваивается значение один.
Шаг третий: при i равном единице проверяем условие один меньше или равен пяти, да, условие истинно, значит Р присваивается значение один умноженное на один, будет два. Для i: один плюс один, будет два.
Шаг четвертый: при i равном двум проверяем условие два меньше или равен пяти, да, условие истинно, значит Р присваивается значение 2 умноженное на один, будет 2. Для i: два плюс один, будет три.
Шаг пятый: при i равном трем проверяем условие три меньше или равен пяти, да, условие истинно, значит Р присваивается значение два умноженное на три, будет шесть. Для i: три плюс один, будет четыре.
Шаг шестой: при i равном четырем проверяем условие четыре меньше или равен пяти, да, условие истинно, значит Р присваивается значение шесть умноженное на четыре, будет двадцать четыре. Для i: четыре плюс один, будет пять.
Шаг седьмой: при i равном пяти проверяем условие пять меньше или равен пяти, да ,условие истинно, значит Р присваивается значение двадцать четыре умноженное на пять, будет сто двадцать. Для i: пять плюс один, будет шесть.
Шаг восьмой: при i равном шести проверяем условие шесть меньше или равен пяти, нет, условие ложно, тогда мы выходим из цикла, а в результате получаем последнее значение равное сто двадцати.
Program Pr1;
Var i: integer;
Begin
P:=1;
i:=1;
While i<=5 do
begin
P:=P*i;
i:=i+1;
end;
Write (‘P=’, P);
end.
Для цикла с постусловием построим блок-схему и трассировочную таблицу. (слайд16)
В результате получаем последнее значение равное сто двадцати на седьмом шаге
И для Цикла с параметром построим блок-схему и трассировочную таблицу. (слайд17)
В результате получаем последнее значение равное сто двадцати на шестом шаге
Задача:
Вывести на экран числа от 1 до 5 в:
- прямом порядке;
- обратном порядке.
Математическая модель:
- 1 2 3 4 5;
- 5 4 3 2 1.
Блок-схема и программа решения задачи представлена для чисел в прямом порядке и обратном порядке.
(слайд 21)
Запишем рассмотренные алгоритмы на языке программирования Паскаль.
(слайд 22)
III. Подведение итогов урока
И так мы рассмотрели следующие вопросы:
- Алгоритмическая структура цикл;
- Виды алгоритмических структур:
- Цикл с предусловием;
- Цикл с послеусловием;
- Цикл с параметром;
- Рассмотрели способы записи данных структур;
- Разобрали примеры решения задач с помощью этих структур.
Источник
Оператор цикла WHILE
Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}
USES Crt;
VAR
A, N, B, K : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := 0; B := 1;
While K <> N DO Begin
K := K + 1; B := B * A;
End;
Write(‘ A в степени N = ‘,B);
END.
Другое решение той же задачи:
USES Crt;
VAR
A, N, B, K : INTEGER;
BEGIN
ClrScr; { Чистка экрана }
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := N; B := 1;
{A в степени N = B * (A в степени K)}
While K <> 0 DO Begin
K := K – 1; B := B * A;
End;
Write(‘ A в степени N = ‘,B);
END.
Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.
USES Crt;
VAR
A, B, C, K : INTEGER;
BEGIN
Write(‘ Введите два значения ‘); ReadLn(A,B);
K := 0; C := 0;
While K <> B DO Begin
K := K + 1; C := C + A;
End;
{C = A * K и K = B, следовательно, C = A * B}
Write(‘ A*B= ‘,C);
END.
Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D. Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. (Согласно определению, А = Q * D + R, 0 <= R < D.)
USES Crt;
VAR
A, D, R, Q : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(a,d);
R := A; Q := 0;
While Not (R < D) DO Begin
R := R – D; {R >= 0}
Q := Q + 1;
End;
WriteLn(‘ Частное = ‘,Q);
WriteLn(‘ Остаток = ‘,R);
END.
Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится?
USES Crt;
VAR
YR, KL: BYTE; YRG: REAL;
Begin
ClrScr;
Write(‘Введите урожайность ‘); ReadLn(YR);
YRG:=YR;
While (YRG <2*YR) Do Begin
YRG:=YRG+0.05*YRG;
KL:=KL+1;
End;
WriteLn(‘Новый урожай ‘,YRG:5:0);
Write(‘Через ‘,KL,’ лет урожай удвоится’);
END.
Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку.
USES Crt;
VAR
M,N: BYTE; Kl: BYTE;
BEGIN
ClrScr;
Write(‘Введите количество лет деда ‘); ReadLn(m);
Write(‘Введите количество лет внука ‘); ReadLn(n);
KL:=0;
While (M>2*N) DO Begin
M:=M+1; N:=N+1; KL:=KL+1;
End;
WriteLn(M,’ лет деду’);
WriteLn(N,’ лет внуку’);
WriteLn(‘Через ‘,KL,’ лет дед вдвое станет старше внука’);
END.
Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов.
USES Crt;
VAR
S1,S2:WORD; KL:BYTE;
BEGIN
ClrScr;
Write(‘Введите площадь, которую засеяли цветами 1-го сорта ‘); ReadLn(S1);
Write(‘Введите площадь, которую засеяли цветами 2-го сорта ‘); ReadLn(S2);
KL:=1;
While (S1>0.1*S2) DO Begin
S1:=S1*2; S2:=S2*3; KL:=KL+1;
End;
WriteLn(‘Площадь, которую засеяли цветами 1-го сорта ‘,S1);
WriteLn(‘Площадь, которую засеяли цветами 2-го сорта ‘,S2);
WriteLn(‘Через ‘, kl,’ лет’);
END.
Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления.
Для этой задачи представлено два решения.
a)
USES Crt;
VAR
DES, OST, I, DW:INTEGER;
BEGIN
ClrScr;
Write(‘Введите десятичное число ‘); ReadLn(DES);
I:=1;
While (DES>=2) DO Begin
OST:=DES mod 2;
DES:=DES div 2;
DW:=DW+OST*I;
I:=I*10;
End;
DW:=DW+DES*I;
Write(‘Двоичная запись числа ‘,DW);
END.
b)
USES Crt;
Const A=10;
VAR
DES, OST, I:INTEGER;
DW:Array[1..100] OF INTEGER;
BEGIN
ClrScr;
Write(‘Введите десятичное число ‘); ReadLn(des);
I:=1;
While (des>=2) DO Begin
OST:=DES mod 2;
DES:=DES div 2;
DW[I]:=OST;
I:=I+1;
End;
DW[I]:=DES;
FOR I:=I DownTo 1 DO
Write(DW[I]);
END.
…………………………………………………………………………………………………………………….
Практические задания
…………………………………………………………………………………………………………………….
Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n.
Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!).
Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n).
К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными.
Известна сумма номеров страниц, определить номер страницы.
Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно.
Источник
Тема урока: Решение задач, используя циклические алгоритмы.
Класс: 9
Тип урока: урок закрепления знаний и формирование умений и навыков
Цель урока (формулировка для учителя): проконтролировать степень усвоения знаний, умений и навыков, изученных и сформированных на предыдущих уроках, закрепить знания по построению циклических алгоритмах.
Планируемый результат (для учащихся): закрепить полученные знания о циклических алгоритмах, выполнить практические задания, научиться составлять алгоритмы.
Основные задачи:
Обучающие: формирование навыков построения блок-схем циклических алгоритмов
Воспитательные: формирование познавательного интереса к предмету, коммуникативной культуры;
Развивающие: развитие памяти, внимательности, усидчивости, самостоятельности в принятии решений.
УУД:
Формирование личностных УУД:
формирование самостоятельной деятельности учащихся;
оценивание личностной ценности изучаемых алгоритмов действий;
Формирование регулятивных УУД: целеполагание, планирование, прогнозирование, контроль, коррекция, оценка;
Формирование познавательных УУД: умение оформить результаты своей деятельности, умение работать с инструкциями;
Формирование коммуникативных УУД: умение представить себя устно и письменно.
Знания, умения, навыки и качества, которые обучающиеся
Актуализируют: запись на языке блок-схем циклических алгоритмах
Приобретут: знания, умения и навыки по составлению циклических алгоритмах;
Закрепят: теоретическую информацию о циклических алгоритмах
Оборудование: персональный компьютер, проектор, доска
Литература: Босова Л.Л., Босова А.Ю. Учебник для 9 класса.
Ход урока
Давайте вспомним прошлые уроки.
Какие виды циклических алгоритмах вы знаете?
Чем отличаются циклы друг от друга?
В каком из циклов условие выполнится хотя бы один раз?
В каком из циклов «тело цикла» может не выполнится ни разу?
В каком из циклов заранее известен шаг?
Отвечают на вопросы
Познавательные, коммуникативные
3.
Выполнение практического задания
Итак, ребята, сегодня мы с вами закрепим ранее изученные алгоритмы с циклом. Решим задачи:
Задача 1: Дано натуральное число, найти количество цифр в записи этого числа (слайд 1). Для написания алгоритма используется цикл «пока».
Задача 2: Найти количество делителей заданного натурального числа (слайд 2).
Для написания алгоритма используется цикл «для».
Задача 3: Найти сумму квадратов первых 10 чисел (слайд 4).
К данной задаче написать циклический алгоритм «пока».
Решение задачи и ее оформление у доски.
Презентация (слайд 1-3)
Личностные, познавательные,
регулятивные, коммуникативные
4.
Домашнее задание
Найти сумму квадратов первых 10 чисел (слайд 4). Написать циклические алгоритмы «для» и «до».
Записывают домашнее задание в дневник
Презентация (слайд 4)
Личностные, познавательные,
регулятивные
5.
Подведение итогов урока. Рефлексия.
Все ли было понятно на уроке?
Можете ли вы теперь различать типы циклических алгоритмах?
Есть какие-то пожелание для дальнейшего проведения уроков?
Есть ли у вас вопросы по уроку?
Спасибо за работу на уроке, вы все молодцы, до свидания.
Отвечают на вопросы.
Личностные, коммуникативные
Источник
Цель работы: закрепить практические навыки работы с системой Borland Pascal, научиться правильно использовать различные операторы циклов; научиться составлять программы решения задач с использованием циклических структур.
Общие сведения
Алгоритм называется циклическим, если он содержит многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений этих операторов может быть задано в явной (цикл с известным заранее числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.
Операторы цикла
Цикл с параметром
Оператор цикла применяется при выполнении расчетов или других действий, повторяющихся определенное количество раз. Оператор имеет вид: For i:= N1 To N2 Do “оператор”;
либо For i:= N1 DownTo N2 Do “оператор”;
Здесь i – параметр цикла (переменная порядкового типа), N1, N2 – начальное и конечное значения параметра цикла i. N1, N2 могут быть константами, переменными или выражениями порядкового типа. Напомним, что “оператор” может иметь вид: Begin “операторы” end; В случае связки “To” цикл выполняется при условии N1 <= N2 и происходит с единичным возрастанием параметра цикла i от N1 до N2. В случае связки DownTo цикл выполняется при условии N1 >= N2 и происходит с единичным уменьшением параметра цикла i от N1 до N2. В операторе цикла не разрешается присваивать параметру цикла какое-либо значение. После окончания цикла значение параметра цикла “i” неопределенно. Оператор цикла часто применяется для суммирования значений некоторой последовательности чисел или значений функции при известном числе операций суммирования. Напомним некоторые определения, связанные с расчетом суммы последовательности. Сумма членов последовательности величин
a1, a2, a3, . . . , an
называется конечной суммой
Sn = a1 + a2 + a3+ . . . + an
Для некоторых последовательностей известны формулы расчета конечных сумм, например: при an = an-1 + d; Sn = (a1 + an)*n/2; – арифметическая прогрессия, при an = an-1 * q; Sn= (a1 – an*q)/(1-q); – геометрическая прогрессия, где d и q – постоянные числа. Здесь N-ый член последовательности выражается через (N-1)-ый член. Такие зависимости называются реккурентными. Конечная сумма последовательности может быть неизвестна, тогда для ее расчета применяется алгоритм суммирования членов последовательности в цикле от 1 до N. Приведем пример расчета конечной суммы последовательности: 12 + 32 + 52 +. . . + (2*N-1)2; Sn = N*(4*N2-1)/3; PROGRAM SUM_K; { расчет конечной суммы }
var
a, S, Sn, i, N : word;
Begin
write(‘Введите число членов суммы N=’);
readln(N);
S:= 0;
For i:= 1 to N do
begin { цикл суммирования }
a := Sqr(2*i-1);
S:= S+a
end;
Sn := N*(4*N*N-1) div 3;
Writeln(‘Конечная сумма S=’, S:10:2);
Writeln(‘Расчет конечной суммы по формуле Sn=’, Sn:10:2);
Writeln(‘Нажми Enter’);
ReadLn
End.
В некоторых случаях “N”-ый член последовательности определяется через сумму предыдущих членов, например,
an= p*Sn-1,
тогда
Sn= Sn-1 + an = Sn-1*(1+р),
и конечную сумму можно рассчитать по формуле:
Sn = S0*(1+p)N,
где “S0” – начальная сумма. Рассмотрим программу вычисления конечной суммы денежного вклада в банк через N месяцев при ежемесячной процентной ставке “pr” (5% cоответствует pr=5). PROGRAM VKLAD; { расчет конечной суммы вклада в банк }
var
S, Sn, pr : Real;
i, N : Integer;
Begin
Write(‘Введите начальную сумму вклада S=’);
readln(S);
Write(‘Введите процент по вкладу pr=’);
readln(pr);
Write(‘Введите количество месяцев вклада N=’);
readln(N);
For i:= 1 to N do S:= S*(1+pr/100); { цикл произведений }
Writeln(‘Конечная сумма вклада S=’, S:10:2);
{ Оператор для расчета “Sn” напишите самостоятельно }
Writeln(‘Расчет конечной суммы вклада по формуле Sn=’, Sn:10:2);
Writeln(‘Нажмите Enter’);
readln
End.
Часто применяются вложенные операторы цикла. Например, если необходимо провести все варианты расчета при изменении нескольких параметров в заданных диапазонах. Составим программу расчета функции y = A*sin(x) – cos(x)/A; при изменении аргумента “x” в диапазоне от 0 до Pi с шагом Pi/100 и при изменении параметра “A” в диапазоне от 1 до 3 с шагом 0.5. Program tabl;
var
y, x, a, dx : real;
i, j: integer;
Begin
Writeln(‘ Расчет по формуле: y=A*sin(x)-cos(x)/A; ‘);
Writeln(‘————————————————–‘);
Writeln(‘| X | A=1.0 | A=1.5 | A=2.0 | A=2.5 | A=3.0 |’);
Writeln(‘————————————————–‘);
dx := pi/100;
for i:= 0 to 100 do
begin { внешний цикл изменения аргумента “X” }
x:= dx*i;
Write( x:8:4 );
for j := 1 to 5 do
begin{ вложеннный цикл изменения параметра “A” }
A := 0.5*(j+1);
y := A*sin(x)-cos(x)/A; Write(y:8:4)
end;
Writeln; {перевод курсора на новую строчку}
if ((i+1) mod 20) = 0 then readln{задержка прокрутки экрана до нажатия Enter}
end;
readln;
End.
Операторы цикла с условием
В Турбо-Паскале применяются два оператора цикла с условием: While “условие” DO “оператор”;
– цикл с предусловием: проверка условия перед каждым выполнением “оператора”, Repeat “операторы” Until “условие”;
– цикл с постусловием: проверка условия после каждого выполнения “операторов”. Здесь “условие” – выражение логического типа (Boolean).
Схема выполнения операторов имеет вид:
Цикл WHILE | Цикл REPEAT |
---|---|
В цикле While “оператор” выполняется если условие верно (True), если условие ложно (False), то цикл заканчивается, т. е. цикл While повторяется пока выполняется условие. Цикл While начинается проверкой условия, поэтому, если начальное условие ложно, то “оператор” не выполняется ни разу. Для включения в тело цикла нескольких операторов применяется составной оператор: Begin “операторы” end. Цикл Repeat повторяется, если условие ложно (False), и заканчивается, если условие верно (True), т. е. цикл Repeat повторяется до выполнения условия. Цикл Repeat заканчивается проверкой условия, поэтому “операторы” выполняются не менее одного раза. В теле цикла может записываться более одного оператора. Циклы с условием обычно используются в тех случаях, если количество повторений блока операторов заранее не известно, например, при расчете суммы членов бесконечного ряда с заданной погрешностью. Сумма членов бесконечной последовательности
a1, a2, a3, … , an, …
называется бесконечным рядом и записывается в виде:
a1 + a2 + a3 +… + an+…
Здесь an – общий член ряда. Сумма конечного числа членов ряда называется частичной суммой и обозначается “Sn”. Если сумма членов бесконечного ряда имеет конечный предел “S”, то ряд называется сходящимся. Для некоторых рядов получены формулы расчета суммы членов ряда. Например, сумма членов числового ряда:
1 + 1/32 + 1/52 + . . . + 1/(2*N-1) + …
имеет предел S = Pi2/8 и общий член an = images/(2*N-1)2, где N = 1, 2, 3, … Для сходящегося ряда вычисляется последовательность частичных сумм с заданной погрешностью. Абсолютная погрешность расчетов определяется по формуле Eps=abs(S-Sn), либо Eps=abs(an), если значение S неизвестно. Относительная погрешность расчетов определяется по формуле Eps_o=abs((S-Sn)/S), либо Eps_o=abs(an/Sn). Частичные суммы вычисляются по формуле: Sn = Sn-1 + an Для знакопеременного ряда следует добавить k1=-1, а в цикле: k1:=-k1, an=k1*an. В некоторых случаях “N”-ый член ряда выражается через “N-1”-ый, например, для ряда:
1 + 1/2! + 1/4! + 1/6! + … + 1/(2*N)! + … ; N = 0, 1, 2, …
общий член ряда вычисляется по формуле: an = an-1*k; Параметр k = an/an-1 – коэффициент роста вычисляется предварительно (до написания программы). Для данного ряда
an = 1/(2*N)! = 1/( 1*2*…*(2*N-2)*(2*N-1)*2*N)
an-1 = 1/(2*(N-1))! = 1/((2*N-2))! = 1/(1*2*…*(2*N-2))
k = an/an-1 = 1/((2*N-1)*2*N)
Здесь N! = 1*2*3*…*N; – вычисление факториала числа “N”, причем 0! = 1. Расчет частичных сумм производится в цикле с условием, например, для данного ряда операторами: N := 0;
a := 1;
SN := 1;
S := (e+1)/e;
e := 2.7182828;
Repeat
N := N+1;
k := images/((2*N-1)*2*N);
a := a*k;
SN := SN+a;
Writeln(‘Частичная сумма Sn= ‘, Sn:11:6);
Until abs(S-Sn) < eps; { eps – допустимая погрешность расчетов}
Writeln(‘Сумма ряда S = ‘, SN:11:6);
Операторы ограничения и прерывания цикла
Данные операторы применяются внутри операторов цикла с параметром или условием. Операторы имеют вид: Continue; – ограничение цикла,
Break; – прерывание цикла.
Операторы Continue и Break позволяют производить действия не для всех операторов внутри цикла. Действие оператора Continue заключается в передаче управления на начало цикла, при этом контролируется условие выхода из цикла. Действие оператора Break заключается в передаче управления оператору, следующему за последним оператором цикла, при этом не контролируется условие выхода из цикла. Во вложенных циклах операторы Continue и Break действуют только на цикл в котором они записаны. Приведем пример использования операторов для блокировки несанкционированного доступа в программу. For i := 1 to 3 do
begin
Write( ‘Введите ПАРОЛЬ:’ ); Readln(S); {S и Parol – переменные одного типа}
If S = Parol Then Break { прерывание цикла }
else If i <> 3 Then Continue; { ограничение цикла }
Writeln( ‘Доступ к программе ЗАПРЕЩЕН’ );
Writeln( ‘Нажмите Enter’ );
Readln;
Halt { прерывание программы }
end; { продолжение программы }
Примеры
Пример1: На промежутке от 1 до M найти все числа Армстронга. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу.
Этапы решения задачи:
- Математическая модель: xО[1;M], x=
- Составим блок схему программы:
Распишем составные части блока”Находим все числа Армстронга на заданном промежутке и печатаем их”
Опишем блок “Подсчитываем сколько цифр в числе i”
Опишем блок “Проверяем, является ли i числом Армстронга”
Дальнейшая детализация не требуется, запишем блок-схему целиком:
Дальнейшей детализации не требуется, переведем программу на язык Паскаль.
PROGRAM Primer_1; var i,k,s,p,n: Integer; BEGIN Write(‘Введите M ‘); Readln(m); For i:=1 to M do begin s:=0; k:=i; n:=0; While k<>0 do begin k:=k DIV 10; n:=n+1 end; k:=i; While k<>0 do begin p:=k MOD 10; k:=k DIV 10; If p<>0 then s:=Trunc (s+Exp(n*Ln(p))) end; If s=f then WriteLn (f) end; END.
Контрольные вопросы
- Как записывается и как работает оператор FOR?
- Для организации каких циклов применим оператор FOR?
- В чем отличие оператора WHILE от оператора REPEAT?
- Как программируются циклические алгоритмы с явно заданным числом повторений цикла?
- Как программируются циклические алгоритмы с заранее неизвестным числом повторений цикла?
- Напишите оператор цикла, который не выполняется ни разу.
- Напишите оператор цикла, который выполняется неограниченное число раз.
- Замените оператор “Repeat A Until B” равносильным фрагментом программы с оператором While.
Задачи
- Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2,3,4,5,6,7,8,9.
- Найти все трехзначные числа, сумма цифр которых равна данному целому числу.
- Найти все трехзначные числа, средняя цифра которых равна сумме первой и третьей цифр.
- Найти все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры.
- Найти все двузначные числа, сумма квадратов цифр которых делится на 17.
- Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр.
- Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.
- Найти двузначное число, равное утроенному произведению его цифр.
- В каких двузначных числах удвоенная сумма цифр равна их произведению?
- Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? Написать программу решения этой задачи.
Вычисление выражений:
Дано натуральное n. Вычислить:
- ;
- ;
Дано действительное число х, натуральное число n. Вычислить:
- x ( x – n )( x – 2 n )( x – 3 n )…( x – n2 );
- ;
- ;
Дано натуральное n. Вычиcлить:
- ;
- ; Вычислить приближенно значение бесконечной суммы (справа от каждой суммы дается ее точное значение, с которым можно сравнить полученный ответ):
- = ;
- = ;
- = ;
Нужное приближение считается полученным, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше данного положительного числа e.
- Даны два целых числа A и B (A < B). Вывести все целые числа, расположенные между данными числами (не включая сами эти числа), в порядке их возрастания, а также количество N этих чисел.
- Даны два целых числа A и B (A < B). Вывести все целые числа, расположенные между данными числами (включая сами эти числа), в порядке их убывания, а также количество N этих чисел.
- Дано вещественное число A и целое число N (> 0). Вывести A в степени N: AN = A·A·…·A (числа A перемножаются N раз).
- Дано вещественное число A и целое число N (> 0). Вывести все целые степени числа A от 1 до N.
- Дано вещественное число A и целое число N (> 0). Вывести 1 + A + A2 + A3 + … + AN.
- Дано вещественное число A и целое число N (> 0). Вывести 1 – A + A2 – A3 + … + (-1)NAN.
- Дано целое число N (> 1). Вывести наименьшее целое K, при котором выполняется неравенство 3K > N, и само значение 3K.
- Дано целое число N (> 1). Вывести наибольшее целое K, при котором выполняется неравенство 3K < N, и само значение 3K.
- Дано вещественное число A (> 1). Вывести наименьшее из целых чисел N, для которых сумма 1 + 1/2 + … + 1/N будет больше A, и саму эту сумму.
- Дано вещественное число A (> 1). Вывести наибольшее из целых чисел N, для которых сумма 1 + 1/2 + … + 1/N будет меньше A, и саму эту сумму.
- Дано целое число N (> 0). Вывести произведение 1·2·…·N. Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и выводить его как вещественное число.
- Дано целое число N (> 0). Если N – нечетное, то вывести произведение 1·3·…·N; если N – четное, то вывести произведение 2·4·…·N. Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и выводить его как вещественное число.
- Дано целое число N (> 2) и две вещественные точки на числовой оси: A, B (A < B). Отрезок [A, B] разбит на равные отрезки длины H с концами в N точках вида A, A + H, A + 2H, A + 3H, …, B. Вывести значение H и набор из N точек, образующий разбиение отрезка [A, B].
- Дано целое число N (> 2) и две вещественные точки на числовой оси: A, B (A < B). Функция F(X) задана формулой F(X) = 1 – sin(X). Вывести значения функции F в N равноотстоящих точках, образующих разбиение отрезка [A, B]: F(A), F(A + H), F(A + 2H), …, F(B).
- Дано число D (> 0). Последовательность чисел AN определяется следующим образом: A1 = 2, AN = 2 + 1/AN-1, N = 2, 3, … Найти первый из номеров K, для которых выполняется условие |AK – AK-1| < D, и вывести этот номер, а также числа AK-1 и AK.
- Дано число D (> 0). Последовательность чисел AN определяется следующим образом: A1 = 1, A2 = 2, AN = (AN-2+ AN-1)/2, N = 3, 4, … Найти первый из номеров K, для которых выполняется условие |AK AK-1| < D, и вывести этот номер, а также числа AK-1 и AK.
Задачи повышенной сложности
- Определить, является ли заданное число совершенным , т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, число 6 совершенно: 6=1+2+3).
- Дано натуральное k. Напечатать k-ю цифру последовательности 1234567891011121314…, в которой выписаны подряд все натуральные числа.
- Дано натуральное k. Напечатать k-ю цифру последовательности 149162536…, в которой выписаны подряд квадраты всех натуральных чисел.
- Дано натуральное k. Напечатать k-ю цифру последовательности 1123581321…, в которой выписаны подряд все числа Фибоначчи.
Источник