1.17M
Категория: ПрограммированиеПрограммирование

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

1.

1
Программирование
(C++)
§ 17. Введение
§ 18. Линейные программы
§ 19. Ветвления
§ 20. Программирование
циклических алгоритмов
§ 21. Массивы
§ 22. Алгоритмы обработки
массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

2.

2
Программирование
(C++)
§ 17. Введение
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

3.

Программирование (C++), 8 класс
3
Что такое программирование?
Программирование — это создание программ для
компьютеров. Этим занимаются программисты.
Чем занимаются программисты:
анализ задачи (выделение
исходных данных, связей
между ними, этапов решения
задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

4.

Программирование (C++), 8 класс
4
Направления в программировании
системный программист
операционные системы,
утилиты, драйверы
прикладной программист
прикладные программы, в
т.ч. для мобильных
устройств
веб-программист
веб-сайты
программист баз данных
системы управления
базами данных
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

5.

Программирование (C++), 8 класс
5
Простейшая программа на C++
результат – целое
число (integer)
название программы
main – главный
int main()
комментарии после
// не обрабатываются
{
// это основная программа
/* здесь записывают
операторы */
комментарии внутри
}
/* */ не обрабатываются
? Что делает эта программа?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

6.

Программирование (C++), 8 класс
6
Вывод на экран
подключить
библиотеку
iostream
input-output streams –
потоки ввода и
вывода
#include <iostream>
использовать
пространство имён
using namespace std;
std
int main() {
cout << "Привет!"; // вывод текста
cin.get(); // ждать Enter
}
cout — поток для вывода символов
(character output stream)
cin — поток для ввода символов
(character input stream)
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

7.

Программирование (C++), 8 класс
7
Вывод на экран
оператор
вывода
Оператор — это команда
языка программирования.
cout << "Привет!";
cout << "Привет!";
cout << "Вася!";
или так:
cout << "Привет!" << "Вася!";
cout << "Привет, " << "Вася!";
Вася!;
? Что плохо?
К.Ю. Поляков, Е.А. Ерёмин, 2019
! Символьные строки
записывают в кавычках!
http://kpolyakov.spb.ru

8.

Программирование (C++), 8 класс
8
Переход на новую строку
cout << "Привет, Вася!";
cout << "Привет, Петя!";
ожидание:
Привет, Вася!
Привет, Петя!
реальность:
Привет, Вася!Привет, Петя!
перейти
на новую
строку
Решение:
cout << "Привет, Вася!" << endl
endl;
cout << "Привет, Петя!" << endl;
end of line
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

9.

Программирование (C++), 8 класс
9
Системы программирования
Системы программирования — это средства для
создания новых программ.
Транслятор — это программа, которая переводит
тексты программ, написанных программистом, в
машинные коды (команды процессора).
• компилятор — переводит всю программу в
машинные коды, строит исполняемый файл (.exe)
#include <iostream>
using namespace std;
int main() {
cout << "Привет!";
cin.get();
}
1010010100
privet.exe
• интерпретатор — сам выполняет программу по
частям (по одному оператору).
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

10.

Программирование (C++), 8 класс
10
Системы программирования
Отладчик — это программа для поиска ошибок в других
программах.
• пошаговый режим — выполнение программы по
шагам (по одному оператору)
• просмотр значений переменных во время
выполнения программы
• точки останова – операторы в программе, перед
выполнением которых нужно остановиться.
Среда программирования (IDE):
• редактор текста программ
• транслятор
• отладчик
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

11.

Программирование (C++), 8 класс
11
Задачи
«B»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«C»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

12.

12
Программирование
(C++)
§ 18. Линейные программы
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

13.

Программирование (C++), 8 класс
13
Пример задачи
Задача. Ввести два числа и вычислить их сумму.
?
int main()
Выполнится?
{
// ввести два числа
// вычислить их сумму
// вывести сумму на экран
}
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
! Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

14.

Программирование (C++), 8 класс
14
Зачем нужны переменные?
int main()
{
Где запомнить?
// ввести два числа
// вычислить их сумму
// вывести сумму на экран
}
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
int a, b, c;
объявление переменных
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

15.

Программирование (C++), 8 класс
15
Имена переменных
Идентификатор — это имя программы или переменной.
int a, b, c;
МОЖНО использовать
• латинские буквы (A-Z, a-z)
• цифры
!
заглавные и строчные
буквы различаются
Имя не может начинаться с цифры!
• знак подчеркивания _
НЕЛЬЗЯ использовать скобки, знаки ", &, |, *, +, =, !, ? и др.
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

16.

Программирование (C++), 8 класс
16
Типы переменных
• int – целые
int a = 1, b, c = 0;
начальные
значения
• float – вещественные (могут иметь дробную
часть)
float x = 1.234, y = 3.0, z = 0.576;
!
Целая и дробная части отделяются точкой!
• double – вещественное с двойной точностью
• char – один символ (в апострофах)
char c = 'ю';
• string – символьная строка (в кавычках)
string s = "молоко", q = "я";
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

17.

Программирование (C++), 8 класс
17
Работа с переменными
Присваивание (запись значения)
a ←5
a = 5;
оператор
присваивания
a = 5;
a = 18;
? Что будет храниться в a?
Вывод на экран
cout << a;
? В чём разница?
с = 14;
cout << с;
с = 14;
cout << "с";
14
c
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

18.

Программирование (C++), 8 класс
18
Работа с переменными
Изменение значения
i = i + 1;
a = 4;
b = 7;
a = a + 1;
b = b + 1;
a = a + b;
b = b + a;
a = a + 2;
b = b + a;
К.Ю. Поляков, Е.А. Ерёмин, 2019
увеличить на 1
a
4
i ← i + 1
b
7
5
8
13
21
15
36
http://kpolyakov.spb.ru

19.

Программирование (C++), 8 класс
19
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
cin >> a;
5
! 1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

20.

Программирование (C++), 8 класс
20
Ввод с клавиатуры
cin >> a >> b;
через пробел:
25 30
через Enter:
25
30
К.Ю. Поляков, Е.А. Ерёмин, 2019
a 25
b 30
a 25
b 30
http://kpolyakov.spb.ru

21.

Программирование (C++), 8 класс
21
Программа сложения чисел
?
int main()
Что плохо?
{
int a, b, c;
cin >> a >> b; // ввести два числа
c = a + b; // вычислить их сумму
cout << c; // вывести сумму на экран
}
ожидание:
Введите два числа: 5 7
5+7=12
реальность:
5 7
12
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Как улучшить диалог?
http://kpolyakov.spb.ru

22.

Программирование (C++), 8 класс
22
cout <<данных с текстом
значение a
значение b
значение с
5+7=12
текст
cout << a;
cout << "+";
cout << b;
cout << "=";
cout << c;
К.Ю. Поляков, Е.А. Ерёмин, 2019
cout << a << "+"
<< b << "=" << c;
http://kpolyakov.spb.ru

23.

Программирование (C++), 8 класс
23
Программа сложения чисел
int main()
{
int a, b, c;
cout << "Введите два числа: ";
cin >> a >> b;
c = a + b;
cout << a << "+" << b << "=" << c;
}
? Как переделать для 3-х чисел?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

24.

Программирование (C++), 8 класс
24
Задачи
«A»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
«B»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

25.

Программирование (C++), 8 класс
25
Задачи
«C»: Ввести три числа, найти их сумму, произведение
и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

26.

Программирование (C++), 8 класс
26
Арифметические выражения
c b 1
a
d
2
Линейная запись (в одну строку):
a = (c+b-1)/2*d;
Операции: + –
* – умножение
/ – деление
Порядок выполнения операций:
1) действия в скобках
2) умножение и деление, слева направо
3) сложение и вычитание, слева направо
6
5
2
1
3
4
a = c + (1 – 2 * b) / 2 * d;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

27.

Программирование (C++), 8 класс
27
Сокращённая запись операций
Полная запись:
a = a + b;
a = a + 1;
a = a - b;
a = a - 1;
a = a * b;
a = a / b;
К.Ю. Поляков, Е.А. Ерёмин, 2019
Сокращённая запись:
a += b;
a += 1; a++;
a -= b;
a -= 1; a--;
a *= b;
a /= b;
http://kpolyakov.spb.ru

28.

Программирование (C++), 8 класс
28
Особенность деления
int a = 7, b = 8;
float x = a / b;
!
? Чему равен x?
Результат деления целого числа на целое –
это целое число (остаток отбрасывается)!
int a = 3, b = 4;
float x;
x = a / b;
x = 10 / b;
x = a / 2;
x = 10. / b;
x = a / 2.;
x = float(a) / b;
К.Ю. Поляков, Е.А. Ерёмин, 2019
// 0
// 2
// 1
// 2.5
// 1.5
// 0.75
http://kpolyakov.spb.ru

29.

Программирование (C++), 8 класс
29
Частное и остаток при делении целых
/ – деление нацело (остаток отбрасывается)
% – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
int t, m, s;
t = 175;
m = t / 60; // 2
s = t % 60; // 55
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

30.

Программирование (C++), 8 класс
30
Частное и остаток при делении целых
? Что получится?
n = 123
d = n / 10; // 12
k = n % 10; // 3
При делении на 10 нацело отбрасывается последняя
цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

31.

Программирование (C++), 8 класс
31
Форматирование вывода
int a = 1, b = 2, c = 3;
cout << a << b << c;
123
cout << a << " "
<< b << " " << c;
#include <iomanip>
...
количество знаков
на вывод числа
cout << a
<< setw(3) << b
<< setw(5) << c;
1 2 3
1
2
3
3
5
? Сколько знаков для вывода a?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

32.

Программирование (C++), 8 класс
32
Задачи
«A»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в минутах и секундах.
Пример:
Введите число секунд: 175
2 мин. 55 с.
«B»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в часах, минутах и
секундах.
Пример:
Введите число секунд: 8325
2 ч. 18 мин. 45 с
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

33.

Программирование (C++), 8 класс
33
Задачи
«С»: Занятия в школе начинаются в 8-30. Урок длится 45
минут, перерывы между уроками – 10 минут. Ввести
номер урока и вывести время его окончания.
Пример:
Введите номер урока: 6
13-50
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

34.

Программирование (C++), 8 класс
34
Форматный вывод
float x = 12.34567891;
cout << x;
вариант:
12.3457
6 значащих цифр
по умолчанию
#include <iomanip>
манипуляторы
cout << fixed << setw(10)
<< setprecision(3) << x;
3
12.346
в дробной
части
10
всего на
число
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

35.

Программирование (C++), 8 класс
35
Форматный вывод
float x = 12.34567891;
cout << fixed;
cout << setw(8) << setprecision(2)
<< x;
12.34
cout << setw(2) << setprecision(2)
<< x;
12.34
cout << setw(0) << setprecision(1)
<< x;
12.3
минимально
возможное
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

36.

Программирование (C++), 8 класс
36
Научный формат чисел
float x = 123456789;
cout << x;
1.23457e+08
1,23457 108
float x = 0.0000123456789;
cout << x;
1.23457e-005
1,23457 10–5
float x = 0.0000123456789;
3
cout << scientific
1.235e-05
<< setw(10)
<< setprecision(3)
10
<< x;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

37.

Программирование (C++), 8 класс
37
Операции с вещественными числами
int – целая часть числа (дробная часть
отбрасывается)
round – округление к ближайшему целому
ceil – округление «вверх»
#include <cmath>
float x = 1.6;
cout << int(x);
1
cout << round(x);
2
cout << ceil(x);
2
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

38.

Программирование (C++), 8 класс
38
Операции с вещественными числами
sqrt – квадратный корень
float x = 2.25;
cout << sqrt(x);
К.Ю. Поляков, Е.А. Ерёмин, 2019
1.5
http://kpolyakov.spb.ru

39.

Программирование (C++), 8 класс
39
Операции с вещественными числами
1/3 = 0,33333…
бесконечно много знаков
! Большинство вещественных чисел хранятся в
памяти компьютера с ошибкой!
float x, y, z;
x = 1./2;
y = 1./3;
z = 5./6; // 5/6=1/2+1/3
cout << x+y-z;
5.96046e-08
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

40.

Программирование (C++), 8 класс
40
Задачи
«A»: Ввести число, обозначающее размер одной
фотографии в Мбайтах. Определить, сколько
фотографий поместится на флэш-карту объёмом
2 Гбайта.
Пример:
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

41.

Программирование (C++), 8 класс
41
Задачи
«B»: Оцифровка звука выполняется в режиме стерео с
частотой дискретизации 44,1 кГц и глубиной
кодирования 24 бита. Ввести время записи в
минутах и определить, сколько Мбайт нужно
выделить для хранения полученного файла
(округлить результат в большую сторону).
Пример:
Введите время записи в минутах: 10
Размер файла 152 Мбайт
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

42.

Программирование (C++), 8 класс
42
Задачи
«С»: Разведчики-математики для того, чтобы опознать
своих, используют числовые пароли. Услышав
число-пароль, разведчик должен возвести его в
квадрат и сказать в ответ первую цифры дробной
части полученного числа. Напишите программу,
которая по полученному паролю (вещественному
числу) вычисляет число-ответ.
Пример:
Введите пароль: 1.92
Ответ: 6
потому что 1,922 = 3,6864…, первая цифра
дробной части – 6
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

