Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


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

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

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

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

Презентация на тему 4. Управление

Содержание

ВыраженияВыражения строятся изимён переменныхлитеральных значений и имён константприменения операцийразыменования, взятия адреса, выборки компонент массивов и структурявного приведения типа и вычисления размера типавызова функций и процедургруппирования вычислений скобкамиусловного и последовательного выражений
УправлениеВыражения – вычисление значенийОператоры – последовательность изменений состояния памятиПроцедуры и функции – ВыраженияВыражения строятся изимён переменныхлитеральных значений и имён константприменения операцийразыменования, взятия адреса, выборки Выражения Выражения – приоритет операций Выражения – приоритет операций (пример)x = (*a[i+1].b + c * 2) & ( (x&y|07) Условные выраженияУсловноеВычисляется только одна из ветвей 	i < 0 || i>=N Последовательное выражениеОсмысленно только для выражений с побочным эффектомРезультат – значение последнего выраженияПример:c ОператорыСинтаксис:; - пустой, ничего не делатьвыр; - вычислить выражение и забыть. Операторы - пример	y = (x = 1)+1;loop:	x += 2;	goto swap;	y = y++ Ветвления&C° Выбор одной из ветвей в зависимости от значения выражения (условия)Синтаксис: УсловныйСинтаксис:Пример:if (‘a’ Условный оператор или условное выражение?Сравнитьif (‘a’ Условный оператор или условное выражение?Сравнитьif (x>0)  if (y>0)   *p Арифметический условный (FORTRAN)L = 0, R = N-1, found = 0;Loop:if (L ПереключательСинтаксис:Семантика:Переход на метку case, соответствующую значению выбирающего выраженияПри отсутствии таковой – переход Переключатель – пример (С)switch (x % 6){	case 0 :	case 2:		x += 2;	default Переключатель – пример (С)x%6 вычисляется один раз;Выбор метки можно реализовать эффективнее (таблица, Переключатель – пример (Pascal)case x mod 6 of0, 2: begin		x := x+2;		x Переключатель – пример (Pascal)case ch of 'A'..'Z', 'a'..'z' : 	WriteLn('Буква'); '0'..'9' : Переключатель – пример  (Visual Basic) Select Case True Переключатель – пример (Fortran)(CONTINUE – пустой оператор)int t = x % 6;if Вычисляемые метки (Fortran)0,1,2,4,100 – метки0,1,2,6 - константы    t = Циклы & C°Синтаксис: Базовая форма циклаfor (;;){	…	break;	…	continue;	…}Loop:{	…	goto Done;	…	goto Loop;	…	goto Loop;}Done: Цикл forfor (Init-expr;    Test;    Reinit-expr){	…}Init-expr;for (;;){	if (! Test)		break;	…	Reinit-expr;} Циклы while и do…whilewhile (Test){	…}for (;Test;){	…}do{	…} while (Test);for (;;){	…  if (!Test) break;} Другие формы цикла Циклы - SETLfor (int n=2; n Переменная циклаPascal – значение переменной после выполнения цикла неопределено:for i:=1 to N Границы циклаАлгол-68, Visual Basic – вычисляются один разC – вычисляется каждый раз, Помеченные циклыПроблема: break и continue действует на ближайший охватывающий цикл или переключательПример:
Слайды презентации

Слайд 2 Выражения
Выражения строятся из
имён переменных
литеральных значений и имён констант
применения

ВыраженияВыражения строятся изимён переменныхлитеральных значений и имён константприменения операцийразыменования, взятия адреса,

операций
разыменования, взятия адреса, выборки компонент массивов и структур
явного приведения

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


Слайд 3 Выражения


Выражения

Слайд 4 Выражения – приоритет операций

Выражения – приоритет операций

Слайд 5 Выражения – приоритет операций (пример)
x = (*a[i+1].b +

Выражения – приоритет операций (пример)x = (*a[i+1].b + c * 2) & ( (x&y|07)

c * 2) & ( (x&y|07)

. сильнее, чем *
* сильнее, чем +
& сильнее, чем |
<< сильнее, чем |
& сильнее, чем =
Пусть int a = 30000; тогда
((long) a * a) равно 60000
(long) (a * a) – переполнение
(long) сильнее *
Cкобки (в умеренном количестве) облегчают понимание

Слайд 6 Условные выражения
Условное
Вычисляется только одна из ветвей i < 0

Условные выраженияУсловноеВычисляется только одна из ветвей 	i < 0 || i>=N

|| i>=N ? 0 : A[i]
Тип

– минимальный больший типов ветвей
Логические связки (John McCarthy)
A && B эквивалентно (A ? B : 0)
A || B эквивалентно (A ? 1 : B)
Пример: i < N && A[i] != 0 сравнить i 0 (Pascal)
Пример: A[i] > max && A[i]=max эквивалентно
if (A[i] > max) A[i]=max;

Слайд 7 Последовательное выражение
Осмысленно только для выражений с побочным эффектом


Результат

Последовательное выражениеОсмысленно только для выражений с побочным эффектомРезультат – значение последнего

– значение последнего выражения
Пример:
c = (a=3, b=2+a, a+b)
A[i,j] =

i+j эквивалентно A[j] = i+j

Слайд 8 Операторы
Синтаксис:

; - пустой, ничего не делать
выр; - вычислить

ОператорыСинтаксис:; - пустой, ничего не делатьвыр; - вычислить выражение и забыть.

выражение и забыть.


Слайд 9 Операторы - пример
y = (x = 1)+1;
loop:
x +=

Операторы - пример	y = (x = 1)+1;loop:	x += 2;	goto swap;	y =

2;
goto swap;
y = y++ + ++x;
swap:
{ int t;
t =

x, x=y, y=x;
goto loop;
}
x = 0;

«Спагетти» код.
Область видимости метки - по тем же правилам, что и для других объектов (?)
Переменная t доступна только внутри блока
В программе может быть недоступный код
goto следует использовать только в крайних случаях.




Слайд 10 Ветвления&C°
Выбор одной из ветвей в зависимости от

Ветвления&C° Выбор одной из ветвей в зависимости от значения выражения (условия)Синтаксис:

значения выражения (условия)
Синтаксис:


Слайд 11 Условный
Синтаксис:

Пример:
if (‘a’

УсловныйСинтаксис:Пример:if (‘a’

‘а’

if (‘р’ <= c && c<=‘я’)
c -= 0x50;

If “a” <= с And c<=“z” _ Or “а” <= c And c<=“п” Then
с = Chr(Asc(c)-&H20)
ElseIf “р” <= c And c<=“я” Then
c = Chr(Asc(c)-&H50)
End If

VB:

C:


Слайд 12 Условный оператор или условное выражение?
Сравнить
if (‘a’

Условный оператор или условное выражение?Сравнитьif (‘a’

&& c

с -= 0x20;
else if (‘р’ <= c && c<=‘я’)
c -= 0x50;

с = (‘a’ <= с && c<=‘z’ || ‘а’ <= c && c<=‘п’
? с - 0x20
: ‘р’ <=c && c<=‘я’
? c - 0x50
: c);

Операторы внутри выражений (Algol-68)
(вещ s:=0; для i = 1 до N цк s+:= A[i] кц; s)


Слайд 13 Условный оператор или условное выражение?
Сравнить
if (x>0)
if

Условный оператор или условное выражение?Сравнитьif (x>0) if (y>0)  *p ++;

(y>0)
*p ++;
else

*p --;
else
if (y>0)
*q ++;
else
*q --;

*(x>0 ? p : q) += (y>0 ? 1 : -1)

Условный оператор не вычисляет значения (а в Algol-68, Автокоде Эльбрус – вычисляет).


Слайд 14 Арифметический условный (FORTRAN)
L = 0, R = N-1, found

Арифметический условный (FORTRAN)L = 0, R = N-1, found = 0;Loop:if (L

= 0;
Loop:
if (L

(A[i] == x)
{
found = 1;
goto Done;
}
else if (A[i] < x)
R = i-1;
else
L = I +1;
goto Loop;
}
Done:

L = 0
R = N-1
FOUND = 0
100 IF (L-R) 101,101, 200
101 I = (L+R) / 2
IF (A(I) – X) 102, 103, 104
102 R = I - 1
GO TO 100
103 L = I + 1
GO TO 100
104 FOUND = 1
200

C:


Слайд 15 Переключатель
Синтаксис:





Семантика:
Переход на метку case, соответствующую значению выбирающего выражения
При

ПереключательСинтаксис:Семантика:Переход на метку case, соответствующую значению выбирающего выраженияПри отсутствии таковой –

отсутствии таковой – переход на метку default
При отсутствии как

нужного case, так и default – переход на конец переключателя
break; - переход на конец переключателя.

выход:


Слайд 16 Переключатель – пример (С)
switch (x % 6)
{
case 0

Переключатель – пример (С)switch (x % 6){	case 0 :	case 2:		x +=

:
case 2:
x += 2;
default :
x += 1;
break;
case 1 :
x

= 0;
break;
}

int t = x % 6;
if (t==0) goto L0
if (t==1) goto L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault : x += 1;
goto Ldone;
L1 : x = 0;
goto Ldone;
Ldone:



Слайд 17 Переключатель – пример (С)
x%6 вычисляется один раз;
Выбор метки

Переключатель – пример (С)x%6 вычисляется один раз;Выбор метки можно реализовать эффективнее

можно реализовать эффективнее (таблица, дихотомия,…)
«Провал» после x+= 2; -

важен порядок ветвей
Значения case - константы

int t = x % 6;
if (t==0) goto L0
if (t==1) goto L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault : x += 1;
goto Ldone;
L1 : x = 0;
Ldone:


Слайд 18 Переключатель – пример (Pascal)
case x mod 6 of
0,

Переключатель – пример (Pascal)case x mod 6 of0, 2: begin		x :=

2: begin
x := x+2;
x := x+1;
end;
1 :

x := x+1;
else
x := 0;
end

switch (x % 6)
{
case 0 :
case 2:
x += 2;
default :
x += 1;
break;
case 1 :
x = 0;
break;
}


Слайд 19 Переключатель – пример (Pascal)
case ch of
'A'..'Z', 'a'..'z'

Переключатель – пример (Pascal)case ch of 'A'..'Z', 'a'..'z' : 	WriteLn('Буква'); '0'..'9'

:
WriteLn('Буква');
'0'..'9' :
WriteLn('Цифра');
'+', '-', '*', '/'

:
WriteLn('Оператор');
else
WriteLn('Спецсимвол')
end

Интервалы значений в альтернативых:
Наглядность
Возможность транслятору эффективно реализовать переход


Слайд 20 Переключатель – пример (Visual Basic)
Select Case True

Case n = AscW("

t = t & "<"
Case n = AscW(">")
t = t & ">"
Case n = AscW("&")
t = t & "&"
Case n = AscW("'")
t = t & "'"
Case n = AscW("""")
t = t & """
Case n > 254, n < 0
t = t & "&#x" & Hex(n And &HFFFF) & ";"
Case Else
t = t & Chr(n)
End Select

Выражения в Case – не обязательно константы
Последовательный выбор альтернативы
Полностью эквивалентно If … ElseIf… Else … End If


Слайд 21 Переключатель – пример (Fortran)
(CONTINUE – пустой оператор)
int t

Переключатель – пример (Fortran)(CONTINUE – пустой оператор)int t = x %

= x % 6;
if (t==0) goto L0
if (t==1) goto

L1;
if (t==2) goto L2;
goto Ldefault;
L0 :
L2 : x += 2;
Ldefault : x += 1;
goto Ldone;
L1 : x = 0;
Ldone:

t = X – (X/6)*6 +1
GOTO (0,1,2,3,3,3) t
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
X = 0
100


Слайд 22 Вычисляемые метки (Fortran)
0,1,2,4,100 – метки
0,1,2,6 - константы

Вычисляемые метки (Fortran)0,1,2,4,100 – метки0,1,2,6 - константы  t = X

t = X – (X/6)*6 +1

GOTO (0,1,2,3,3,3) t
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
X = 0
100

t = X – (X/6)*6
ASSIGN 3 TO L
IF (t .EQ.0) ASSIGN 0 TO L
IF (t .EQ.1) ASSIGN 1 TO L
IF (t .EQ.2) ASSIGN 2 TO L
GOTO L, (0,1,2,3)
0 CONTINUE
2 X = X+2
3 X = X+1
GO TO 100
1 X = 0
100


Слайд 23 Циклы & C°
Синтаксис:

Циклы & C°Синтаксис:

Слайд 24 Базовая форма цикла
for (;;)
{

break;

continue;

}
Loop:
{

goto Done;

goto Loop;

goto Loop;
}
Done:

Базовая форма циклаfor (;;){	…	break;	…	continue;	…}Loop:{	…	goto Done;	…	goto Loop;	…	goto Loop;}Done:

Слайд 25 Цикл for

for (Init-expr; Test;

Цикл forfor (Init-expr;  Test;  Reinit-expr){	…}Init-expr;for (;;){	if (! Test)		break;	…	Reinit-expr;}

Reinit-expr)
{

}
Init-expr;
for (;;)
{
if (! Test)
break;

Reinit-expr;
}


Слайд 26 Циклы while и do…while
while (Test)
{

}
for (;Test;)
{

}
do
{

} while (Test);
for

Циклы while и do…whilewhile (Test){	…}for (;Test;){	…}do{	…} while (Test);for (;;){	… if (!Test) break;}

(;;)
{

if (!Test) break;
}


Слайд 27 Другие формы цикла

Другие формы цикла

Слайд 28 Циклы - SETL
for (int n=2; n

Циклы - SETLfor (int n=2; n

= 0, m;
for (test=0, m=2; m

m); m++);
if (test)
printf(“%d “, n);
}

print({n in {2..N} | forall m in {2..n - 1} | n mod m > 0});


Слайд 29 Переменная цикла
Pascal – значение переменной после выполнения цикла

Переменная циклаPascal – значение переменной после выполнения цикла неопределено:for i:=1 to

неопределено:
for i:=1 to N do
if A[i] = 0 then

break;
WriteLn(i);
Algol-68 – переменная цикла является константой в теле цикла
for i from 1 to N do
if A[i] = 0 then i:=N+1 fi
od
С – допускается определение переменной в заголовке цикла
for (int i=0; i

Слайд 30 Границы цикла
Алгол-68, Visual Basic – вычисляются один раз
C

Границы циклаАлгол-68, Visual Basic – вычисляются один разC – вычисляется каждый

– вычисляется каждый раз, поскольку понятия «границы цикла» нет
int

L = strlen(s), i;
char * p = s;
for (i=0,p=s; i *p == ‘a’ ? (strcpy(p,p+1), L--) : i++;

  • Имя файла: 4-upravlenie.pptx
  • Количество просмотров: 137
  • Количество скачиваний: 0