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


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

Содержание

21-22.09.2011Булевский тип Управляющие структурыОсновные управляющие структуры и инструкции (операторы) языка С++Управляющие структуры = способы сочетания простых операторов = управление вычислительным процессом (порядком действий)1.

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

Слайд 121-22.09.2011
Булевский тип

Управляющие структуры
Программирование 1
Лекция 3


Основные управляющие структуры и операторы (инструкции) языка

программирования С++
21-22.09.2011Булевский тип         Управляющие структурыПрограммирование 1Лекция 3Основные управляющие структуры и

Слайд 221-22.09.2011
Булевский тип

Управляющие структуры
Основные управляющие структуры и инструкции (операторы) языка С++
Управляющие структуры


= способы сочетания простых операторов
= управление вычислительным процессом (порядком действий)
1. Структура следования = последовательность операторов

Последовательное выполнение S1; S2;
Операторные скобки – { … }
{ S1; S2; }
Составной оператор

Замечание про точку с запятой

21-22.09.2011Булевский тип         Управляющие структурыОсновные управляющие структуры и инструкции (операторы)

Слайд 321-22.09.2011
Булевский тип

Управляющие структуры
2. Структура ветвления = условный оператор = инструкция выбора

Пример:


if (a > b) a = a  b ; else b = b  a;
21-22.09.2011Булевский тип         Управляющие структуры2. Структура ветвления = условный оператор

Слайд 421-22.09.2011
Булевский тип

Управляющие структуры
Сокращенный условный оператор
if (B) S 

 if (B) S

else ПУСТО


21-22.09.2011Булевский тип         Управляющие структурыСокращенный условный операторif (B) S 

Слайд 521-22.09.2011
Булевский тип

Управляющие структуры
Сочетание полного и сокращенного условных инструкций
Двусмысленность:
if (B1) if

(B2) S1 else S2 
? if (B1) if (B2) S1 else S2
? if (B1) if (B2) S1 else S2
разрешается путем интерпретации
if (B1) if (B2) S1 else S2 
 if (B1) { if (B2) S1 else S2}
21-22.09.2011Булевский тип         Управляющие структурыСочетание полного и сокращенного условных инструкцийДвусмысленность:

Слайд 621-22.09.2011
Булевский тип

Управляющие структуры
Особенности
if (q == true) S1 else S2 лучше

записать как
if (q) S1 else S2,
а if (q == false) S1 else S2 как
if (!q) S1 else S2
if (a == b) flag = true; else flag = false;
проще записать как
flag = a == b ;
или более наглядно как
flag = (a == b);
21-22.09.2011Булевский тип         Управляющие структурыОсобенности if (q == true) S1

Слайд 721-22.09.2011
Булевский тип

Управляющие структуры
Некорректное использование сокращенного условного оператора. Пример:
if (a > b

) a = a  b; else b = b  a; (1)
не то же самое, что
if (a > b ) a = a  b ; (2)
if (a <= b ) b = b  a ; (3)
Например, при a = 5, b = 3. Результат по (1): a = 2, b = 3. Результат после (2): a = 2, b = 3, а после (3): a = 2, b = 1.
В общем случае if (B) S1 else S2 не эквивалентно
if ( B ) S1
if ( !B ) S2
ни по выполнению, ни по результату .


21-22.09.2011Булевский тип         Управляющие структурыНекорректное использование сокращенного условного оператора. Пример:	if

Слайд 821-22.09.2011
Булевский тип

Управляющие структуры
Иллюстрация неэквивалентности
F
T
F
T
! B
F
T

21-22.09.2011Булевский тип         Управляющие структурыИллюстрация неэквивалентностиFTFT! BFT

Слайд 921-22.09.2011
Булевский тип

Управляющие структуры
if (B) S1 else S2 эквивалентно
{ bool p ;
p

= B ;
if (p) S1
if (!p) S2
}
по результату, но не по выполнению
(при этом добавляется bool p и p не должно изменяться оператором S1).

21-22.09.2011Булевский тип         Управляющие структурыif (B) S1 else S2 эквивалентно

Слайд 1021-22.09.2011
Булевский тип

Управляющие структуры
Альтернативный выбор:
при B1  S1,
при B2  S2,
при

B3  S3.
причем B1 || B2 || B3 = True и
Bi && Bj = false (при ij)
Альтернативный выбор реализуется конструкцией
if (B1) S1
else if (B2) S2
else S3 // при B3
Некорректно: if (B1) S1
if (B2) S2
if (B3) S3



