Разделы презентаций


Программирование 1

Содержание

22.09.2011Схема итерацииПример 2Рассмотрим готовую программу (фрагмент)// n  1 p = 1; k  = n;while (k > 0) { p  = p *k ; k  = k  1 ; }Что здесь вычисляется?Как это понять (проанализировать)?

Слайды и текст этой презентации

Слайд 122.09.2011
Схема итерации
Программирование 1
Лекция 4


Программирование циклов.
Схема итерации (продолжение).


22.09.2011Схема итерацииПрограммирование 1Лекция 4Программирование циклов.Схема итерации (продолжение).

Слайд 222.09.2011
Схема итерации
Пример 2
Рассмотрим готовую программу (фрагмент)
// n  1
p = 1;

k  = n;
while (k > 0) {
p  = p *k ;
k  = k  1 ;
}

Что здесь вычисляется?
Как

это понять (проанализировать)?
22.09.2011Схема итерацииПример 2Рассмотрим готовую программу (фрагмент)// n  1 p = 1;  k  = n;while (k > 0) {	p  = p *k ; 	k  = k  1 ;

Слайд 322.09.2011
Схема итерации
Выполним алгоритм «вручную» при n = 5
Примечание про замену

условия продолжения цикла на k>1
Анализ таблицы :  на последнем

шаге p =n !
 смысл переменной p - накапливает произведение так, что на каждом шаге p *k !  = n !
22.09.2011Схема итерацииВыполним алгоритм «вручную» при n = 5Примечание про замену условия продолжения цикла на k>1Анализ таблицы :

Слайд 422.09.2011
Схема итерации
Итак, видимо, вычисляется n!
// n  1
p = 1; k = n;
// Утв1: ?
while (k > 0)

{
// Утв2: ?
p = p*k;
k = k  1;
// Утв3: ?  
}
//p=n !
Предположим, что

«индуктивное» утверждение есть p *k !  = n !

//Утв1: (p *k ! = n !) & (0  k  n)

//Утв2: (p *k ! = n!) & (0 < k  n)

//Утв3: (p*k ! = n !) & (0  k < n)

n! = p*k ! = p*k*(k-1)! = p*k*(k-1)!  p*k ! = n!

22.09.2011Схема итерацииИтак, видимо, вычисляется n! // n  1p = 1; k = n;// Утв1: ?while (k > 0) {// Утв2: ?	p = p*k; 	k = k  1; // Утв3: ?

Слайд 522.09.2011
Схема итерации
Ещё примеры программ, основанных на рекуррентной схеме. Пример 3
Дано:

n > 0
Вычислить:

Пусть

Тогда Si = S i 1 + i

!
Будем вычислять
xi = xi-1 + 1 (аргумент)
yi = yi-1* xi (функция fact(xi))
Si = Si-1 + yi (сумма) и x0=0, y0=1, S0=0.
22.09.2011Схема итерацииЕщё примеры программ, основанных на рекуррентной схеме. Пример 3Дано: n > 0Вычислить:ПустьТогда Si = S i

Слайд 622.09.2011
Схема итерации
xi = xi-1 + 1, yi = yi-1*

xi, Si = Si-1 + yi

22.09.2011Схема итерацииxi = xi-1 + 1,  yi = yi-1* xi,   Si = Si-1 +

Слайд 722.09.2011
Схема итерации
}
// (y = n!) & (x = n) &(s

= S(n))
// n  0
x = 0; y = 1; s = 0;
// (x = 0) &

(y = fact (x)) & (s = S(x))

while (x < n) 
{

x = x + 1 ;
y = y *x;
s = s + y;

// (0  x < n) & (y = fact (x)) & (s = S(x))

// (0 < x  n) & (y = fact (x)) & (s = S(x))

22.09.2011Схема итерации	}	// (y = n!) & (x = n) &(s = S(n))	// n  0 	x = 0; y = 1; s = 0;

Слайд 8Демонстрация программы sum_f.cpp
22.09.2011
Схема итерации

Демонстрация программы sum_f.cpp22.09.2011Схема итерации

Слайд 9Например: m = 5; n = 3.
S (n) =

i =0...3 а (i ) =
= i=0...3 A(i | 5) = а(0)+

