Программирование (Паскаль)
Программирование (Паскаль)
Что такое программирование?
Направления в программировании
Простейшая программа
Вывод на экран
Переход на новую строку
Системы программирования
Системы программирования
Задачи
Программирование (Паскаль)
Пример задачи
Зачем нужны переменные?
Имена переменных
Работа с переменными
Работа с переменными
Ввод с клавиатуры
Ввод с клавиатуры
Программа сложения чисел
write(данных с текстом
Программа сложения чисел
Задачи
Задачи
Арифметические выражения
Порядок выполнения операций
Частное и остаток
Частное и остаток
Форматный вывод
Задачи
Задачи
Форматный вывод
Научный формат чисел
Операции с вещественными числами
Операции с вещественными числами
Операции с вещественными числами
Задачи
Задачи
Задачи
Случайные и псевдослучайные числа
Случайные и псевдослучайные числа
Датчик случайных чисел
Датчик случайных чисел
Задачи
Задачи
Задачи
Программирование (Паскаль)
Выбор наибольшего из двух чисел
Вариант 1. Программа
Выбор наибольшего из двух чисел-2
Вариант 2. Программа
Примеры
В других языках программирования
Вложенные условные операторы
Задачи
Задачи
Сложные условия
Плохое решение
Хорошее решение (операция «И»)
Примеры
Сложные условия
Ещё пример
Простые и сложные условия
Порядок выполнения операций
Сложные условия
Задачи
Задачи
Задачи
Логические переменные
Задачи
Задачи
Задачи
Экспертная система
Дерево решений
Программирование экспертной системы
Заглавные и строчные буквы
Программирование (Паскаль)
Виды ошибок
Пример отладки программы
Тестирование
Отладочная печать
Отладка программы
Задачи
Задачи
Задачи
Программирование (Паскаль)
Зачем нужен цикл?
Как организовать цикл?
Как организовать цикл?
Цикл с предусловием
Сумма цифр числа
Сумма цифр числа
Сумма цифр числа
Сумма цифр числа
Задачи
Задачи
Алгоритм Евклида
Алгоритм Евклида
Алгоритм Евклида
Модифицированный алгоритм Евклида
Модифицированный алгоритм
В других языках программирования
Задачи
Задачи
Обработка потока данных
Обработка потока данных
Задачи
Цикл с постусловием
Задачи
Задачи
Цикл по переменной
Цикл по переменной
Цикл по переменной
В других языках программирования
Задачи
Программирование (Паскаль)
Что такое массив?
Выделение памяти (объявление)
Что неправильно?
Обращение к элементу массива
Обращение к элементу массива
Что неверно?
Перебор элементов массива
Заполнение массива
Заполнение массива в обратном порядке
Заполнение массива в обратном порядке
Вывод массива на экран
Ввод с клавиатуры
В других языках программирования
Задачи
Задачи
Заполнение случайными числами
Задачи-2
Задачи-2
Программирование (Паскаль)
Сумма элементов массива
Сумма не всех элементов массива
Задачи
Подсчёт элементов по условию
Среднее арифметическое
Среднее арифметическое
Задачи
Обработка потока данных
Обработка потока данных
Найди ошибку!
Найди ошибку!
Обработка потока данных
Обработка потока данных
Найди ошибку!
Задачи
Задачи
Перестановка элементов массива
Перестановка пар соседних элементов
Перестановка пар соседних элементов
Перестановка пар соседних элементов
Реверс массива
Реверс массива
Конец фильма
Источники иллюстраций
4.02M
Категория: ПрограммированиеПрограммирование

Программирование (Паскаль). Введение. § 17

1. Программирование (Паскаль)

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

2. Программирование (Паскаль)

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

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

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

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

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

5. Простейшая программа

Программирование (Паскаль), 8 класс
5
Простейшая программа
название программы
program
begin {
{
end. {
qq;
начало программы }
тело программы
}
конец программы }
комментарии внутри {}
не обрабатываются
?
Что делает эта программа?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
6
Вывод на экран
program Hello; оператор
вывода
begin
write('Привет!'); Оператор — это команда
end.
языка программирования.
write('Привет', Вася!);
?
Что плохо?
write('Привет, Вася!');
вся строка в
апострофах
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
7
Переход на новую строку
write('Привет, Вася!');
write('Привет, Петя!');
ожидание:
Привет, Вася!
Привет, Петя!
реальность:
Привет, Вася!Привет, Петя!
решение:
writeln('Привет, Вася!');
writeln('Привет,
Петя!');
ln
и перейти на
новую строку
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
8
Системы программирования
Системы программирования — это средства для
создания новых программ.
Транслятор — это программа, которая переводит
тексты программ, написанных программистом, в
машинные коды (команды процессора).
• компилятор — переводит всю программу в
машинные коды, строит исполняемый файл (.exe)
program Hello;
begin
write('Привет!');
end.
1010010100
privet.exe
• интерпретатор — сам выполняет программу по
частям (по одному оператору).
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

10. Задачи

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

11. Программирование (Паскаль)

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

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

Программирование (Паскаль), 8 класс
12
Пример задачи
Задача. Ввести два числа и вычислить их сумму.
?
program Sum;
Выполнится?
begin
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
!
Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
13
Зачем нужны переменные?
program Sum;
begin
Где запомнить?
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
var a, b, c: integer;
объявление переменных
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

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

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

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

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

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

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

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

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

Программирование (Паскаль), 8 класс
19
Программа сложения чисел
?
program Sum;
Что плохо?
var a, b, c: integer;
begin
read(a, b); { ввести два числа }
c:= a + b; { вычислить их сумму }
write(c) { вывести сумму на экран }
end.
ожидание:
Введите два числа: 5 7
5+7=12
реальность:
5 7
12
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Как улучшить диалог?
http://kpolyakov.spb.ru

20. write(данных с текстом

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

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

Программирование (Паскаль), 8 класс
21
Программа сложения чисел
program Sum;
var a, b, c: integer;
begin
write('Введите два числа: ');
read(a, b);
c:= a + b;
write(a, '+', b, '=', c)
end.
?
Как переделать для 3-х чисел?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

22. Задачи

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

23. Задачи

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

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

Программирование (Паскаль), 8 класс
24
Арифметические выражения
c b 1
a
d
2
Линейная запись (в одну строку):
a:=(c+b-1)/2*d;
Операции: + –
* – умножение
/ – деление
** – возведение в степень (x2 x**2)
var x, a, b: integer;
read(a, b);
x:= aa // bb;
?
Что плохо?
var x: real;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

26. Частное и остаток

Программирование (Паскаль), 8 класс
26
Частное и остаток
div – деление нацело (остаток отбрасывается)
mod – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
var
t:=
m:=
s:=
t, m, s: integer;
175;
t div 60; { 2 }
t mod 60; { 55 }
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

27. Частное и остаток

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

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

Программирование (Паскаль), 8 класс
28
Форматный вывод
var a, b, c: integer;
a:=1; b:=2; c:=3;
write(a, b, c);
123
write(a,' ',b,' ',c);
1 2 3
write(a, b:3, c:5);
1
количество знаков
на вывод числа
?
2
3
3
5
Сколько знаков для вывода a?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

29. Задачи

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

30. Задачи

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

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

Программирование (Паскаль), 8 класс
31
Форматный вывод
вариант:
var x: real;
x:=12.34567891234;
write(x);
12.345679
6
write(x:10:3);
всего на
число
в дробной
части
write(x:8:2);
12.346
по умолчанию
3
10
12.34
write(x:2:2);
12.34
write(x:0:1);
12.3
минимально
возможное
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
32
Научный формат чисел
var x: real;
x:=123456789;
write(x);
var x: real;
x:=0.0000123456789;
write(x);
1.234568e+008
1,234568 108
1.234568e-005
1,234568 10–5
количество знаков
может отличаться
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
33
Операции с вещественными числами
trunc – целая часть числа (дробная часть
отбрасывается)
round – округление к ближайшему целому
frac – дробная часть
x:= 1.6;
write(trunc(x));
1
write(round(x));
2
write(frac(x));
0.6
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

Программирование (Паскаль), 8 класс
35
Операции с вещественными числами
1/3 = 0,33333…
!
бесконечно много знаков
Большинство вещественных чисел хранятся в
памяти компьютера с ошибкой!
var x, y, z: real;
x:= 1/2;
y:= 1/3;
z:= 5/6; { 5/6=1/2+1/3 }
write(x+y-z);
-1.110223e-016
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

36. Задачи

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

37. Задачи

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

38. Задачи

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

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

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

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

Программирование (Паскаль), 8 класс
40
Случайные и псевдослучайные числа
!
Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но
строятся по формуле.
следующее
предыдущее
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
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
41
Датчик случайных чисел
Целые числа на отрезке:
цел K, L
K:= irand(1, 6) | отрезок [0,6]
L:= irand(1, 6) | это уже другое число!
англ. integer – целый
random – случайный
Вещественные числа в полуинтервале:
цел x, y
x:= rand(0, 10) | полуинтервал [0,10)
y:= rand(0, 10) | это уже другое число!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
42
Датчик случайных чисел
Целые числа на отрезке:
random – случайный
var K, L, M: integer;
K:= random(6);
{ отрезок [0,5] }
L:= random(6)+1; { отрезок [1,6] }
M:= random(b-a+1)+a; { отрезок [a,b] }
Вещественные числа в полуинтервале:
var x, y, z, w: real;
x:= random; { полуинтервал [0,1) }
y:= 7*random; { [0,7) }
z:= 7*random + 5; { [5,12) }
w:= (b-a)*random + a; { [a,b) }
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

43. Задачи

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

44. Задачи

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

45. Задачи

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

46. Программирование (Паскаль)

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

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

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

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

Программирование (Паскаль), 8 класс
48
Вариант 1. Программа
program Maximum;
var a, b, M: integer;
begin
writeln('Введите два целых числа');
полная форма
read(a, b);
условного
if a > b then
оператора
M:= a
else
! Перед else не ставится
точка с запятой!
M:= b;
writeln('Наибольшее число ', M);
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

Программирование (Паскаль), 8 класс
50
Вариант 2. Программа
program Maximum2;
var a, b, M: integer;
begin
writeln('Введите два целых числа');
read(a, b);
неполная
форма
M:= a;
условного
if b > a then
оператора
M:= b;
writeln('Наибольшее число ', M);
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

51. Примеры

Программирование (Паскаль), 8 класс
51
Примеры
Поиск минимального:
if a < b then
M:= a;
if b < a then
M:= b;
if a < b then
begin
c:=
c:=a;
a;
a:=
a:=b;
b;
b:=
b:=cc
end;
!
?
Что плохо?
?
Когда работает неверно?
?
Что делает эта программа?
составной
оператор
Перед end можно не ставить
точку с запятой!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
52
В других языках программирования
Python:
С:
if a < b:
c = a
a = b
b = c
if (a
c =
a =
b =
}
К.Ю. Поляков, Е.А. Ерёмин, 2018
< b) {
a;
b;
c;
http://kpolyakov.spb.ru

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

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

54. Задачи

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

55. Задачи

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

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

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

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

Программирование (Паскаль), 8 класс
57
Плохое решение
program Work;
var v: integer;
begin
writeln('Введите ваш возраст');
read(v);
вложенный
if v >= 25 then
условный
оператор
if v <= 40 then
write('Подходит!')
else
write('Не подходит.')
else
write('Не подходит.');
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
58
Хорошее решение (операция «И»)
program Work;
var v: integer;
begin
writeln('Введите ваш возраст');
read(v);
if (v >= 25) and (v <= 40) then
write('Подходит!')
сложное
else
условие
write('Не подходит.');
end.
!
Каждое условие – в скобки!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

59. Примеры

Программирование (Паскаль), 8 класс
59
Примеры
Задача. Вывести 'Да', если число в переменной a –
двузначное.
if (10 <= a) and (a <= 99) then
write('Да');
Задача. Вывести 'Да', если число в переменной a –
двузначное и делится на 7.
if (10 <= a) and (a <= 99)
and (a mod 7 = 0) then
write('Да');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

61. Ещё пример

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

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

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

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

Программирование (Паскаль), 8 класс
63
Порядок выполнения операций
• выражения в скобках
• НЕ (not)
• И (and)
• ИЛИ (or), исключающее ИЛИ (xor)
4
1
6
2
5
3
if not(a > 2) or (c <> 5) and (b < a) then
...
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
64
Сложные условия
Истинно или ложно при a := 2; b := 3; c := 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)
К.Ю. Поляков, Е.А. Ерёмин, 2018
Да
http://kpolyakov.spb.ru

65. Задачи

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

66. Задачи

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

67. Задачи

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

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

Программирование (Паскаль), 8 класс
68
Логические переменные
var b: boolean;
...
b:= True; { 1 }
b:= False; { 0 }
только два
возможных
значения
Пример:
var vyh: boolean;
...
vyh:= (d=6) or (d=7);
...
if not vyh then
write('Рабочий день.')
else
write('Выходной!');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

69. Задачи

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

70. Задачи

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

71. Задачи

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

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

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

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

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

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

Программирование (Паскаль), 8 класс
74
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
var otvet: string;
...
write('Кормит детей молоком? ');
read(otvet);
if otvet = 'да' then
... { вариант 1 }
else
{ вариант
... { вариант
2 }1 }
writeln('Млекопитающее.');
write('Ест мясо? ');
read(otvet);
if otvet = 'да' then
writeln('Хищник.')
else
writeln('Не знаю.');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
75
Заглавные и строчные буквы
var otvet: string;
...
if otvet = 'да' then
...
не сработает
на 'Да'
?
Как исправить?
if (otvet = 'да') or (otvet = 'Да') then
...
Ещё лучше:
if LowerCase(ответ) = 'да' then
...
преобразовать все
заглавные в строчные
if UpperCase(ответ) = 'ДА' then
...
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

76. Программирование (Паскаль)

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

77. Виды ошибок

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

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

Программирование (Паскаль), 8 класс
78
Пример отладки программы
Программа решения квадратного уравнения
ax bx c 0
2
program SqEq;
var a, b, c, D, x1, x2: real;
begin
write('Введите a, b, c: ');
read(a, b, c);
D:=b*b-4*a*a;
x1:=(-b+sqrt(D))/2*a;
x2:=(-b-sqrt(D))/2*a;
writeln('x1=', x1, ' x2=', x2);
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

Программирование (Паскаль), 8 класс
80
Отладочная печать
Идея: выводить все промежуточные результаты.
read(a, b, c);
writeln(a,
' ',
' ',
write(a,
' ',
b,b,
' ',
c,c);
нс
D:=b*b-4*a*a;
writeln('D=',
write('D=', D,D);
нс
...
Результат:
Введите a, b, c: 1 -5 6
1.0 -5.0 6.0
D=21.0
D b 2 4ac 25 4 1 6 1
D:=b*b-4*a* с ;
К.Ю. Поляков, Е.А. Ерёмин, 2018
!
Одна ошибка найдена!
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
81
Отладка программы
Тест 1. a = 1, b = 2, c = 1.
Ожидание:
x1=-1.0 x2=-1.0
Реальность:
x1=-1.0 x2=-1.0
Тест 2. a = 1, b = – 5, c = 6.
x1=3.0 x2=2.0
x1=3.0 x2=2.0
?
Программа работает верно?
Тест 3. a = 8, b = – 6, c = 1.
x1=0.5 x2=0.25
x1=32.0 x2=16.0
(2*a);
x1:=(-b+sqrt(D))/2*a;
x2:=(-b-sqrt(D))/2*a;
(2*a);
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Что неверно?
http://kpolyakov.spb.ru

82. Задачи

Программирование (Паскаль), 8 класс
82
Задачи
«A»: Загрузите программу, которая должна вычислять сумму
цифр трёхзначного числа:
var N, d1, d2, s: integer;
begin
read('N = ');
write(N);
d0:= N mod 10;
d1:= N mod 100;
d2:= N div 100;
d0 + d2 := s
writeln(s);
end.
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

83. Задачи

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

84. Задачи

Программирование (Паскаль), 8 класс
84
Задачи
«С»: Загрузите программу, которая должна вычислять
наибольшее из трёх чисел:
var a, b: integer;
begin
read('a = '); read(a);
write('b = '); write(b);
read('c = '); read(c);
if a > b then M:=a
else M:= b; end;
if c > b then M:= b
else M:= c; end;
writeln(M);
end.
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

85. Программирование (Паскаль)

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

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

Программирование (Паскаль), 8 класс
86
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
?
А если 5000?
Цикл «N раз»:
{ сделай 5 раз }
writeln('Привет');
!
В Паскале нет такого цикла!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
87
Как организовать цикл?
!
Нужно запоминать, сколько раз цикл уже выполнен!
ещё не делали
{счётчик:= 0 }
{пока счётчик < 5 }
сделали ещё раз
writeln('Привет');
{счётчик:= счётчик + 1}
var count: integer;
count:= 0;
while count < 5 do begin
writeln('Привет');
count:= count + 1
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
составной
оператор
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
88
Как организовать цикл?
Идея: запоминать, сколько шагов осталось.
count:= 5;
while count > ???
0 do begin
writeln('Привет');
count:= count ???
- 1
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
89
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while условие do begin
...
тело цикла
end;
?
Если условие никогда не станет ложно?
while True do begin
...
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru

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

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

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

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

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

Программирование (Паскаль), 8 класс
92
Сумма цифр числа
начало
обнулить
сумму
ввод N
sum:= 0
N <> 0?
выполнять
'пока N <> 0'
нет
да
d:= N mod 10;
sum:= sum + d;
N:= N div 10;
К.Ю. Поляков, Е.А. Ерёмин, 2018
вывод sum
конец
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
93
Сумма цифр числа
program SumDigits; , N1
var N, d, sum: integer;
begin
writeln('Введите целое число');
read(N);
sum:= 0; N1:= N;
while N<>0 do begin
d:= N mod 10;
sum:= sum + d;
Что плохо?
N:= N div 10
end;
write('Сумма цифр числа ', N1,
N, ' равна', sum);
end.
?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

94. Задачи

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

95. Задачи

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

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

Программирование (Паскаль), 8 класс
96
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух
натуральных чисел.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(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
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

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

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

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

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

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

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

Программирование (Паскаль), 8 класс
101
В других языках программирования
Python:
while a!=0 and b!=0:
if a > b:
a = a % b
else:
b = b % a
К.Ю. Поляков, Е.А. Ерёмин, 2018
С:
while (a!=0 && b!=0)
{
if (a > b)
a = a % b;
else
b = b % a;
}
http://kpolyakov.spb.ru

102. Задачи

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

103. Задачи

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

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

Программирование (Паскаль), 8 класс
104
Обработка потока данных
Задача. На вход программы поступает поток данных —
последовательность целых чисел, которая
заканчивается нулём. Требуется найти сумму
элементов этой последовательности.
while x<>0 do begin
{ добавить x к сумме }
{ x := следующее число }
end;
?
Откуда возьмётся x в первый раз?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
105
Обработка потока данных
var x, sum: integer;
...
sum:= 0;
read(x); { ввести первое число }
while x<>0 do begin
sum:= sum + x;
read(x); { ввести следующее }
end;
write('Сумма ', sum);
?
Как найти сумму положительных?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

106. Задачи

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

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

Программирование (Паскаль), 8 класс
107
Цикл с постусловием
• условие проверяется после завершения очередного
шага цикла
• цикл всегда выполняется хотя бы один раз
• как только условие становится истинным, работа
цикла заканчивается
начало
repeat
write('Введите N>0: ');
read(N);
until N > 0;
N
нет
условие окончания
работы цикла
N > 0?
да
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

108. Задачи

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

109. Задачи

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

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

Программирование (Паскаль), 8 класс
110
Цикл по переменной
Задача. Вывести на экран степени числа 2 от 21 до 210.
k:= 1;
Работа с k в трёх местах!
!
N:= 2;
Идея: собрать всё вместе.
while k <= 10 do
begin
write(N);
N:= 2;
N:= N*2;
for k:=1 to 10 do
k:= k + 1
begin
end;
writeln(N);
N:= N*2
end;
увеличение на 1
по умолчанию
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
111
Цикл по переменной
Задача. Найти сумму чисел от 1 до 1000.
var sum, i: integer;
...
sum:= 0;
for i:=1 to 1000 do
sum:= sum + i;
Задача. Вывести квадраты чисел от 10 до 1 по убыванию.
for k:=10 downto 1 do
writeln(k*k);
шаг «–1»
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
112
Цикл по переменной
Задача. Найти сумму чётных чисел от 2 до 1000.
sum:= 0;
for i:=1 to 1000 do
if i mod 2 = 0 then
sum:= sum + i;
?
Что плохо?
вспомогательная
переменная
2, 4, 6, …
sum:= 0;
k:= 2;
for i:=1 to 500 do begin
sum:= sum + k; всего 500
чисел
k:= k + 2
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

114. Задачи

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

115. Программирование (Паскаль)

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

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

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

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

Программирование (Паскаль), 8 класс
117
Выделение памяти (объявление)
!
Массив = таблица!
минимальный
индекс
максимальный
индекс
var A: array[1..5] of integer;
V: array[0..5] of real;
Индекс элемента — это значение, которое указывает на
конкретный элемент массива.
? Зачем?
const N = 10;
var A: array[1..N] of integer;
размер через
константу
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
118
Что неправильно?
var A: array[10..1]
[1..10] of integer;
...
A[5] := 4.5;
var A: array[1..10] of integer;
...
A[15] := 'a';
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
119
Обращение к элементу массива
A
массив
1
НОМЕР
элемента массива
(ИНДЕКС)
2
5
10
A[1]
A[2]
33
15
15
4
5
20
25
A[3]
A[4]
ЗНАЧЕНИЕ
A[5]
элемента массива
A[2]
НОМЕР (ИНДЕКС)
элемента массива: 2
ЗНАЧЕНИЕ
элемента массива: 10
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
120
Обращение к элементу массива
1
2
3
4
5
23
12
7
43
51
var i: integer;
i:= 2;
A[3]:= A[i] + 2*A[i-1] + A[2*i];
writeln( A[3]+A[5] );
?
Что получится?
A[3]:= A[2] + 2*A[1] + A[4];
writeln( A[3]+A[5] );
К.Ю. Поляков, Е.А. Ерёмин, 2018
101
152
http://kpolyakov.spb.ru

121. Что неверно?

Программирование (Паскаль), 8 класс
121
Что неверно?
var A: array[1..5] of integer;
x: integer;
Что плохо?
...
x:= 2;
writeln( A[x-3] );
writeln( A[-1] );
A[x+4]:=A[x-1]+A[2*x];
A[6]:=A[1]+A[4];
?
Выход за границы массива — это обращение к
элементу с индексом, который не существует в
массиве.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
122
Перебор элементов массива
const N = 10;
var A: array[1..N] of integer;
Перебор элементов: просматриваем все элементы
массива и, если нужно, выполняем с каждым из них
некоторую операцию.
for i:=1 to N do begin
{ здесь работаем с A[i] }
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
123
Заполнение массива
for i:=1 to N do
A[i]:= i;
?
Что произойдёт?
В развёрнутом виде
A[1]:=
A[2]:=
A[3]:=
...
A[N]:=
1;
2;
3;
1
2
3
...
N
N;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

A[1]:=
A[2]:=
A[3]:=
...
A[N]:=
?
3
2
N;
N-1;
N-2;
1;
1
X:= N;
for i:=1 to N do begin
A[i]:= X;
end;
X:= X - 1
end;
Как меняется X?
X = N, N-1, …, 2, 1
начальное
значение
К.Ю. Поляков, Е.А. Ерёмин, 2018
уменьшение
на 1
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
125
Заполнение массива в обратном порядке
N
?
+1
!

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

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

Программирование (Паскаль), 8 класс
126
Вывод массива на экран
?
for i:=1 to N do
write( A[i] ,);' ');
или так:
for i:=1 to N do
writeln( A[i] );
Что плохо?
интервал между
значениями
в столбик
или так:
write( '[' );
for i:=1 to N do
write( A[i], ',' );
writeln( ']' );
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Как убрать?
[1,2,3,4,5,]
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
127
Ввод с клавиатуры
for i:=1 to N do
read( A[i] );
С подсказкой для ввода:
for i:=1 to N do begin
write( 'A[',i,']=' );
read( A[i] )
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Что плохо?
A[1] = 5
A[2] = 12
A[3] = 34
A[4] = 56
A[5] = 13
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
128
В других языках программирования
Python:
A = [0]*N
for i in range(N):
A[i] = i + 1
print(A)
!
Нумерация элементов
всегда с нуля!
С++:
int A[N], i;
for (i = 0; i < N; i++)
A[i] = i + 1;
for (i = 0; i < N; i++)
cout << A[i] << " ";
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

129. Задачи

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

130. Задачи

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

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

Программирование (Паскаль), 8 класс
131
Заполнение случайными числами
for i:=1 to N do begin
A[i]:=20+random(81);
write(A[i], ' ')
end;
сразу вывод на
экран
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Какой отрезок?
http://kpolyakov.spb.ru

132. Задачи-2

Программирование (Паскаль), 8 класс
132
Задачи-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 224 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

133. Задачи-2

Программирование (Паскаль), 8 класс
133
Задачи-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
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

134. Программирование (Паскаль)

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

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

Программирование (Паскаль), 8 класс
135
Сумма элементов массива
Задача. Найти сумму элементов массива.
const N = 10;
var A: array[1..N] of integer;
?
Какие переменные
нужны?
sum:= 0;
for i:=1 to N do
sum:= sum + A[i];
writeln( sum );
К.Ю. Поляков, Е.А. Ерёмин, 2018
5
2
8
3
i
sum
0
1
2
3
5
7
15
4
5
18
19
1
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
136
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
?
Что делаем с нечётными?
sum:= 0;
for i:=1 to N do
if
A[i]
mod
= 0 then
sum:=
sum
+ 2
A[i];
sum:=sum
sum);
+ A[i];
writeln(
writeln( sum );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

137. Задачи

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

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

Программирование (Паскаль), 8 класс
138
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
?
Какие переменные нужны?
переменнаяvar count: integer;
счётчик
count:= 0;
for i:=1 to N do
if A[i] mod 2 = 0 then
count:= count + 1;
Что тут делаем?
?
writeln( count );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
139
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
sum:= 0;
for i:=1 to N do
if A[i]>180 then
sum:= sum + A[i];
writeln( sum/N );
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Что плохо?
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
140
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
?
Какие переменные нужны?
sum:= 0;
count:= 0;
for i:=1 to N do
if A[i]>180 then begin
count:= count + 1;
sum:= sum + A[i]; ? Что тут делаем?
end;
writeln( sum/count )
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

141. Задачи

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

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

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

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

Программирование (Паскаль), 8 класс
143
Обработка потока данных
var x, count: integer;
count: = 0;
откуда взять x?
read( x );
while x <> 0 do begin
if x > 0 then
count:= count + 1;
read( x );
? Что плохо?
end;
writeln( count );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
144
Найди ошибку!
var x, count: integer;
count: = 0;
read( x );
while x <> 0 do begin
if x > 0 then
count:= count + 1;
end;
read( x );
writeln( count );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
145
Найди ошибку!
var x, count: integer;
read( x= 0;
);
count:
while x = 0 do begin
if x ><>
0 then
count:= count + 1;
read( x );
end;
writeln( count );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

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

Программирование (Паскаль), 8 класс
147
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
var x, sum: integer;
sum: = 0;
Чего не хватает?
?
read( x );
while x <> 0 do begin
if x mod 10 = 5 then
sum:= sum + x;
read( x )
end;
writeln( sum );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
148
Найди ошибку!
var x, sum: integer;
sum: = 0;
while
read( x <>
); 0 do begin
if x mod 10 = 5 then
sum:= sum + x;
read( x )
end;
writeln( sum );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

149. Задачи

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

150. Задачи

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

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

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

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

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


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

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

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

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

Программирование (Паскаль), 8 класс
154
Перестановка пар соседних элементов
не выходим за
границу
i:= 1;
while i < N do begin
{ переставляем A[i] и A[i+1] }
с:= A[i];
A[i]:= A[i+1];
A[i+1]:= c;
i:= i + 2
{ к следующей паре }
end;
A[1] A[2], A[3] A[4], …, A[N-1] A[N]
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

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

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

5
12
7
1+N
2+N-1
i+???
N+1
=
=
=
=

N+1
N+1
N+1
N+1
http://kpolyakov.spb.ru

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

Программирование (Паскаль), 8 класс
156
Реверс массива
2 do begin
for i:=1 to NN div
do begin
поменять местами A[i] и A[N+1-i]
end;
Что плохо?
?
1
2
3
4
7
12
40
23
i=1
23
12
40
7
i=2
23
40
12
7
i=3
23
12
40
7
i=4
7
12
40
23
?
К.Ю. Поляков, Е.А. Ерёмин, 2018
Как исправить?
http://kpolyakov.spb.ru

157. Конец фильма

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

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

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