Слайд 115.09.2011
Язык С++. Начало
Программирование 1
Лекция 2
Введение в язык программирования С++.
Стандартные типы
данных.
Основные управляющие структуры (начало).
Слайд 2Внимание!
В начале лекции было завершено рассмотрение материала первой лекции
15.09.2011
Язык С++.
Начало
Слайд 315.09.2011
Язык С++. Начало
Концепция данных. Типы данных
Программы = структуры данных +
алгоритмы
Компьютер – тоже состоит из структур данных (СД) и алгоритмов.
Компьютер
– это интегрированный набор структур данных и алгоритмов, способный хранить и выполнять программы.
Встроенные СД = регистры и слова памяти, где хранятся двоичные коды (числа, символы и т.д.)
Встроенные в аппаратуру алгоритмы = воплощенные в электронных логических цепях (схемах) жесткие правила интерпретации данных в памяти как команд, подлежащих исполнению.
(Это некоторое упрощение)
Слайд 415.09.2011
Язык С++. Начало
Данные в прикладных (предметных) областях
Задачи, которые должны решаться
людьми с помощью компьютеров, формулируются и решаются не на языке
битов,
а с помощью оперирования
числами, литерами (буквами), текстами, символами,
а также более сложными структурами, например,
последовательностями, списками, деревьями, графами и т.п.
Далее идут геометрические образы, изображения, видео и аудио образы и т.п.
Слайд 515.09.2011
Язык С++. Начало
Типы и структуры данных
Обеспечивают связь между двоичными
(машинными) данными и прикладными («человеческими») данными.
Языки высокого уровня (в отличии
от машинных языков) абстрагируются от деталей внутреннего машинного представления данных.
В программах используются переменные.
Переменная = имя + значение.
Тип данных =
множество значений, которые могут принимать переменные и
набор операций, которые можно к ним применять.
Слайд 615.09.2011
Язык С++. Начало
Целые
(int)
Символьные
(char)
Логические
(bool)
Типы С++
* Определяется программистом, остальные
типы - встроенные
Слайд 8Для описания стандартных типов определены следующие ключевые слова:
int (целый);
char (символьный);
wchar_t
(расширенный символьный);
bool (логический);
float (вещественный);
double (вещественный с двойной точностью).
15.09.2011
Язык С++. Начало
Спецификаторы
типа, уточняющих внутреннее представление и диапазон значений стандартных типов:
short (короткий);
long (длинный);
signed (со знаком);
unsigned (без знака).
Слайд 9Диапазоны значений простых типов данных
15.09.2011
Язык С++. Начало
Слайд 1015.09.2011
Язык С++. Начало
Стандартные арифметические операции +, –, *, /, %
Знаки
отношений порядка
Слайд 1115.09.2011
Язык С++. Начало
Логический (булевский) тип
Джордж Буль (1815-1864)
Тип Bool.
Множество значений
= {true, false}.
Для краткости в свободном тексте (не в
тексте программы) будем обозначать
true = T, false = F.
Константы, переменные, выражения булевского типа.
Определение булевского выражения см. далее.
Слайд 1215.09.2011
Язык С++. Начало
Кроме записи булевских выражений в программах нам потребуется
запись утверждений.
(Синтаксически утверждения представляются как комментарии)
Утверждение = Высказывание.
Формула
– обозначение высказывания.
Высказывание (формула) образовано из других высказываний (подформул),
в т.ч. «простейших».
Слайд 1315.09.2011
Язык С++. Начало
Логические операторы (логические связки):
(Cловесное обозначение, в Паскале, в
С++ , в мат. логике)
Отрицание – не, not, !
Дизъюнкция – или, or, ||
Конъюнкция – и, and, && & или
Слайд 1415.09.2011
Язык С++. Начало
Таблица истинности
a и b – переменные (или другие
«объекты» программы, принимающие булевские значения).
Val (a) или короче V (a)
– значение a.
Слайд 1515.09.2011
Язык С++. Начало
Свойства булевских операций (проверяются по таблице истинности)
Коммутативность (перестановочный
закон):
a b = b a ,
a & b = b & a .
Ассоциативность (сочетательный закон):
(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).
Слайд 1615.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 .
Слайд 1715.09.2011
Язык С++. Начало
Исключающее или (xor)
a xor b = (a b) (a
Слайд 1815.09.2011
Язык С++. Начало
Всего можно определить
16 бинарных функций a op b
Каждый
вариант может иметь 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
Слайд 1915.09.2011
Язык С++. Начало
Основные управляющие структуры и инструкции (операторы) языка С++
Управляющие
структуры
= способы сочетания простых операторов
= управление вычислительным процессом
(порядком действий)
1. Структура следования = последовательность операторов
Последовательное выполнение S1; S2;
Операторные скобки – { … }
{ S1; S2; }
Составной оператор
Слайд 2015.09.2011
Язык С++. Начало
2. Структура ветвления = условный оператор = инструкция
выбора
Пример:
if (a > b) a = a
b ; else b = b a;
Слайд 2115.09.2011
Язык С++. Начало
Сокращенный условный оператор
if (B) S
if (B)
S else ПУСТО
Слайд 2215.09.2011
Язык С++. Начало
Пример 1: проверка пересечения отрезков
Дано: два отрезка на
прямой [a, b] и [c, d] с целочисленными координатами концов
a, b, c, d Z (a b, c d)
Требуется:
определить – пересекаются ли отрезки [a, b] и [c, d]
Слайд 2315.09.2011
Язык С++. Начало
Условие пересечения
В вариантах 1) 4) справедливо (b c)
& (d a);
в варианте 5) (b c
) & (d < a) ;
в варианте 6) (b < c) & (d a)
Слайд 2415.09.2011
Язык С++. Начало
Инструкция выбора
if ((b c) && (d
a)) отрезки пересекаются;
else отрезки не пересекаются;
См. программу в файле inters.cpp
Замечание
о корректности исходных данных
Слайд 2515.09.2011
Язык С++. Начало
Пример программы
// Пример 1.1 : пересечение отрезков
#include
using
namespace std ;
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
Замечание о корректности исходных данных (проверка?)
Слайд 2615.09.2011
Язык С++. Начало
// Пример 1.2 : пересечение отрезков (с проверкой
корректности ввода)
#include
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; b = w; };
if (a > b) a
b;
15.09.2011
Язык С++. Начало
a
b
w
1
2
3
Слайд 28// Пример 1.3 : пересечение отрезков (с вычислением булевской переменной)
#include
using namespace 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
Язык С++. Начало
Слайд 2915.09.2011
Язык С++. Начало
p = ( b >= c ) &&
( d >= 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 –
вещественное число
Требуется: вычислить значение функции y=f(x)
15.09.2011
Язык С++. Начало
1
2
-1
-2
1
-1
Слайд 32Анализ задачи
Запишем аналитическое представление функции:
0, при x ≤ - 2
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 main ( )
{ float x, y;
cout
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. Попадание точки
на плоскости в заданную графически область
Дано: точка p = (x,
y)
15.09.2011
Язык С++. Начало
1
2
3
1
2
3
p = (x, y)
Область D
Считаем, что граница входит в область
Слайд 35Уравнение окружности радиуса 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,
pD (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 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
Язык С++. Начало
Слайд 3715.09.2011
Язык С++. Начало
// пример 3 с инструкцией выбора (ветвления) -
вариант 3.2
#include
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 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
Язык С++. Начало
Слайд 4015.09.2011
Язык С++. Начало
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ
ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ
КОНЕЦ ЛЕКЦИИ