Similar presentations:
Основы программирования на языке Паскаль
1. Программирование (Паскаль)
1Программирование
(Паскаль)
§ 17. Введение
§ 18. Линейные программы
§ 19. Ветвления
§ 20.
Программирование циклических
алгоритмов
§ 21. Массивы
§ 22. Алгоритмы обработки массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
2. Программирование (Паскаль)
2Программирование
(Паскаль)
§ 17. Введение
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
3. Что такое программирование?
3Программирование (Паскаль), 8 класс
Что такое программирование?
Программирование — это создание программ для
компьютеров. Этим занимаются программисты.
Чем занимаются программисты:
анализ задачи (выделение
исходных данных, связей
между ними, этапов решения
задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
4. Направления в программировании
4Программирование (Паскаль), 8 класс
Направления в программировании
системный программист
операционные системы,
утилиты, драйверы
прикладной программист
прикладные программы, в
т.ч. для мобильных
устройств
веб-программист
веб-сайты
программист баз данных
системы управления
базами данных
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
5. Простейшая программа
5Программирование (Паскаль), 8 класс
Простейшая программа
название программы
program
begin {
{
end. {
qq;
начало программы
тело программы
конец программы
}
}
}
комментарии внутри {}
не обрабатываются
?
Что делает эта программа?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
6. Вывод на экран
6Программирование (Паскаль), 8 класс
Вывод на экран
program Hello; оператор
вывода
begin
write('Привет!'); Оператор — это команда
end.
языка программирования.
write('Привет', Вася!);
?
Что плохо?
write('Привет, Вася!');
вся строка в
апострофах
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
7. Переход на новую строку
7Программирование (Паскаль), 8 класс
Переход на новую строку
write('Привет,
write('Привет,
Вася!');
Петя!');
ожидание:
Привет, Вася!
Привет, Петя!
реальность:
Привет, Вася!Привет, Петя!
решение:
writeln('Привет, Вася!');
writeln('Привет,
ln
Петя!');
и перейти на
новую строку
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
8. Системы программирования
8Программирование (Паскаль), 8 класс
Системы программирования
Системы программирования — это средства для
создания новых программ.
Транслятор — это программа, которая переводит
тексты программ, написанных программистом, в
машинные коды (команды процессора).
• компилятор — переводит всю программу в
машинные коды, строит исполняемый файл (.exe)
program
program Hello;
Hello;
begin
begin
write('Привет!');
write('Привет!');
end.
end.
1010010100
privet.exe
• интерпретатор — сам выполняет программу по
частям (по одному оператору).
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
9. Системы программирования
9Программирование (Паскаль), 8 класс
Системы программирования
Отладчик — это программа для поиска ошибок в других
программах.
• пошаговый режим — выполнение программы по
шагам (по одному оператору)
• просмотр значений переменных во время
выполнения программы
• точки останова – операторы в программе, перед
выполнением которых нужно остановиться.
Среда программирования (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. Пример задачи
12Программирование (Паскаль), 8 класс
Пример задачи
Задача. Ввести два числа и вычислить их сумму.
?
program Sum;
Выполнится?
begin
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
!
Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
13. Зачем нужны переменные?
13Программирование (Паскаль), 8 класс
Зачем нужны переменные?
program Sum;
begin
Где запомнить?
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
var a, b, c: integer;
объявление переменных
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
14. Имена переменных
14Программирование (Паскаль), 8 класс
Имена переменных
Идентификатор — это имя программы или переменной.
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. Работа с переменными
15Программирование (Паскаль), 8 класс
Работа с переменными
Присваивание (запись значения)
a := 5;
a := 5;
a := 18;
Вывод на экран
write(a);
оператор
присваивания
?
Что будет храниться в a?
?
В чём разница?
с:= 14;
write(с);
14
К.Ю. Поляков, Е.А. Ерёмин, 2018
a ←5
с:= 14;
write('с');
c
http://kpolyakov.spb.ru
16. Работа с переменными
16Программирование (Паскаль), 8 класс
Работа с переменными
Изменение значения
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. Ввод с клавиатуры
17Программирование (Паскаль), 8 класс
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
read(a);
!
5
1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
18. Ввод с клавиатуры
18Программирование (Паскаль), 8 класс
Ввод с клавиатуры
read(a, b);
через пробел:
25 30
через Enter:
25
30
К.Ю. Поляков, Е.А. Ерёмин, 2018
a 25
b 30
a 25
b 30
http://kpolyakov.spb.ru
19. Программа сложения чисел
19Программирование (Паскаль), 8 класс
Программа сложения чисел
?
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(данных с текстом
20Программирование (Паскаль), 8 класс
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. Задачи
23Программирование (Паскаль), 8 класс
Задачи
«C»: Ввести три числа, найти их сумму,
произведение и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
24. Арифметические выражения
24Программирование (Паскаль), 8 класс
Арифметические выражения
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. Порядок выполнения операций
25Программирование (Паскаль), 8 класс
Порядок выполнения операций
1)
2)
3)
4)
действия в скобках
возведение в степень
умножение и деление, слева направо
сложение и вычитание, слева направо
6
5
2
1
3
4
a := c + (1 – 2 * b) / 2 * d;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
26. Частное и остаток
26Программирование (Паскаль), 8 класс
Частное и остаток
div – деление нацело (остаток отбрасывается)
mod – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
var
t:=
m:=
s:=
t, m,
175;
t div
t mod
s: integer;
60; { 2 }
60; { 55 }
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
27. Частное и остаток
27Программирование (Паскаль), 8 класс
Частное и остаток
?
Что получится?
n:=
d:=
k:=
123
n div 10; { 12 }
n mod 10; { 3 }
При делении на 10 нацело отбрасывается последняя
цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
28. Форматный вывод
28Программирование (Паскаль), 8 класс
Форматный вывод
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. Задачи
29Программирование (Паскаль), 8 класс
Задачи
«A»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в минутах и секундах.
Пример:
Введите число секунд: 175
2 мин. 55 с.
«B»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в часах, минутах и
секундах.
Пример:
Введите число секунд: 8325
2 ч. 18 мин. 45 с
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
30. Задачи
30Программирование (Паскаль), 8 класс
Задачи
«С»: Занятия в школе начинаются в 8-30. Урок длится 45
минут, перерывы между уроками – 10 минут. Ввести
номер урока и вывести время его окончания.
Пример:
Введите номер урока: 6
13-50
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
31. Форматный вывод
31Программирование (Паскаль), 8 класс
Форматный вывод
вариант:
var x: real;
x:=12.34567891234;
write(x);
write(x:10:3);
всего на
число
в дробной
части
write(x:8:2);
12.345679
6
по умолчанию
12.346
3
10
12.34
write(x:2:2);
12.34
write(x:0:1);
12.3
минимально
возможное
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
32. Научный формат чисел
32Программирование (Паскаль), 8 класс
Научный формат чисел
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. Операции с вещественными числами
33Программирование (Паскаль), 8 класс
Операции с вещественными числами
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. Операции с вещественными числами
34Программирование (Паскаль), 8 класс
Операции с вещественными числами
sqrt – квадратный корень
x:= 2.25;
write(sqrt(x));
К.Ю. Поляков, Е.А. Ерёмин, 2018
1.5
http://kpolyakov.spb.ru
35. Операции с вещественными числами
35Программирование (Паскаль), 8 класс
Операции с вещественными числами
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. Задачи
36Программирование (Паскаль), 8 класс
Задачи
«A»: Ввести число, обозначающее размер одной
фотографии в Мбайтах. Определить, сколько
фотографий поместится на флэш-карту объёмом
2 Гбайта.
Пример:
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
37. Задачи
37Программирование (Паскаль), 8 класс
Задачи
«B»: Оцифровка звука выполняется в режиме стерео с
частотой дискретизации 44,1 кГц и глубиной
кодирования 24 бита. Ввести время записи в
минутах и определить, сколько Мбайт нужно
выделить для хранения полученного файла
(округлить результат в большую сторону).
Пример:
Введите время записи в минутах: 10
Размер файла 152 Мбайт
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
38. Задачи
38Программирование (Паскаль), 8 класс
Задачи
«С»: Разведчики-математики для того, чтобы опознать
своих, используют числовые пароли. Услышав
число-пароль, разведчик должен возвести его в
квадрат и сказать в ответ первую цифры дробной
части полученного числа. Напишите программу,
которая по полученному паролю (вещественному
числу) вычисляет число-ответ.
Пример:
Введите пароль: 1.92
Ответ: 6
потому что 1,922 = 3,6864…, первая цифра дробной
части – 6
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
39. Случайные и псевдослучайные числа
39Программирование (Паскаль), 8 класс
Случайные и псевдослучайные числа
Случайные явления
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
40. Случайные и псевдослучайные числа
40Программирование (Паскаль), 8 класс
Случайные и псевдослучайные числа
!
Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но
строятся по формуле.
следующее
предыдущее
Xn+1
:= mod(a*Xnn+b, c) | от 0 до c-1
n+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. Датчик случайных чисел
41Программирование (Паскаль), 8 класс
Датчик случайных чисел
Целые числа на отрезке:
цел 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. Датчик случайных чисел
42Программирование (Паскаль), 8 класс
Датчик случайных чисел
Целые числа на отрезке:
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. Задачи
43Программирование (Паскаль), 8 класс
Задачи
«A»: В игре «Русское лото» из мешка случайным
образом выбираются бочонки, на каждом из которых
написано число от 1 до 90. Напишите программу,
которая выводит наугад первые 5 выигрышных
номеров.
«B»: + Доработайте программу «Русское лото» так,
чтобы все 5 значений гарантированно были бы
разными (используйте разные диапазоны).
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
44. Задачи
44Программирование (Паскаль), 8 класс
Задачи
«С»: + Игральный кубик бросается три раза (выпадает
три случайных значения). Из этих чисел
составляется целое число, программа должна
найти его квадрат.
Пример:
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
45. Задачи
45Программирование (Паскаль), 8 класс
Задачи
«D»: + Получить случайное трёхзначное число и вывести
в столбик его отдельные цифры.
Пример:
Получено число 123
сотни: 1
десятки: 2
единицы: 3
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
46. Программирование (Паскаль)
46Программирование
(Паскаль)
§ 19. Ветвления
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
47. Выбор наибольшего из двух чисел
47Программирование (Паскаль), 8 класс
Выбор наибольшего из двух чисел
полная
форма
ветвления
начало
начало
ввод a,b
да
a > b?
M:=
M:= a
нет
M:=
M:= b
if a > b then
M:= a
else
M:= b;
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Если a = b?
http://kpolyakov.spb.ru
48. Вариант 1. Программа
48Программирование (Паскаль), 8 класс
Вариант 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
49Программирование (Паскаль), 8 класс
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M:= a
да
b >> a?
нет
неполная
форма
ветвления
M:= b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
50. Вариант 2. Программа
50Программирование (Паскаль), 8 класс
Вариант 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. Примеры
51Программирование (Паскаль), 8 класс
Примеры
Поиск минимального:
if a < b then
M:= a;
if b < a then
M:= b;
?
Что плохо?
?
Когда работает неверно?
?
if a < b then
Что делает эта программа?
begin
begin
c:=
c:=a;
a;
составной
a:=
a:=b;
b;
оператор
b:=
b:=cc
end;
end;
Перед end можно не ставить
точку с запятой!
!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
52. В других языках программирования
52Программирование (Паскаль), 8 класс
В других языках программирования
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. Вложенные условные операторы
53Программирование (Паскаль), 8 класс
Вложенные условные операторы
Задача. В переменной a записан возраст Антона, а в
переменной b – возраст Бориса. Определить, кто из
них старше.
?
Сколько вариантов ответа?
if a = b then
вложенный
writeln('Одного возраста') условный
оператор
else
if
> b
then
a=b
then
if a
writeln('Андрей
)
writeln('Одного старше'
возраста')
else
else
writeln('Борис
);
старше');
writeln('Борис старше'
else относится к
ближайшему if
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
54. Задачи
54Программирование (Паскаль), 8 класс
Задачи
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из
них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
55. Задачи
55Программирование (Паскаль), 8 класс
Задачи
«C»: Ввести последовательно возраст Антона, Бориса и
Виктора. Определить, кто из них старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
56. Сложные условия
56Программирование (Паскаль), 8 класс
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ 'подходит' или
'не подходит').
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
?
Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
57. Плохое решение
57Программирование (Паскаль), 8 класс
Плохое решение
program Work;
var x: integer;
begin
writeln('Введите ваш возраст');
read(x);
вложенный
if x >= 25 then
условный
оператор
if x <= 40 then
write('Подходит!')
else
write('Не подходит.')
else
write('Не подходит.');
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
58. Хорошее решение (операция «И»)
58Программирование (Паскаль), 8 класс
Хорошее решение (операция «И»)
program Work;
var x: integer;
begin
writeln('Введите ваш возраст');
read(x);
if (x >= 25) and (x <= 40) then
write('Подходит!')
сложное
условие
else
write('Не подходит.');
end.
!
Каждое условие – в скобки!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
59. Примеры
59Программирование (Паскаль), 8 класс
Примеры
Задача. Вывести 'Да', если число в переменной 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. Сложные условия
60Программирование (Паскаль), 8 класс
Сложные условия
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if (d
(d == 1)
1) or
or (d
(d == 4)
4) then
write('Летает')
сложное
условие
else
write('Не летает');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
61. Ещё пример
61Программирование (Паскаль), 8 класс
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ 'подходит' или
'не подходит'). Использовать «ИЛИ».
if (x < 25)
???or (x > 40)
write('Не подходит!')
else
write('Подходит.');
К.Ю. Поляков, Е.А. Ерёмин, 2018
then
http://kpolyakov.spb.ru
62. Простые и сложные условия
62Программирование (Паскаль), 8 класс
Простые и сложные условия
Простые условия (отношения) равно
<
<=
>
>=
=
<>
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• И – одновременное выполнение условий
x >= 25 and x <= 40
• ИЛИ – выполнение хотя бы одного из условий
x <= 25 or x >= 40
• НЕ – отрицание, обратное условие
x <=
not (x > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
63. Порядок выполнения операций
63Программирование (Паскаль), 8 класс
Порядок выполнения операций
• выражения в скобках
• НЕ (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. Сложные условия
64Программирование (Паскаль), 8 класс
Сложные условия
Истинно или ложно при 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. Задачи
65Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая получает три числа рост трёх спортсменов, и выводит сообщение «По
росту.», если они стоят по возрастанию роста, или
сообщение «Не по росту!», если они стоят не по
росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
66. Задачи
66Программирование (Паскаль), 8 класс
Задачи
«B»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
67. Задачи
67Программирование (Паскаль), 8 класс
Задачи
«C»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
68. Логические переменные
68Программирование (Паскаль), 8 класс
Логические переменные
var
...
b:=
b:=
b: boolean;
True; { 1 }
False; { 0 }
только два
возможных
значения
Пример:
var vyh: boolean;
...
vyh:= (d=6) or (d=7);
...
if not vyh then
write('Рабочий день.')
else
write('Выходной!');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
69. Задачи
69Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая получает с
клавиатуры целое число и записывает в логическую
переменную значение «да» (True), если это число
трёхзначное. После этого на экран выводится ответ
на вопрос: «Верно ли, что было получено
трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
70. Задачи
70Программирование (Паскаль), 8 класс
Задачи
«B»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это число – палиндром, то есть читается одинаково
слева направо и справа налево. После этого на
экран выводится ответ на вопрос: «Верно ли, что
введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
71. Задачи
71Программирование (Паскаль), 8 класс
Задачи
«С»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это все его цифры одинаковы. После этого на экран
выводится ответ на вопрос: «Верно ли, что все
цифры введённого числа одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
72. Экспертная система
72Программирование (Паскаль), 8 класс
Экспертная система
Экспертная система — это компьютерная программа,
задача которой — заменить человека-эксперта при
принятии решений в сложной ситуации.
База знаний = факты + правила writeа:
• если у животного есть перья, то это птица;
• если животное кормит детенышей молоком, то это —
млекопитающее;
• если животное — млекопитающее и ест мясо, то
это — хищник.
Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
73. Дерево решений
73Программирование (Паскаль), 8 класс
Дерево решений
Кормит детей молоком?
да
нет
Имеет перья?
нет
?
да
птица
К.Ю. Поляков, Е.А. Ерёмин, 2018
млекопитающее
Ест мясо?
нет
?
да
хищник
http://kpolyakov.spb.ru
74. Программирование экспертной системы
74Программирование (Паскаль), 8 класс
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
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. Заглавные и строчные буквы
75Программирование (Паскаль), 8 класс
Заглавные и строчные буквы
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. Виды ошибок
77Программирование (Паскаль), 8 класс
Виды ошибок
Синтаксические ошибки – нарушение правил записи
операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная
ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
78. Пример отладки программы
Программирование (Паскаль), 8 класс78
Пример отладки программы
Программа решения квадратного уравнения
2
ax bx c 0
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. Тестирование
79Программирование (Паскаль), 8 класс
Тестирование
Тест 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
Найден вариант, когда программа работает неверно.
Ошибка воспроизводится!
Возможные причины:
D b 2 4ac
•неверный ввод данных
•неверное вычисление дискриминанта
b D
•неверное вычисление корней
x1, 2
2a
•неверный write(результатов
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
80. Отладочная печать
80Программирование (Паскаль), 8 класс
Отладочная печать
Идея: выводить все промежуточные результаты.
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. Отладка программы
81Программирование (Паскаль), 8 класс
Отладка программы
Тест 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;
(2*a);
x2:=(-b-sqrt(D))/2*a;
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Что неверно?
http://kpolyakov.spb.ru
82. Задачи
82Программирование (Паскаль), 8 класс
Задачи
«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. Задачи
83Программирование (Паскаль), 8 класс
Задачи
«B»: Доработайте программу из п. А так, чтобы она
правильно работала с отрицательными
трёхзначными числами: при вводе числа «–123»
программа должна выдавать ответ 6.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
84. Задачи
84Программирование (Паскаль), 8 класс
Задачи
«С»: Загрузите программу, которая должна вычислять
наибольшее из трёх чисел:
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. Зачем нужен цикл?
86Программирование (Паскаль), 8 класс
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
writeln('Привет');
?
А если 5000?
Цикл «N раз»:
{ сделай 5 раз }
writeln('Привет');
!
В Паскале нет такого цикла!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
87. Как организовать цикл?
87Программирование (Паскаль), 8 класс
Как организовать цикл?
!
Нужно запоминать, сколько раз цикл уже выполнен!
ещё не делали
{счётчик:= 0 }
{пока счётчик < 5 }
сделали ещё раз
writeln('Привет');
{счётчик:= счётчик + 1}
var count: integer;
count:= 0;
while count < 5 do begin
begin
writeln('Привет');
count:= count + 1
end;
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
составной
оператор
http://kpolyakov.spb.ru
88. Как организовать цикл?
Программирование (Паскаль), 8 класс88
Как организовать цикл?
Идея: запоминать, сколько шагов осталось.
count:= 5;
while count > ???
0 do begin
writeln('Привет');
- 1
count:= count ???
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
89. Цикл с предусловием
89Программирование (Паскаль), 8 класс
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while условие do begin
...
тело цикла
end;
?
Если условие никогда не станет ложно?
while True do begin
...
end;
К.Ю. Поляков, Е.А. Ерёмин, 2018
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru
90. Сумма цифр числа
90Программирование (Паскаль), 8 класс
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
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. Сумма цифр числа
91Программирование (Паскаль), 8 класс
Сумма цифр числа
• выделяем последнюю цифру числа (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. Сумма цифр числа
92Программирование (Паскаль), 8 класс
Сумма цифр числа
начало
обнулить
сумму
ввод 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. Сумма цифр числа
93Программирование (Паскаль), 8 класс
Сумма цифр числа
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. Задачи
94Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая получает с
клавиатуры количество повторений и выводит
столько же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько раз в его десятичной записи встречается
цифра 1.
Пример:
Введите число? 311
Единиц: 2
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
95. Задачи
95Программирование (Паскаль), 8 класс
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит
наибольшую цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его десятичной записи одинаковые цифры,
стоящие рядом.
Пример:
Введите число: 553
Введите число: 535
Ответ: да.
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
96. Алгоритм Евклида
96Программирование (Паскаль), 8 класс
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух
натуральных чисел.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(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. Алгоритм Евклида
97Программирование (Паскаль), 8 класс
Алгоритм Евклида
начало
a = b?
да
конец
нет
нет
b:=b-a
К.Ю. Поляков, Е.А. Ерёмин, 2018
a > b?
да
a:=a-b
http://kpolyakov.spb.ru
98. Алгоритм Евклида
98Программирование (Паскаль), 8 класс
Алгоритм Евклида
while a <> b do
if a > b then
a:= a - b
else b:= b – a;
?
?
?
Где будет НОД? Как его вывести?
Как вывести НОД в формате НОД(14,21) = 7?
А без дополнительных переменных?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
99. Модифицированный алгоритм Евклида
99Программирование (Паскаль), 8 класс
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления
большего на меньшее до тех пор, пока меньшее не
станет равно нулю. Тогда большее — это НОД.
НОД(a,b)= НОД(mod(a,b), b)
= НОД(a, mod(b,a))
Пример:
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
100. Модифицированный алгоритм
100Программирование (Паскаль), 8 класс
Модифицированный алгоритм
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. В других языках программирования
101Программирование (Паскаль), 8 класс
В других языках программирования
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
a =
else
b =
}
> b)
a % b;
b % a;
http://kpolyakov.spb.ru
102. Задачи
102Программирование (Паскаль), 8 класс
Задачи
«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. Задачи
103Программирование (Паскаль), 8 класс
Задачи
«C»: Ввести с клавиатуры два натуральных числа и сравнить
количество шагов цикла для вычисления их НОД с
помощью обычного и модифицированного алгоритмов
Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
104. Обработка потока данных
104Программирование (Паскаль), 8 класс
Обработка потока данных
Задача. На вход программы поступает поток данных —
последовательность целых чисел, которая
заканчивается нулём. Требуется найти сумму
элементов этой последовательности.
while x<>0 do begin
{ добавить x к сумме }
{ x := следующее число }
end;
?
Откуда возьмётся x в первый раз?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
105. Обработка потока данных
105Программирование (Паскаль), 8 класс
Обработка потока данных
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. Задачи
106Программирование (Паскаль), 8 класс
Задачи
«A»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
107. Цикл с постусловием
107Программирование (Паскаль), 8 класс
Цикл с постусловием
• условие проверяется после завершения очередного
шага цикла
• цикл всегда выполняется хотя бы один раз
• как только условие становится истинным, работа
цикла заканчивается
начало
repeat
write('Введите N>0: ');
read(N);
until N > 0;
условие окончания
работы цикла
N
нет
N > 0?
да
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
108. Задачи
108Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая предлагает ввести
пароль и не переходит к выполнению основной
части, пока не введён правильный пароль. Основная
часть – вывод на экран «секретных сведений».
«B»: Напишите программу, которая получает с
клавиатуры натуральное число, которое больше 1, и
определяет, простое оно или нет. Для этого нужно
делить число на все натуральные числа, начиная с
2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с
клавиатуры два целых числа и вычисляет их
произведение, используя только операции
сложения.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
109. Задачи
109Программирование (Паскаль), 8 класс
Задачи
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и вычисляет целый
квадратный корень из него – наибольшее число,
квадрат которого не больше данного числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
110. Цикл по переменной
110Программирование (Паскаль), 8 класс
Цикл по переменной
Задача. Вывести на экран степени числа 2 от 21 до 210.
k:=
k:= 1;
1;
Работа с k в трёх местах!
!
N:= 2;
Идея: собрать всё вместе.
while kk <=
<= 10
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
увеличение на 1
end;
по умолчанию
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
111. Цикл по переменной
111Программирование (Паскаль), 8 класс
Цикл по переменной
Задача. Найти сумму чисел от 1 до 1000.
var sum, i:
...
sum:= 0;
for i:=1 to
sum:= sum
integer;
1000 do
+ i;
Задача. Вывести квадраты чисел от 10 до 1 по убыванию.
for k:=10 downto
downto 1 do
writeln(k*k);
шаг «–1»
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
112. Цикл по переменной
112Программирование (Паскаль), 8 класс
Цикл по переменной
Задача. Найти сумму чётных чисел от 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. В других языках программирования
113Программирование (Паскаль), 8 класс
В других языках программирования
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. Задачи
114Программирование (Паскаль), 8 класс
Задачи
«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. Что такое массив?
116Программирование (Паскаль), 8 класс
Что такое массив?
?
Как ввести 10000 переменных?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках)
и имеющих общее имя.
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
117. Выделение памяти (объявление)
117Программирование (Паскаль), 8 класс
Выделение памяти (объявление)
!
Массив = таблица!
минимальны
й индекс
максимальны
й индекс
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. Что неправильно?
118Программирование (Паскаль), 8 класс
Что неправильно?
[1..10] of integer;
var A: array[10..1]
...
A[5] := 4.5;
var A: array[1..10] of integer;
...
A[15] := 'a';
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
119. Обращение к элементу массива
119Программирование (Паскаль), 8 класс
Обращение к элементу массива
A
массив
1
2
5
10
A[1]
A[2]
A[2]
33
15
15
НОМЕР
НОМЕР
элемента
элемента массива
массива
(ИНДЕКС)
(ИНДЕКС)
4
5
20
25
ЗНАЧЕНИЕ
A[3]
A[4]
ЗНАЧЕНИЕ
элемента
элемента массива
массива
A[5]
НОМЕР (ИНДЕКС)
элемента массива: 2
ЗНАЧЕНИЕ
элемента массива: 10
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
120. Обращение к элементу массива
120Программирование (Паскаль), 8 класс
Обращение к элементу массива
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. Что неверно?
121Программирование (Паскаль), 8 класс
Что неверно?
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. Перебор элементов массива
122Программирование (Паскаль), 8 класс
Перебор элементов массива
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. Заполнение массива
123Программирование (Паскаль), 8 класс
Заполнение массива
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. Заполнение массива в обратном порядке
124Программирование (Паскаль), 8 класс
Заполнение массива в обратном порядке
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. Заполнение массива в обратном порядке
125Программирование (Паскаль), 8 класс
Заполнение массива в обратном порядке
N
?
+1
!
…
3
2
1
A[i]:= X;
Как связаны i и X?
i
X
1
N
2
N-1
3
N-2
...
...
N
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. Вывод массива на экран
126Программирование (Паскаль), 8 класс
Вывод массива на экран
for i:=1
write(
to N do
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. Ввод с клавиатуры
127Программирование (Паскаль), 8 класс
Ввод с клавиатуры
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. В других языках программирования
128Программирование (Паскаль), 8 класс
В других языках программирования
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. Задачи
129Программирование (Паскаль), 8 класс
Задачи
«A»: а) Заполните все элементы массива из 10
элементов значением X , введённым с клавиатуры.
б) Заполните массив из 10 элементов
последовательными натуральными числами,
начиная с X (значение X введите с клавиатуры).
«B»: а) Заполните массив из 10 элементов натуральными
числами в обратном порядке, начиная со значения
X, введённого с клавиатуры. Последний элемент
должен быть равен X, предпоследний равен X–1 и
т.д.
б) Заполните массив из 10 элементов степенями числа 2
(от 21 до 2N), так чтобы элемент с индексом i был
равен 2i.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
130. Задачи
130Программирование (Паскаль), 8 класс
Задачи
«C»: а) Заполните массив из 10 элементов степенями
числа 2, начиная с конца, так чтобы последний
элемент массива был равен 1, а каждый
предыдущий был в 2 раза больше следующего.
б) С клавиатуры вводится целое число X. Заполните
массив из 11 элементов целыми числами, так чтобы
средний элемент массива был равен X, слева от
него элементы стояли по возрастанию, а справа – по
убыванию. Соседние элементы отличаются на
единицу. Например,
при X = 3 массив из 5 элементов заполняется так: 1
2 3 2 1.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
131. Заполнение случайными числами
131Программирование (Паскаль), 8 класс
Заполнение случайными числами
for i:=1 to N do begin
A[i]:=20+random(81);
write(A[i], ' ')
end;
сразу вывод на
экран
К.Ю. Поляков, Е.А. Ерёмин, 2018
?
Какой отрезок?
http://kpolyakov.spb.ru
132. Задачи-2
132Программирование (Паскаль), 8 класс
Задачи-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
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
133. Задачи-2
133Программирование (Паскаль), 8 класс
Задачи-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. Сумма элементов массива
135Программирование (Паскаль), 8 класс
Сумма элементов массива
Задача. Найти сумму элементов массива.
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
i
3
1
sum
0
1
2
3
5
7
15
4
5
18
19
http://kpolyakov.spb.ru
136. Сумма не всех элементов массива
136Программирование (Паскаль), 8 класс
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
?
Что делаем с нечётными?
sum:= 0;
for i:=1 to N do
if
mod
if A[i]
A[i]
mod
2 == 00 then
then
sum:=
sum
+ 2
A[i];
sum:=sum
sum);
+ A[i];
writeln(
writeln( sum );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
137. Задачи
137Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–5; 5]
и находит сумму положительных элементов.
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–2; 2]
и находит произведение ненулевых элементов.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке
[100; 1000] и находит отдельно сумму элементов в
первой и во второй половинах массива.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
138. Подсчёт элементов по условию
138Программирование (Паскаль), 8 класс
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
?
Какие переменные нужны?
переменная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. Среднее арифметическое
139Программирование (Паскаль), 8 класс
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 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. Среднее арифметическое
140Программирование (Паскаль), 8 класс
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 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. Задачи
141Программирование (Паскаль), 8 класс
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0;
200] и считает число элементов, которые делятся на
10.
«B»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0; 200]
и считает число двузначных чисел в массиве.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [10;
100] и считает число пар соседних элементов, сумма
которых делится на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
142. Обработка потока данных
142Программирование (Паскаль), 8 класс
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
положительных чисел.
1) нужен счётчик
2) счётчик увеличивается еслиКогда
числоувеличивать
>0
3) нужен цикл
4) это цикл с условием (число счётчик?
шагов неизвестно)
Какой цикл?
?
?
счётчик = 0
пока не введён 0:
если введено число > 0 то
счётчик:= счётчик + 1
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
143. Обработка потока данных
143Программирование (Паскаль), 8 класс
Обработка потока данных
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(
);
count:
count:x== 0;
0;
while x = 0 do begin
if x ><>
0 then
count:= count + 1;
read( x );
end;
writeln( count );
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
146. Обработка потока данных
146Программирование (Паскаль), 8 класс
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
1) нужна переменная для суммы
2) число добавляется к сумме, если оно
заканчивается на "5"
3) нужен цикл с условием
сумма: = 0
? Как это записать?
пока не введён 0:
если число оканчивается на "5" то
сумма:= сумма + число
if x mod 10 = 5 then
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
147. Обработка потока данных
147Программирование (Паскаль), 8 класс
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 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. Задачи
149Программирование (Паскаль), 8 класс
Задачи
«A»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
150. Задачи
150Программирование (Паскаль), 8 класс
Задачи
«C»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти среднее арифметическое всех двузначных
чисел, которые делятся на 7.
«D»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
151. Перестановка элементов массива
151Программирование (Паскаль), 8 класс
Перестановка элементов массива
?
Как поменять местами значения двух
переменных a и b?
вспомогательная
переменная
с:=
a:=
b:=
a;
b;
c;
К.Ю. Поляков, Е.А. Ерёмин, 2018
элементы массива:
с:= A[i];
A[i]:= A[k];
A[k]:= c;
http://kpolyakov.spb.ru
152. Перестановка пар соседних элементов
152Программирование (Паскаль), 8 класс
Перестановка пар соседних элементов
Задача. Массив 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. Перестановка пар соседних элементов
153Программирование (Паскаль), 8 класс
Перестановка пар соседних элементов
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
23 выход за
12
38
5
7
40
23
12
38
5
40
7
23
12
38
5
40
23
7
К.Ю. Поляков, Е.А. Ерёмин, 2018
6
границы массива
?
http://kpolyakov.spb.ru
154. Перестановка пар соседних элементов
154Программирование (Паскаль), 8 класс
Перестановка пар соседних элементов
не выходим за
границу
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. Реверс массива
155Программирование (Паскаль), 8 класс
Реверс массива
Задача. Переставить элементы массива в обратном
порядке (выполнить реверс).
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
…
…
1+N
2+N-1
i+???
N+1
N-2
N-1
N
38
40
23
N-2
N-1
N
5
12
7
=
=
=
=
N+1
N+1
N+1
N+1
http://kpolyakov.spb.ru
156. Реверс массива
156Программирование (Паскаль), 8 класс
Реверс массива
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. Конец фильма
157Программирование (Паскаль), 8 класс
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
158. Источники иллюстраций
Программирование (Паскаль), 8 класс158
Источники иллюстраций
1.
2.
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru