Similar presentations:
Программирование на языке Паскаль
1. Программирование на языке Паскаль
1Программирование
на языке Паскаль
§ 54. Алгоритм и его свойства
§ 55. Простейшие программы
§ 56. Вычисления
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
2. Программирование на языке Паскаль
2Программирование
на языке Паскаль
§ 54. Алгоритм и его
свойства
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
3. Что такое алгоритм?
Алгоритмизация и программирование, Паскаль, 10 класс3
Что такое алгоритм?
Алгоритм — это точное описание
порядка действий, которые должен
выполнить исполнитель для решения
задачи за конечное время.
Исполнитель – это устройство или
одушёвленное существо (человек),
способное понять и выполнить
команды, составляющие алгоритм.
Мухаммед ал-Хорезми
(ок. 783–ок. 850 гг.)
Формальные исполнители: не понимают
(и не могут понять) смысл команд.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
4. Свойства алгоритма
Алгоритмизация и программирование, Паскаль, 10 класс4
Свойства алгоритма
Дискретность — алгоритм состоит из отдельных команд,
каждая из которых выполняется за конечное время.
Детерминированность (определённость) — при каждом
запуске алгоритма с одними и теми же исходными
данными получается один и тот же результат.
Понятность — алгоритм содержит только команды,
входящие в систему команд исполнителя.
Конечность (результативность) — для корректного
набора данных алгоритм должен завершаться через
конечное время.
Корректность — для допустимых исходных данных
алгоритм должен приводить к правильному результату.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
5. Как работает алгоритм?
Алгоритмизация и программирование, Паскаль, 10 класс5
Как работает алгоритм?
дискретный
объект
1234
алгоритм
2345
шаг 1
5432
шаг 2
шаг 3
дискретный
объект
25 16 9 4
• получает на вход дискретный объект
• в результате строит другой дискретный объект (или
выдаёт сообщение об ошибке)
• обрабатывает объект по шагам
• на каждом шаге получается новый дискретный объект
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
6. Способы записи алгоритмов
Алгоритмизация и программирование, Паскаль, 10 класс6
Способы записи алгоритмов
• естественный язык
установить соединение
пока не принята команда «стоп»
принять команду
выполнить команду
завершить сеанс связи
• псевдокод
установить соединение
нц
принять команду
выполнить команду
кц_при команда = 'stop'
завершить сеанс связи
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
7. Способы записи алгоритмов
Алгоритмизация и программирование, Паскаль, 10 класс7
Способы записи алгоритмов
• блок-схема
установить
соединение
принять
команду
выполнить
команду
нет
• программа
setConnection;
repeat
cmd:= getCommand;
executeCommand(cmd);
until cmd = "stop";
closeConnection;
«стоп»?
да
завершить
соединение
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
8. Программирование на языке Паскаль
8Программирование
на языке Паскаль
§ 55. Простейшие программы
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
9. Простейшая программа
Алгоритмизация и программирование, Паскаль, 10 класс9
Простейшая программа
название алгоритма
program
begin {
{
end. {
qq;
начало программы }
тело программы }
конец программы }
комментарии в скобках {}
не обрабатываются
?
Что делает эта программа?
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
10. Вывод на экран
Алгоритмизация и программирование, Паскаль, 10 класс10
Вывод на экран
program qq;
begin
write('2+');
{ без перехода }
writeln('2=?'); { на новую строку}
writeln('Ответ: 4');
end.
Протокол:
2+2=?
Ответ: 4
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
11. Задания
Алгоритмизация и программирование, Паскаль, 10 класс11
Задания
«B»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«C»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
12. Сложение чисел
Алгоритмизация и программирование, Паскаль, 10 класс12
Сложение чисел
Задача. Ввести с клавиатуры два числа и найти их сумму.
Протокол:
Введите два целых числа
25 30
пользователь
25+30=55
компьютер
компьютер считает сам!
?
1.
2.
3.
4.
Как ввести числа в память?
Где хранить введенные числа?
Как вычислить?
Как вывести результат?
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
13. Сумма: псевдокод
Алгоритмизация и программирование, Паскаль, 10 класс13
Сумма: псевдокод
program qq;
begin
{ ввести два числа }
{ вычислить их сумму }
{ вывести сумму на экран }
end.
Псевдокод: алгоритм на
русском языке с элементами
Паскаля.
!
Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
14. Переменные
Алгоритмизация и программирование, Паскаль, 10 класс14
Переменные
Переменная – это величина, имеющая имя, тип
и значение. Значение переменной можно
изменять во время работы программы.
Значение
Другой тип
данных
Имя
К.Ю. Поляков, Е.А. Ерёмин, 2013
!
?
Поместится?
В переменной хранятся данные
определенного типа!
http://kpolyakov.spb.ru
15. Имена переменных
Алгоритмизация и программирование, Паскаль, 10 класс15
Имена переменных
МОЖНО использовать
• латинские буквы (A-Z)
заглавные и строчные буквы НЕ различаются
• цифры
имя не может начинаться с цифры
• знак подчеркивания _
НЕЛЬЗЯ использовать
• русские буквы
• пробелы
• скобки, знаки +, =, !, ? и др.
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
16. Объявление переменных
Алгоритмизация и программирование, Паскаль, 10 класс16
Объявление переменных
Типы переменных:
• integer
{ целая }
• real
{ вещественная }
• и другие…
выделение
Объявление переменных:
variable – переменная
места в памяти
тип – целые
var a, b, c: integer;
список имен
переменных
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
17. Тип переменной
Алгоритмизация и программирование, Паскаль, 10 класс17
Тип переменной
• область допустимых значений
• допустимые операции
• объём памяти
• формат хранения данных
• для предотвращения случайных ошибок
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
18. Ввод значения в переменную
Алгоритмизация и программирование, Паскаль, 10 класс18
Ввод значения в переменную
оператор
ввода
5
read ( a );
!
1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
19. Ввод значений переменной
Алгоритмизация и программирование, Паскаль, 10 класс19
Ввод значений переменной
Ввод значений двух
переменных (через
пробел или Enter).
read ( a, b );
25 30
25 a
30 b
25
30
25 a
30 b
через пробел:
через Enter:
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
20. Изменение значений переменной
Алгоритмизация и программирование, Паскаль, 10 класс20
Изменение значений переменной
var a, b: integer;
a
?
5
...
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
b := b + 1;
5
b
5+2
?
7
a
28
5
7*4
b
7
8
К.Ю. Поляков, Е.А. Ерёмин, 2013
7+1
http://kpolyakov.spb.ru
21. Вывод данных
Алгоритмизация и программирование, Паскаль, 10 класс21
Вывод данных
write( a );
{ вывод значения
переменной a}
writeln( a ); { вывод значения
переменной a и переход
на новую строку}
writeln( 'Привет!' ); { вывод текста }
writeln( 'Ответ: ', c );
{вывод текста и значения переменной c}
writeln ( a, '+', b, '=', c );
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
22. Сложение чисел: простое решение
Алгоритмизация и программирование, Паскаль, 10 класс22
Сложение чисел: простое решение
program Sum;
var a, b, c: integer;
begin
read ( a, b );
c := a + b;
Что плохо?
?
writeln ( c );
end.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
23. Сложение чисел: полное решение
Алгоритмизация и программирование, Паскаль, 10 класс23
Сложение чисел: полное решение
program Sum;
var a, b, c: integer;
begin
writeln('Введите два целых числа');
read ( a, b );
c := a + b;
writeln ( a, '+', b, '=', c );
end.
Протокол:
компьютер
Введите два целых числа
25 30
пользователь
25+30=55
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
24. Снова про оператор вывода
Алгоритмизация и программирование, Паскаль, 10 класс24
Снова про оператор вывода
Вычисление выражений:
writeln ( a, '+', b, '=', a+b );
Форматный вывод:
a:= 123;
write( a:5 );
123
5 знаков
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
25. Программирование на языке Паскаль
25Программирование
на языке Паскаль
§ 56. Вычисления
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
26. Типы данных
Алгоритмизация и программирование, Паскаль, 10 класс26
Типы данных
• byte
• shortint
• word
• longint
{
{
{
{
целые
целые
целые
целые
0..255 }
-128..127 }
0..65535 }
–2147483648..2147483647 }
• single
• real
• double
• extended
{
4 байта }
Сколько байт в памяти?
? вещественная,
{ вещественная, 6 байта }
{ вещественная, 8 байтов }
{ вещественная, 10 байтов }
• boolean
• char
• string
{ логическая, 1 байт }
{ символ, 1 байт }
{ символьная строка }
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
27. Арифметические выражения
Алгоритмизация и программирование, Паскаль, 10 класс27
Арифметические выражения
3
1 2
4
5
6
a:= (c + b*5*3 - 1) / 2 * d;
Приоритет (старшинство):
c b 5 3 1
1) скобки
a
d
2
2) умножение и деление
3) сложение и вычитание
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
28. Деление, div, mod
Алгоритмизация и программирование, Паскаль, 10 класс28
Деление, div, mod
Результат деления «/» – вещественное число:
var a: single;
a:= 2 / 3;
0.6666…
div – деление нацело (остаток отбрасывается)
mod – остаток от деления
var a, b, d: integer;
...
d := 85;
b := d div 10; { 8 }
a := d mod 10; { 5 }
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
29. div и mod для отрицательных чисел
Алгоритмизация и программирование, Паскаль, 10 класс29
div и mod для отрицательных чисел
write(-7 div 2, ',');
write(-7 mod 2);
-3
-1
-7 = (-3)*2 + (-1)
!
В математике не так!
-7 = (-4)*2 + 1
К.Ю. Поляков, Е.А. Ерёмин, 2013
остаток 0
http://kpolyakov.spb.ru
30. Вещественные числа
Алгоритмизация и программирование, Паскаль, 10 класс30
Вещественные числа
!
Целая и дробная части числа разделяются
точкой!
var x: double;
...
x:= 123.456;
Форматный вывод:
a:= 1;
write( a/3 );
write( a/3:7:3 );
всего знаков
К.Ю. Поляков, Е.А. Ерёмин, 2013
3,333333 10-1 = 0,3333333
3.333333E-001
0.333
в дробной части
http://kpolyakov.spb.ru
31. Стандартные функции
Алгоритмизация и программирование, Паскаль, 10 класс31
Стандартные функции
abs(x) —
sqrt(x) —
sin(x) —
cos(x) —
exp(x) —
ln(x)
—
trunc(x)—
round(x)—
модуль
квадратный корень
синус угла, заданного в радианах
косинус угла, заданного в радианах
экспонента ех
натуральный логарифм
отсечение дробной части
округление до ближайшего целого
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
32. Случайные числа
Алгоритмизация и программирование, Паскаль, 10 класс32
Случайные числа
Случайно…
• встретить друга на улице
• разбить тарелку
• найти 10 рублей
• выиграть в лотерею
Случайный выбор:
• жеребьевка на
соревнованиях
• выигравшие номера
в лотерее
Как получить случайность?
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
33. Случайные числа на компьютере
Алгоритмизация и программирование, Паскаль, 10 класс33
Случайные числа на компьютере
Электронный генератор
• нужно специальное устройство
• нельзя воспроизвести результаты
Псевдослучайные числа – обладают свойствами
случайных чисел, но каждое следующее число
вычисляется по заданной формуле.
Метод середины квадрата (Дж. фон Нейман)
зерно
564321
318458191041
458191
в квадрате • малый период
(последовательность
повторяется через 106 чисел)
209938992481
938992
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
34. Линейный конгруэнтный генератор
Алгоритмизация и программирование, Паскаль, 10 класс34
Линейный конгруэнтный генератор
X := (a*X+b) mod c | интервал от 0 до c-1
X := (X+3) mod 10 | интервал от 0 до 9
X := 0 3 6 9 2 5 8
8 1 4 7 0
зерно
!
зацикливание
Важен правильный выбор параметров
a, b и с!
Компилятор GCC:
a = 1103515245
b = 12345
c = 231
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
35. Генератор случайных чисел
Алгоритмизация и программирование, Паскаль, 10 класс35
Генератор случайных чисел
Вещественные числа в интервале [0,1):
var X, Y: double;
...
X:= random; { интервал от 0 до 1 (<1) }
Y:= random; { это уже другое число! }
англ. random – случайный
Целые числа в интервале [0,10):
var K, L: integer;
...
K:= random( 10 ) { интервал от 0 до 9 (<10) }
L:= random( 10 ) { это уже другое число! }
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
36. Другой интервал
Алгоритмизация и программирование, Паскаль, 10 класс36
Другой интервал
Вещественные числа:
var X, a, b: double;
...
X:= random*10; { расширение интервала: [0,10) }
X:= random*10 + 5;
{ расширение и сдвиг: [5,15) }
X:= random*(b-a) + a;
{ расширение и сдвиг: [a,b) }
Целые числа:
var K, a, b: integer;
...
K:= random(10) + 5;
{ [5,14] }
X:= random(b-a+1) + a; { [a,b] }
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru
37. Задачи
Алгоритмизация и программирование, Паскаль, 10 класс37
Задачи
«A»: Ввести с клавиатуры три целых числа, найти их сумму, произведение и
среднее арифметическое.
Пример:
Введите три целых числа:
5 7 8
5+7+8=20
5*7*8=280
(5+7+8)/3=6.667
«B»: Ввести с клавиатуры координаты двух точек (A и B) на плоскости
(вещественные числа). Вычислить длину отрезка AB.
Пример:
Введите координаты точки A:
5.5 3.5
Введите координаты точки B:
1.5 2
Длина отрезка AB = 4.272
«C»: Получить случайное трехзначное число и вывести через запятую его
отдельные цифры.
Пример:
Получено число 123.
Его цифры 1, 2, 3.
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru