Скачать презентацию Основы программирования Арифметические выражения Приоритет арифметических операций Скачать презентацию Основы программирования Арифметические выражения Приоритет арифметических операций

37edc46202ca2579bbe1a24c157e0476.ppt

  • Количество слайдов: 37

Основы программирования Основы программирования

Арифметические выражения. Приоритет арифметических операций Арифметическое выражение состоит из констант, переменных и функций, соединённых Арифметические выражения. Приоритет арифметических операций Арифметическое выражение состоит из констант, переменных и функций, соединённых знаками арифметических операций. Арифметические операции имеют различный приоритет (старшинство). Если в выражении имеются операции разного приоритета, то в первую очередь выполняются более приоритетные операции. Операции одного приоритета выполняются подряд, слева направо.

Какие операторы неправильные? program qq; var a, b: integer; x, y: real; begin имя Какие операторы неправильные? 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 Арифметические операции Приоритет Операции Название ( ) группировка 1 +, − знаковые операции 2 * умножение / дробное деление мультипликативные 3 div целочисленное операции деление mod остаток от деления + сложение аддитивные операции 4 вычитание

Порядок выполнения операций 1) вычисление выражений в скобках 2) умножение, деление, div, mod слева Порядок выполнения операций 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 : = 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 и 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. Каждый пиксел рисунка занимает 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 кг. травы. Пастбищный сезон длится в Пример 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 м. Пример 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 в скобках через запятую. Пользователь, отвечая на вопрос, должен после каждого числа ставить пробел или нажимать клавишу write(’Введите размеры вагона ’); readln(a, b, c);

Примеры решения диалоговых задач Пример 1. Какой процент составляет число a от числа b? Примеры решения диалоговых задач Пример 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 пирожков, Пример 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. С клавиатуры вводится цена одного килограмма пшеницы в рублях и копейках. Программа Пример 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: Вариант 1. Блок-схема блок «решение» начало ввод a, b да a > b? max: = a; полная форма ветвления нет max: = b; вывод max конец ? Если a = b? 21

Вариант 1. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых Вариант 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 Условный оператор if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: • перед else НЕ ставится точка с запятой • вторая часть (else …) может отсутствовать (неполная форма) • если в блоке один оператор, можно убрать слова begin и end 23

Что неправильно? if a > b then begin a : = b; end else Что неправильно? 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? Вариант 2. Блок-схема начало ввод a, b max: = a; да b > a? нет неполная форма ветвления max: = b; вывод max конец 25

Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых Вариант 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('Введите два Вариант 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 Что неправильно? 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 лет включительно. Ввести возраст Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит» ). Особенность: надо проверить, выполняются ли два условия одновременно. ? Можно ли решить известными методами?

Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x >= Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x >= 25? нет 'не подходит' конец 30

Вариант 1. Программа program qq; var x: integer; begin writeln('Введите возраст'); read ( x Вариант 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? Вариант 2. Алгоритм начало ввод x да x >= 25 и x <= 40? 'подходит' нет 'не подходит' конец 32

Вариант 2. Программа program qq; var x: integer; begin сложное writeln('Введите возраст'); условие read Вариант 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 • Сложные условия Порядок выполнения (приоритет = старшинство) • выражения в скобках • 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; Сложные условия Истинно или ложно при 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» : Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна « 5» : Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год» , «года» или «лет» . Пример: Введите возраст: 24 Вам 24 года Введите возраст: 57 Вам 57 лет 37