а(1)+ а(2)+ а(3) =
= A(0| 5) + A(1| 5) + A(2| 5) + A(3| 5) =
= 5! / 5! + 5! / 4! + 5! / 3! + 5! / 2! =
= 1 + 5 + 5*4 + 5*4*3 = 1 + 5 + 20 + 60 = 86

22.09.2011

Схема итерации

Пример 4. Для заданного целого n ≥ 0 вычислить S (n) = i = 0...n a (i ) , где a (i ) = A(i | m) , и m — заданное целое (m ≥ n) , а A(i | m) = m! / (m–i)! = m (m–1) … (m – i + 1).

Например: m = 5; n = 3. S (n) = i =0...3 а (i ) == i=0...3

Слайд 1022.09.2011
Схема итерации
S (i ) = S (i  1) + a (i ); i =1,…,n;

S (0) = A(0| m) = 1; 
a (i ) = A(i | m) =

m! / (m–i)! 
a (i  1) = A(i  1 | m) = m! / (m – i + 1)! 
Хотим вычислять a (i ) = a (i  1) * нечто, т.е.
нечто = a (i ) / a (i  1) =
= (m! / (m–i)!) / (m! / (m – i + 1)!) =
= (m – i + 1)! / (m–i)! = (m – i + 1)
Т.о. a (i ) = a (i  1) * (m – i + 1)

В программе:
слагаемое a (i )  переменная a,
номер слагаемого i  переменная i,
формируемая сумма S (i )  переменная s.

22.09.2011Схема итерацииS (i ) = S (i  1) + a (i ); i =1,…,n; S (0) = A(0| m) = 1; a (i )

Слайд 1122.09.2011
Схема итерации
//n 0, S(i)=a(0)+...+a(i), a(i) = a(i  1)

* (m – i + 1)
i = 0; a

= 1; s = 1;
//(a = a(0) = 1) & (s = S(0) = 1) & (i = 0)
while ( i < n ) {
// (a=a(i)) & (s=S(i)) & (0  i < n)
i = i+1;
a = a* (m – i + 1);
s = s + a;
//(a=a(i)) & (s=S(i)) & (0 < i  n)
}
//(a=a(n)) & (s=S(n)) & (0  i = n)
22.09.2011Схема итерации//n 0,  S(i)=a(0)+...+a(i), a(i) = a(i  1) * (m – i + 1) i

Слайд 1222.09.2011
Схема итерации
Тот же пример: m = 5; n = 3.

22.09.2011Схема итерацииТот же пример: m = 5; n = 3.

Слайд 1322.09.2011
Схема итерации
Другой вариант
S (i + 1) = S (i) + a (i + 1);

i =0,…,n  1; S(0) =1; 
a (i ) =

A(i | m) = m! / (m–i)! 
a (i + 1) = A(i +1 | m) = m! / (m – i – 1)! 

Хотим вычислять a (i + 1) = a (i) * нечто, т.е.
нечто = a (i +1) / a (i) =
= (m! / (m – i –1)!) / (m! / (m – i)!) =
= (m – i)! / (m – i –1)! = (m – i)

Т.о. a (i + 1) = a (i) * (m – i)

22.09.2011Схема итерацииДругой вариантS (i + 1) = S (i) + a (i + 1);  i =0,…,n  1;   S(0) =1; a

Слайд 1422.09.2011
Схема итерации
//n 0, S(i)=a(0)+...+a(i) , a(i + 1)

= a(i) * (m – i)
i = 0; a

= 1; s = 1;
//(a = a(0) = 1) & (s = S(0) = 1) & (i = 0)
while ( i < n ) {
// (a=a(i)) & (s=S(i)) & (0  i < n)
a = a* (m – i);
s = s + a;
i = i +1;
//(a=a(i)) & (s=S(i)) & (0 < i  n)
}
//(a=a(n)) & (s=S(n)) & (0  i = n)
22.09.2011Схема итерации//n 0,  S(i)=a(0)+...+a(i) ,  a(i + 1) = a(i) * (m – i) i

Слайд 1522.09.2011
Схема итерации
См. пример 2.4 (с.14-16) в учебном пособии

и программу sum_1.cpp


(демонстрировать на лекции)

22.09.2011Схема итерацииСм. пример 2.4 (с.14-16) в учебном пособиии программу sum_1.cpp (демонстрировать на лекции)

Слайд 1622.09.2011
Схема итерации
С этого места – Лекция 5 (29.09.2011)!

