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


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

Содержание

08.09.2011Разработка и анализ алгоритмаРАЗРАБОТКА и ФОРМЫ ЗАПИСИ  АЛГОРИТМАПример основных этапов работы над алгоритмом Наибольший общий делитель (НОД) двух натуральных чисел Greatest Common Divisor (GCD) Дано : два натуральных числа a

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

Слайд 108.09.2011
Разработка алгоритма и программы
Программирование 1
Лекция 1 (часть 2)
Вводный пример



РАЗРАБОТКА и

ФОРМЫ ЗАПИСИ
  АЛГОРИТМА и ПРОГРАММЫ


08.09.2011Разработка алгоритма и программыПрограммирование 1Лекция 1 (часть 2)Вводный примерРАЗРАБОТКА и ФОРМЫ ЗАПИСИ  АЛГОРИТМА и ПРОГРАММЫ

Слайд 208.09.2011
Разработка и анализ алгоритма
РАЗРАБОТКА и ФОРМЫ ЗАПИСИ  АЛГОРИТМА
Пример основных этапов

работы над алгоритмом

Наибольший общий делитель (НОД) двух натуральных чисел

Greatest Common Divisor (GCD)

Дано : два натуральных числа a и b (a, b > 0). Требуется : найти натуральное число c = НОД(a, b).

08.09.2011Разработка и анализ алгоритмаРАЗРАБОТКА и  ФОРМЫ ЗАПИСИ  АЛГОРИТМАПример основных этапов работы над алгоритмом Наибольший общий делитель

Слайд 308.09.2011
Разработка и анализ алгоритма
Школьный способ: вычислять НОД на основе разложения

чисел a и b на простые множители
где целые aq и

bq  0.
08.09.2011Разработка и анализ алгоритмаШкольный способ: вычислять НОД на основе разложения чисел a и b на простые множителигде

Слайд 408.09.2011
Разработка и анализ алгоритма
Пример
a = 754,

b = 143
a = 2  13  29,

b = 11  13
НОД (a, b) = 20110  131  290 = 13

! Получение разложения произвольного числа на простые множители само по себе является непростой задачей

08.09.2011Разработка и анализ алгоритмаПример a = 754,    b = 143a = 2  13

Слайд 508.09.2011
Разработка и анализ алгоритма
Другой способ вычисления НОД
Сначала рассмотрим
формальное (точное)

определение НОД(a, b).

Запись p  q для натуральных p и q далее означает, что

q является делителем (делит нацело) p.

Например, 754  13 (754 : 13 = 58)

08.09.2011Разработка и анализ алгоритмаДругой способ вычисления НОДСначала рассмотрим формальное (точное) определение НОД(a, b). 	Запись p  q для натуральных p и q

Слайд 608.09.2011
Разработка и анализ алгоритма
Определение. Натуральное число c = НОД(a, b), если
1) c  делитель a,

т. е. a  c;
2) c  делитель b, т. е. b  c;
3) c  наибольшее из натуральных чисел,

удовлетворяющих 1) и 2).

4) для натуральных p и q запись p  q означает, что существует такое натуральное s, что p = s q;
5) наибольшим из множества M натуральных чисел является такое p  M, что не существует другого числа q  M, такого, что q > p.

08.09.2011Разработка и анализ алгоритмаОпределение. Натуральное число c = НОД(a, b), если	1) c  делитель a, т. е. a  c;	2) c  делитель b, т. е. b  c;	3) c  наибольшее

Слайд 708.09.2011
Разработка и анализ алгоритма
Способ вычисления НОД на основе определения
Последовательно перебираем

числа c = 1, 2, 3, …, min(a, b) и находим максимальное среди тех из них, для

которых справедливо a  c и b  c.

Улучшенный способ: числа перебираются в порядке убывания от min(a, b) до 1, тогда первое встретившееся c, такое, что a  c и b  c, и будет НОД(a, b).

! Оказывается, существует более эффективный
(по количеству операций) алгоритм.
Алгоритм Евклида
08.09.2011Разработка и анализ алгоритмаСпособ вычисления НОД на основе определенияПоследовательно перебираем числа c = 1, 2, 3, …, min(a, b) и находим максимальное среди тех

Слайд 808.09.2011
Разработка и анализ алгоритма
Полезно строить вычисления не непосредственно на определении

вычисляемой величины, а на её свойствах.
Свойства (очевидные):
gcd(a, b) = gcd(b, a)
gcd(a, a) = a
Можно расширить область значений

входных чисел
a и b, допуская, что одно из них может быть равно 0.
Тогда
gcd(a, 0) = a.
08.09.2011Разработка и анализ алгоритмаПолезно строить вычисления не непосредственно на определении вычисляемой величины,  а на её свойствах.Свойства

Слайд 908.09.2011
Разработка и анализ алгоритма
Для формулировки важного свойства НОД, напомним определения

операций
деления нацело div и нахождения остатка от деления mod.


Пусть a, b   и a > b > 0, тогда существуют, и притом единственные q    и r  0 , такие, что имеет место представление
a = q b + r, 0  r < b.

Например, 25=3*7+4.
Обычно используют обозначения
q = a div b, r = a mod b,
и тогда
a = (a div b) b + (a mod b).
08.09.2011Разработка и анализ алгоритмаДля формулировки важного свойства НОД, напомним определения операций деления нацело div и нахождения остатка

Слайд 1008.09.2011
Разработка и анализ алгоритма
Свойство НОД
Пусть a, b   и a > b > 0,

тогда gcd(a, b) = gcd(b, r), где r = a mod b,
В других обозначениях gcd(a, b) = gcd(b, a mod b),

gcd(a, b) = gcd(b, a  q b).

Доказательство см. в учеб. пособии
Пример: gcd( 754, 143 ) = gcd(143, 39),
754 = 5*143 + 39

Можно сформулировать и доказать аналогичное свойство НОД, включающее операцию вычитания: (a > b > 0)  gcd(a, b) = gcd(a  b, b).

08.09.2011Разработка и анализ алгоритмаСвойство НОД Пусть a, b    и a > b > 0, тогда gcd(a, b) = gcd(b, r),  где  r = a mod b, В

Слайд 1108.09.2011
Разработка и анализ алгоритма
Разработка алгоритма
В основу алгоритма положим два свойства

НОД:
(a > b > 0)  gcd(a, b) = gcd(b, a mod b);
gcd(a, 0) = a.
Общая идея алгоритма:
последовательно от пары чисел (a, b)

переходить к новой паре чисел (b, a mod b).
При этом max(b, a mod b) < max(a, b),
т. е. каждый такой шаг «уменьшает» текущую пару.
Шаги продолжаются, пока не будет получена пара (a, 0) , и тогда gcd(a, 0) = a.
08.09.2011Разработка и анализ алгоритмаРазработка алгоритма	В основу алгоритма положим два свойства НОД: (a > b > 0)  gcd(a, b) = gcd(b, a mod b); gcd(a, 0) = a.Общая идея алгоритма: последовательно от

Слайд 1208.09.2011
Разработка и анализ алгоритма
Пример 1: a = 754,

b = 143
Ответ gcd(754,143) = 13.

08.09.2011Разработка и анализ алгоритмаПример 1: a = 754,    b = 143Ответ

Слайд 1308.09.2011
Разработка и анализ алгоритма
Пример 2: a = 754,

b = 144
Ответ gcd(754,144) = 2.

08.09.2011Разработка и анализ алгоритмаПример 2: a = 754,    b = 144Ответ

Слайд 1408.09.2011
Разработка и анализ алгоритма
Пример 3: a = 610,

b = 144
Ответ gcd(610,144) = 2.

08.09.2011Разработка и анализ алгоритмаПример 3: a = 610,    b = 144Ответ

Слайд 1508.09.2011
Разработка и анализ алгоритма
Пример 4: a = 233,

b = 144

08.09.2011Разработка и анализ алгоритмаПример 4: a = 233,    b = 144

Слайд 1608.09.2011
Разработка и анализ алгоритма
Ответ gcd(233,144) = 1.

08.09.2011Разработка и анализ алгоритмаОтвет     gcd(233,144) = 1.

Слайд 1708.09.2011
Разработка и анализ алгоритма
Замечание о вычислительном процессе и алгоритме (программе)
Каждый

пример содержит последовательность шагов.
Шаг определяется текущим состоянием (парой чисел) и

вызывает определенное действие
(нахождение остатка и замену предыдущей пары на новую).
В каждом примере набор конкретных состояний (в том числе начальное) и действий, вообще говоря, разные.
Все примеры – это один вычислительный процесс, но разные его реализации (проявления), определяемые начальным состоянием – входными данными).
08.09.2011Разработка и анализ алгоритмаЗамечание о вычислительном процессе и алгоритме (программе)Каждый пример содержит последовательность шагов.Шаг определяется текущим состоянием

Слайд 1808.09.2011
Разработка и анализ алгоритма
О вычислительном процессе и алгоритме (продолжение)
Реальные осуществления вычислительного

процесса (ВП) – его реализации.
Сам ВП – это совокупность всех

своих реализаций – уже абстракция.
Что объединяет все реализации ВП?
Ответ: алгоритм (или программа), как описание ВП.
Программа = набор правил (инструкций), который направляет эволюцию ВП.
Иногда мы не будем различать ВП и его реализацию (из контекста будет ясно о чём речь), но всегда различаем ВП и алгоритм (программу).
08.09.2011Разработка и анализ алгоритмаО вычислительном процессе и алгоритме (продолжение)Реальные осуществления вычислительного процесса (ВП) – его реализации.Сам ВП

