37edc46202ca2579bbe1a24c157e0476.ppt
- Количество слайдов: 37
Основы программирования
Арифметические выражения. Приоритет арифметических операций Арифметическое выражение состоит из констант, переменных и функций, соединённых знаками арифметических операций. Арифметические операции имеют различный приоритет (старшинство). Если в выражении имеются операции разного приоритета, то в первую очередь выполняются более приоритетные операции. Операции одного приоритета выполняются подряд, слева направо.
Какие операторы неправильные? 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. 3
Арифметические операции Приоритет Операции Название ( ) группировка 1 +, − знаковые операции 2 * умножение / дробное деление мультипликативные 3 div целочисленное операции деление mod остаток от деления + сложение аддитивные операции 4 вычитание
Порядок выполнения операций 1) вычисление выражений в скобках 2) умножение, деление, div, mod слева направо 3) сложение и вычитание слева направо 1 2 4 5 3 6 z : = (5*a+c)/a*(b-c)/ b; 2 3 5 4 1 10 6 9 8 7 x: =(5*c*c-d*(a+b))/((c+d)*(d-2*a)); 5
Обычный знак деления ( / ) в Паскале используется как дробное деление, то есть, делит вещественные числа, и результат деления – вещественное число. Даже если поделить 6 на 3, результат будет не 2, а 2. 0, то есть, вещественное число. Кроме дробного деления есть ещё деление без остатка div. Оно работает только с целыми числами, и результат деления – целое число. Остаток игнорируется. Если же, наоборот, нужен остаток от деления, используется операция mod. Например, выражение 20 div 6 даёт 3, а результат выражения 20 mod 6 равен 2. Пробелы в этих выражениях пропускать нельзя. Операция mod будет полезна при определении, делится ли одна величина на другую. Если остаток от деления равен нулю, - значит, делится без остатка.
7 Ручная прокрутка программы 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. a b ? ? 5 7 28 5 3 4 4
Стандартные арифметические функции Кроме операций над числами можно выполнять более сложные действия, называемые арифметическими функциями. Функции, встроенные в Паскаль, называются стандартными. К ним относятся: № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 На Паскале abs(x) exp(x) ln(x) sqrt(x) sin(x) cos(x) arctan(x) int(x) trunc(x) round(x) frac(x) random(x) В математике |x| e x ln(x) x 2 sin(x) cos(x) arctg(x) тип ц, в в в ц ц в в ц пояснение модуль x экспонента x натуральный логарифм x квадратный корень из x синус x косинус x арктангенс x целая часть числа x целая часть x, преобразованная к целому типу округлённое до ближайшего целого значение x дробная часть числа x случайное число в интервале [0; 1) случайное целое число в интервале [0; x)
Пояснения к некоторым функциям Функции int и trunc делают одно и то же: отбрасывают дробную часть числа. Только int оставляет его вещественным (например, 13. 0), а trunc делает целым. Функция random(x) даёт целое случайное число от 0 до x (не включая x). Пока программа работает, каждое следующее обращение к random даст новое число в этом интервале. Но при следующем запуске программы набор случайных чисел повторится. Чтобы этого избежать, нужно в начале программы поставить команду randomize. Чтобы получить случайные числа не от 0 до x, а в произвольном диапазоне от a до b, нужно использовать формулу: a+random(b-a+1) Простейший пример использования функции в выражении: y: =2*sin(x/2+0. 7); Аргумент функции может содержать и другие функции. Например: c: =trunc(sqrt(sqr(a)+sqr(b))) ;
Процедуры инкремента и декремента Кроме функций над целочисленными переменными можно выполнять процедуры увеличения и уменьшения: № Процедура Что делает Как сделать это же 1 inc(x) увеличивает x на 1 x : = x + 1; 2 inc(x, 12) увеличивает x на 12 x : = x + 12; 3 dec(x) уменьшает x на 1 x : = x – 1; 4 dec(x, 12) уменьшает x на 12 x : = x – 12; По сравнению с присваиванием процедуры inc и dec работают значительно быстрее, но применимы только для переменных целого типа. Кроме того, при больших именах переменных эти процедуры записываются компактнее. Сравните: inc(wozrast); или wozrast: =wozrast+1;
Примеры решения линейных задач Пример 1. Каждый пиксел рисунка занимает 3 байт. Сколько килобайт ( 1 Кбайт = 1024 байт ) требуется для хранения картинки размерами 500 х300 пикселов? program risunok; var a, b, v : real; begin a: =500; b: =300; v: =a*b*3/1024; writeln(’Потребуется ’, v: 3: 1, ’ Кбайт памяти’); end. В команде writeln после переменной V стоят две цифры, отделённые двоеточиями. Это – формат числа. Если его не указывать, вещественное число (типа real) будет выведено в формате с фиксированной точкой. В этой записи первое число обозначает точность, то есть, общее количество цифр, оставляемых в числе. Вторая цифра показывает число знаков после десятичной точки (все остальные знаки округляются). В данном случае ответ будет состоять из 3 -х цифр, одна из которых будет стоять после точки. Если целая часть числа будет больше, чем две цифры, она, несмотря на формат, выведется полностью. Если меньше, чем число цифр, указанное в формате, перед числом будут добавлены пробелы.
Пример 2. Корова съедает в сутки около 70 кг. травы. Пастбищный сезон длится в среднем 150 суток. Примерная урожайность пастбищных культур 250 ц/га. Какова площадь пастбища, необходимого одной корове на пастбищный сезон? Сколько гектаров понадобится, если в стаде 65 коров? program stado; var t, u, s 1, ss, k, m : real; begin m: =70; t: =150; u: =250; k: =65; s 1: =u/m*t; {площадь для одной коровы} ss: =s 1*k; {площадь для всего стада } writeln(’Корове нужно ’, s 1: 4: 1, ’ Га пастбища’); writeln(’Стаду нужно ’, ss: 4: 1, ’ Га пастбища’); end.
Пример 3. Новое колесо выдерживает в среднем 100000 оборотов. Радиус колеса 0, 5 м. Сколько километров пробежит автомобиль с новыми шинами? program koleso; var maxob, r, km, l : real; begin maxob: =100000; r: =0. 5; l: =2*pi*r; {длина окружности колеса} km: =l*maxob; {путь в метрах} km: =km/1000; {путь в километрах} writeln(’Автомобиль пройдёт ’, km: 6: 2, ’ км. ’); end.
ВВОД ДАННЫХ С КЛАВИАТУРЫ Обычно программист и пользователь – это разные люди. Не всегда программисту заранее известно, с какими числами придётся работать пользователю. Поэтому вместо присваивания часто используют другой способ занесения чисел в переменные: ввод с клавиатуры. Программист с помощью команды write (или writeln) задаёт пользователю вопрос, а его ответ ожидает с помощью команды readln. После этой команды в скобках указывается переменная, куда должен попасть ответ, введённый с клавиатуры пользователем. write(’Сколько Вам лет? ’); readln(wozr); Одной командой readln можно ввести и несколько значений. Переменные для этих значений нужно перечислить после readln в скобках через запятую. Пользователь, отвечая на вопрос, должен после каждого числа ставить пробел или нажимать клавишу
Примеры решения диалоговых задач Пример 1. Какой процент составляет число a от числа b? program procent; var a, b, p: real; begin write(’Введите a и b ’); readln(a, b); p: =a/b*100; writeln(a: 3: 1, ’ составляет ’, p: 3: 1, ’% от ’, b: 3: 1); end.
Пример 2. Проводится соревнование по поеданию пирожков. За 10 минут Вася съел a пирожков, а Коля b пирожков. На командном первенстве они составили одну команду. За сколько минут эта команда съест с пирожков? program edoki; var a, b, c, t, vv, vk, v: real; begin write(’Сколько пирожков съел Вася? ’); readln(a); write(’Сколько пирожков съел Коля? ’); readln(b); write(’Сколько пирожков должна съесть команда? ’); readln(с); vv: =a/10; {скорость Васи} vk: =b/10; {скорость Коли} v: =vv+vk; {общая скорость} t: =c/v; writeln(’Команда справится за ’, t: 3: 1, ’ минут’); end.
Пример 3. С клавиатуры вводится цена одного килограмма пшеницы в рублях и копейках. Программа должна рассчитать стоимость n килограммов пшеницы и тоже выразить её в рублях и копейках program cena; var cr, ck, n, sr, sk: integer; c, s: real; begin writeln(’Введите цену 1 кг. пшеницы: ’); write(’- Рубли: ’); readln(cr); write(’- Копейки: ’); readln(ck); write(’Ск. кг. пшеницы надо купить? ’); readln(n); c: =cr+ck/100; {Переводим копейки в доли рубля. } s: =c*n; {Стоимость всей пшеницы} sr: =trunc(s); {Целая часть стоимости – рубли} sk: =trunc(frac(s)*100); {Дробн. часть – доли рубля} writeln(’Вся пшеница стоит ’, sr, ’ руб. и ’, sk, ’ коп. ’); end.
Домашнее задание: Решить задачи, введя величины, значения которых не заданы по условию, с клавиатуры. 1. Известны периметр и длины двух сторон треугольника. Найти третью. 2. Известны площадь и одна из сторон прямоугольника. Найти вторую. 3. Известна площадь круга. Найти его радиус. 4. Буханку хлеба массой m граммов разделили на одинаковые ломти массой m 1. На всю буханку имеется 200 г. масла. По сколько граммов масла придётся на каждый ломоть хлеба? 5. Известна длина окружности. Найти её радиус.
Оператор условия Программы, в которых каждое следующее действие выполняется после предыдущего, называются линейными. Однако часто встречаются нелинейные программы, в которых порядок действия отличается от порядка расположения команд. Ветвление – участок программы, позволяющий выбрать для исполнения, в зависимости от истинности условия, одну из двух групп команд.
Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися. 20
Вариант 1. Блок-схема блок «решение» начало ввод a, b да a > b? max: = a; полная форма ветвления нет max: = b; вывод max конец ? Если a = b? 21
Вариант 1. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); полная форма if a > b then begin условного max : = a; оператора end else begin max : = b; end; writeln ('Наибольшее число ', max); end. 22
Условный оператор if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: • перед else НЕ ставится точка с запятой • вторая часть (else …) может отсутствовать (неполная форма) • если в блоке один оператор, можно убрать слова begin и end 23
Что неправильно? if a > b then begin a : = b; end else begin b : = a; end; if a > b then begin a : = b; end begin else b > a begin b : = a; end; if a > b then begin a : = b; end else begin b : = a; end; 24
Вариант 2. Блок-схема начало ввод a, b max: = a; да b > a? нет неполная форма ветвления max: = b; вывод max конец 25
Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); неполная форма max : = a; условного if b > a then оператора max : = b; writeln ('Наибольшее число ', max); end. 26
Вариант 2 Б. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max : = b; if a? ? ? b then > ? ? ? max : = a; writeln ('Наибольшее число ', max); end. 27
Что неправильно? if a > b then begin a : = b; b else b : = a; if a > b then b a : = b; else b : = a; end; if a > b then begin a : = b; end else b : = a; if a > b then else begin then if b >= a bb: = a; end; 28
Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит» ). Особенность: надо проверить, выполняются ли два условия одновременно. ? Можно ли решить известными методами?
Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x >= 25? нет 'не подходит' конец 30
Вариант 1. Программа program qq; var x: integer; begin writeln('Введите возраст'); read ( x ); if x >= 25 then if x <= 40 then writeln ('Подходит') else writeln ('Не подходит'); end. 31
Вариант 2. Алгоритм начало ввод x да x >= 25 и x <= 40? 'подходит' нет 'не подходит' конец 32
Вариант 2. Программа program qq; var x: integer; begin сложное writeln('Введите возраст'); условие read ( x ); if (x >= 25) and (x <= 40) then writeln ('Подходит') else writeln ('Не подходит') end. 33
Сложные условия Простые условия (отношения) равно < <= > >= = <> не равно Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: • not – НЕ (отрицание, инверсия) • and – И (логическое умножение, конъюнкция, одновременное выполнение условий) • or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) • xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих) 34
Сложные условия Порядок выполнения (приоритет = старшинство) • выражения в скобках • not • and • or, xor • <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки. Пример 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end 35
Сложные условия Истинно или ложно при a : = 2; b : = 3; c : = 4; True not (a > b) True (a < b) and (b < c) True not (a >= b) or (c = d) True (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) FALSE Для каких значений (x (x < < > > 6) 6) x истинны условия: and (x < 10) and (x > 10) or (x < 10) or (x > 10) (- ; 6) (6; 10) (10; ) (- ; 10) (- ; 6) (10; ) (- ; ) (6; ) x<6 x > 10 x < 10 x>6 36
Задания « 4» : Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна « 5» : Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год» , «года» или «лет» . Пример: Введите возраст: 24 Вам 24 года Введите возраст: 57 Вам 57 лет 37