21-22.09.2011Булевский тип         Управляющие структурыАльтернативный выбор:		при B1  S1,		при B2

Слайд 1121-22.09.2011
Булевский тип

Управляющие структуры
Пример: при x = 0  x = x +

1,
при x > 0  x = x  2,
при x < 0  x = x + 3.


21-22.09.2011Булевский тип         Управляющие структурыПример:	при x = 0  x

Слайд 1221-22.09.2011
Булевский тип

Управляющие структуры

Пример:
if ((x > 0) && (y % x ==1)

S1 else S2
Пусть x = 0, тогда (x > 0) = false, а вычисление
(y % x == 1) невозможно!
С другой стороны false && B == false при любом B.
Варианты:
Режим неполного вычисления булевского выражения – например, в выражении A && B при A = false значение B не вычисляется!
( “Ленивые вычисления ”).
if (x > 0) if (y % x ==1) S1
else S2
else S2

Неполное вычисление булевского выражения

21-22.09.2011Булевский тип         Управляющие структурыПример:if ((x > 0) && (y

Слайд 13Пример 1
#include
using namespace std ;
int main () {
bool f;
int

a=0;
int b=3;
f = (a > 0);
cout

endl;
if ((a > 0)) && (b % a ==1) cout << "s1" << endl;
else cout << "s2" << endl;
return 0;
}

21-22.09.2011

Булевский тип Управляющие структуры

См. файл upr1.cpp

Пример 1#include using namespace std ;int main () {	bool f;	int a=0; 	int b=3;	f = (a > 0);	cout

Слайд 14Пример 2
#include
using namespace std ;
int main () {
bool f;
int

a=0;
int b=3;
f = (a > 0);
cout

endl;
if ((b % a ==1) && (a > 0)) cout << "s1" << endl;
else cout << "s2" << endl;
return 0;
}

21-22.09.2011

Булевский тип Управляющие структуры

См. файл upr1.cpp

Пример 2#include using namespace std ;int main () {	bool f;	int a=0; 	int b=3;	f = (a > 0);	cout

Слайд 1521-22.09.2011
Булевский тип

Управляющие структуры
while (B) S
B – условие продолжения или «охрана»
S –

тело цикла, выполняется 0 или более раз
В теле цикла S должны изменяться переменные, входящие в «охрану» B

3. Цикл с предусловием

21-22.09.2011Булевский тип         Управляющие структурыwhile (B) SB – условие продолжения

Слайд 1621-22.09.2011
Булевский тип

Управляющие структуры
Пример 1. Алгоритм Евклида (был)
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

начало

конец

Нет

Да

21-22.09.2011Булевский тип         Управляющие структурыПример 1. Алгоритм Евклида (был)u =

Слайд 1721-22.09.2011
Булевский тип

Управляющие структуры
Пример 2. (был) Способ вычисления НОД на основе определения (из

Л.1-2)

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

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

21-22.09.2011Булевский тип         Управляющие структурыПример 2. (был) Способ вычисления НОД

Слайд 1821-22.09.2011
Булевский тип

Управляющие структуры
Пример 2. Алгоритм
// 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)}
21-22.09.2011Булевский тип         Управляющие структурыПример 2. Алгоритм	// a > 0

Слайд 1921-22.09.2011
Булевский тип

Управляющие структуры
Запись условия продолжения цикла
while (! ((a % c

== 0) && (b % c == 0)) { c = c - 1; }

!((a % c == 0) && (b % c == 0)) 
!(a % c == 0) || !(b % c == 0) 
(a % c != 0) || (b % c != 0)



21-22.09.2011Булевский тип         Управляющие структурыЗапись условия продолжения цикла while (!

Слайд 2021-22.09.2011
Булевский тип

Управляющие структуры
do S while (B)
B – условие продолжения ** (окончания)

цикла
S – тело цикла, выполняется 1 или более раз
В теле цикла S должны изменяться переменные, входящие в «охрану» B

** - ср. с языком Паскаль (цикл repeat S until B

4. Цикл с постусловием

21-22.09.2011Булевский тип         Управляющие структурыdo S while (B)B – условие

Слайд 2121-22.09.2011
Булевский тип

Управляющие структуры
Запись алгоритма Евклида с использованием цикла с постусловием
u

= a ; v = b ;
do { r = u % v ;
u = v;
v = r ;
}
while (v != 0) ; 

u = a; v = b

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

v != 0

начало

Нет

Да

21-22.09.2011Булевский тип         Управляющие структурыЗапись алгоритма Евклида с использованием цикла

Слайд 2221-22.09.2011
Булевский тип

Управляющие структуры
Комментарии и демонстрация (см. папку с программами)
В том числе

с заданием b=0


STOP
21-22.09.2011Булевский тип         Управляющие структурыКомментарии и демонстрация (см. папку с

Слайд 2321-22.09.2011
Булевский тип

Управляющие структуры
do S while (B) 
 { S;

while (B) do S }
//дублирование блока

Цикл с постусловием через цикл с предусловием

=

21-22.09.2011Булевский тип         Управляющие структурыdo S while (B)  

Слайд 2421-22.09.2011
Булевский тип

Управляющие структуры
{2}  bool q = true;
while (q) {

S; q = B; }
// ввод дополнительной булевской переменной

=

21-22.09.2011Булевский тип         Управляющие структуры{2}  bool q = true;

Слайд 2521-22.09.2011
Булевский тип

Управляющие структуры
Цикл с предусловием через цикл с постусловием
=
While (B) S

 if (B) { do S while (B) }

F

T

F

T

21-22.09.2011Булевский тип         Управляющие структурыЦикл с предусловием через цикл с

Слайд 2621-22.09.2011
Булевский тип

Управляющие структуры
Пример c НОД (АЕ) – см.файл gcd_until2.cpp
u = a;

v = b;
// u>=0 & v>=0 & GCD(u,v)=GCD(a,b)
if ( v != 0 )
{
do { // u>0 & v>0 & GCD(u,v)=GCD(a,b)
Remainder = u % v;
u = v;
v = Remainder;
// u>0 & v>=0 & GCD(u,v)=GCD(a,b)
} while ( v != 0 );
} // end_if
// u>0 & v=0 & u=GCD(u,0)=GCD(a,b)
21-22.09.2011Булевский тип         Управляющие структурыПример c НОД (АЕ) – см.файл

Слайд 2721-22.09.2011
Булевский тип

Управляющие структуры
5. Цикл do-while-do (в языке С++ нет)
F
B
T
do S1 while

(B) do S2 
 { S1;
while (B) {S2; S1}
}

B

F

T

21-22.09.2011Булевский тип         Управляющие структуры5. Цикл do-while-do (в языке С++

Слайд 2821-22.09.2011
Булевский тип

Управляющие структуры
Сделать самостоятельно:
Дублирование блоков
Введение дополнительной булевской переменной

Цикл do-while-do через цикл

с постусловием
21-22.09.2011Булевский тип         Управляющие структурыСделать самостоятельно:Дублирование блоковВведение дополнительной булевской переменнойЦикл

Слайд 2921-22.09.2011
Булевский тип

Управляющие структуры
Теорема структуры (в конце семестра, если хватит времени)
Достаточно трех

управляющих структур:
Последовательное соединение
Структура выбора: if-else
Цикл с предусловием: while-do
Большой класс программ (все «разумные» программы) можно сконструировать, используя 3 управляющие структуры.
21-22.09.2011Булевский тип         Управляющие структурыТеорема структуры (в конце семестра, если

Слайд 3021-22.09.2011
Булевский тип

Управляющие структуры
Операции детализации и укрупнения

21-22.09.2011Булевский тип         Управляющие структурыОперации детализации и укрупнения

Слайд 3121-22.09.2011
Булевский тип

Управляющие структуры
Существуют 5 видов «неструктурированностей».
Например, «цикл с двумя входами»:
F
D
C
B
A
E
p
q
T
T
F
F
! Самостоятельно:


преобразовать в структурированную схему
21-22.09.2011Булевский тип         Управляющие структурыСуществуют 5 видов «неструктурированностей».Например, «цикл с

Слайд 3221-22.09.2011
Булевский тип

Управляющие структуры
СХЕМА ИТЕРАЦИИ И РЕКУРРЕНТНЫЕ ВЫЧИСЛЕНИЯ С ЦЕЛЫМИ ЧИСЛАМИ
Использование цикла

while–do
[ iteratio – (лат.) повторение]
Пример 1. Функция факториал натурального аргумента n обозначается как n! и определяется соотношением
n ! = 123...(n – 1)n .

Свойство n ! = (n  1)!n при n > 0.
Можно доопределить 0! = 1.

21-22.09.2011Булевский тип         Управляющие структурыСХЕМА ИТЕРАЦИИ И РЕКУРРЕНТНЫЕ ВЫЧИСЛЕНИЯ С

Слайд 3321-22.09.2011
Булевский тип

Управляющие структуры
Функция факториал (продолжение)
В функциональных обозначениях

1, если n = 0;
fact

(n) =  fact (n  1)  n, если n > 0;

«Идея»: последовательно вычислять
fact (0), fact (1), fact (2), fact (3), …, fact (n 1), fact (n),
пользуясь соотношением: fact (n) = fact (n  1)  n,
21-22.09.2011Булевский тип         Управляющие структурыФункция факториал (продолжение)В функциональных обозначениях		1,			 	если

Слайд 3421-22.09.2011
Булевский тип

Управляющие структуры
Функция факториал (продолжение)

«Идея»: последовательно вычислять
fact (0), fact (1),

fact (2), fact (3), …, fact (n 1), fact (n),
пользуясь соотношением: fact (n) = fact (n  1)  n,
т.е. если на предыдущем шаге вычислено fact(n-1), то на этом (текущем) шаге мы можем вычислить fact(n) как fact(n-1)*n.
fact(0)=1, fact(1)=1*1=1, fact(2)=1*2=2, fact(3)=2*3=6, fact(4)=6*4=24, …
21-22.09.2011Булевский тип         Управляющие структурыФункция факториал (продолжение)«Идея»: последовательно вычислять fact

Слайд 3521-22.09.2011
Булевский тип

Управляющие структуры
Пусть i номер шага цикла
и пусть на i-ом

шаге обозначено:
xi  аргумент,
yi = fact (xi).
Используются переменные int x, y;

На соседних шагах: xi = xi-1 + 1 и
yi = yi-1* xi
Начальные значения (перед началом цикла): x0=0 и y0=1.

Переход к программе

21-22.09.2011Булевский тип         Управляющие структурыПусть i номер шага цикла и

Слайд 3621-22.09.2011
Булевский тип

Управляющие структуры
Пример: вычисление fact (5) xi = xi-1 + 1,

yi = yi-1* xi
21-22.09.2011Булевский тип         Управляющие структурыПример: вычисление fact (5)  xi

Слайд 3721-22.09.2011
Булевский тип

Управляющие структуры
}
// (y = fact (n)) & (x = n)
//n  0
x = 0;

y = 1;

// (x = 0) & (y = fact (x))

while (x < n) 
{

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

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

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

т.е. индексы "стираются", а знак равенства = рассматривается как знак операции присваивания =

21-22.09.2011Булевский тип         Управляющие структуры	}	// (y = fact (n)) &

Слайд 3821-22.09.2011
Булевский тип

Управляющие структуры
}
// (y = fact (n)) & (x = n)
//n  0
x = 0;

y = 1;

// (x = 0) & (y = fact (x))

while (x !=n) // x < n 
{

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

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

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

т.е. индексы "стираются", а знак равенства = рассматривается как знак операции присваивания =

Замечание насчет знака < или !=
в условии продолжения цикла.
Например, "нечаянно" оказалось n<0 (!).
Что лучше пропуск цикла или зацикливание?

21-22.09.2011Булевский тип         Управляющие структуры	}	// (y = fact (n)) &

Слайд 3921-22.09.2011
Булевский тип

Управляющие структуры
Демонстрация выполнения программы
В файлах:
fact1.cpp
fact2.cpp (с другим условием продолжения)
fact3.cpp (int,

short, long)

(в т.ч. демонстрация быстрого роста и переполнения при больших n, а также зацикливания при n<0)

21-22.09.2011Булевский тип         Управляющие структурыДемонстрация выполнения программыВ файлах:fact1.cppfact2.cpp (с другим

Слайд 4021-22.09.2011
Булевский тип

Управляющие структуры
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ

ЛЕКЦИИ

КОНЕЦ ЛЕКЦИИ

КОНЕЦ ЛЕКЦИИ

КОНЕЦ ЛЕКЦИИ

21-22.09.2011Булевский тип         Управляющие структурыКОНЕЦ  ЛЕКЦИИКОНЕЦ  ЛЕКЦИИКОНЕЦ

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

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

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

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

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


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

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