43.

Программирование (C++), 8 класс
43
Случайные и псевдослучайные числа
Случайные явления
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

44.

Программирование (C++), 8 класс
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
зерно
8 1 4 7 0
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

45.

Программирование (C++), 8 класс
45
Датчик случайных чисел
#include <cstdlib>
#include <ctime>
random – случайный
32767 (?)
int main()
{
srand (time(NULL));
int n, K;
n = rand();
// отрезок [0; RAND_MAX]
K = rand() % 6; // отрезок [0; 6]
int a = 1, b = 6;
int M = rand() % (b-a+1) + a; // [a,b]
? Как получить число на [a; b]?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

46.

Программирование (C++), 8 класс
46
Случайные числа на отрезке
?
Какое число получим?
int K, L;
K = rand() % 6;
// отрезок [0,5]
L = rand() % 6 + 1; // отрезок [1,6]
? Как получить число на [a; b]?
int a = 1, b = 6;
int M = rand() % (b-a+1) + a; // [a,b]
[0; b-a]
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

47.

Программирование (C++), 8 класс
47
Случайные вещественные числа
float a = -10, b = 10;
float X = rand()/RAND_MAX;
// 0 или 1!
[0; RAND_MAX]
? Какое число получим?
X = 1.*rand()/RAND_MAX; // [0; 1]
X = float(b-a)*rand()/RAND_MAX; // [0; b-a]
Вещественные числа на [a, b]:
X = float(b-a)*rand()/RAND_MAX + a;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

48.

Программирование (C++), 8 класс
48
Задачи
«A»: В игре «Русское лото» из мешка случайным
образом выбираются бочонки, на каждом из которых
написано число от 1 до 90. Напишите программу,
которая выводит наугад первые 5 выигрышных
номеров.
«B»: + Доработайте программу «Русское лото» так,
чтобы все 5 значений гарантированно были бы
разными (используйте разные диапазоны).
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

49.

Программирование (C++), 8 класс
49
Задачи
«С»: + Игральный кубик бросается три раза (выпадает
три случайных значения). Из этих чисел
составляется целое число, программа должна найти
его квадрат.
Пример:
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

50.

Программирование (C++), 8 класс
50
Задачи
«D»: + Получить случайное трёхзначное число и вывести
в столбик его отдельные цифры.
Пример:
Получено число 123
сотни: 1
десятки: 2
единицы: 3
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

51.

51
Программирование
(C++)
§ 19. Ветвления
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

52.

Программирование (C++), 8 класс
52
Выбор наибольшего из двух чисел
полная
форма
ветвления
начало
ввод a,b
да
a > b?
M = a
нет
M = b
if( a > b )
M = a;
else
M = b;
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Если a = b?
http://kpolyakov.spb.ru

53.

Программирование (C++), 8 класс
53
Вариант 1. Программа
int main()
{
int a, b, M;
cout << "Введите два целых числа:";
полная форма
cin >> a >> b;
условного
if( a > b )
оператора
M = a;
else
M = b;
cout << "Наибольшее число " << M;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

54.

Программирование (C++), 8 класс
54
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M =a
да
b > a?
нет
неполная
форма
ветвления
M =b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

55.

Программирование (C++), 8 класс
55
Вариант 2. Программа
int main()
{
int a, b, M;
cout << "Введите два целых числа: ";
cin >> a << b;
неполная
форма
M = a;
условного
if( b > a )
оператора
M = b;
cout << "Наибольшее число " << M;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

56.

Программирование (C++), 8 класс
56
Примеры
Поиск минимального:
if( a < b )
M = a;
if( b < a )
M = b;
? Что плохо?
? Когда работает неверно?
? Что делает эта программа?
if( a < b )
{
c = a;
a = b;
b = c;
}
составной
оператор
! Составной оператор (блок) в
фигурных скобках!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

57.

Программирование (C++), 8 класс
57
В других языках программирования
Python:
Паскаль:
if a < b:
c = a
a = b
b = c
if a < b then begin
c = a;
a = b;
b = c;
end;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

58.

Программирование (C++), 8 класс
58
Вложенные условные операторы
Задача. В переменной a записан возраст Антона, а в
переменной b – возраст Бориса. Определить, кто из
них старше.
? Сколько вариантов ответа?
if( a == b )
вложенный
cout << "Одного возраста";
условный
оператор
else
> bb ))
if( a ==
"Андрей возраста";
старше";
cout << "Одного
else
cout << "Борис старше";
else относится к
ближайшему if(
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

59.

Программирование (C++), 8 класс
59
Задачи
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из
них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

60.

Программирование (C++), 8 класс
60
Задачи
«C»: Ввести последовательно возраст Антона, Бориса и
Виктора. Определить, кто из них старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

61.

Программирование (C++), 8 класс
61
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит").
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
? Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

62.

Программирование (C++), 8 класс
62
Плохое решение
int main()
{
int v;
cout << "Введите ваш возраст";
cin >> v;
вложенный
if( v >= 25 )
условный
оператор
if( v <= 40 )
cout << "Подходит!";
else
cout <<"Не подходит.";
else
cout <<"Не подходит.";
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

63.

Программирование (C++), 8 класс
63
Хорошее решение (операция «И»)
int main()
{
int v;
cout << "Введите ваш возраст";
cin >> v;
if( v >= 25 and v <= 40 )
cout << "Подходит!";
сложное
else
условие
cout << "Не подходит.";
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

64.

Программирование (C++), 8 класс
64
Примеры
Задача. Вывести "Да", если число в переменной a –
двузначное.
if( 10 <= a and a <= 99 )
cout << "Да";
Задача. Вывести "Да", если число в переменной a –
двузначное и делится на 7.
if( 10 <= a and a <= 99
and a % 7 == 0 )
cout << "Да";
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

65.

Программирование (C++), 8 класс
65
Сложные условия
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if( d == 1 or d == 4 )
cout << "Летает";
else
cout << "Не летает";
К.Ю. Поляков, Е.А. Ерёмин, 2019
сложное
условие
http://kpolyakov.spb.ru

66.

Программирование (C++), 8 класс
66
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит"). Использовать «ИЛИ».
if( v < 25 ???
or v > 40 )
cout << "Не подходит!";
else
cout << "Подходит.";
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

67.

Программирование (C++), 8 класс
67
Простые и сложные условия
Простые условия (отношения)
<
<=
>
>=
==
равно
!=
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• И – одновременное выполнение условий
v >= 25 and v <= 40
• ИЛИ – выполнение хотя бы одного из условий
v < 25 or v > 40
• НЕ – отрицание, обратное условие
v <=
not (v > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

68.

Программирование (C++), 8 класс
68
Порядок выполнения операций
• выражения в скобках
• НЕ (not)
• И (and)
• ИЛИ (or)
4
1
6
2
5
3
if( not(a > 2) or c != 5 and b < a )
{
...
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

69.

Программирование (C++), 8 класс
69
Сложные условия
Истинно или ложно
not (a > b)
Да
Да
(a < b) and (b < c)
(a > c) or (b > c)
Нет
(a < b) and (b > c)
Нет
(a > c) and (b > d)
Нет
b
3
c
4
Да
(a > c) or (b > c) or (b > a)
К.Ю. Поляков, Е.А. Ерёмин, 2019
2
Да
not(a >= b) or (c == d)
(a >= b) or not (c < b)
a
Да
http://kpolyakov.spb.ru

70.

Программирование (C++), 8 класс
70
Задачи
«A»: Напишите программу, которая получает три числа рост трёх спортсменов, и выводит сообщение «По
росту.», если они стоят по возрастанию роста, или
сообщение «Не по росту!», если они стоят не по
росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

71.

Программирование (C++), 8 класс
71
Задачи
«B»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

72.

Программирование (C++), 8 класс
72
Задачи
«C»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

73.

Программирование (C++), 8 класс
73
Логические переменные
bool b;
b = true; // 1
b = false; // 0
только два
возможных
значения
Пример:
bool vyh;
...
vyh = (d == 6) or (d == 7);
...
if( not vyh )
cout << "Рабочий день.";
else
cout << "Выходной!";
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

74.

Программирование (C++), 8 класс
74
Задачи
«A»: Напишите программу, которая получает с
клавиатуры целое число и записывает в логическую
переменную значение «да» (True), если это число
трёхзначное. После этого на экран выводится ответ
на вопрос: «Верно ли, что было получено
трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

75.

Программирование (C++), 8 класс
75
Задачи
«B»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это число – палиндром, то есть читается одинаково
слева направо и справа налево. После этого на
экран выводится ответ на вопрос: «Верно ли, что
введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

76.

Программирование (C++), 8 класс
76
Задачи
«С»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это все его цифры одинаковы. После этого на экран
выводится ответ на вопрос: «Верно ли, что все
цифры введённого числа одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

77.

Программирование (C++), 8 класс
77
Экспертная система
Экспертная система — это компьютерная программа,
задача которой — заменить человека-эксперта при
принятии решений в сложной ситуации.
База знаний = факты + правила writeа:
• если у животного есть перья, то это птица;
• если животное кормит детенышей молоком, то это —
млекопитающее;
• если животное — млекопитающее и ест мясо, то
это — хищник.
Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

78.

Программирование (C++), 8 класс
78
Дерево решений
Кормит детей молоком?
да
нет
Имеет перья?
млекопитающее
Ест мясо?
нет
да
нет
да
?
птица
?
хищник
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

79.

Программирование (C++), 8 класс
79
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
string otvet;
...
cout << "Кормит детей молоком? ";
cin >> otvet;
if( otvet == "да" )
... // вариант 1
else
вариант
... // //
вариант
2 1
cout << "Млекопитающее.";
cout << "Ест мясо? ";
cin >> otvet;
if( otvet == "да" )
cout << "Хищник.";
else
cout << "Не знаю.";
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

80.

Программирование (C++), 8 класс
80
Заглавные и строчные буквы
string otvet;
...
if( otvet == "да" )
...
не сработает
на "Да"
? Как исправить?
if( otvet == "да" or otvet == "Да" )
...
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

81.

81
Программирование
(C++)
§ 23. Отладка программ
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

82.

Программирование (C++), 8 класс
82
Виды ошибок
Синтаксические ошибки – нарушение правил записи
операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная
ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

83.

Программирование (C++), 8 класс
83
Пример отладки программы
Программа решения квадратного уравнения
ax 2 bx c 0
int main()
{
float a, b, c, D, x1, x2;
cout << "Введите a, b, c: ";
cin >> a >> b >> c;
D = b*b - 4*a*a;
x1 = (-b + sqrt(D))/2*a;
x2 = (-b - sqrt(D))/2*a;
cout << "x1=" << x1
<< " x2=" << x2);
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

84.

Программирование (C++), 8 класс
84
Тестирование
Тест 1. a = 1, b = 2, c = 1.
Ожидание:
x1=-1 x2=-1
Реальность:
x1=-1 x2=-1
Тест 2. a = 1, b = – 5, c = 6.
x1=3 x2=2
x1=4.79129 x2=0.208712
Найден вариант, когда программа работает неверно.
Ошибка воспроизводится!
Возможные причины:
• неверный ввод данных
• неверное вычисление дискриминанта
• неверное вычисление корней
• неверный вывод результатов
К.Ю. Поляков, Е.А. Ерёмин, 2019
D b 2 4ac
b D
x1, 2
2a
http://kpolyakov.spb.ru

85.

Программирование (C++), 8 класс
85
Отладочная печать
Идея: выводить все промежуточные результаты.
cin >> a >> b >> c;
cout << a << " " << b << " " << c;
c << endl;
D = b*b - 4*a*a;
D);
cout << "D=" << D
<< endl;
...
Результат:
Введите a, b, c: 1 -5 6
1 -5 6
D=21
D b 2 4ac 25 4 1 6 1
D = b*b - 4*a* с ;
К.Ю. Поляков, Е.А. Ерёмин, 2019
! Одна ошибка найдена!
http://kpolyakov.spb.ru

86.

Программирование (C++), 8 класс
86
Отладка программы
Тест 1. a = 1, b = 2, c = 1.
Ожидание:
x1=-1 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);
2*a;
x2 =(-b-sqrt(D))/(2*a);
2*a;
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Что неверно?
http://kpolyakov.spb.ru

87.

Программирование (C++), 8 класс
87
Задачи
«A»: Загрузите программу, которая должна вычислять сумму
цифр трёхзначного числа:
int N, d1, d2, s;
cin >> "N = ";
cout << N;
d0 = N % 10;
d1 = N % 100;
d2 = N / 100;
d0 + d2 = s
cout << s;
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

88.

Программирование (C++), 8 класс
88
Задачи
«B»: Доработайте программу из п. А так, чтобы она
правильно работала с отрицательными
трёхзначными числами: при вводе числа «–123»
программа должна выдавать ответ 6.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

89.

Программирование (C++), 8 класс
89
Задачи
«С»: Загрузите программу, которая должна вычислять
наибольшее из трёх чисел:
int a, b;
cin >> "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;
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

90.

90
Программирование
(C++)
§ 20. Программирование
циклических алгоритмов
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

91.

Программирование (C++), 8 класс
91
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
cout << "Привет";
cout << "Привет";
cout << "Привет";
cout << "Привет";
cout << "Привет";
? А если 5000?
Цикл «N раз»:
// сделай 5 раз
cout << "Привет";
! В C++ нет такого цикла!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

92.

Программирование (C++), 8 класс
92
Как организовать цикл?
! Нужно запоминать, сколько раз цикл уже выполнен!
ещё не делали
// счётчик = 0
// пока счётчик < 5
сделали ещё раз
cout << "Привет";
// счётчик = счётчик + 1
int count = 0;
while( count < 5 ) {
cout << "Привет";
count++;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
составной
оператор
http://kpolyakov.spb.ru

93.

Программирование (C++), 8 класс
93
Как организовать цикл?
Идея: запоминать, сколько шагов осталось.
int count = 5;
0 ) {
while( count > ???
cout << "Привет";
???
count--;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

94.

Программирование (C++), 8 класс
94
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while( условие ) {
...
тело цикла
}
? Если условие никогда не станет ложно?
while( 1 ) {
...
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru

95.

Программирование (C++), 8 класс
95
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
123 1 + 2 + 3 = 6
Выделить последнюю цифру числа в переменной N:
d = N % 10;
123 3
Отбросить последнюю цифру числа в переменной N:
N = N / 10;
123 12
Добавить к переменной sum значение переменной d:
sum = sum + d;
или
sum = 6 6 + 4 = 10
d=4
sum += d;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

96.

Программирование (C++), 8 класс
96
Сумма цифр числа
• выделяем последнюю цифру числа (%)
• увеличиваем сумму на значение цифры (sum+=d;)
• отсекаем последнюю цифру числа (/)
N
d
123
sum
0
12
3
3
1
2
5
0
1
6
К.Ю. Поляков, Е.А. Ерёмин, 2019
начальные значения
http://kpolyakov.spb.ru

97.

Программирование (C++), 8 класс
97
Сумма цифр числа
начало
обнулить
сумму
ввод N
sum = 0;
N != 0?
да
d = N % 10;
sum += d;
N= N / 10;
К.Ю. Поляков, Е.А. Ерёмин, 2019
выполнять
"пока N != 0"
нет
вывод sum
конец
http://kpolyakov.spb.ru

98.

Программирование (C++), 8 класс
98
Сумма цифр числа
, N1
int main() {
int N, d, sum;
cout << "Введите целое число";
cin >> N;
sum = 0; N1= N;
while( N != 0 ) {
d = N % 10;
sum += d;
N= N / 10;
}
? Что плохо?
cout << "Сумма цифр числа " << N1
N
<< " равна" << sum;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

99.

Программирование (C++), 8 класс
99
Задачи
«A»: Напишите программу, которая получает с
клавиатуры количество повторений и выводит
столько же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько раз в его десятичной записи встречается
цифра 1.
Пример:
Введите число? 311
Единиц: 2
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

100.

Программирование (C++), 8 класс
100
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит
наибольшую цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его десятичной записи одинаковые цифры,
стоящие рядом.
Пример:
Введите число: 553
Введите число: 535
Ответ: да.
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

101.

Программирование (C++), 8 класс
101
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух
натуральных чисел.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(a,b)= НОД(a-b, b)
= НОД(a, b-a)
Евклид
(365-300 до. н. э.)
Пример:
НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)
= НОД (7, 7) = 7
много шагов при большой разнице чисел:
НОД (1998, 2) = НОД (1996, 2) = … = 2
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

102.

Программирование (C++), 8 класс
102
Алгоритм Евклида
начало
a == b?
да
конец
нет
нет
b=b-a;
К.Ю. Поляков, Е.А. Ерёмин, 2019
a > b?
да
a=a-b;
http://kpolyakov.spb.ru

103.

Программирование (C++), 8 класс
103
Алгоритм Евклида
while( a != b )
if( a > b )
a = a – b;
else
b = b – a;
? Где будет НОД? Как его вывести?
? Как вывести НОД в формате НОД(14,21) = 7?
? А без дополнительных переменных?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

104.

Программирование (C++), 8 класс
104
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления
большего на меньшее до тех пор, пока меньшее не
станет равно нулю. Тогда большее — это НОД.
НОД(a,b)= НОД(a%b, b)
= НОД(a, b%a)
Пример:
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

105.

Программирование (C++), 8 класс
105
Модифицированный алгоритм
while( a != 0 and b != 0)
if( a > b )
a = a % b;
else
b = b % a;
? Где будет НОД? Как его вывести?
if( a != 0 )
cout << a;
else
cout << b;
К.Ю. Поляков, Е.А. Ерёмин, 2019
a+b ;
cout << ???
http://kpolyakov.spb.ru

106.

Программирование (C++), 8 класс
106
В других языках программирования
Python:
Паскаль:
while a!=0 and b!=0:
if a > b:
a = a % b
else:
b = b % a
while(a<>0 and b<>0) do
if( a > b )
a = a mod b;
else
b = b mod a
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

107.

Программирование (C++), 8 класс
107
Задачи
«A»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7
«B»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью модифицированного алгоритма
Евклида. Заполните таблицу:
a
64168
358853
6365133
17905514
549868978
b
82678
691042
11494962
23108855
298294835
НОД(a,b)
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

108.

Программирование (C++), 8 класс
108
Задачи
«C»: Ввести с клавиатуры два натуральных числа и сравнить
количество шагов цикла для вычисления их НОД с
помощью обычного и модифицированного алгоритмов
Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

109.

Программирование (C++), 8 класс
109
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
положительных чисел.
1) нужен счётчик
2) счётчик увеличивается еслиКогда
числоувеличивать
>0
счётчик?
3) нужен цикл
4) это цикл с условием (число шагов неизвестно)
Какой цикл?
?
?
счётчик = 0;
пока не введён 0:
если введено число > 0 то
счётчик= счётчик + 1
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

110.

Программирование (C++), 8 класс
110
Обработка потока данных
int x, count = 0;
cin >> x;
откуда взять x?
while( x != 0 ) {
if( x > 0 )
count++;
cin >> x;
}
? Что плохо?
cout << count;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

111.

Программирование (C++), 8 класс
111
Найди ошибку!
int x, count = 0;
cin >> x;
while( x != 0 )
if( x > 0 )
count++;
cin >> x;
}
cout << count;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

112.

Программирование (C++), 8 класс
112
Найди ошибку!
int x, count;= 0;
cin >> x;
while( x !=
== 0 ) {
if( x > 0 )
count++;
cin >> x;
}
cout << count;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

113.

Программирование (C++), 8 класс
113
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
1) нужна переменная для суммы
2) число добавляется к сумме, если оно
заканчивается на "5"
3) нужен цикл с условием
сумма = 0;
? Как это записать?
пока не введён 0
если число оканчивается на "5" то
сумма += число
if( x % 10 == 5 )
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

114.

Программирование (C++), 8 класс
114
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
int x, sum = 0;
cin >> x;
while( x != 0 ) {
if( x % 10 == 5 )
sum += x;
cin >> x;
}
cout << sum;
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Чего не хватает?
http://kpolyakov.spb.ru

115.

Программирование (C++), 8 класс
115
Найди ошибку!
int x, sum = 0;
cin
>> x;
while(
x != 0 ) {
if( x % 10 == 5 )
sum += x;
cin >> x;
}
cout << sum;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

116.

Программирование (C++), 8 класс
116
Задачи
«A»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

117.

Программирование (C++), 8 класс
117
Задачи
«C»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти среднее арифметическое всех двузначных
чисел, которые делятся на 7.
«D»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

118.

Программирование (C++), 8 класс
118
Цикл с постусловием
• условие проверяется после завершения очередного
шага цикла
• цикл всегда выполняется хотя бы один раз
• как только условие становится истинным, работа
цикла заканчивается
начало
do {
cout << "Введите N>0: ";
cin >> N;
}
while( N <= 0 );
N
да
N 0?
нет
конец
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

119.

Программирование (C++), 8 класс
119
Задачи
«A»: Напишите программу, которая предлагает ввести
пароль (число) и не переходит к выполнению
основной части, пока не введён правильный пароль.
Основная часть – вывод на экран «секретных
сведений».
«B»: Напишите программу, которая получает с
клавиатуры натуральное число, которое больше 1, и
определяет, простое оно или нет. Для этого нужно
делить число на все натуральные числа, начиная с
2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с
клавиатуры два целых числа и вычисляет их
произведение, используя только операции
сложения.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

