Свойства алгоритма
дискретность: состоит из отдельных шагов (команд)
понятность: должен включать только команды, известные исполнителю (входящие в СКИ)
определенность: при одинаковых исходных данных всегда выдает один и тот же результат
конечность: заканчивается за конечное число шагов
массовость: может применяться многократно при различных исходных данных
корректность: дает верное решение при любых допустимых исходных данных
1
Программирование
на языке Паскаль
2
Алгоритм
Алгоритм – это четко определенный план
действий для исполнителя.
Свойства алгоритма
• дискретность: состоит из отдельных шагов
(команд)
• понятность: должен включать только команды,
известные исполнителю (входящие в СКИ)
• определенность: при одинаковых исходных данных
всегда выдает один и тот же результат
• конечность: заканчивается за конечное число
шагов
• массовость: может применяться многократно при
различных исходных данных
• корректность: дает верное решение при любых
допустимых исходных данных
3
Программа
Программа – это алгоритм, записанный
на какомлибо языке программирования,
набор команд для компьютера
Команда – это описание действий,
которые должен выполнить компьютер.
•
Оператор – это команда языка
программирования высокого уровня.
1971 – язык Паскаль (Н. Вирт)
4
Простейшая программа
название программы
название программы
program qq;
program qq;
begin { начало программы }
begin { начало программы }
end. { конец программы }
end. { конец программы }
?
Что делает эта программа?
5
Вывод текста на экран
program qq;
program qq;
begin
begin
write('2+'); { без перехода }
write('2+'); { без перехода }
writeln('2=?'); { на новую строку}
writeln('2=?'); { на новую строку}
writeln('Ответ: 4');
writeln('Ответ: 4');
end.
end.
Протокол:
2+2=?
Ответ: 4
6
Переменные
Задача. Ввести с клавиатуры два числа и найти их сумму.
Протокол:
Введите два целых числа
25 30
25+30=55
пользователь
пользователь
компьютер
компьютер
?
компьютер считает
компьютер считает
сам!
сам!
1. Как ввести числа в память?
2. Где хранить введенные числа?
3. Как вычислить?
4. Как вывести результат?
7
Программа
program qq;
program qq;
begin
begin
{ ввести два числа }
{ ввести два числа }
{ вычислить их сумму }
{ вычислить их сумму }
{ вывести сумму на экран }
{ вывести сумму на экран }
end.
end.
Псевдокод: алгоритм на
Псевдокод: алгоритм на
русском языке с
русском языке с
элементами Паскаля.
элементами Паскаля.
!
Компьютер не может исполнить псевдокод!
Переменные
Переменная – это величина, имеющая имя, тип
и значение. Значение переменной можно
изменять во время работы программы.
8
Значение
Значение
Другой тип
Другой тип
данных
данных
?
Поместится?
В переменной хранятся данные
определенного типа!
!
ИмяИмя
9
Имена переменных
В именах МОЖНО использовать
• латинские буквы (AZ)
заглавные и строчные буквы не различаются
заглавные и строчные буквы не различаются
• цифры
имя не может начинаться с цифры
имя не может начинаться с цифры
• знак подчеркивания _
В именах НЕЛЬЗЯ использовать
• русские буквы
• пробелы
• скобки, знаки +, =, !, ? и др.
Какие имена правильные??
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
Переменные
Типы переменных:
10
• integer
• real
• и другие…
{ целая }
{ вещественная }
Объявление переменных:
Выделение
Выделение
места в памяти
места в памяти
тип –
тип –
variable –
variable –
целые
целые
переменная
переменная
var a, b, c: integer;
var a, b, c: integer;
список имен
список имен
переменных
переменных
Как записать значение в переменную?
11
Оператор
Оператор
присваивани
присваивани
я
я
a := 5;
a := 5;
!
5
При записи нового
значения старое
стирается!
Оператор – это команда языка программирова
ния (инструкция).
Оператор присваивания – это команда для
записи нового значения в переменную.
5
Линейный алгоритм
12
Линейный алгоритм это алгоритм, в
котором команды выполняются
последовательно одна за другой.
Задача: составить программу вычисления
суммы двух целых чисел.
Блоксхема линейного алгоритма
13
начало
ввод a, b
блок «начало»
блок «начало»
блок «ввод»
блок «ввод»
c := a + b;
блок «процесс»
блок «процесс»
вывод c
блок «вывод»
блок «вывод»
конец
блок «конец»
блок «конец»
Как ввести значение с клавиатуры
14
Операто
Операто
р ввода
р ввода
5
read ( a );
read ( a );
!
1. Программа ждет, пока пользователь
введет значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
5
Ввод значений двух переменных
15
read ( a, b );
read ( a, b );
через пробел:
через Enter:
Ввод значений
Ввод значений
двух переменных
двух переменных
(через пробел или
(через пробел или
Enter).
Enter).
a25
b30
25 30
25
30
a25
b30
Оператор вывода
16
write( a );
write( a );
writeln( a );
writeln( a );
{ вывод значения
переменной a}
{ вывод значения
переменной a и переход
на новую строчку}
writeln( 'Привет!' );
writeln( 'Привет!' );
{ вывод текста }
writeln( 'Ответ: ', c );
writeln( 'Ответ: ', c );
{вывод текста и значения переменной c}
writeln ( a, '+', b, '=', c );
writeln ( a, '+', b, '=', c );
Сложение двух чисел
17
Задача. Ввести два целых числа и вывести на
экран их сумму.
Простейшее решение:
program qq;
program qq;
var a, b, c: integer;
var a, b, c: integer;
begin
begin
read ( a, b );
read ( a, b );
c := a + b;
c := a + b;
writeln ( c );
writeln ( c );
end.
end.
?
Что плохо?
18
Полное решение
program qq;
program qq;
var a, b, c: integer;
var a, b, c: integer;
begin
begin
writeln('Введите два целых числа');
writeln('Введите два целых числа');
read ( a, b );
read ( a, b );
c := a + b;
c := a + b;
writeln ( a, '+', b, '=', c );
writeln ( a, '+', b, '=', c );
end.
end.
Протокол:
Введите два целых числа
25 30
25+30=55
пользователь
пользователь
компьютер
компьютер
Как изменить значение переменной?
Пример:
19
a
?
5
program qq;
program qq;
var a, b: integer;
var a, b: integer;
begin
begin
a := 5;
a := 5;
b := a + 2;
b := a + 2;
a := (a + 2)*(b – 3);
a := (a + 2)*(b – 3);
b := b + 1;
b := b + 1;
end.
end.
5
b
?
7
5+2
a
5
28
7*4
b
7
8
7+1
Арифметические операции
20
– вычитание
/ деление
+ сложение
* умножение
div деление нацело (остаток отбрасывается)
mod остаток от деления
var a, b: integer;
var a, b: integer;
begin
begin
a := 7*3 - 4; { 17 }
a := 7*3 - 4; { 17 }
a := a * 5; { 85 }
a := a * 5; { 85 }
b := a div 10; { 8 }
b := a div 10; { 8 }
a := a mod 10; { 5 }
a := a mod 10; { 5 }
end.
end.
Какие операторы неправильные?
program qq;
program qq;
var a, b: integer;
var a, b: integer;
21
x, y: real;
x, y: real;
begin
begin
a := 5;
a := 5;
10 := x;
10 := x;
y := 7,8;
y := 7,8;
b := 2.5;
b := 2.5;
x := 2*(a + y);
x := 2*(a + y);
a := b + x;
a := b + x;
end.
end.
имя переменной должно
имя переменной должно
быть слева от знака :=
быть слева от знака :=
целая и дробная часть
целая и дробная часть
отделяются точкой
отделяются точкой
нельзя записывать
нельзя записывать
вещественное значение
вещественное значение
в целую переменную
в целую переменную
Порядок выполнения операций
1) вычисление выражений в скобках
2) умножение, деление, div, mod слева направо
3) сложение и вычитание слева направо
22
1 2 4 5 3 6
z := (5*a+c)/a*(b-c)/ b;
z := (5*a+c)/a*(b-c)/ b;
z
5
ca
ab
(
cb
)
x
5 2
bad
)
(
c
(
)2
ddc
)(
a
2 3 5 4 1 10 6 9 8 7
x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a));
x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a));
Ручная прокрутка программы
23
program qq;
program qq;
var a, b: integer;
var a, b: integer;
begin
begin
a := 5;
a := 5;
b := a + 2;
b := a + 2;
a := (a + 2)*(b – 3);
a := (a + 2)*(b – 3);
b := a div 5;
b := a div 5;
a := a mod b;
a := a mod b;
a := a + 1;
a := a + 1;
b := (a + 14) mod 7;
b := (a + 14) mod 7;
end.
end.
a
?
5
28
3
4
b
?
7
5
4
Вывод целых чисел
program qq;
program qq;
var a, b: integer;
var a, b: integer;
begin
begin
a := 15;
a := 15;
b := 45;
b := 45;
writeln ( a, b );
writeln ( a, b );
writeln ( a:4, b:4 );
writeln ( a:4, b:4 );
end.
end.
символов
символов
на число
на число
24
1545
1545
15 45
15 45
Вывод вещественных чисел
program qq;
program qq;
var x: real;
var x: real;
begin
begin
x := 12.345678;
x := 12.345678;
writeln ( x );
writeln ( x );
writeln ( x:10 );
writeln ( x:10 );
writeln ( x:7:2 );
writeln ( x:7:2 );
end.
end.
всего
всего
символов
символов
всего
всего
символов
символов
в дробной
в дробной
части
части
25
1,234568∙101
1,234568∙101
1.234568E+001
1.234568E+001
1.23E+001
1.23E+001
12.35
12.35
Задания
26
«4»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4 5 7
4+5+7=16
4*5*7=140
«5»: Ввести три числа, найти их сумму, произведение
и среднее арифметическое.
Пример:
Введите три числа:
4 5 7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.33