Программирование (C++)

Содержание

Слайд 2

Программирование (C++)

§ 17. Введение

Программирование (C++) § 17. Введение

Слайд 3

Что такое программирование?

Программирование — это создание программ для компьютеров. Этим занимаются программисты.

Чем

Что такое программирование? Программирование — это создание программ для компьютеров. Этим занимаются программисты. Чем занимаются программисты:
занимаются программисты:

Слайд 4

Направления в программировании

Направления в программировании

Слайд 5

Простейшая программа на C++

int main()
{
// это основная программа
/* здесь

Простейшая программа на C++ int main() { // это основная программа /*
записывают
операторы */
}

комментарии внутри /* */ не обрабатываются

название программы
main – главный

комментарии после // не обрабатываются

результат – целое число (integer)

Слайд 6

Вывод на экран

#include
using namespace std;
int main() {
cout << "Привет!"; //

Вывод на экран #include using namespace std; int main() { cout cin.get();
вывод текста
cin.get(); // ждать Enter
}

подключить библиотеку iostream

cout — поток для вывода символов
(character output stream)
cin — поток для ввода символов
(character input stream)

использовать пространство имён std

input-output streams – потоки ввода и вывода

Слайд 7

Вывод на экран

Оператор — это команда языка программирования.

cout << "Привет!";

оператор вывода

cout

Вывод на экран Оператор — это команда языка программирования. cout оператор вывода
<< "Привет!";
cout << "Вася!";

cout << "Привет, " << Вася!;

cout << "Привет!" << "Вася!";

или так:

"Вася!";

Слайд 8

Переход на новую строку

cout << "Привет, Вася!";
cout << "Привет, Петя!";

ожидание:

реальность:

Привет, Вася!
Привет, Петя!

Привет,

Переход на новую строку cout cout ожидание: реальность: Привет, Вася! Привет, Петя!
Вася!Привет, Петя!

Решение:

cout << "Привет, Вася!" << endl;
cout << "Привет, Петя!" << endl;

перейти на новую строку

endl

end of line

Слайд 9

Системы программирования

Системы программирования — это средства для создания новых программ.

Транслятор — это

Системы программирования Системы программирования — это средства для создания новых программ. Транслятор
программа, которая переводит тексты программ, написанных программистом, в машинные коды (команды процессора).

компилятор — переводит всю программу в машинные коды, строит исполняемый файл (.exe)
интерпретатор — сам выполняет программу по частям (по одному оператору).

#include
using namespace std;
int main() {
cout << "Привет!";
cin.get();
}

Слайд 10

Системы программирования

Отладчик — это программа для поиска ошибок в других программах.

пошаговый режим

Системы программирования Отладчик — это программа для поиска ошибок в других программах.
— выполнение программы по шагам (по одному оператору)
просмотр значений переменных во время выполнения программы
точки останова – операторы в программе, перед выполнением которых нужно остановиться.

Среда программирования (IDE):
редактор текста программ
транслятор
отладчик

Слайд 11

Задачи

«B»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«C»: Вывести на экран

Задачи «B»: Вывести на экран текст «лесенкой» Вася пошел гулять «C»: Вывести
рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ

Слайд 12

Программирование (C++)

§ 18. Линейные программы

Программирование (C++) § 18. Линейные программы

Слайд 13

Пример задачи

Задача. Ввести два числа и вычислить их сумму.

int main()
{
//

Пример задачи Задача. Ввести два числа и вычислить их сумму. int main()
ввести два числа
// вычислить их сумму
// вывести сумму на экран
}

Псевдокод – алгоритм на русском языке с элементами языка программирования.

Слайд 14

Зачем нужны переменные?

int main()
{
// ввести два числа
// вычислить

Зачем нужны переменные? int main() { // ввести два числа // вычислить
их сумму
// вывести сумму на экран
}

Переменная — это величина, которая имеет имя, тип и значение. Значение переменной может изменяться во время выполнения программы.

int a, b, c;

объявление переменных

ячейки памяти

Слайд 15

Имена переменных

Идентификатор — это имя программы или переменной.

int a, b, c;

МОЖНО использовать
латинские

Имена переменных Идентификатор — это имя программы или переменной. int a, b,
буквы (A-Z, a-z)
цифры
знак подчеркивания _

НЕЛЬЗЯ использовать скобки, знаки ", &, |, *, +, =, !, ? и др.

Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B

Слайд 16

Типы переменных

int – целые

int a = 1, b, c =

Типы переменных int – целые int a = 1, b, c =
0;

float – вещественные (могут иметь дробную часть)

float x = 1.234, y = 3.0, z = 0.576;

char – один символ (в апострофах)

char c = 'ю';

string – символьная строка (в кавычках)

string s = "молоко", q = "я";

double – вещественное с двойной точностью

Слайд 17

Работа с переменными

Присваивание (запись значения)

a = 5;

=

оператор присваивания

a = 5;
a = 18;

Вывод

Работа с переменными Присваивание (запись значения) a = 5; = оператор присваивания
на экран

cout << a;

с = 14;
cout << с;

с = 14;
cout << "с";

14

c

a ← 5

Слайд 18

Работа с переменными

Изменение значения

i = i + 1;

увеличить на 1

a =

Работа с переменными Изменение значения i = i + 1; увеличить на
4;
b = 7;
a = a + 1;
b = b + 1;
a = a + b;
b = b + a;
a = a + 2;
b = b + a;

4

7

5

8

13

21

15

36

i ← i + 1

Слайд 19

Ввод с клавиатуры

Цель – изменить исходные данные, не меняя программу.

cin >> a;

5

a

Ввод с клавиатуры Цель – изменить исходные данные, не меняя программу. cin >> a; 5 a

Слайд 20

Ввод с клавиатуры

через пробел:
25 30
через Enter:
25
30

cin >> a >>

Ввод с клавиатуры через пробел: 25 30 через Enter: 25 30 cin >> a >> b;
b;

Слайд 21

Программа сложения чисел

int main()
{
int a, b, c;
cin >> a

Программа сложения чисел int main() { int a, b, c; cin >>
>> b; // ввести два числа
c = a + b; // вычислить их сумму
cout << c; // вывести сумму на экран
}

ожидание:

реальность:

Введите два числа: 5 7
5+7=12

5 7
12

Слайд 22

cout <<данных с текстом

5+7=12

значение a

значение с

значение b

cout << a;
cout << "+";
cout <<

cout 5+7=12 значение a значение с значение b cout cout cout cout cout cout
b;
cout << "=";
cout << c;

cout << a << "+"
<< b << "=" << c;

Слайд 23

Программа сложения чисел

int main()
{
int a, b, c;
cout << "Введите

Программа сложения чисел int main() { int a, b, c; cout cin
два числа: ";
cin >> a >> b;
c = a + b;
cout << a << "+" << b << "=" << c;
}

Слайд 24

Задачи

«A»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4

Задачи «A»: Ввести три числа, найти их сумму. Пример: Введите три числа:

5
7
4+5+7=16
«B»: Ввести три числа, найти их сумму и произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140

Слайд 25

Задачи

«C»: Ввести три числа, найти их сумму, произведение и среднее арифметическое.
Пример:

Задачи «C»: Ввести три числа, найти их сумму, произведение и среднее арифметическое.
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333

Слайд 26

Арифметические выражения

Линейная запись (в одну строку):

a = (c+b-1)/2*d;

Операции:

+ – * – умножение

Арифметические выражения Линейная запись (в одну строку): a = (c+b-1)/2*d; Операции: +
/ – деление

действия в скобках
умножение и деление, слева направо
сложение и вычитание, слева направо

a = c + (1 – 2 * b) / 2 * d;

1

2

3

4

5

6

Порядок выполнения операций:

Слайд 27

Сокращённая запись операций

Полная запись:

a = a + b;
a = a + 1;
a

Сокращённая запись операций Полная запись: a = a + b; a =
= a - b;
a = a - 1;
a = a * b;
a = a / b;

Сокращённая запись:

a += b;
a += 1;
a -= b;
a -= 1;
a *= b;
a /= b;

a++;

a--;

Слайд 28

Особенность деления

int a = 7, b = 8;
float x = a

Особенность деления int a = 7, b = 8; float x =
/ b;

int a = 3, b = 4;
float x;
x = a / b; // 0
x = 10 / b; // 2
x = a / 2; // 1
x = 10. / b; // 2.5
x = a / 2.; // 1.5
x = float(a) / b; // 0.75

Слайд 29

Частное и остаток при делении целых

/ – деление нацело (остаток отбрасывается)
% –

Частное и остаток при делении целых / – деление нацело (остаток отбрасывается)
остаток от деления

int t, m, s;
t = 175;
m = t / 60; // 2
s = t % 60; // 55

175 сек = 2 мин 55 сек

Слайд 30

Частное и остаток при делении целых

n = 123
d = n / 10;

Частное и остаток при делении целых n = 123 d = n
// 12
k = n % 10; // 3

При делении на 10 нацело отбрасывается последняя цифра числа.

Остаток от деления на 10 – это последняя цифра числа.

Слайд 31

Форматирование вывода

int a = 1, b = 2, c = 3; cout

Форматирование вывода int a = 1, b = 2, c = 3;
<< a << b << c;

123

cout << a << " "
<< b << " " << c;

1 2 3

#include
...
cout << a
<< setw(3) << b
<< setw(5) << c;

1 2 3

3

5

Слайд 32

Задачи

«A»: Ввести число, обозначающее количество секунд. Вывести то же самое время в

Задачи «A»: Ввести число, обозначающее количество секунд. Вывести то же самое время
минутах и секундах.
Пример:
Введите число секунд: 175
2 мин. 55 с.
«B»: Ввести число, обозначающее количество секунд. Вывести то же самое время в часах, минутах и секундах.
Пример:
Введите число секунд: 8325
2 ч. 18 мин. 45 с

Слайд 33

Задачи

«С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут, перерывы

Задачи «С»: Занятия в школе начинаются в 8-30. Урок длится 45 минут,
между уроками – 10 минут. Ввести номер урока и вывести время его окончания.
Пример:
Введите номер урока: 6
13-50

Слайд 34

Форматный вывод

float x = 12.34567891;
cout << x;

12.3457

6 значащих цифр

по умолчанию

cout << fixed

Форматный вывод float x = 12.34567891; cout 12.3457 6 значащих цифр по
<< setw(10)
<< setprecision(3) << x;

12.346

10

всего на число

в дробной части

вариант:

#include

Слайд 35

Форматный вывод

float x = 12.34567891;
cout << fixed;

cout << setw(8) << setprecision(2)

Форматный вывод float x = 12.34567891; cout cout 12.34 cout 12.34 cout минимально возможное 12.3
<< x;

12.34

cout << setw(2) << setprecision(2)
<< x;

12.34

cout << setw(0) << setprecision(1)
<< x;

минимально возможное

12.3

Слайд 36

Научный формат чисел

float x = 123456789;
cout << x;

1.23457e+08

1,23457 ⋅108

float x = 0.0000123456789;
cout

Научный формат чисел float x = 123456789; cout 1.23457e+08 1,23457 ⋅108 float
<< x;

1.23457e-005

1,23457 ⋅10–5

float x = 0.0000123456789;
cout << scientific
<< setw(10) << setprecision(3)
<< x;

1.235e-05

10

Слайд 37

Операции с вещественными числами

float x = 1.6;
cout << int(x);

int – целая часть

Операции с вещественными числами float x = 1.6; cout int – целая
числа (дробная часть отбрасывается)
round – округление к ближайшему целому
ceil – округление «вверх»

1

2

cout << round(x);

cout << ceil(x);

2

#include

Слайд 38

Операции с вещественными числами

sqrt – квадратный корень

float x = 2.25;
cout << sqrt(x);

1.5

Операции с вещественными числами sqrt – квадратный корень float x = 2.25; cout 1.5

Слайд 39

Операции с вещественными числами

1/3 = 0,33333…

бесконечно много знаков

float x, y, z;
x

Операции с вещественными числами 1/3 = 0,33333… бесконечно много знаков float x,
= 1./2;
y = 1./3;
z = 5./6; // 5/6=1/2+1/3
cout << x+y-z;

5.96046e-08

Слайд 40

Задачи

«A»: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько фотографий

Задачи «A»: Ввести число, обозначающее размер одной фотографии в Мбайтах. Определить, сколько
поместится на флэш-карту объёмом 2 Гбайта.
Пример:
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.

Слайд 41

Задачи

«B»: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1 кГц

Задачи «B»: Оцифровка звука выполняется в режиме стерео с частотой дискретизации 44,1
и глубиной кодирования 24 бита. Ввести время записи в минутах и определить, сколько Мбайт нужно выделить для хранения полученного файла (округлить результат в большую сторону).
Пример:
Введите время записи в минутах: 10
Размер файла 152 Мбайт

Слайд 42

Задачи

«С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав число-пароль,

Задачи «С»: Разведчики-математики для того, чтобы опознать своих, используют числовые пароли. Услышав
разведчик должен возвести его в квадрат и сказать в ответ первую цифры дробной части полученного числа. Напишите программу, которая по полученному паролю (вещественному числу) вычисляет число-ответ.
Пример:
Введите пароль: 1.92
Ответ: 6
потому что 1,922 = 3,6864…, первая цифра дробной части – 6

Слайд 43

Случайные и псевдослучайные числа

Случайные явления
встретил слона – не встретил слона
жеребьёвка на

Случайные и псевдослучайные числа Случайные явления встретил слона – не встретил слона
соревнованиях
лотерея
случайная скорость (направление выстрела ) в игре

Случайные числа — это последовательность чисел, в которой невозможно предсказать следующее число, даже зная все предыдущие.

Слайд 44

Случайные и псевдослучайные числа

Псевдослучайные числа — похожи на случайные, но строятся по

Случайные и псевдослучайные числа Псевдослучайные числа — похожи на случайные, но строятся
формуле.

Xn+1= mod(a*Xn+b, c) | от 0 до c-1

следующее

предыдущее

Xn+1= mod(Xn+3, 10) | от 0 до 9

X = 0

зерно

→ 3

→ 6

→ 9

→ 2

→ 5

→ 8

→ 0

зацикливание

8

→ 1

→ 4

→ 7

Слайд 45

Датчик случайных чисел

#include

random – случайный

int n;
n = rand(); // отрезок [0;

Датчик случайных чисел #include random – случайный int n; n = rand();
RAND_MAX]

cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;

разные случайные числа

32767 (?)

Слайд 46

Случайные числа на отрезке

int K, L;
K = rand() % 6; // отрезок

Случайные числа на отрезке int K, L; K = rand() % 6;
[0,5]
L = rand() % 6 + 1; // отрезок [1,6]

int a = 1, b = 6;
int M = rand() % (b-a+1) + a; // [a,b]

Слайд 47

Случайные вещественные числа

Вещественные числа на [a, b]:

X = 1.*rand()/RAND_MAX; // [0;

Случайные вещественные числа Вещественные числа на [a, b]: X = 1.*rand()/RAND_MAX; //
1]

float a = -10, b = 10;
float X = rand()/RAND_MAX; // 0 или 1!

X = float(b-a)*rand()/RAND_MAX; // [0; b-a]

X = float(b-a)*rand()/RAND_MAX + a;

Слайд 48

Задачи

«A»: В игре «Русское лото» из мешка случайным образом выбираются бочонки, на

Задачи «A»: В игре «Русское лото» из мешка случайным образом выбираются бочонки,
каждом из которых написано число от 1 до 90. Напишите программу, которая выводит наугад первые 5 выигрышных номеров.
«B»: + Доработайте программу «Русское лото» так, чтобы все 5 значений гарантированно были бы разными (используйте разные диапазоны).

Слайд 49

Задачи

«С»: + Игральный кубик бросается три раза (выпадает три случайных значения). Из

Задачи «С»: + Игральный кубик бросается три раза (выпадает три случайных значения).
этих чисел составляется целое число, программа должна найти его квадрат.
Пример:
Выпало очков:
1 2 3
Число 123
Его квадрат 15129

Слайд 50

Задачи

«D»: + Получить случайное трёхзначное число и вывести в столбик его отдельные

Задачи «D»: + Получить случайное трёхзначное число и вывести в столбик его
цифры.
Пример:
Получено число 123
сотни: 1
десятки: 2
единицы: 3

Слайд 51

Программирование (C++)

§ 19. Ветвления

Программирование (C++) § 19. Ветвления

Слайд 52

Выбор наибольшего из двух чисел

полная форма ветвления

if( a > b )
M

Выбор наибольшего из двух чисел полная форма ветвления if( a > b
= a;
else
M = b;

Слайд 53

Вариант 1. Программа


int main()
{ int a, b, M; cout <<

Вариант 1. Программа int main() { int a, b, M; cout cin
"Введите два целых числа:";
cin >> a >> b; if( a > b ) else cout << "Наибольшее число " << M; }

M = a;

M = b;

полная форма условного оператора

Слайд 54

Выбор наибольшего из двух чисел-2

неполная форма ветвления

Выбор наибольшего из двух чисел-2 неполная форма ветвления

Слайд 55

Вариант 2. Программа


int main()
{
int a, b, M;
cout << "Введите

Вариант 2. Программа int main() { int a, b, M; cout >
два целых числа: "; cin >> a << b;
M = a; if( b > a ) M = b; cout << "Наибольшее число " << M; }

неполная форма условного оператора

Слайд 56

Примеры

if( a < b )
M = a;
if( b < a

Примеры if( a M = a; if( b M = b; if(
)
M = b;

if( a < b )
{
c = a;
a = b;
b = c;
}

Поиск минимального:

{
c = a;
a = b;
b = c;
}

составной оператор

Слайд 57

В других языках программирования

Паскаль:

if a < b then begin
c = a;

В других языках программирования Паскаль: if a c = a; a =

a = b;
b = c;
end;

if a < b:
c = a
a = b
b = c

Python:

Слайд 58

Вложенные условные операторы

Задача. В переменной a записан возраст Антона, а в переменной

Вложенные условные операторы Задача. В переменной a записан возраст Антона, а в
b – возраст Бориса. Определить, кто из них старше.

if( a > b )
cout << "Андрей старше";
else
if( a == b )
cout << "Одного возраста";
else
cout << "Борис старше";

if( a == b )
cout << "Одного возраста";
else
cout << "Борис старше";

вложенный условный
оператор

else относится к ближайшему if(

Слайд 59

Задачи

«A»: Ввести два целых числа, найти наибольшее и наименьшее из них.

Задачи «A»: Ввести два целых числа, найти наибольшее и наименьшее из них.

Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1

«B»: Ввести четыре целых числа, найти наибольшее из них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5

Слайд 60

Задачи

«C»: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них

Задачи «C»: Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из
старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.

Слайд 61

Сложные условия

Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести

Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно.
возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит").
Особенность: надо проверить, выполняются ли два условия одновременно:
возраст ≥ 25 возраст ≤ 40

Слайд 62

Плохое решение


int main()
{
int x;
cout << "Введите ваш возраст";
cin

Плохое решение int main() { int x; cout cin >> x; if(
>> x;
if( x >= 25 )
if( x <= 40 )
cout << "Подходит!";
else
cout <<"Не подходит.";
else
cout <<"Не подходит.";
}

вложенный условный оператор

Слайд 63

Хорошее решение (операция «И»)

int main()
{
int x;
cout << "Введите ваш

Хорошее решение (операция «И») int main() { int x; cout cin >>
возраст";
cin >> x;
if( x >= 25 and x <= 40 )
cout << "Подходит!";
else
cout << "Не подходит.";
}

сложное условие

Слайд 64

Примеры

Задача. Вывести "Да", если число в переменной a – двузначное.

if( 10 <=

Примеры Задача. Вывести "Да", если число в переменной a – двузначное. if(
a and a <= 99 )
cout << "Да";

Задача. Вывести "Да", если число в переменной a – двузначное и делится на 7.

if( 10 <= a and a <= 99
and a % 7 == 0 )
cout << "Да";

Слайд 65

Сложные условия

Задача. Самолёт летает по понедельникам и четвергам. Ввести номер дня недели

Сложные условия Задача. Самолёт летает по понедельникам и четвергам. Ввести номер дня
и определить, летает ли в этот день самолёт.
Особенность: надо проверить, выполняется ли одно из двух условий:
день = 1 день = 4

if( d == 1 or d == 4 )
cout << "Летает";
else
cout << "Не летает";

сложное условие

d == 1 or d == 4

Слайд 66

Ещё пример

Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести

Ещё пример Задача. Фирма набирает сотрудников от 25 до 40 лет включительно.
возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит"). Использовать «ИЛИ».

if( ??? )
cout << "Не подходит!";
else
cout << "Подходит.";

x < 25 or x > 40

Слайд 67

Простые и сложные условия

Простые условия (отношения)
< <= > >= == !=
Сложное

Простые и сложные условия Простые условия (отношения) >= == != Сложное условие
условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
И – одновременное выполнение условий
x >= 25 and x <= 40
ИЛИ – выполнение хотя бы одного из условий
x < 25 or x > 40
НЕ – отрицание, обратное условие
not (x > 25) ⇔ ???

равно

не равно

x <= 25

Слайд 68

Порядок выполнения операций

выражения в скобках
НЕ (not)
И (and)
ИЛИ (or)

1

if( not(a > 2) or

Порядок выполнения операций выражения в скобках НЕ (not) И (and) ИЛИ (or)
c != 5 and b < a )
{
...
}

4

2

3

5

6

Слайд 69

Сложные условия

Истинно или ложно при a = 2; b = 3; c

Сложные условия Истинно или ложно при a = 2; b = 3;
= 4;
not (a > b)
(a < b) and (b < c)
(a > c) or (b > c)
(a < b) and (b > c)
(a > c) and (b > d)
not(a >= b) or (c = d)
(a >= b) or not (c < b)
(a > c) or (b > c) or (b > a)

Да

Да

Нет

Да

Да

Нет

Нет

Да

Слайд 70

Задачи

«A»: Напишите программу, которая получает три числа - рост трёх спортсменов, и

Задачи «A»: Напишите программу, которая получает три числа - рост трёх спортсменов,
выводит сообщение «По росту.», если они стоят по возрастанию роста, или сообщение «Не по росту!», если они стоят не по росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!

Слайд 71

Задачи

«B»: Напишите программу, которая получает номер месяца и выводит соответствующее ему время

Задачи «B»: Напишите программу, которая получает номер месяца и выводит соответствующее ему
года или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.

Слайд 72

Задачи

«C»: Напишите программу, которая получает возраст человека (целое число, не превышающее 120)

Задачи «C»: Напишите программу, которая получает возраст человека (целое число, не превышающее
и выводит этот возраст со словом «год», «года» или «лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.

Слайд 73

Логические переменные

bool b;
b = true; // 1
b = false; // 0

только два

Логические переменные bool b; b = true; // 1 b = false;
возможных значения

Пример:

bool vyh;
...
vyh = (d == 6) or (d == 7);
...
if( not vyh )
cout << "Рабочий день.";
else
cout << "Выходной!";

Слайд 74

Задачи

«A»: Напишите программу, которая получает с клавиатуры целое число и записывает в

Задачи «A»: Напишите программу, которая получает с клавиатуры целое число и записывает
логическую переменную значение «да» (True), если это число трёхзначное. После этого на экран выводится ответ на вопрос: «Верно ли, что было получено трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.

Слайд 75

Задачи

«B»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в

Задачи «B»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает
логическую переменную значение «да» (True), если это число – палиндром, то есть читается одинаково слева направо и справа налево. После этого на экран выводится ответ на вопрос: «Верно ли, что введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.

Слайд 76

Задачи

«С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает в

Задачи «С»: Напишите программу, которая получает с клавиатуры трёхзначное число и записывает
логическую переменную значение «да» (True), если это все его цифры одинаковы. После этого на экран выводится ответ на вопрос: «Верно ли, что все цифры введённого числа одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.

Слайд 77

Экспертная система

Экспертная система — это компьютерная программа, задача которой — заменить человека-эксперта

Экспертная система Экспертная система — это компьютерная программа, задача которой — заменить
при принятии решений в сложной ситуации.

База знаний = факты + правила writeа:

если у животного есть перья, то это птица;
если животное кормит детенышей молоком, то это — млекопитающее;
если животное — млекопитающее и ест мясо, то это — хищник.

Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.

Слайд 78

Дерево решений

хищник

?

птица

да

да

нет

нет

млекопитающее

Кормит детей молоком?

Имеет перья?

Ест мясо?

?

да

нет

Дерево решений хищник ? птица да да нет нет млекопитающее Кормит детей

Слайд 79

Программирование экспертной системы

Ответы пользователя: да и нет – символьные строки.

string otvet;
...
cout <<

Программирование экспертной системы Ответы пользователя: да и нет – символьные строки. string
"Кормит детей молоком? ";
cin >> otvet;
if( otvet == "да" )
... // вариант 1
else
... // вариант 2

// вариант 1
cout << "Млекопитающее.";
cout << "Ест мясо? ";
cin >> otvet;
if( otvet == "да" )
cout << "Хищник.";
else
cout << "Не знаю.";

Слайд 80

Заглавные и строчные буквы

string otvet;
...
if( otvet == "да" )
...

не

Заглавные и строчные буквы string otvet; ... if( otvet == "да" )
сработает на "Да"

if( otvet == "да" or otvet == "Да" )
...

Слайд 81

Программирование (C++)

§ 23. Отладка программ

Программирование (C++) § 23. Отладка программ

Слайд 82

Виды ошибок

Синтаксические ошибки – нарушение правил записи операторов языка программирования.

Обнаруживаются транслятором.

Логические ошибки

Виды ошибок Синтаксические ошибки – нарушение правил записи операторов языка программирования. Обнаруживаются
– неверно составленный алгоритм.

Отказ (ошибка времени выполнения) – аварийная ситуация во время выполнения программы.

Отладка – поиск и исправление ошибок в программе.

Слайд 83

Пример отладки программы

int main()
{
float a, b, c, D, x1, x2;

Пример отладки программы int main() { float a, b, c, D, x1,
cout << "Введите a, b, c: ";
cin >> a >> b >> c;
D = b*b - 4*a*а;
x1 = (-b + sqrt(D))/2*a;
x2 = (-b - sqrt(D))/2*a;
cout << "x1=" << x1
<< " x2=" << x2);
}

Программа решения квадратного уравнения

Слайд 84

Тестирование

Тест 1. a = 1, b = 2, c = 1.

x1=-1 x2=-1

x1=-1

Тестирование Тест 1. a = 1, b = 2, c = 1.
x2=-1

Реальность:

Тест 2. a = 1, b = – 5, c = 6.

x1=3 x2=2

x1=4.79129 x2=0.208712

Ожидание:

Найден вариант, когда программа работает неверно. Ошибка воспроизводится!

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

Слайд 85

Отладочная печать

cin >> a >> b >> c;
cout << a << "

Отладочная печать cin >> a >> b >> c; cout D =
" << b << " " << c;
D = b*b - 4*a*a;
cout << "D=" << D);
...

cout << a << " " << b << " " << c << endl;

cout << "D=" << D << endl;

Введите a, b, c: 1 -5 6
1 -5 6
D=21

Результат:

D=21

Идея: выводить все промежуточные результаты.

Слайд 86

Отладка программы

Тест 1. a = 1, b = 2, c = 1.

x1=-1

Отладка программы Тест 1. a = 1, b = 2, c =
x2=-1

x1=-1 x2=-1

Реальность:

Тест 2. a = 1, b = – 5, c = 6.

x1=3 x2=2

Ожидание:

x1=3 x2=2

Тест 3. a = 8, b = – 6, c = 1.

x1=0.5 x2=0.25

x1=32 x2=16

x1 =(-b+sqrt(D))/ 2*a;
x2 =(-b-sqrt(D))/ 2*a;

(2*a);

(2*a);

Слайд 87

Задачи

«A»: Загрузите программу, которая должна вычислять сумму цифр трёхзначного числа:
int N, d1,

Задачи «A»: Загрузите программу, которая должна вычислять сумму цифр трёхзначного числа: int
d2, s;
cin >> "N = ";
cout << N;
d0 = N % 10;
d1 = N % 100;
d2 = N / 100;
d0 + d2 = s
cout << s;
Выполните отладку программы:
исправьте синтаксические ошибки
определите ситуации, когда она работает неверно
исправьте логические ошибки.

Слайд 88

Задачи

«B»: Доработайте программу из п. А так, чтобы она правильно работала с

Задачи «B»: Доработайте программу из п. А так, чтобы она правильно работала
отрицательными трёхзначными числами: при вводе числа «–123» программа должна выдавать ответ 6.

Слайд 89

Задачи

«С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел:
int a, b;
cin

Задачи «С»: Загрузите программу, которая должна вычислять наибольшее из трёх чисел: int
>> "a = "; cin >> a;
cout << "b = "; cout << b;
cin >> "c = "; cin >> c;
if( a > b ) M = a;
else M = b;
if( c > b ) M = b;
else M = c;
cout << M;
Выполните отладку программы:
исправьте синтаксические ошибки
определите ситуации, когда она работает неверно
исправьте логические ошибки.

Слайд 90

Программирование (C++)

§ 20. Программирование циклических алгоритмов

Программирование (C++) § 20. Программирование циклических алгоритмов

Слайд 91

Зачем нужен цикл?

Задача. Вывести 5 раз «Привет!».

cout << "Привет";
cout << "Привет";
cout <<

Зачем нужен цикл? Задача. Вывести 5 раз «Привет!». cout cout cout cout
"Привет";
cout << "Привет";
cout << "Привет";

Цикл «N раз»:

// сделай 5 раз
cout << "Привет";

Слайд 92

Как организовать цикл?

// счётчик = 0
// пока счётчик < 5

Как организовать цикл? // счётчик = 0 // пока счётчик cout //
cout << "Привет";
// счётчик = счётчик + 1

ещё не делали

сделали ещё раз

int count = 0;
while( count < 5 ) {
cout << "Привет";
count++;
}

}

{

составной оператор

Слайд 93

Как организовать цикл?

int count = 5;
while( count > ??? ) {
cout

Как организовать цикл? int count = 5; while( count > ??? )
<< "Привет";
???
}

Идея: запоминать, сколько шагов осталось.

0

count--;

Слайд 94

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

условие проверяется при входе в цикл
как только условие становится ложным,

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

while( условие ) {
...
}

тело цикла

while( 1 ) {
...
}

бесконечный цикл (зацикливание)

Слайд 95

Сумма цифр числа

Задача. Вычислить сумму цифр введённого числа.
123 → 1 +

Сумма цифр числа Задача. Вычислить сумму цифр введённого числа. 123 → 1
2 + 3 = 6

Выделить последнюю цифру числа в переменной N:

d = N % 10;

Отбросить последнюю цифру числа в переменной N:

N = N / 10;

123 → 3

123 → 12

Добавить к переменной sum значение переменной d:

sum = sum + d;

sum = 6 → 6 + 4 = 10
d = 4

sum += d;

или

Слайд 96

Сумма цифр числа

выделяем последнюю цифру числа (%)
увеличиваем сумму на значение цифры (sum+=d;)
отсекаем

Сумма цифр числа выделяем последнюю цифру числа (%) увеличиваем сумму на значение
последнюю цифру числа (/)

начальные значения

Слайд 97

Сумма цифр числа

начало

конец

нет

да

N != 0?

sum = 0;

d = N % 10;
sum +=

Сумма цифр числа начало конец нет да N != 0? sum =
d;
N= N / 10;

обнулить сумму

ввод N

выполнять "пока N != 0"

вывод sum

Слайд 98

Сумма цифр числа

int main() {
int N, d, sum;
cout << "Введите

Сумма цифр числа int main() { int N, d, sum; cout cin
целое число";
cin >> N;
sum = 0;
cout << "Сумма цифр числа " << N
<< " равна" << sum;
}

while( N != 0 ) {
d = N % 10;
sum += d;
N= N / 10;
}

N1= N;

N1

Слайд 99

Задачи

«A»: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько

Задачи «A»: Напишите программу, которая получает с клавиатуры количество повторений и выводит
же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1.
Пример:
Введите число? 311
Единиц: 2

Слайд 100

Задачи

«C»: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую

Задачи «C»: Напишите программу, которая получает с клавиатуры натуральное число и находит
цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом.
Пример:
Введите число: 553 Введите число: 535
Ответ: да. Ответ: нет.

Слайд 101

Алгоритм Евклида

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

Евклид
(365-300 до. н.

Алгоритм Евклида Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел. Евклид
э.)

НОД(a,b)= НОД(a-b, b)
= НОД(a, b-a)

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.

НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)

НОД (1998, 2) = НОД (1996, 2) = … = 2

Пример:

много шагов при большой разнице чисел:

= НОД (7, 7) = 7

Слайд 102

Алгоритм Евклида

a == b?

да

нет

a > b?

да

a=a-b;

нет

b=b-a;

начало

конец

Алгоритм Евклида a == b? да нет a > b? да a=a-b; нет b=b-a; начало конец

Слайд 103

Алгоритм Евклида

while( a != b )
if( a > b )

Алгоритм Евклида while( a != b ) if( a > b )
a = a – b;
else
b = b – a;

Слайд 104

Модифицированный алгоритм Евклида

НОД(a,b)= НОД(a%b, b)
= НОД(a, b%a)

Заменяем большее из двух

Модифицированный алгоритм Евклида НОД(a,b)= НОД(a%b, b) = НОД(a, b%a) Заменяем большее из
чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю. Тогда большее — это НОД.

НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7

Пример:

Слайд 105

Модифицированный алгоритм

while( a != 0 and b != 0)
if( a

Модифицированный алгоритм while( a != 0 and b != 0) if( a
> b )
a = a % b;
else
b = b % a;

if( a != 0 )
cout << a;
else
cout << b;

cout << ??? ;

a+b

Слайд 106

В других языках программирования

while a!=0 and b!=0:
if a > b:
a

В других языках программирования while a!=0 and b!=0: if a > b:
= a % b
else:
b = b % a

Python:

Паскаль:

while(a<>0 and b<>0) do
if( a > b )
a = a mod b;
else
b = b mod a

Слайд 107

Задачи

«A»: Ввести с клавиатуры два натуральных числа и найти их НОД с

Задачи «A»: Ввести с клавиатуры два натуральных числа и найти их НОД
помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7

«B»: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу:

Слайд 108

Задачи

«C»: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла

Задачи «C»: Ввести с клавиатуры два натуральных числа и сравнить количество шагов
для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1

Слайд 109

Обработка потока данных

Задача. На вход программы поступает поток данных — последовательность целых

Обработка потока данных Задача. На вход программы поступает поток данных — последовательность
чисел, которая заканчивается нулём. Требуется найти сумму элементов этой последовательности.

while( x != 0 ) {
// добавить x к сумме
// x = следующее число
}

Слайд 110

Обработка потока данных

int x, sum;
...
sum = 0;
cin >> x; // ввести первое

Обработка потока данных int x, sum; ... sum = 0; cin >>
число
while( x != 0 ) {
sum += x;
cin >> x; // ввести следующее
}
cout << "Сумма " << sum;

Слайд 111

Задачи

«A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём.

Задачи «A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается
Определить, сколько получено чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Слайд 112

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

условие проверяется после завершения очередного шага цикла
цикл всегда выполняется хотя

Цикл с постусловием условие проверяется после завершения очередного шага цикла цикл всегда
бы один раз
как только условие становится истинным, работа цикла заканчивается

do {
cout << "Введите N>0: ";
cin >> N;
}
while( N <= 0 );

Слайд 113

Задачи

«A»: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению

Задачи «A»: Напишите программу, которая предлагает ввести пароль и не переходит к
основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений».
«B»: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.

Слайд 114

Задачи

«D»: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый

Задачи «D»: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет
квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.

Слайд 115

Цикл по переменной

Задача. Вывести на экран степени числа 2 от 21 до

Цикл по переменной Задача. Вывести на экран степени числа 2 от 21
210.

k = 1;
N = 2;
while( k <= 10 )
{
cout << N << " ";
N = N*2;
k++;
}

Идея: собрать всё вместе.

N = 2;
for( k=1; k<=10; k++ )
{
cout << N << " ";
N = N*2;
}

k=1; k<=10; k++

Слайд 116

Цикл по переменной

Задача. Найти сумму чисел от 1 до 1000.

int sum =

Цикл по переменной Задача. Найти сумму чисел от 1 до 1000. int
0;
for( int i=1; i<=1000; i++ )
sum += i;

Задача. Вывести квадраты чисел от 10 до 1 по убыванию.

for( int k=10; k>=1; k-- )
cout << k*k << endl;

k--

переменная нужна только в цикле

Слайд 117

Цикл по переменной

Задача. Найти сумму чётных чисел от 2 до 1000.

int sum

Цикл по переменной Задача. Найти сумму чётных чисел от 2 до 1000.
= 0;
for( int i=2; i<=1000; i++ )
if( i % 2 == 0 )
sum += i;

if( i % 2 == 0 )

Слайд 118

В других языках программирования

Sum = 0
for i in range(1, 1001):
Sum +=

В других языках программирования Sum = 0 for i in range(1, 1001):
i

Python:

Паскаль:

var sum, i: integer;
sum := 0;
for i:=1 to 1000 do
sum := sum + i;

диапазон [1;1001)

Слайд 119

Задачи

«A»: Ипполит задумал трёхзначное число, которое при делении на 15 даёт в

Задачи «A»: Ипполит задумал трёхзначное число, которое при делении на 15 даёт
остатке 11, а при делении на 11 даёт в остатке 9. Напишите программу, которая находит все такие числа.
«B»: С клавиатуры вводится натуральное число N. Программа должна найти факториал этого числа (обозначается как N!) – произведение всех натуральных чисел от 1 до N. Например,
5! = 1 • 2 • 3 • 4 • 5 = 120.
«C»: Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в N-ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 13 + 53 + 33. Найдите все трёхзначные Армстронга.

Слайд 120

Программирование (C++)

§ 21. Массивы

Программирование (C++) § 21. Массивы

Слайд 121

Что такое массив?

Массив – это группа переменных одного типа, расположенных в памяти

Что такое массив? Массив – это группа переменных одного типа, расположенных в
рядом (в соседних ячейках) и имеющих общее имя.

Надо:

выделять память
записывать данные в нужную ячейку
читать данные из ячейки

Слайд 122

Выделение памяти (объявление)

int A[5] = {1, 2, 0, 8, 5};
float V[6] =

Выделение памяти (объявление) int A[5] = {1, 2, 0, 8, 5}; float
{1.2, 4.3};

количество элементов

начальные значения

const int N = 10;
int A[N];

остальные - нули

Слайд 123

Индекс элемента — это значение, которое указывает на конкретный элемент массива.

Обращение к

Индекс элемента — это значение, которое указывает на конкретный элемент массива. Обращение
элементу массива

A

массив

2

15

НОМЕР (ИНДЕКС)

A[0]

A[1]

A[2]

A[3]

A[4]

ЗНАЧЕНИЕ элемента массива

A[2]

НОМЕР (ИНДЕКС) элемента массива: 2

ЗНАЧЕНИЕ элемента массива: 10

Слайд 124

Что неправильно?

int A[10];
...
A[5] = 4.5;
A[15] = 8;
A[1] = "Вася";

дробная часть будет отброшена!

за

Что неправильно? int A[10]; ... A[5] = 4.5; A[15] = 8; A[1]
границами массива!

недопустимый тип данных!

Слайд 125

Обращение к элементу массива

int i = 2;
A[2]= A[i-1] + 2*A[i] + A[2*i];
cout

Обращение к элементу массива int i = 2; A[2]= A[i-1] + 2*A[i]
<< A[i] + A[i+2];

A[2]= A[1] + 2*A[2] + A[4];
cout << A[2] + A[4];

77

128

Слайд 126

Что неверно?

int A[5] = {1, 2, 3, 4, 5};
int x = 2;
cout

Что неверно? int A[5] = {1, 2, 3, 4, 5}; int x
<< A[x-3];
A[x+4]=A[x-1]+A[2*x];

cout << A[-1];
A[6]=A[1]+A[4];

Выход за границы массива — это обращение к элементу с индексом, который не существует в массиве.

Слайд 127

Перебор элементов массива

Перебор элементов: просматриваем все элементы массива и, если нужно, выполняем

Перебор элементов массива Перебор элементов: просматриваем все элементы массива и, если нужно,
с каждым из них некоторую операцию.

const int N = 10;
int A[N];

for( int i=0; i // здесь работаем с A[i]
}

Слайд 128

Заполнение массива

for( int i=0; i A[i] = i;

В развёрнутом виде

A[0]=

Заполнение массива for( int i=0; i A[i] = i; В развёрнутом виде
0;
A[1]= 1;
A[2]= 2;
...
A[N-1]= N-1;

0

1

2

N-1

A[i] = i+1;

Слайд 129

X = N;

Заполнение массива в обратном порядке

A[0]= N;
A[1]= N-1;
A[2]= N-2;
...
A[N]= 1;

for(int i=0;

X = N; Заполнение массива в обратном порядке A[0]= N; A[1]= N-1;
i A[i]= X;
}

X = X – 1;
}

X = N, N-1, …, 2, 1

начальное значение

уменьшение на 1

Слайд 130

Заполнение массива в обратном порядке

A[i]= X;

–1

+1

i + X = N

X

Заполнение массива в обратном порядке A[i]= X; –1 +1 i + X
= N - i

for(int i=0; i A[i]= N – i;

Слайд 131

Вывод массива на экран

for(int i=0; i cout << A[i];

<< "

Вывод массива на экран for(int i=0; i cout или так: for(int i=0;
";

или так:

for(int i=0; i cout << A[i] << endl;

интервал между значениями

в столбик

или так:

cout << "[";
for(int i=0; i cout << A[i] << ",";
cout << "]";

[1,2,3,4,5,]

Слайд 132

Ввод с клавиатуры

for(int i=0; i cout << "A[",i,"]=";
cin >>

Ввод с клавиатуры for(int i=0; i cout cin >> A[i]; } A[1]
A[i];
}

A[1] =
A[2] =
A[3] =
A[4] =
A[5] =

5
12
34
56
13

for(int i=0; i cin >> A[i];

С подсказкой для ввода:

Слайд 133

Заполнение случайными числами

#include
...
for(int i=0; i A[i] = 20 + rand()

Заполнение случайными числами #include ... for(int i=0; i A[i] = 20 +
% 81;
cout << A[i] << " ";
}

сразу вывод на экран

Слайд 134

В других языках программирования

Паскаль:

var A: array[0..N-1] of integer;
var i: integer;
for i:=0 to

В других языках программирования Паскаль: var A: array[0..N-1] of integer; var i:
N-1 do
A[i]:= i + 1;
for i:=0 to N-1 do
write( A[i], " " );

A = [0]*N
for i in range(N):
A[i] = i + 1
print(A)

Python:

Слайд 135

Задачи

«A»: а) Заполните все элементы массива значением X , введённым с клавиатуры.
б)

Задачи «A»: а) Заполните все элементы массива значением X , введённым с
Заполните массив первыми N натуральными числами, начиная с X (значение X введите с клавиатуры).

«B»: а) Заполните массив натуральными числами в обратном порядке, начиная со значения X, введённого с клавиатуры. Последний элемент должен быть равен X, предпоследний равен X–1 и т.д.
б) Заполните массив степенями числа 2 (от 21 до 2N), так чтобы элемент с индексом i был равен 2i.

Слайд 136

Задачи

«C»: а) Заполните массив степенями числа 2, начиная с конца, так чтобы

Задачи «C»: а) Заполните массив степенями числа 2, начиная с конца, так
последний элемент массива был равен 1, а каждый предыдущий был в 2 раза больше следующего.
б) С клавиатуры вводится целое число X. Заполните массив, состоящий из нечётного числа элементов, целыми числами, так чтобы средний элемент массива был равен X, слева от него элементы стояли по возрастанию, а справа – по убыванию. Соседние элементы отличаются на единицу. Например, при X = 3 массив из 5 элементов заполняется так: 1 2 3 2 1.

Слайд 137

Задачи-2

«A»: Напишите программу, которая заполняет массив из N = 8 элементов случайными

Задачи-2 «A»: Напишите программу, которая заполняет массив из N = 8 элементов
числами в диапазоне [0,10], выводит его на экран, а затем выводит на экран квадраты всех элементов массива.
Пример:
Массив: 5 6 2 3 1 4 8 7
Квадраты: 25 36 4 9 1 16 64 49

«B»: Напишите программу, которая заполняет массив из N = 10 случайными числами в диапазоне [100,300] и выводит его на экран. После этого на экран выводятся средние цифры (число десятков) всех чисел, записанных в массив.
Пример:
Массив: 142 324 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7

Слайд 138

Задачи-2

«C»: Напишите программу, которая заполняет массив из N = 10 случайными числами

Задачи-2 «C»: Напишите программу, которая заполняет массив из N = 10 случайными
в диапазоне [100,500] и выводит его на экран. После этого на экран выводятся суммы цифр всех чисел, записанных в массив.
Пример:
Массив: 162 425 340 128 278 195 326 414 312 177
Суммы цифр: 9 11 7 11 17 15 11 9 6 15

Слайд 139

Программирование (C++)

§ 22. Алгоритмы обработки массивов

Программирование (C++) § 22. Алгоритмы обработки массивов

Слайд 140

Сумма элементов массива

int sum = 0;
for(int i=0; i sum += A[i];
cout

Сумма элементов массива int sum = 0; for(int i=0; i sum +=
<< sum;

const int N = 10;
int A[N] = {}; // все нули

Задача. Найти сумму элементов массива.

1

5

2

7

3

15

4

18

5

19

Слайд 141

Сумма не всех элементов массива

int sum = 0;
for(int i=0; i sum=

Сумма не всех элементов массива int sum = 0; for(int i=0; i
sum + A[i];
cout << sum );

Задача. Найти сумму чётных элементов массива.

if( A[i] mod 2 = 0 )
sum += A[i];
cout << sum;

if( A[i] % 2 == 0 )

Слайд 142

Задачи

«A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами на

Задачи «A»: Напишите программу, которая заполняет массив из 10 элементов случайными числами
отрезке [–5; 5] и находит сумму ненулевых элементов.

«B»: Напишите программу, которая заполняет массив из 10 элементов случайными числами на отрезке [–2; 2] и находит произведение ненулевых элементов.

«C»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [100; 1000] и находит отдельно сумму элементов в первой и во второй половинах массива.

Слайд 143

Подсчёт элементов по условию

Задача. Найти количество чётных элементов массива.

int count = 0;
for(int

Подсчёт элементов по условию Задача. Найти количество чётных элементов массива. int count
i=0; i if( A[i] % 2 == 0 )
count++;
cout << count;

переменная-счётчик

Слайд 144

Среднее арифметическое

Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост в

Среднее арифметическое Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост
см).

int sum = 0;
for(int i=0; i if( A[i] > 180 )
sum += A[i];
cout << sum/N;

нужно считать подходящие элементы
результат может не быть целым числом

Слайд 145

Среднее арифметическое

Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост в

Среднее арифметическое Задача. Найти среднее арифметическое элементов массива, которые больше 180 (рост
см).

int sum = 0, count = 0;
for( int i=0; i if( A[i]>180 ) {
count++;
sum += A[i];
}
cout << float(sum)/count;

или float sum = 0;

Слайд 146

Задачи

«A»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на

Задачи «A»: Напишите программу, которая заполняет массив из 20 элементов случайными числами
отрезке [0; 200] и считает число элементов, которые делятся на 10.

«B»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [0; 200] и считает число двузначных чисел в массиве.

«C»: Напишите программу, которая заполняет массив из 20 элементов случайными числами на отрезке [10; 100] и считает число пар соседних элементов, сумма которых делится на 3.

Слайд 147

Обработка потока данных

Задача. С клавиатуры вводятся числа, ввод завершается числом 0. Определить,

Обработка потока данных Задача. С клавиатуры вводятся числа, ввод завершается числом 0.
сколько было введено положительных чисел.

счётчик = 0;
пока не введён 0:
если введено число > 0 то
счётчик= счётчик + 1

нужен счётчик
счётчик увеличивается если число > 0
нужен цикл
это цикл с условием (число шагов неизвестно)

Слайд 148

Обработка потока данных

int x, count = 0;
cin >> x;
while( x != 0

Обработка потока данных int x, count = 0; cin >> x; while(
) {
if( x > 0 )
count++;
cin >> x;
}
cout << count;

откуда взять x?

Слайд 149

Найди ошибку!

int x, count = 0;
cin >> x;
while( x != 0 )

Найди ошибку! int x, count = 0; cin >> x; while( x

if( x > 0 )
count++;
cin >> x;

}
cout << count;

cin >> x;

Слайд 150

Найди ошибку!

int x, count;
cin >> x;
while( x == 0 ) {
if(

Найди ошибку! int x, count; cin >> x; while( x == 0
x > 0 )
count++;
cin >> x;
}
cout << count;

= 0;

!=

Слайд 151

Обработка потока данных

Задача. С клавиатуры вводятся числа, ввод завершается числом 0. Найти

Обработка потока данных Задача. С клавиатуры вводятся числа, ввод завершается числом 0.
сумму введённых чисел, оканчивающихся на цифру "5".

сумма = 0;
пока не введён 0
если число оканчивается на "5" то
сумма += число

нужна переменная для суммы
число добавляется к сумме, если оно заканчивается на "5"
нужен цикл с условием

if( x % 10 == 5 )

Слайд 152

Обработка потока данных

Задача. С клавиатуры вводятся числа, ввод завершается числом 0. Найти

Обработка потока данных Задача. С клавиатуры вводятся числа, ввод завершается числом 0.
сумму введённых чисел, оканчивающихся на цифру "5".

int x, sum = 0;
cin >> x;
while( x != 0 ) {
if( x % 10 == 5 )
sum += x;
cin >> x;
}
cout << sum;

Слайд 153

Найди ошибку!

int x, sum = 0;
cin >> x;

while( x != 0 )

Найди ошибку! int x, sum = 0; cin >> x; while( x
{
if( x % 10 == 5 )
sum += x;
cin >> x;
}
cout << sum;

cin >> x;

Слайд 154

Задачи

«A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «A»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Определить, сколько получено чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.

Слайд 155

Задачи

«C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём.

Задачи «C»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается
Найти среднее арифметическое всех двузначных чисел, которые делятся на 7.
«D»: На вход программы поступает неизвестное количество целых чисел, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Слайд 156

Перестановка элементов массива

с = a;
a = b;
b = c;

элементы массива:

с = A[i];
A[i]

Перестановка элементов массива с = a; a = b; b = c;
= A[k];
A[k] = c;

Слайд 157

Перестановка пар соседних элементов

Задача. Массив A содержит чётное количество элементов N. Нужно

Перестановка пар соседних элементов Задача. Массив A содержит чётное количество элементов N.
поменять местами пары соседних элементов: первый со вторым, третий — с четвёртым и т. д.

Слайд 158

Перестановка пар соседних элементов

for(int i=0; i поменять местами A[i] и

Перестановка пар соседних элементов for(int i=0; i поменять местами A[i] и A[i+1]
A[i+1]
}

?

выход за границы массива

Слайд 159

Перестановка пар соседних элементов

for( int i=0; i // переставляем

Перестановка пар соседних элементов for( int i=0; i // переставляем A[i] и
A[i] и A[i+1]
int с = A[i];
A[i] = A[i+1];
A[i+1] = c;
}

не выходим за границу

A[0]↔A[1],A[2]↔A[3], …,A[N-2]↔A[N-1]

i+=2

«шагаем» через один

Слайд 160

Реверс массива

Задача. Переставить элементы массива в обратном порядке (выполнить реверс).

A[0]↔A[N-1]
A[1]↔A[N-2]
A[i]↔A[N-1-i]
A[N-1]↔A[0]

0+N-1 =

Реверс массива Задача. Переставить элементы массива в обратном порядке (выполнить реверс). A[0]↔A[N-1]
N-1
1+N-2 = N-1
i+??? = N-1
N-1+0 = N-1

Слайд 161

Реверс массива

for(int i=0; i поменять местами A[i] и A[N+1-i]
}

i=0

i=1

i=2

i=3

;

Реверс массива for(int i=0; i поменять местами A[i] и A[N+1-i] } i=0
i++) {

N/2

Слайд 162

Конец фильма

ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН

Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163,
Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru

Слайд 163

Источники иллюстраций

иллюстрации художников издательства «Бином»
авторские материалы

Источники иллюстраций иллюстрации художников издательства «Бином» авторские материалы