120.

Программирование (C++), 8 класс
120
Задачи
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и вычисляет целый
квадратный корень из него – наибольшее число,
квадрат которого не больше данного числа.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

121.

Программирование (C++), 8 класс
121
Цикл по переменной
Задача. Вывести на экран степени числа 2 от 21 до 210.
k = 1;
Работа с k в трёх местах!
!
N = 2;
Идея:
while( k <= 10 )
собрать всё вместе.
{
cout << N << " ";
N = N*2;
N = 2;
k++;
for( k=1; k<=10; k++ )
}
{
cout << N << " ";
N = N*2;
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

122.

Программирование (C++), 8 класс
122
Цикл по переменной
Задача. Найти сумму чисел от 1 до 1000.
int sum = 0;
for( int i=1; i<=1000; i++ )
sum += i;
переменная
нужна только
в цикле
Задача. Вывести квадраты чисел от 10 до 1 по убыванию.
for( int k=10; k>=1; k-- )
cout << k*k << endl;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

123.

Программирование (C++), 8 класс
123
Цикл по переменной
Задача. Найти сумму чётных чисел от 2 до 1000.
int sum = 0;
for( int i=2; i<=1000; i++ )
if( i % 2 == 0 )
sum += i;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

124.

Программирование (C++), 8 класс
124
В других языках программирования
Python:
диапазон [1;1001)
Sum = 0
for i in range(1, 1001):
Sum += i
Паскаль:
var sum, i: integer;
sum := 0;
for i:=1 to 1000 do
sum := sum + i;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

125.

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

126.

126
Программирование
(C++)
§ 21. Массивы
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

127.

Программирование (C++), 8 класс
127
Что такое массив?
? Как ввести 10000 переменных?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя.
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

128.

Программирование (C++), 8 класс
128
Выделение памяти (объявление)
! Массив = таблица!
количество
элементов
начальные
значения
int A[5] = {1, 2, 0, 8, 5};
остальные float V[6] = {1.2, 4.3};
нули
const int N = 10;
int A[N];
? Зачем?
размер через
константу
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

129.

Программирование (C++), 8 класс
129
Обращение к элементу массива
Индекс элемента — это значение, которое указывает на
конкретный элемент массива.
A
НОМЕР (ИНДЕКС)
массив
0
1
5
10
A[0]
22
15
15
3
4
20
25
A[1] ЗНАЧЕНИЕ
A[2]
A[3]
A[4]
элемента массива
ЗНАЧЕНИЕ
элемента
массива: 10
К.Ю. Поляков, Е.А. Ерёмин, 2019
A[2]
НОМЕР
(ИНДЕКС)
элемента
массива: 2
http://kpolyakov.spb.ru

130.

Программирование (C++), 8 класс
130
Что неправильно?
int A[10];
...
A[5] = 4.5;
A[15] = 8;
A[1] = "Вася";
дробная часть
будет отброшена!
за границами
массива!
недопустимый тип
данных!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

131.

Программирование (C++), 8 класс
131
Обращение к элементу массива
0
1
2
3
4
23
12
7
43
51
int i = 2;
A[2]= A[i-1] + 2*A[i] + A[2*i];
cout << A[i] + A[i+2];
? Что получится?
A[2]= A[1] + 2*A[2] + A[4];
cout << A[2] + A[4];
К.Ю. Поляков, Е.А. Ерёмин, 2019
77
128
http://kpolyakov.spb.ru

132.

Программирование (C++), 8 класс
132
Что неверно?
int A[5] = {1, 2, 3, 4, 5};
int x = 2;
cout << A[-1];
cout << A[x-3];
A[6]=A[1]+A[4];
A[x+4]=A[x-1]+A[2*x];
? Что плохо?
Выход за границы массива — это обращение к
элементу с индексом, который не существует в
массиве.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

133.

Программирование (C++), 8 класс
133
Перебор элементов массива
const int N = 10;
int A[N];
Перебор элементов: просматриваем все элементы
массива и, если нужно, выполняем с каждым из них
некоторую операцию.
for( int i=0; i<N; i++ ) {
// здесь работаем с A[i]
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

134.

Программирование (C++), 8 класс
134
Заполнение массива
for( int i=0; i<N; i++ )
A[i] = i;
? Что произойдёт?
В развёрнутом виде
A[0]= 0;
A[1]= 1;
A[2]= 2;
...
A[N-1]= N-1;
? Как заполнить с 1?
К.Ю. Поляков, Е.А. Ерёмин, 2019
0
1
2
N-1
...
A[i] = i+1;
http://kpolyakov.spb.ru

135.

Программирование (C++), 8 класс
135
Заполнение массива в обратном порядке
N

3
2
A[0]= N;
A[1]= N-1;
A[2]= N-2;
...
A[N]= 1;
? Как меняется X?
1
X = N;
for(int i=0; i<N; i++){
A[i]= X;
X = X – 1;
}
}
X = N, N-1, …, 2, 1
начальное
значение
К.Ю. Поляков, Е.А. Ерёмин, 2019
уменьшение
на 1
http://kpolyakov.spb.ru

136.

Программирование (C++), 8 класс
136
Заполнение массива в обратном порядке
N

3
2
1
A[i]= X;
? Как связаны i и X?
+1
i
0
1
2
...
N-1
X
N
N-1
N-2
...
1
–1
for(int i=0; i<N; i++)
A[i]= N – i;
! Сумма i и X не меняется!
К.Ю. Поляков, Е.А. Ерёмин, 2019
i + X = N
X = N - i
http://kpolyakov.spb.ru

137.

Программирование (C++), 8 класс
137
Вывод массива на экран
for(int i=0; i<N; i++)
cout << A[i]; << " ";
или так:
for(int i=0; i<N; i++)
cout << A[i] << endl;
? Что плохо?
интервал между
значениями
в столбик
или так:
cout << "[";
for(int i=0; i<N; i++)
cout << A[i] << ",";
cout << "]";
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Как убрать?
[1,2,3,4,5,]
http://kpolyakov.spb.ru

138.

Программирование (C++), 8 класс
138
Ввод с клавиатуры
for(int i=0; i<N; i++)
cin >> A[i];
С подсказкой для ввода:
for(int i=0; i<N; i++) {
cout << "A[",i,"]=";
cin >> A[i];
}
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Что плохо?
A[1] = 5
A[2] = 12
A[3] = 34
A[4] = 56
A[5] = 13
http://kpolyakov.spb.ru

139.

Программирование (C++), 8 класс
139
В других языках программирования
Python:
A = [0]*N
for i in range(N):
A[i] = i + 1
print(A)
! Нумерация элементов
всегда с нуля!
Паскаль:
var A: array[0..N-1] of integer;
var i: integer;
for i:=0 to N-1 do
Нумерация элементов
A[i]:= i + 1;
с любого значения!
for i:=0 to N-1 do
write( A[i], " " );
!
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

140.

Программирование (C++), 8 класс
140
Задачи
«A»: а) Заполните все элементы массива из 10
элементов значением X , введённым с клавиатуры.
б) Заполните массив из 10 элементов
последовательными натуральными числами,
начиная с X (значение X введите с клавиатуры).
«B»: а) Заполните массив из 10 элементов натуральными
числами в порядке убывания. Значение X вводится с
клавиатуры. Последний элемент должен быть равен
X, предпоследний равен X+1 и т.д.
б) Заполните массив из 10 элементов степенями числа
2 (от 21 до 2N), так чтобы первый элемент был равен
2, второй – 4, третий – 8 и т.д.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

