Статья: Арифметические операции. Стандартные математические функции
Название: Арифметические операции. Стандартные математические функции Раздел: Рефераты по информатике, программированию Тип: статья | ||||||||||||||||||||||||||||||||||||
С.А. Григорьев Для арифметических данных, т.е. для числовых констант, переменных и числовых функций определены шесть арифметических операций: + сложение - вычитание * умножение / вещественное деление DIV целая часть от деления MOD остаток от деления Первые четыре операции определены для любых операндов - как целых, так и вещественных, причем результат операции "/" всегда вещественное число, даже если оба операнда целые. Операции DIV и MOD определены только для целых операндов. Кроме того, выделяют унарную операцию "-", которая применяется не к двум, а к одному операнду, например: -x. Вообще говоря, язык Паскаль запрещает использовать в одном выражении разнотипные операнды, однако для арифметических данных сделано исключение. Перед выполнением арифметической операции один или оба операнда автоматически приводятся к одному типу, а затем уже подставляются в выражение. Значение любого выражения всегда имеет определенный тип - такой же, как у операндов после приведения их к одному типу. Правила преобразования целочисленных типов приведены в таблице 2. Таблица 2 Правила преобразования типов
Если один операнд выражения имеет целочисленный тип, а второй - вещественный, то первый автоматически приводится к вещественному типу и значение выражения будет вещественным. Целые значения можно присваивать вещественной переменной, но вещественные значения присвоить целой переменной нельзя! Присваивая значение целочисленной переменной и константе, вы должны следить, чтобы это значение не выходило за пределы диапазона допустимых значений переменной. В языке Паскаль есть возможность явно преобразовать целочисленное значение к любому из целочисленных типов, для этого используются стандартные функции с именами Byte, ShortInt, Word, Integer и LongInt. Например, преобразуем переменную типа Word к типу Integer : VAR x : Word; BEGIN x:=300; WRITELN(x,' ',Integer(x)); x:=65535; WRITELN(x,' ',Integer(x)); END. Программа выведет: 300 300 65535 -1 В первом случае преобразование происходит корректно, а во втором - с изменением значения. Арифметическое выражение может содержать любое количество операндов и, соответственно, любое количество операций, которые выполняются в последовательности, определенной их приоритетом; приоритет операций *, /, DIV, MOD выше, чем операций + и -. Операции одного приоритета выполняются слева направо. Чтобы изменить порядок выполнения операций, вы можете использовать в выражении круглые скобки. Вычислим, например, частное от деления X на сумму A,B и C : X/(A+B+C); Набор встроенных математических функций в языке Паскаль невелик, он включает : 1. Abs(x) - абсолютная величина числа. 2. Int(x) - целая часть вещественного числа. 3. Frac(x) - дробная часть вещественного числа. 4. Trunc(x) - целая часть вещественного числа, преобразованная к типу LongInt. 5. Round(x) - округленное до целого вещественное число, преобразованное к типу LongInt. 6. Sqr(x) - квадрат числа. 7. Sqrt(x) - квадратный корень. 8. Exp(x) - экспонента. 9. Ln(x) - натуральный логарифм. 10. Pi - число пи. 11. Sin(x) - синус. 12. Cos(x) - косинус. 13. Arctan(x) - арктангенс. Все остальные математические функции можно получить, пользуясь этим основным набором; например: десятичный логарифм - Ln(x)/Ln(10), тангенс - Sin(x)/Cos(x) и т.д. Аргументы функций могут быть любыми арифметическими выражениями и задаются в круглых скобках после имени функции, аргументы функций Sin и Cos выражаются в радианах. Вычислим квадрат синуса 70 градусов: Sqr(Sin(Pi/180*70)) Кроме перечисленных выше математических функций Паскаль предоставляет еще несколько полезных числовых функций и процедур разного назначения: 14. High (целый тип) - возвращает наибольшее возможное значение данного типа. 15. Low (целый тип) - возвращает наименьшее возможное значение данного типа. 16. SizeOf (тип) SizeOf (переменная) - возвращает размер в байтах заданного типа или заданной переменной. Функция SizeOf применима к любому типу, в том числе и к структурированным типам - массивам, записям и некоторым другим, речь о которых пойдет ниже. 17. Random(Range:Word) - возвращает целое случайное число в диапазоне от 0 до Range-1. 18. Random - возвращает вещественное случайное число в из отрезка [0,1]. 19. Randomize - процедура, инициализирующая генератор случайных чисел, используя текущее системное время Выведем несколько случайных чисел в диапазоне от 0 до 99: BEGIN Randomize; WRITELN(Random(100)); WRITELN(Random(100)); WRITELN(Random(100)); END. При первом запуске программы она вывела числа 13, 38, 48, при втором запуске - 63, 99, 6, при третьем запуске - 23, 87, 92. Это действие процедуры Randomize - поскольку при каждом запуске системное время, которое отсчитывает операционная система DOS, было различным, мы каждый раз получали различные последовательности случайных чисел. Теперь исключим из программы оператор Randomize; и запустим ее несколько раз - каждый раз мы будем получать тройку чисел 0, 3, 86. Обратите внимание, что процедура используется в операторе вызова, а функция используется в выражении. Запись Random(100); неверна, поскольку Random - это функция, но также неверна и запись WRITELN(Randomize);. Можно считать, что различие между процедурой и функцией состоит в том, что процедура выполняет некоторую последовательность действий, а функция вычисляет некоторое значение. Заметим, что READ и WRITE - это тоже процедуры. Для работы с внутренним двоичным представлением двухбайтовых целых чисел (типа Word или Integer) существуют функции: 20. Lo(x) - возвращает младший байт аргумента. 21. Hi(x) - возвращает старший байт аргумента. 22. Swap(x) - меняет местами младший и старший байты. Сделаем отступление о двоичной системе счисления. Все данные в памяти компьютера хранятся закодированными в двоичной системе. Любая переменная занимает целое число байтов, а каждый байт есть последовательность из 8 двоичных цифр - битов. Например, значение переменной типа Byte, равное 11, хранится как последовательность битов 0000 1011, а если переменная имеет тип Word, то ее значение кодируется как 0000 0000 0000 1101. 1024 байта (или 2 в 10-й степени) имеют свое название - 1К байт, иногда эту величину также называют килобайт; 1024 К байт называют мегабайт. Пусть переменная t типа Word имеет значение 40000, или 1001 1100 0100 0000 в двоичной системе, тогда функция Lo(t) возвратит 64 ( = 0100 0000 ), функция Hi(t) возвратит 156 (= 1001 1100) и функция Swap(t) возвратит 16540 ( = 0100 0000 1001 1100 ). Для целочисленных переменных определены процедуры: 23. Inc(x) Inc(x,d) 24. Dec(x) Dec(x,d). Здесь x - имя переменной, в - любое целочисленное выражение. Процедура Inc увеличивает значение переменной на d, а процедура Dec - уменьшает на d; второй аргумент этих процедур можно не задавать, тогда он будет принят равным 1. Например, вместо операторов a:=a+3; b:=b-1; c:=c+a+b; мы могли бы написать Inc(a,3); Dec(b); Inc(c,a+b); , и такой способ записи был бы предпочтительней. С.А. Григорьев Для хранения символьной информации в Паскале предусмотрен специальный тип данных Char. Допустимы переменные, нетипизированные и типизированные константы такого типа. Данные типа Char занимают 1 байт памяти. Неименованные символьные константы записываются в программе либо в виде 'символ', либо в виде #номер. Все имеющиеся символы пронумерованы от 0 до 255, символы с 0-го по 31-й - невидимые, как правило, они не отображаются на экране, 32-й символ - это пробел. Приведем также номера некоторых других символов (хотя помнить эти номера нет никакой необходимости): '0'...'9' - 48...57, 'A'...'Z' - 65...90, 'a'...'z' - 97...122, 'А'...'Я' - 128...159, 'а'...'п' - 160...175, 'р'...'я' - 224...239. Некоторые из невидимых символов могут оказаться вам полезны: символ #7 - "звуковой сигнал", при выводе пищит; символ #10 - "конец строки", при выводе он перемещает текущую позицию вывода на одну строку вниз; символ #13 - "возврат каретки" - перемещает текущую позицию вывода в начало текущей строки. Запомните, что клавиша Enter генерирует два символа - #10 и #13, это может вам впоследствии пригодиться. Символьные данные можно вводить и выводить процедурами READ и WRITE при вводе и выводе символьные значения изображаются без апострофов. Для символьных величин определены функции: 25. Ord(c) - возвращает номер символа. 26. Pred(c) - возвращает символ с номером, меньшим на 1. 27. Succ(c) - возвращает символ с номером, большим на 1. Эти функция, однако, определены не только для символов, но для любого порядкового типа данных. Порядковым типом называется такой тип, все допустимые значения которого можно пронумеровать от 0 до некоторого N (в математике к этому понятию близко понятие счетного множества). Из известных нам типов порядковыми являются все целочисленные типы: Byte, ShortInt, Word, Integer, LongInt - и не являются порядковыми все вещественные типы. Значение функции Ord от числового аргумента равно самому этому аргументу, Pred(x) дает значение x-1, а Succ(x) - значение x+1. Функция 28. Chr(n). в некотором смысле обратна функции Ord : для заданного числового аргумента n она возвращает символ с соответствующим номером. Для символьных переменных (так же, как и для любых переменных порядкового типа) определены процедуры Inc и Dec. Еще одна специфически символьная функция: 29. UpCase(c). Она преобразует значение аргумента, если это маленькая латинская буква, в соответствующую заглавную букву. К сожалению, функция не работает для русских букв. Напишем простую программу, обрабатывающую символьные величины. VAR c : Char; n : Byte; CONST Blank =' '; Space:Char =Blank; BEGIN WRITE('введите какой-нибудь символ '); READ(c); WRITELN('вы ввели символ',Space,c,Space,'его номер=',Ord(c)); WRITELN('соседниеснимсимволы :',Space,Pred(c),Space, 'и',Space,Succ(c)); WRITELN('UpCase(',c,')=',UpCase(c)); WRITELN; Space:='"'; WRITE('теперь введите число от 33 до 255 '); READ(n); WRITELN('символсномером ',n,' - это ',Space,Chr(n),Space); WRITELN; END. |