1 Программирование на языке Паскаль Тема 1. Введение
2 Алгоритм Свойства алгоритма дискретность: состоит из отдельных шагов (команд) понятность: должен включать только команды, известные исполнителю (входящие в СКИ) определенность: при одинаковых исходных данных всегда выдает один и тот же результат конечность: заканчивается за конечное число шагов массовость: может применяться многократно при различных исходных данных корректность: дает верное решение при любых допустимых исходных данных Алгоритм – это четко определенный план действий для исполнителя.
3 Программа Программа – это алгоритм, записанный на каком-либо языке программирования набор команд для компьютера Команда – это описание действий, которые должен выполнить компьютер. откуда взять исходные данные? что нужно с ними сделать? 1970 – язык Паскаль (Н. Вирт) Оператор – это команда языка программирования высокого уровня.
4 Простейшая программа program qq; begin { начало программы } end. { конец программы } program qq; begin { начало программы } end. { конец программы } комментарии в фигурных скобках не обрабатываются Что делает эта программа? ? название программы
5 Вывод текста на экран program qq; begin write('2+'); { без перехода } writeln('2=?'); { на новую строку} writeln('Ответ: 4'); end. program qq; begin write('2+'); { без перехода } writeln('2=?'); { на новую строку} writeln('Ответ: 4'); end. Протокол: 2+2=? Ответ: 4
6 Задания «4»: Вывести на экран текст "лесенкой" Вася пошел гулять «5»: Вывести на экран рисунок из букв Ж ЖЖЖ ЖЖЖЖЖ ЖЖЖЖЖЖЖ HH HH ZZZZZ
7 Переменные Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол: Введите два целых числа =55 компьютер пользователь компьютер считает сам! 1. Как ввести числа в память? 2. Где хранить введенные числа? 3. Как вычислить? 4. Как вывести результат? ?
8 Программа program qq; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. program qq; begin { ввести два числа } { вычислить их сумму } { вывести сумму на экран } end. Псевдокод: алгоритм на русском языке с элементами Паскаля. Компьютер не может исполнить псевдокод! !
9 Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Значение Имя Поместится? ? Другой тип данных В переменной хранятся данные определенного типа! !
10 Имена переменных В именах МОЖНО использовать латинские буквы (A-Z) цифры знак подчеркивания _ заглавные и строчные буквы не различаются В именах НЕЛЬЗЯ использовать русские буквы пробелы скобки, знаки +, =, !, ? и др. имя не может начинаться с цифры Какие имена правильные?? AXby R&B 4Wheel Вася PesBarbos TU154 [QuQu] _ABBA A+B
11 Переменные Типы переменных: integer{ целая } real{ вещественная } и другие… Объявление переменных: var a, b, c: integer; Выделение места в памяти variable – переменная тип – целые список имен переменных
12 Как записать значение в переменную? a := 5; Оператор присваивания При записи нового значения старое стирается! ! 5 5 Оператор – это команда языка программирования (инструкция). Оператор присваивания – это команда для записи нового значения в переменную.
13 Блок-схема линейного алгоритма начало конец c := a + b; ввод a, b вывод c блок «начало» блок «ввод» блок «процесс» блок «вывод» блок «конец»
14 Как ввести значение с клавиатуры read ( a ); 1. Программа ждет, пока пользователь введет значение и нажмет Enter. 2. Введенное значение записывается в переменную a. ! Оператор ввода 5 5
15 Ввод значений двух переменных через пробел: через Enter: a 25 b 30 a 25 b 30 read ( a, b ); Ввод значений двух переменных (через пробел или Enter).
16 Оператор вывода { вывод значения переменной a} { вывод значения переменной a и переход на новую строчку} { вывод текста } {вывод текста и значения переменной c} write( a ); writeln( a ); writeln( 'Привет!' ); writeln( 'Ответ: ', c ); writeln ( a, '+', b, '=', c );
17 Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Простейшее решение: program qq; var a, b, c: integer; begin read ( a, b ); c := a + b; writeln ( c ); end. program qq; var a, b, c: integer; begin read ( a, b ); c := a + b; writeln ( c ); end. Что плохо? ?
18 Полное решение program qq; var a, b, c: integer; begin writeln('Введите два целых числа'); read ( a, b ); c := a + b; writeln ( a, '+', b, '=', c ); end. program qq; var a, b, c: integer; begin writeln('Введите два целых числа'); read ( a, b ); c := a + b; writeln ( a, '+', b, '=', c ); end. Протокол: Введите два целых числа =55 компьютер пользователь
19 Как изменить значение переменной? program qq; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); b := b + 1; end. program qq; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); b := b + 1; end. a ? 5 5 b ? a 5 7*4 28 Пример: b
20 Арифметические операции + сложение – вычитание * умножение / деление div деление нацело (остаток отбрасывается) mod остаток от деления var a, b: integer; begin a := 7*3 - 4; { 17 } a := a * 5; { 85 } b := a div 10; { 8 } a := a mod 10; { 5 } end. var a, b: integer; begin a := 7*3 - 4; { 17 } a := a * 5; { 85 } b := a div 10; { 8 } a := a mod 10; { 5 } end.
21 program qq; var a, b: integer; x, y: real; begin a := 5; 10 := x; y := 7,8; b := 2.5; x := 2*(a + y); a := b + x; end. program qq; var a, b: integer; x, y: real; begin a := 5; 10 := x; y := 7,8; b := 2.5; x := 2*(a + y); a := b + x; end. Какие операторы неправильные? имя переменной должно быть слева от знака := целая и дробная часть отделяются точкой нельзя записывать вещественное значение в целую переменную
22 Порядок выполнения операций 1)вычисление выражений в скобках 2)умножение, деление, div, mod слева направо 3)сложение и вычитание слева направо z := (5*a+c)/a*(b-c)/ b; x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a));
23 Ручная прокрутка программы program qq; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); b := a div 5; a := a mod b; a := a + 1; b := (a + 14) mod 7; end. program qq; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); b := a div 5; a := a mod b; a := a + 1; b := (a + 14) mod 7; end. ab ??
24 Вывод целых чисел program qq; var a, b: integer; begin a := 15; b := 45; writeln ( a, b ); writeln ( a:4, b:4 ); end. program qq; var a, b: integer; begin a := 15; b := 45; writeln ( a, b ); writeln ( a:4, b:4 ); end символов на число символов на число
25 Вывод вещественных чисел program qq; var x: real; begin x := ; writeln ( x ); writeln ( x:10 ); writeln ( x:7:2 ); end. program qq; var x: real; begin x := ; writeln ( x ); writeln ( x:10 ); writeln ( x:7:2 ); end всего символов в дробной части 1.23E E+001 1,
26 Задания «4»: Ввести три числа, найти их сумму и произведение. Пример: Введите три числа: =16 4*5*7=140 «5»: Ввести три числа, найти их сумму, произведение и среднее арифметическое. Пример: Введите три числа: =16 4*5*7=140 (4+5+7)/3=5.33
27 Домашнее задание Составить программы на языке Pascal для следующих задач: Вычислить значение Z: Найти сумму цифр четырехзначного числа. Вывести на экран рисунок «солнышка», состоящего из букв русского алфавита.
28 Программирование на языке Паскаль Тема 2. Ветвления
29 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.
30 Вариант 1. Блок-схема начало max:= a; ввод a,b вывод max a > b? max:= b; конец да нет полная форма ветвления блок «решение» Если a = b? ?
31 Вариант 1. Программа max := a ; max := b ; полная форма условного оператора program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); if a > b then begin end else begin end; writeln ('Наибольшее число ', max); end.
32 Условный оператор if then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; if then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: перед else НЕ ставится точка с запятой вторая часть ( else …) может отсутствовать (неполная форма) если в блоке один оператор, можно убрать слова begin и end
33 Что неправильно? if a > b then begin a := b; end else b := a; end; if a > b then begin a := b; end else b := a; end; if a > b then begin a := b; else begin b := a; end; if a > b then begin a := b; else begin b := a; end; if a > b then begin a := b; end; else begin b := a; end; if a > b then begin a := b; end; else begin b := a; end; if a > b then begin a := b; end else b > a begin b := a; end; if a > b then begin a := b; end else b > a begin b := a; end; begin end begin end
34 Вариант 2. Блок-схема неполная форма ветвления начало max:= a; ввод a,b вывод max max:= b; конец да нет b > a?
35 Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max := a; if b > a then max := b; writeln ('Наибольшее число ', max); end. неполная форма условного оператора
36 Вариант 2Б. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max := b; if ??? then ??? writeln ('Наибольшее число ', max); end. max := a; a > b
37 Что неправильно? if a > b then begin a := b; else b := a; if a > b then begin a := b; else b := a; if a > b then begin a := b; end; else b := a; if a > b then begin a := b; end; else b := a; if a > b then else begin b := a; end; if a > b then else begin b := a; end; if a > b then a := b; else b := a; end; if a > b then a := b; else b := a; end; a := b end a := b if b >= a then b := a; if b >= a then b := a;
38 Задания «4»: Ввести три числа и найти наибольшее из них. Пример: Введите три числа: Наибольшее число 15 «5»: Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: Наибольшее число 56