Слайд 1908.09.2011
Разработка и анализ алгоритма
Цитата
Вычислительные процессы – это абстрактные существа, которые

живут в компьютерах.
Развиваясь, процессы манипулируют абстракциями другого типа, которые

называются данными.
Эволюция процесса направляется набором правил, называемым программой.
В сущности, мы заколдовываем дух компьютера с помощью своих чар.

Абельсон Х., Сассман Д.Д., Сассман Д. Структура и интерпретация компьютерных программ –
М.: Добросвет, КДУ, 2006

08.09.2011Разработка и анализ алгоритмаЦитатаВычислительные процессы – это абстрактные существа, которые живут в компьютерах. Развиваясь, процессы манипулируют абстракциями

Слайд 20Конец замечания об алгоритмах вычислительных процессах


Вернемся к алгоритму Евклида
08.09.2011
Разработка и

анализ алгоритма

Конец замечания об алгоритмах вычислительных процессахВернемся к алгоритму Евклида08.09.2011Разработка и анализ алгоритма

Слайд 2108.09.2011
Разработка и анализ алгоритма
Алгоритм Евклида («Математическая запись»)
Пусть c0 = a, c1 = b (a > b > 0).

Тогда gcd(a, b) = gcd(c0, c1).

08.09.2011Разработка и анализ алгоритмаАлгоритм Евклида («Математическая запись»)Пусть c0 = a, c1 = b (a > b > 0). Тогда gcd(a, b) = gcd(c0, c1).

Слайд 2208.09.2011
Разработка и анализ алгоритма
Предполагается, что n-й шаг вычислений последний, т. е.

с n + 1 = 0 и gcd(cn, 0) = cn, а следовательно, cn

= gcd(a, b).
Обоснование правильности алгоритма (отложим)
Обоснование завершимости алгоритма:
c0 > c1 > c2 > c3 > … >cn 1 > cn > cn + 1 = 0
Не может существовать бесконечной строго убывающей последовательности целых неотрицательных чисел (ck  0).
08.09.2011Разработка и анализ алгоритмаПредполагается, что n-й шаг вычислений последний, т. е. с n + 1 = 0  и  gcd(cn, 0) = cn,

Слайд 2308.09.2011
Разработка и анализ алгоритма
Компьютерная запись
Отличная от «математической».

В виде блок-схемы
(графической

схемы) алгоритма

08.09.2011Разработка и анализ алгоритмаКомпьютерная записьОтличная от «математической».В виде блок-схемы (графической схемы) алгоритма

Слайд 2408.09.2011
Разработка и анализ алгоритма
начало
конец
u := a
v := b
v  0
r :=

u mod v
u := v
v := r
Переменные a,

b, u, v, r : Integer (целого типа)

Да

Нет

08.09.2011Разработка и анализ алгоритманачалоконецu := av := bv  0 r := u mod v u := vv :=

Слайд 2508.09.2011
Разработка и анализ алгоритма
Задание. Ослабить ограничения на входные данные:

a  b  0 и (a  0

или b  0)
a  0, b  0 (доопределить gcd(0, 0) = 0)
Метод индуктивных утверждений
Утверждение о состоянии переменных программы в некоторой её точке даётся таким образом, что оно справедливо при любом проходе вычислений через эту точку независимо от количества предыдущих проходов и от предыстории (от того, какой путь при вычислениях привёл в эту точку).

Правильность программы означает, что если она начала выполняться при заданном предусловии (утверждении У1) и завершилась, то после завершения будет справедливо постусловие (утверждение У5).

08.09.2011Разработка и анализ алгоритма	Задание. Ослабить ограничения на входные данные:   a  b  0 и

Слайд 2608.09.2011
Разработка и анализ алгоритма
Запись алгоритма Евклида на языке Паскаль
u

:= a ; v := b ;
while  v  0  do
begin
r :=

u mod v ;
u := v ;
v := r ;
end

u := a; v := b

r := u mod v;
u := v;
v := r

v  0

начало

конец

Нет

Да

08.09.2011Разработка и анализ алгоритмаЗапись алгоритма Евклида на языке Паскаль u := a ; v := b ;while 

Слайд 2708.09.2011
Разработка и анализ алгоритма
Запись алгоритма Евклида на языке С++
u

= a;
v = b;
while ( v != 0 )
{ r

= u % v;
u = v;
v = r;
}

u := a; v := b

r := u mod v;
u := v;
v := r

v  0

начало

конец

Нет

Да