(т.е. этот материал

войдет в след. лекцию)

22.09.2011Схема итерацииС этого места – Лекция 5 (29.09.2011)!(т.е. этот материал войдет в след. лекцию)

Слайд 1722.09.2011
Схема итерации
Пример 4. Последовательность чисел Фибоначчи определяется рекуррентным соотношением F(i

+ 1) = F(i) + F(i – 1) с начальными

условиями F(0) = 0 и F(1) = 1. Требуется вычислить число Фибоначчи F(n) c заданным номером n  1.

Вставка про числа Фибоначчи

Рекурре́нтная после́довательность
(от лат. recurrens,  — возвращающийся),
то же, что возвратная последовательность

22.09.2011Схема итерацииПример 4. Последовательность чисел Фибоначчи определяется рекуррентным соотношением  F(i + 1) = F(i) + F(i

Слайд 1822.09.2011
Схема итерации
Числами Фибоначчи
называются элементы числовой последовательности, определяемые рекуррентным (возвратным) уравнением


Fn + 2 = Fn + 1 + Fn  при n = 0, 1, 2, …
и начальными элементами F0 = 0 и F1 = 1.
Вот

несколько первых чисел Фибоначчи:

Фибоначчи – Леонардо Пизанский (Leonardo Pisano) или
Леонардо Фибоначчи (Filius Bonaccii – сын Боначчо), 1202 г.

22.09.2011Схема итерацииЧислами Фибоначчиназываются элементы числовой последовательности, определяемые рекуррентным (возвратным) уравнением Fn + 2 = Fn + 1 + Fn  при n = 0, 1, 2, … и начальными элементами F0 = 0

Слайд 1922.09.2011
Схема итерации
Утверждение:
где
и
есть корни квадратного уравнения

и
Число   1.61803… называют «золотым сечением»
Конец вставки

22.09.2011Схема итерацииУтверждение:где и есть корни квадратного уравнения и Число   1.61803… называют «золотым сечением» Конец вставки

Слайд 2022.09.2011
Схема итерации
Указание: использовать только рекуррентное соотношение и операции с целыми

числами.

Замечание о форме рекуррентного соотношения:
F(i + 1) = F(i) +

F(i – 1), i = 1, 2,…; F(0) = 0 и F(1) = 1.
Fn + 2 = Fn + 1 + Fn  при n = 0, 1, 2, …; F0 = 0 и F1 = 1.
Fn  = Fn - 1 + Fn - 2  при n = 2, 3, 4, …; F0 = 0 и F1 = 1.

Пример 4. Последовательность чисел Фибоначчи определяется рекуррентным соотношением F(i + 1) = F(i) + F(i – 1) с начальными условиями F(0) = 0 и F(1) = 1. Требуется вычислить число Фибоначчи F(n) c заданным номером n  1.

22.09.2011Схема итерацииУказание: использовать только рекуррентное соотношение и операции с целыми числами.Замечание о форме рекуррентного соотношения:F(i + 1)

Слайд 2122.09.2011
Схема итерации
Поскольку при вычислении F(i + 1)
используется пара F(i) и F(i – 1),


то в программе будем использовать
пару переменных a и b,


таких, что после i-й итерации
ai = F(i) и bi = F(i – 1).
Тогда переход от пары (a i – 1, b i – 1) к паре (ai, bi) есть:

ai = a i – 1 + b i – 1
bi = a i – 1

и a1 = 1, b1 = 0

Вычисление числа Фибоначчи F(n) c заданным номером n  1

22.09.2011Схема итерацииПоскольку при вычислении F(i + 1) используется пара F(i) и F(i – 1), то в программе будем использовать пару переменных

Слайд 2222.09.2011
Схема итерации
Действительно, если a i – 1 = F(i – 1) и

b i – 1 = F(i – 2),
то по (**) будут

вычислены
ai = F(i – 1) + F(i – 2) = F(i) и bi = F(i – 1).
Начальная установка обеспечивает
a1 = F(1) и b1 = F(0).

Эти рекуррентные вычисления с переменными
var a, b, c, i, n: Integer
реализуются следующим фрагментом программы (при n  1)
22.09.2011Схема итерацииДействительно, если a i – 1 = F(i – 1) и b i – 1 = F(i – 2), то

Слайд 2322.09.2011
Схема итерации
a := 1; b := 0; i := 1;
{У1:

(a=F(1)) & (b=F(0)) }
while (i < n) do
begin {У2:

(a=F(i)) & (b=F(i-1)) & (1i i := i +1;
c := a;
a := a + b;
b := c
{У3: (a=F(i)) & (b=F(i-1)) & (1end;
{У4: (i=n) & (a=F(n)) & (b=F(n-1))}
22.09.2011Схема итерацииa := 1; b := 0; i := 1;{У1: (a=F(1)) & (b=F(0)) }while (i < n)

Слайд 2422.09.2011
Схема итерации
Пример 5. Модификация примера 4.
Известно, что значения стандартного

целого типа Integer в языке Паскаль имеют верхнюю границу MaxInt

(предопределенная константа, равная 32767).
Требуется вычислить число Фибоначчи F(n), максимальное среди целых чисел типа Integer, и его номер n.

n = max {nN | F(n) ≤ MaxInt};
n = min {nN | F(n + 1) > MaxInt};
такое n, что (F(n) ≤ MaxInt) & (F(n + 1) > MaxInt).

22.09.2011Схема итерацииПример 5. Модификация примера 4. Известно, что значения стандартного целого типа Integer в языке Паскаль имеют

Слайд 2522.09.2011
Схема итерации
На i-м шаге должно быть вычислено
следующее число Фибоначчи:


F(i) = a + b = F(i – 1) + F(i – 2).
Непосредственно проверить неравенство a + b  MaxInt нельзя !

(a + b  MaxInt)  (a  MaxInt – b)

Условие продолжения

цикла
(a  MaxInt – b)

22.09.2011Схема итерацииНа i-м шаге должно быть вычислено следующее число Фибоначчи: F(i) = a + b = F(i – 1) + F(i – 2). Непосредственно проверить неравенство a + b  MaxInt нельзя !(a + b  MaxInt)

Слайд 2622.09.2011
Схема итерации
Модификация примера 4 в 5
a := 1; b :=

0; i := 1;
{a=F(1) & b=F(0)}
while (a  MaxInt – b ) do
begin {(a=F(i))

& (b=F(i-1)) & (a+bMaxInt)}
i := i + 1;
c := a;
a := a + b;
b := c
{(a=F(i)) & (b=F(i-1)) & (aMaxInt)}
end;
{(a=F(i)) & (b=F(i-1)) & (aMaxInt) & (a+b>MaxInt) & (n=i)}
22.09.2011Схема итерацииМодификация примера 4 в 5a := 1; b := 0; i := 1;{a=F(1) & b=F(0)}while (a  MaxInt – b

Слайд 2722.09.2011
Схема итерации
Пример 6. Требуется вычислить по заданному натуральному n  1 число Фибоначчи

F(n). Если число F(n) выходит за диапазон стандартных целых чисел

(F(n) > MaxInt), то вычислить максимальное F(i), как в прим.5 (i < n).

Условие продолжения B цикла while-do следует взять как конъюнкцию (&) условий продолжения из примеров 4 и 5:
B  (i < n) & (a  (MaxInt – b))

Условие завершения цикла
Not B  (i  n) or (a > (MaxInt – b))

 (a & b) = ( a)  ( b)

22.09.2011Схема итерацииПример 6. Требуется вычислить по заданному натуральному n  1 число Фибоначчи F(n).  Если число F(n) выходит за

Слайд 2822.09.2011
Схема итерации
См. программу в учебном пособии «РКП (Практикум)» на стр.13-14
a

:= 1; b := 0; i :=1;
{a=F(1) & b=F(0)}
while

(i < n) and (a <= (MaxInt - b)) do
begin
{ (a=F(i)) & (b=F(i-1)) & (a+b=F(i+1)<=MaxInt) &(1<=i i := i + 1;
c := a; a := a + b; b := c;
{ (a=F(i)) & (b=F(i-1)) & (a<=MaxInt) &(1end;
{(a=F(i))&(b=F(i-1))&(a<=MaxInt) & ((i=n) or (iMaxInt))}

(i  n) с учетом i := i + 1

22.09.2011Схема итерацииСм. программу в учебном пособии «РКП (Практикум)» на стр.13-14a := 1; b := 0; i :=1;

Слайд 2922.09.2011
Схема итерации
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ

ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ

22.09.2011Схема итерацииКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика