Содержание

Слайд 2

Внимание!

В начале лекции было завершено рассмотрение материала первой лекции

15.09.2011

Язык С++. Начало

Внимание! В начале лекции было завершено рассмотрение материала первой лекции 15.09.2011 Язык С++. Начало

Слайд 3

15.09.2011

Язык С++. Начало

Концепция данных. Типы данных

Программы = структуры данных + алгоритмы
Компьютер –

15.09.2011 Язык С++. Начало Концепция данных. Типы данных Программы = структуры данных
тоже состоит из структур данных (СД) и алгоритмов.
Компьютер – это интегрированный набор структур данных и алгоритмов, способный хранить и выполнять программы.
Встроенные СД = регистры и слова памяти, где хранятся двоичные коды (числа, символы и т.д.)
Встроенные в аппаратуру алгоритмы = воплощенные в электронных логических цепях (схемах) жесткие правила интерпретации данных в памяти как команд, подлежащих исполнению.
(Это некоторое упрощение)

Слайд 4

15.09.2011

Язык С++. Начало

Данные в прикладных (предметных) областях

Задачи, которые должны решаться людьми с

15.09.2011 Язык С++. Начало Данные в прикладных (предметных) областях Задачи, которые должны
помощью компьютеров, формулируются и решаются не на языке битов,
а с помощью оперирования
числами, литерами (буквами), текстами, символами,
а также более сложными структурами, например,
последовательностями, списками, деревьями, графами и т.п.
Далее идут геометрические образы, изображения, видео и аудио образы и т.п.

Слайд 5

15.09.2011

Язык С++. Начало

Типы и структуры данных
Обеспечивают связь между двоичными (машинными) данными

15.09.2011 Язык С++. Начало Типы и структуры данных Обеспечивают связь между двоичными
и прикладными («человеческими») данными.
Языки высокого уровня (в отличии от машинных языков) абстрагируются от деталей внутреннего машинного представления данных.
В программах используются переменные.
Переменная = имя + значение.
Тип данных =
множество значений, которые могут принимать переменные и
набор операций, которые можно к ним применять.

Слайд 6

15.09.2011

Язык С++. Начало

Целые
(int)

Символьные
(char)

Логические
(bool)

Типы С++

* Определяется программистом, остальные типы -

15.09.2011 Язык С++. Начало Целые (int) Символьные (char) Логические (bool) Типы С++
встроенные

Слайд 7

15.09.2011

Язык С++. Начало

15.09.2011 Язык С++. Начало

Слайд 8

Для описания стандартных типов определены следующие ключевые слова:
int (целый);
char (символьный);
wchar_t (расширенный символьный);
bool

Для описания стандартных типов определены следующие ключевые слова: int (целый); char (символьный);
(логический);
float (вещественный);
double (вещественный с двойной точностью).

15.09.2011

Язык С++. Начало

Спецификаторы типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
short (короткий);
long (длинный);
signed (со знаком);
unsigned (без знака).

Слайд 9

Диапазоны значений простых типов данных

15.09.2011

Язык С++. Начало

Диапазоны значений простых типов данных 15.09.2011 Язык С++. Начало

Слайд 10

15.09.2011

Язык С++. Начало

Стандартные арифметические операции +, –, *, /, %

Знаки отношений порядка

15.09.2011 Язык С++. Начало Стандартные арифметические операции +, –, *, /, % Знаки отношений порядка

Слайд 11

15.09.2011

Язык С++. Начало

Логический (булевский) тип

Джордж Буль (1815-1864)
Тип Bool.
Множество значений = {true,

15.09.2011 Язык С++. Начало Логический (булевский) тип Джордж Буль (1815-1864) Тип Bool.
false}.
Для краткости в свободном тексте (не в тексте программы) будем обозначать
true = T, false = F.
Константы, переменные, выражения булевского типа.
Определение булевского выражения см. далее.

Слайд 12

15.09.2011

Язык С++. Начало

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

15.09.2011 Язык С++. Начало Кроме записи булевских выражений в программах нам потребуется

(Синтаксически утверждения представляются как комментарии)
Утверждение = Высказывание.
Формула – обозначение высказывания.
Высказывание (формула) образовано из других высказываний (подформул),
в т.ч. «простейших».

Слайд 13

15.09.2011

Язык С++. Начало

Логические операторы (логические связки):

(Cловесное обозначение, в Паскале, в С++ ,

15.09.2011 Язык С++. Начало Логические операторы (логические связки): (Cловесное обозначение, в Паскале,
в мат. логике)
Отрицание – не, not, ! ¬
Дизъюнкция – или, or, || ∨
Конъюнкция – и, and, && & или ∧

Слайд 14

15.09.2011

Язык С++. Начало

Таблица истинности
a и b – переменные (или другие «объекты» программы,

15.09.2011 Язык С++. Начало Таблица истинности a и b – переменные (или
принимающие булевские значения).
Val (a) или короче V (a) – значение a.

Слайд 15

15.09.2011

Язык С++. Начало

Свойства булевских операций (проверяются по таблице истинности)

Коммутативность (перестановочный закон):
a ∨ b = b ∨ a ,
a & b = b & a .
Ассоциативность (сочетательный

15.09.2011 Язык С++. Начало Свойства булевских операций (проверяются по таблице истинности) Коммутативность
закон):
(a ∨ b) ∨ c = a ∨ (b ∨ c),
(a & b) & c = a & (b & c).
Дистрибутивность (распределительный закон):
(a ∨ b) & c = (a & c) ∨ (b & c),
(a & b) ∨ c = (a ∨ c) & (b ∨ c).

Слайд 16

15.09.2011

Язык С++. Начало

Законы Де Моргана:
¬ (a ∨ b) = (¬ a) & (¬ b),
¬ (a & b) = (¬ a) ∨ (¬ b).
Полезные тождества
a ∨ a = a ,
a & a = a .
a ∨ T = T ,
a & T = a .
a ∨ F = a ,
a & F = F .

15.09.2011 Язык С++. Начало Законы Де Моргана: ¬ (a ∨ b) =

Слайд 17

15.09.2011

Язык С++. Начало

Исключающее или (xor)

a xor b = (a & ¬b) ∨ (¬a & b)

15.09.2011 Язык С++. Начало Исключающее или (xor) a xor b = (a

Слайд 18

15.09.2011

Язык С++. Начало

Всего можно определить 16 бинарных функций a op b

Каждый вариант может

15.09.2011 Язык С++. Начало Всего можно определить 16 бинарных функций a op
иметь 2 результата (F или T)
Всего 2*2*2*2 = 24 = 16 различных четверок ответов.
Оказывается, что все 16 бинарных функций выражаются через
¬, &,  ∨,  F, T

Вариантов значений аргументов – 2*2 = 4
(a = F, a = T ) ⊗ (b = F, b = T ) → FF, FT, TF, TT

FF

FT

TF

TT

Слайд 19

15.09.2011

Язык С++. Начало

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

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

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

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

Слайд 20

15.09.2011

Язык С++. Начало

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

Пример:

15.09.2011 Язык С++. Начало 2. Структура ветвления = условный оператор = инструкция
if (a > b) a = a − b ; else b = b − a;

Слайд 21

15.09.2011

Язык С++. Начало

Сокращенный условный оператор
if (B) S ≡
≡ if (B) S else

15.09.2011 Язык С++. Начало Сокращенный условный оператор if (B) S ≡ ≡
ПУСТО

Слайд 22

15.09.2011

Язык С++. Начало

Пример 1: проверка пересечения отрезков

Дано: два отрезка на прямой [a,

15.09.2011 Язык С++. Начало Пример 1: проверка пересечения отрезков Дано: два отрезка
b] и [c, d] с целочисленными координатами концов a, b, c, d ∈ Z (a ≤ b, c ≤ d)
Требуется:
определить – пересекаются ли отрезки [a, b] и [c, d]

Слайд 23

15.09.2011

Язык С++. Начало

Условие пересечения

В вариантах 1) − 4) справедливо (b ≥ c) & (d

15.09.2011 Язык С++. Начало Условие пересечения В вариантах 1) − 4) справедливо
≥ a);
в варианте 5)  −  (b ≥ c ) & (d < a) ;
в варианте 6)  −  (b < c) & (d ≥ a)

Слайд 24

15.09.2011

Язык С++. Начало

Инструкция выбора

if ((b ≥ c) && (d ≥ a)) отрезки

15.09.2011 Язык С++. Начало Инструкция выбора if ((b ≥ c) && (d
пересекаются;
else отрезки не пересекаются;

См. программу в файле inters.cpp
Замечание о корректности исходных данных

Слайд 25

15.09.2011

Язык С++. Начало

Пример программы

// Пример 1.1 : пересечение отрезков
#include
using namespace std

15.09.2011 Язык С++. Начало Пример программы // Пример 1.1 : пересечение отрезков
;
int main ( )
{ int a, b, c, d, w; // входные данные
cout << "Введите координаты первого отрезка (левый и правый концы):\n" ;
cin >> a >> b;
cout << "Введите координаты второго отрезка (левый и правый концы):\n" ;
cin >> c >> d;
cout << "Введены отрезки: [" << a << "," << b << "] [" << c << "," << d <<"]\n";
if (( b >= c ) && ( d >= a )) cout << "Отрезки пересекаются\n“ ;
else cout << "Отрезки не пересекаются\n“ ;
cout << "End of the program LINE\n" ;
return 0 ;
}

Демонстрация выполнения. Обсуждение.
См. программу в файле intrsct.cpp
Замечание о корректности исходных данных (проверка?)

Слайд 26

15.09.2011

Язык С++. Начало

// Пример 1.2 : пересечение отрезков (с проверкой корректности ввода)
#include

15.09.2011 Язык С++. Начало // Пример 1.2 : пересечение отрезков (с проверкой

using namespace std ;
int main ( )
{ int a, b, c, d, w; // входные данные
cout << "Введите координаты первого отрезка (левый и правый концы):\n" ;
cin >> a >> b;
if (a > b) { w = a; a = b; b = w; };
cout << "Введите координаты второго отрезка (левый и правый концы):\n" ;
cin >> c >> d;
if (c > d) { w = c; c = d; d = w; };
cout << "Введены отрезки: [" << a << "," << b << "] [" << c << "," << d <<"]\n";
if (( b >= c ) && ( d >= a )) cout << "Отрезки пересекаются\n“ ;
else cout << "Отрезки не пересекаются\n“ ;
cout << "End of the program LINE\n" ;
return 0 ;
}

Слайд 27

Обмен значений

if (a > b) { w = a; a = b;

Обмен значений if (a > b) { w = a; a =
b = w; };
if (a > b) a ⇔ b;

15.09.2011

Язык С++. Начало

a

b

w

1

2

3

Слайд 28

// Пример 1.3 : пересечение отрезков (с вычислением булевской переменной)
#include
using namespace

// Пример 1.3 : пересечение отрезков (с вычислением булевской переменной) #include using
std ;
int main ( )
{ int a, b, c, d, w; // входные данные
bool p;
cout << "Введите координаты первого отрезка (левый и правый концы):\n" ;
cin >> a >> b;
if (a > b) { w = a; a = b; b = w;};
cout << "Введите координаты второго отрезка (левый и правый концы):\n" ;
cin >> c >> d;
if (c > d) {w = c; c = d; d = w;};
cout << "Введены отрезки: [" << a << "," << b << "] [" << c << "," << d << "]\n";
p = ( b >= c ) && ( d >= a );
cout << "Отрезки “ ;
if (!p ) cout << "НЕ“ ;
cout << “ пересекаются\n“ ;
cout << "End of the program LINE INTERSECTION\n" ;
return 0 ; }

15.09.2011

Язык С++. Начало

Слайд 29

15.09.2011

Язык С++. Начало

p = ( b >= c ) && ( d

15.09.2011 Язык С++. Начало p = ( b >= c ) &&
>= a );
// p – отрезки пересекаются
if (!p ) cout << "НЕ“ ;
Конец примера 1

Варианты

!p ⇒ !( ( b >= c ) && ( d >= a )) ⇒
⇒ !( b >= c ) || !( d >= a ) ⇒( b < c ) || ( d < a )
q = ( b < c ) || ( d < a );
// q – отрезки не пересекаются
if (q) cout << "НЕ“ ;

Закон Де Моргана:
¬ (a & b) = (¬ a) ∨ (¬ b).

Проще было бы начать именно с условия «непересечения»!

Слайд 30

Указание

Следующие примеры на лекции не рассматривались (но были на практическом занятии в

Указание Следующие примеры на лекции не рассматривались (но были на практическом занятии
некоторых группах).
Студенты должны разобрать эти примеры самостоятельно.

15.09.2011

Язык С++. Начало

Слайд 31

Пример 2. Вычисление функции

Функция f(x) задана графиком (см.рис.).
Дано: x – вещественное число
Требуется:

Пример 2. Вычисление функции Функция f(x) задана графиком (см.рис.). Дано: x –
вычислить значение функции y=f(x)

15.09.2011

Язык С++. Начало

1

2

-1

-2

1

-1

Слайд 32

Анализ задачи

Запишем аналитическое представление функции:
0, при x ≤ - 2
x + 2, при

Анализ задачи Запишем аналитическое представление функции: 0, при x ≤ - 2
- 2 < x ≤ -1
y = - x , при -1 < x ≤ 1
x - 2, при 1 < x ≤ 2
0, при x > 2

15.09.2011

Язык С++. Начало

Слайд 33

Пример программы

// пример 2 с инструкцией выбора (ветвления)
#include
using namespace std ;
int

Пример программы // пример 2 с инструкцией выбора (ветвления) #include using namespace
main ( )
{ float x, y;
cout << "Enter argument x : “ ;
cin >> x ;
cout << "Argument x = " << x << endl;
y = 0;
if ((-2 < x) && (x <= -1)) y = x + 2;
else if ((-1 < x) && (x <= 1)) y = - x;
else if ((1 < x) && (x <= 2)) y = x - 2;
cout << "Value function f (" << x << ") = " << y << endl;
return 0;
}

15.09.2011

Язык С++. Начало

Слайд 34

Ответ:
“точка лежит/не лежит в D”

Пример 3. Попадание точки на плоскости

Ответ: “точка лежит/не лежит в D” Пример 3. Попадание точки на плоскости
в заданную графически область

Дано: точка p = (x, y)

15.09.2011

Язык С++. Начало

1

2

3

1

2

3

p = (x, y)

Область D

Считаем, что граница входит в область

Слайд 35

Уравнение окружности радиуса r : x 2 + y 2 = r

Уравнение окружности радиуса r : x 2 + y 2 = r
2
Круг радиуса r1 : x 2 + y 2 ≤ r1 2
Кольцо с радиусами r2 и r3 (r2 ≤ r3):
r2 2 ≤ x 2 + y 2 ≤ r3 2 или в другой форме
(x2 + y2 ≥ r2 2 ) & (x2 + y2 ≤ r32 )
---------------------------------------------------------
В нашей задаче: точка p = (x, y), область D,
p∈D ⇔ (p∈Круг) ∨ (p∈Кольцо)
r1 = 1, r2 = 2, r3 = 3
(x 2 + y 2 ≤ 1) ∨ (x 2 + y ≥ 4) & (x 2 + y 2 ≤ 9)

15.09.2011

Язык С++. Начало

Анализ задачи

Слайд 36

// пример 3 с инструкцией выбора (ветвления) - вариант 3.1
#include
using namespace

// пример 3 с инструкцией выбора (ветвления) - вариант 3.1 #include using
std ;
int main ( )
{ float x, y, r2;
bool b = false;
cout << "Enter x and y for point p=(x y): ";
cin >> x >> y;
cout << "Point p = (" << x << " , " << y << " ) " << endl;
r2 = x*x + y*y;
if (r2 <= 1) b = true;
else if (r2 >= 4) if (r2 <= 9) b = true;
if (!b) cout << "NOT ";
cout << "in region !" << endl;
return 0;
}

15.09.2011

Язык С++. Начало

Слайд 37

15.09.2011

Язык С++. Начало

// пример 3 с инструкцией выбора (ветвления) - вариант 3.2
#include

15.09.2011 Язык С++. Начало // пример 3 с инструкцией выбора (ветвления) -

using namespace std ;
int main ( )
{ float x, y, r2;
bool b = false;
cout << "Enter x and y for point p=(x y): ";
cin >> x >> y;
cout << "Point p = (" << x << " , " << y << " ) " << endl;
r2 = x*x + y*y;
if ( (r2 <= 1) || (r2 >= 4) && (r2 <= 9) ) b = true;
if (!b) cout << "NOT ";
cout << "in region !" << endl;
return 0;
}

Слайд 38

// пример 3 с инструкцией выбора (ветвления) - вариант 3.3
#include
using namespace

// пример 3 с инструкцией выбора (ветвления) - вариант 3.3 #include using
std ;
int main ( )
{ float x, y, r2;
bool b = false;
cout << "Enter x and y for point p=(x y): ";
cin >> x >> y;
cout << "Point p = (" << x << " , " << y << " ) " << endl;
r2 = x*x + y*y;
b = (r2 <= 1) || (r2 >= 4) && (r2 <= 9);
if (!b) cout << "NOT ";
cout << "in region !" << endl;
return 0;
}

15.09.2011

Язык С++. Начало

Слайд 39

Проанализировать отличие
вариантов 1, 2 и 3.

15.09.2011

Язык С++. Начало

Проанализировать отличие вариантов 1, 2 и 3. 15.09.2011 Язык С++. Начало
Имя файла: Язык-С++.pptx
Количество просмотров: 399
Количество скачиваний: 1