141.

Программирование (C++), 8 класс
141
Задачи
«C»: а) Заполните массив из 10 элементов степенями
числа 2, начиная с конца, так чтобы последний
элемент массива был равен 1, а каждый
предыдущий был в 2 раза больше следующего.
б) С клавиатуры вводится целое число X. Заполните
массив из 11 элементов целыми числами, так чтобы
средний элемент массива был равен X, слева от
него элементы стояли по возрастанию, а справа – по
убыванию. Соседние элементы отличаются на
единицу. Например,
при X = 3 массив из 5 элементов заполняется так: 1
2 3 2 1.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

142.

Программирование (C++), 8 класс
142
Заполнение случайными числами
#include <random>
Какой отрезок?
...
for(int i=0; i<N; i++){
A[i] = 20 + rand() % 81;
cout << A[i] << " ";
}
сразу вывод на
экран
?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

143.

Программирование (C++), 8 класс
143
Задачи-2
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[0,10], выводит его на экран, а затем выводит на
экран квадраты всех элементов массива.
Пример:
Массив: 5 6 2 3 1 4 8 7
Квадраты: 25 36 4 9 1 16 64 49
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[100,300] и выводит его на экран. После этого на экран
выводятся средние цифры (число десятков) всех
чисел, записанных в массив.
Пример:
Массив: 142 324 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

144.

Программирование (C++), 8 класс
144
Задачи-2
«C»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[100,500] и выводит его на экран. После этого на экран
выводятся суммы цифр всех чисел, записанных в
массив.
Пример:
Массив: 162 425 340 128 278 195 326 414 312 177
Суммы цифр: 9 11 7 11 17 15 11 9 6 15
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

145.

145
Программирование
(C++)
§ 22. Алгоритмы обработки
массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

146.

Программирование (C++), 8 класс
146
Сумма элементов массива
Задача. Найти сумму элементов массива.
const int N = 10;
int A[N] = {}; // все нули
? Какие переменные
нужны?
5
int sum = 0;
for(int i=0; i<N; i++)
sum += A[i];
cout << sum;
К.Ю. Поляков, Е.А. Ерёмин, 2019
2
8
3
i
sum
0
1
2
3
5
7
15
4
5
18
19
1
http://kpolyakov.spb.ru

147.

Программирование (C++), 8 класс
147
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
? Что делаем с нечётными?
int sum = 0;
for(int i=0; i<N; i++)
mod
2 =0 0) )
if(
==
sum=A[i]
sum %
+ 2
A[i];
coutsum
<< +=
sumA[i];
);
cout << sum;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

148.

Программирование (C++), 8 класс
148
Задачи
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–5; 5]
и находит сумму положительных элементов.
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–2; 2]
и находит произведение ненулевых элементов.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке
[100; 1000] и находит отдельно сумму элементов в
первой и во второй половинах массива.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

149.

Программирование (C++), 8 класс
149
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
? Какие переменные нужны?
int count = 0;
for(int i=0; i<N; i++)
if( A[i] % 2 == 0 )
count++;
cout << count;
К.Ю. Поляков, Е.А. Ерёмин, 2019
переменнаясчётчик
? Что тут делаем?
http://kpolyakov.spb.ru

150.

Программирование (C++), 8 класс
150
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
int sum = 0;
for(int i=0; i<N; i++)
if( A[i] > 180 )
sum += A[i];
cout << sum/N;
? Что плохо?
• нужно считать
подходящие элементы
• результат может не быть
целым числом
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

151.

Программирование (C++), 8 класс
151
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
? Какие переменные нужны?
int sum = 0, count = 0;
for( int i=0; i<N; i++ )
if( A[i]>180 ) {
count++;
Что тут делаем?
?
sum += A[i];
}
cout << float(sum)/count;
или float sum = 0;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