08.09.2011Разработка и анализ алгоритмаЗапись алгоритма Евклида на языке С++ u = a;v = b;while ( v !=

Слайд 2808.09.2011
Разработка и анализ алгоритма
// У1: Предусловие
u = a ; v

= b ;
// У2: утверждение перед первым входом в цикл
while

(v != 0 )
{
r = u %v ;
u = v ;
v = r ;
// У4: утверждение в точке выхода из тела цикла
}
// У5: Постусловие

Аннотирование программы (алгоритма)

// У3: утверждение в точке входа в тело цикла}

08.09.2011Разработка и анализ алгоритма// У1: Предусловиеu = a ; v = b ;// У2: утверждение перед первым

Слайд 2908.09.2011
Разработка и анализ алгоритма
Утверждения У1У5 для алгоритма Евклида
У1: a > b > 0;
У2: u > v > 0, gcd(u, v) = gcd(a, b);
У3: u > v > 0, gcd(u, v) = gcd(a, b);
У4: u > v  0,

gcd(u, v) = gcd(a, b);
У5: u = gcd(a, b),  v = 0.

08.09.2011Разработка и анализ алгоритмаУтверждения У1У5 для алгоритма Евклида	У1:	a > b > 0;	У2:	u > v > 0, gcd(u, v) = gcd(a, b);	У3:	u > v > 0, gcd(u, v) = gcd(a, b);	У4:	u > v  0, gcd(u, v) = gcd(a, b);	У5:	u = gcd(a, b),  v = 0.

Слайд 3008.09.2011
Разработка и анализ алгоритма
Аннотированный алгоритм Евклида
// У1: a > b > 0
u = a

; v = b ;
// У2: u > v > 0, gcd(u, v) = gcd(a, b)
while (v != 0 )
{

r =

u % v ;
u = v ;
v = r ;
// У4: u > v  0, gcd(u, v) = gcd(a, b)
}
// У5: u = gcd(a, b),  v = 0

// У3: u > v > 0, gcd(u, v) = gcd(a, b)

08.09.2011Разработка и анализ алгоритмаАннотированный алгоритм Евклида// У1: a > b > 0u = a ; v = b ;// У2: u > v > 0,

Слайд 3108.09.2011
Разработка и анализ алгоритма
/* Сергеев А.И., гр.8304, 7.09.2008
Лабораторная

работа N 0
Greatest Common Divisor
GCD(a,b) -

наибольший общий делитель натуральных a,b
примечание: пометка "Dem" в тексте указывает на демонстрационный фрагмент */
#include
using namespace std ;
int main ( )
{unsigned int a,b,u,v;
unsigned int Remainder, Quotient, i; // Dem
cout << "Введите два натуральных числа: \n" ;
cin >> a >> b;
cout << "Находим НОД пары чисел : " << a << ", " << b <<"\n";

Показать выполнение программы на языке Паскаль


Слайд 3208.09.2011
Разработка и анализ алгоритма
i = 0; // Dem
u =

a;
v = b;
// u>=0 & v>=0 & GCD(u,v)=GCD(a,b)
while (

v != 0 )
{ // u>=0 & v>0 & GCD(u,v)=GCD(a,b)
i = i + 1; // Dem
cout << "Step " << i ; // Dem
Quotient = u / v; // Dem
Remainder = u % v;
cout << " :: " << u << " = " << Quotient << " * " << v << " + " << Remainder << "\n"; // Dem
u = v;
v = Remainder;
// u>0 & v>=0 & GCD(u,v)=GCD(a,b)
}
// u>=0 & v=0 & u=GCD(u,0)=GCD(a,b)
cout << "Результат : --> НОД(" << a << ", " << b << ") = " << u << "\n";
return 0;
}
08.09.2011Разработка и анализ алгоритма	i = 0; // Dem 	u = a;	v = b;	// u>=0 & v>=0 &

Слайд 3308.09.2011
Разработка и анализ алгоритма
Замечание
Например, Remainder = u % v;
2
%
2

08.09.2011Разработка и анализ алгоритмаЗамечание Например,	Remainder = u % v;2%2

Слайд 34Способ вычисления НОД на основе определения
// a > 0 &

b > 0
if ( a < b ) c =

a;
else c = b;
// c=min(a,b)}

while ( ((a % c ) != 0) || ((b % c ) != 0))
{ c = c - 1;
} ;
// c = gcd(a, b)}

08.09.2011

Разработка и анализ алгоритма

См. файл gcd_w4.cpp

Способ вычисления НОД на основе определения	// a > 0 & b > 0	if ( a < b

Слайд 35Анализ АЕ
Отложен
08.09.2011
Разработка и анализ алгоритма

Анализ АЕОтложен08.09.2011Разработка и анализ алгоритма

Слайд 3608.09.2011
Разработка и анализ алгоритма
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ

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

08.09.2011Разработка и анализ алгоритмаКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ

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

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

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

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

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


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

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