- •Структура программы
- •Раздел var;
- •Типы величин
- •Ввод / вывод в Паскале.
- •Лабораторная работа№1
- •5. Ветвление. Формат оператора.
- •6.Применение ветвлений при решении задач Неполная форма ветвления
- •Составной оператор
- •Оператор выбора
- •Цикл c предусловием.
- •Цикл с постусловием
- •10 Решение задач на циклы.
- •11. Цикл с параметром.
- •12. Накопление суммы, произведения, количества.
- •13. Сочетание циклов и разветвлений.
- •14. Вычисление рекуррентных последовательностей
- •14. Задачи на поиск.
- •15. Поиск минимального/ максимального элемента.
11. Цикл с параметром.
Формат оператора
For параметр :=<выражение1> To (DownTo) <выражение2> Do <оператор>;
Выполнение оператора For в первом варианте (То) происходит по следующей схеме:
1. Вычисляются значения <Выражения 1> и <Выражения 2>. Это делается только один раз при входе в цикл.
2. Параметру цикла присваивается значение <Выражения 1>.
3. Значение параметра цикла сравнивается со значением <выражения 2>. Если параметр цикла меньше или равен этому значению, то выполняется тело цикла, в противном случае выполнение цикла заканчивается.
Вычислить площади квадратов при различных значениях сторон a=3, 5, 7, 9, 11, 13.
Вычислить периметры десяти прямоугольников при заданных значениях сторон a и b.
Вычислить значения функции y=4x3-2x2+5 для x[-3; 1], x=0,1.
Вычислить значения функций P1(x), P2(x), P3(x) для x=0, 0.5, 1, …20
P1(x)=sin x, P2(x)= 3 cos x2-1, P3(x)=(5 sin x –3x)/2
Рассчитать таблицу значений функции:
Для x [0; 2], x=0,1
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько амеб будет через 3, 6, 9, 12, …24 часа.
12. Накопление суммы, произведения, количества.
Дано 10 чисел: a1, a2, a3, … a10. Вычислить их сумму.
Даны целые числа: a1, a2, a3, … an. Вычислить их произведение.
Дано натуральное число n. Вычислить 2n, не используя операцию возведения в степень.
Вычислить n!
Вычислить сумму: cos x + cos 2x + cos 3x +…+ cos nx.
Вычислить сумму:
Домашнее задание:
1+2+3+…+ n
1+1/2+1/3+1/4+…+1/n
sin x + sin x2 + sin x3 + …+ sin xn
a(a-n)(a-2n)(a-4n)…(a – n2n)
Вычислить среднее арифметическое заданных n элементов последовательности.
13. Сочетание циклов и разветвлений.
Дано n целых случайных чисел из диапазона (-20;50). Найти количество отрицательных чисел среди них.
Дано n целых чисел a1, a2, a3, … an. Найти среднее арифметическое четных чисел.
Вычислить среднее значение функции, заданной на отрезке [-4;6] с шагом 0.5:
,
где b=5, а – значение, вводимое с клавиатуры.
Даны целые случайные числа из диапазона (-30;50). Получить удвоенную сумму чисел, кратных 5 и некратных 7.
14. Вычисление рекуррентных последовательностей
Рекуррентная последовательность – это бесконечный ряд чисел, каждое из которых выражается через предыдущие.
ak+1=f(a1…, ak);
ak+2=f(a1…, ak+1); …
ai= f(ai-1, ai-2, …, ai-k)
Примерами рекуррентных последовательностей служат арифметические и геометрические последовательности:
1,3,5,7,9…
1,2,4,8,16… - глубина рекурсии равна1 (каждый следующий элемент зависит только от одного предыдущего).
Другая последовательность Фибоначчи: 1,1,2,3,5,8,13,21,34,55,…-каждое число равно сумме значений двух предыдущих (глубина 2)
Программирование вычислений рекуррентных последовательностей.
С рекуррентными последовательностями связаны задачи такого рода:
1) вычислить заданный (i-й) элемент последовательности;
2) математически обработать определенную часть последовательности (например, вычислить сумму или произведение первых п членов);
3) подсчитать количество элементов на заданном отрезке последовательности, удовлетворяющих определенным свойствам;
4) определить номер первого элемента, удовлетворяющего определенному условию;
5) вычислить и сохранить в памяти заданное количество элементов последовательности.
Данный перечень задач не претендует на полноту, но наиболее часто встречающиеся типы он охватывает. В четырех первых задачах не требуется одновременно хранить в памяти множество элементов числового ряда. В таком случае его элементы могут получаться последовательно в одной переменной, сменяя друг друга.
Вычислить n-й элемент арифметической профессии:
Подставляя последовательно значения номеров элементов i, получим:1, 3, 5, 7, 9,…, арифметическую прогрессию с шагом 2. Решение:
Var N , I : 0 .. MaxInt;
A: Real;
Begin
Write (' N = ') ;
ReadLn ( N ) ;
A : = l ;
For I : = 2 To N Do
А:=А+2;
WriteLn(' A ( ' , N : 1 , ' ) = ' , A : 6 : 0 )
End.
Рекуррентная формула ai= ai-1+ 2 перешла в оператор А := А + 2.
Просуммировать первые п элементов геометрической прогрессии
(не пользуясь формулой для суммы первых п членов прогрессии).
Var N , I : 0 . . Maxlnt;
A , S : Real;
Begin
Write ( ' N = ' ) ; ReadLn(N);
A : = l ;
S:=A;
For I : = 2 To N Do
Begin
A:=2*A;
S:=S+A
End;
WriteLn('Сумма равна ' , S : 6 : 0)
End.
При вычислении рекуррентной последовательности с глубиной 2 уже нельзя обойтись одной переменной. Это видно из следующего примера.
Вывести на печать первые n (n > 3) чисел Фибоначчи. Подсчитать, сколько среди них четных чисел.
Var N , I , K , F , F1 , F2 : 0 . . Maxlnt;
Begin
F l : = l ; F 2 : = l;
K:=0;
WriteLn( ' F ( 1 ) = ' , F1 , ' F ( 2 ) = \ F2 ) ;
For I : = 3 To N Do
Begin
F:=F1+F2;
WriteLn(' F(' , I : 1 , ' ) = ' , F ) ;
If Not Odd(F) Then K:=K+1;
F1 : = F2 ; F2:=F
End;
WriteLn(' Количество четных чисел в последовательности равно ' , К)
End.
Понадобились три переменные для последовательного вычисления двухшаговой рекурсии, поскольку для нахождения очередного элемента необходимо помнить значения двух предыдущих.
Для заданного вещественного х и малой величины (например, = 0,000001) вычислить сумму ряда
включив в нее только слагаемые, превышающие .
Известно, что сумма такого бесконечного ряда имеет конечное значение, равное ex, где е = 2,71828... — основание натурального логарифма.
Поскольку элементы этого ряда представляют собой убывающую последовательность чисел, стремящуюся к нулю, то суммирование нужно производить до первого слагаемого, по абсолютной величине не превышающего .
Здесь формула
для i-го элемента будет:
,
или иначе:
Решение:
Var A,X,S,Eps: Real;
I : Integer;
Begin
Write(' X = ') ; ReadLn(X);
Write('Epsilon ='); ReadLn(Eps);
A:=l; S:=0; I:=0;
While Abs(A)>Eps Do
Begin
S:=S+A;
I:=1+1;
A:=A*X/I
End;
WriteLn('Сумма ряда равна1, S:10:4)
End.
Как и прежде, значения одношаговой рекуррентной последовательности вычисляются в одной переменной.
Каждое повторное выполнение цикла в этой программе приближает значение s к искомому (уточняет значащие цифры в его записи). Такой вычислительный процесс в математике называется итерационным процессом. Соответственно, циклы, реализующие итерационный вычислительный процесс, называются итерационными циклами. Для их организации используются операторы while или Repeat.
Для заданного натурального N и вещественного х (х >0) вычислить значение выражения:
В этом случае рекуррентность не столь очевидна. Попробуем найти ее методом индукции.
,
,
,…
Решение:
Var A,X: Real; I,N: Integer;
Begin
Write(' X = ' ) ; ReadLn(X);
Write(' N = ' ) ; ReadLn(N);
A:= Sqrt(X);
For I:= 2 To N Do
A:=Sqrt(X+A);
WriteLn('Ответ:',A)
End.
В ходе лечебного голодания масса пациента за 30 дней снизилась с 96 до 70 кг. Было установлено, что ежедневные потери массы пропорциональны массе тела. Вычислить, чему была равна масса пациента через к дней после начала голодания для k=1,2,...,29.
Обозначим массу пациента в i-й день через pi (i= 0,1,2,..., 30).
Из условия задачи известно, что p0- 96 кг, р30 = 70 кг.
Пусть К— коэффициент пропорциональности убывания массы за один день. Тогда р1=р0-Кр0=(1 -К)р0;
pi=(1 -К)рi; К неизвестно, но его можно найти из соотношения p30=70
p30=(1-k)p29=(1-k)2p28=…(1-k)30p0
(1-k)30*96=70
Решение:
Var I: Byte;
P,Q: Real;
Begin
P:=96;
Q:=Exp(l/30*Ln(70/96) ) ;
For I:=l To 29 Do
Begin
P:=Q*P;
WriteLn(I,'-й день-',Р:5:3,'кг')
End
End.
Даны два числа a и b (а>1). Вычислить все члены бесконечной последовательности а, а2, а3,…, меньшие числа b. Вычисление по рекуррентной формуле.
Непосредственным суммированием найти сумму членов арифметической прогрессии (а1=3, d=2), не превышающих по величине 90.
Рекуррентная последовательность определена следующим образом:
Для данного натурального п получить значение аn.
Дана последовательность:
Вычислить произведение элементов с 1-го по 20-й.
Используя рекуррентный подход, вычислить сумму многочлена 10-й степени по формуле Горнера, где х — данное вещественное число:
10х10 + 9х9+ 8х8+... + 2х2 + х = ((...((10х+ 9)х+ 8)х +... + 2)х+ 1)х.
Для данного вещественного х и натурального N вычислить цепную дробь:
Вычислить и вывести все члены числового ряда
,
превышающие значение 10-5.Функцию
можно вычислить как предельное значение
последовательности, определяемой
рекуррентной формулой:
Начальное
значение y0 задается
произвольно (желательно ближе к
).
За приближенное значение корня с
точностью берется
первое ук, для которого
выполняется условие: |ук
– УК-1| < .
Составить программу.
1+x/1! + x/2! + x/3! +…+ x/n!