152.

Программирование (C++), 8 класс
152
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0;
200] и считает число элементов, которые делятся на
10.
«B»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0; 200]
и считает число двузначных чисел в массиве.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [10;
100] и считает число пар соседних элементов, сумма
которых делится на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

153.

Программирование (C++), 8 класс
153
Перестановка элементов массива
? Как поменять местами значения двух
переменных a и b?
вспомогательная
переменная
элементы массива:
с = a;
a = b;
b = c;
с = A[i];
A[i] = A[k];
A[k] = c;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

154.

Программирование (C++), 8 класс
154
Перестановка пар соседних элементов
Задача. Массив A содержит чётное количество
элементов N. Нужно поменять местами пары соседних
элементов: первый со вторым, третий — с четвёртым
и т. д.
1
2
3
4
7
12
38
5
1
2
3
4
12
7
5
38
К.Ю. Поляков, Е.А. Ерёмин, 2019


N-1
N
40
23
N-1
N
23
40
http://kpolyakov.spb.ru

155.

Программирование (C++), 8 класс
155
Перестановка пар соседних элементов
for(int i=0; i<N; i++) {
поменять местами A[i] и A[i+1]
}
Что плохо?
0
1
2
3
?
4
5
7
12
38
5
40
23
12
7
38
5
40
23
12
38
7
5
40
выход
23 за границы
массива
12
38
5
7
40
23
12
38
5
40
7
23
12
38
5
40
23
7
К.Ю. Поляков, Е.А. Ерёмин, 2019
?
http://kpolyakov.spb.ru

156.

Программирование (C++), 8 класс
156
Перестановка пар соседних элементов
не выходим за
границу
«шагаем» через
один
i+=2 ) {
for( int i=0; i<N-1; i+=2
// переставляем 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]
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

157.

Программирование (C++), 8 класс
157
Реверс массива
Задача. Переставить элементы массива в обратном
порядке (выполнить реверс).
0
1
2
7
12
5
0
1
2
23
40
38
A[0] A[N-1]
A[1] A[N-2]
A[i] A[N-1-i]
A[N-1] A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2019


N-3
N-2
N-1
38
40
23
N-3
N-3
N-1
5
12
7
0+N-1 = N-1
1+N-2 = N-1
i+??? = N-1
N-1+0 = N-1
http://kpolyakov.spb.ru

158.

Программирование (C++), 8 класс
158
Реверс массива
; i++)
N/2i++)
for(int i=0; i<N;
{ {
поменять местами A[i] и A[N+1-i]
}
Что плохо?
?
1
2
3
4
7
12
40
23
i=0
23
12
40
7
i=1
23
40
12
7
i=2
23
12
40
7
i=3
7
12
40
23
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Как исправить?
http://kpolyakov.spb.ru

159.

Программирование (C++), 8 класс
159
Задачи
«A»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], поменять местами
пары соседних элементов, не трогая первый и
последний элементы.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 53 88 66 26 39 35 88 38 24 50
«B»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100] и выполнить
циклический сдвиг влево: каждый элемент
перемещается на место предыдущего, а первый – на
место последнего.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 66 88 39 26 88 35 24 38 50 53
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

160.

Программирование (C++), 8 класс
160
Задачи
«C»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], сделать реверс
отдельно в первой и во второй половине массива.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 26 39 88 66 53 50 38 24 35 88
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

161.

Программирование (C++), 8 класс
161
Поиск максимального элемента
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

162.

Программирование (C++), 8 класс
162
Поиск максимального элемента
? Какие переменные нужны?
for( int i=0; i<N; i++ )
if( A[i] > M )
Чего не хватает?
?
M = A[i];
cout << M;
начальное
? Какое
значение взять для M?
1) M – значение, которое заведомо меньше всех
элементов массива
или
2) M = A[0] (или любой другой элемент)
максимальный не меньше, чем A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

163.

Программирование (C++), 8 класс
163
Поиск максимального элемента
начинаем с A[1], так как
A[0] мы уже посмотрели
M = A[0];
for( int i=1; i<N; i++ )
if( A[i] > M )
M = A[i];
cout << M;
? Как найти минимальный?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

164.

Программирование (C++), 8 класс
164
Номер максимального элемента
Задача. Найти в массиве максимальный элемент и его
номер.
? Какие переменные нужны?
int M = A[0];
int nMax = 0;
1;
for( int i=1; i<N; i++ )
if( A[i] > M ) {
M = A[i];
Можно ли убрать одну
?
nMax = i;
переменную?
}
cout << "A[" << nMax << "]=" << M;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

165.

Программирование (C++), 8 класс
165
Номер максимального элемента
! Если знаем nMax, то M=A[nMax]!
int M = A[0];
int nMax = 0;
for( int i=1; i<N; i++ )
if( A[i] > A[nMax]
M ) { ) {
M = A[i];
nMax = i;
}
cout << "A[" << nMax << "]="
;
<< A[nMax]
M;
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

166.

Программирование (C++), 8 класс
166
Максимальный не из всех
Задача. Найти в массиве максимальный из
отрицательных элементов.
M = A[0];
for( int i=1; i<N; i++ )
if( A[i]<0 and A[i]>M )
M = A[i];
Что плохо?
?
cout << M;
1
2
3
4
5
5
–2
8
3
–1
К.Ю. Поляков, Е.А. Ерёмин, 2019
? Как исправить?
M = 5
http://kpolyakov.spb.ru

167.

Программирование (C++), 8 класс
167
Максимальный не из всех
Задача. Найти в массиве максимальный из
отрицательных элементов.
M = A[0];
for( int i=1; i<N; i++ )
if( A[i]<0 )
if( M>=0 or A[i]>M )
M = A[i]; сначала записали
неотрицательный!
cout << M;
? Если нет отрицательных?
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

168.

Программирование (C++), 8 класс
168
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [50;
150] и находит в нём минимальный и максимальный
элементы и их номера.
«B»: Напишите программу, которая заполняет массив
следующим образом:
int A[N]={10,2,3,10,5,6,7,8,9,10};
и выводит количество элементов, имеющих
максимальное значение.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [100;
200] и находит в нём пару соседних элементов,
сумма которых минимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

169.

Программирование (C++), 8 класс
169
Задачи
«D»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [–100;
100] и находит в каждой половине массива пару
соседних элементов, сумма которых максимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

170.

Программирование (C++), 8 класс
170
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru

171.

Программирование (C++), 8 класс
171
Источники иллюстраций
1.
2.
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2019
http://kpolyakov.spb.ru
English     Русский Правила