Стандартные математические функции и процедуры Турбо-Паскаля

Uses

CRT, DOS, GRAPH; { Подключение библиотек CRT, DOS, GRAPH }

Label

L1, L2, L3; { Список используемых в программе меток L1, L2, L3.}

Const { Задание значений констант, используемых в программе }

C=10; B=0.15; { С - целое число, В - вещественное число }

Y=True; F='Фамилия'; { Y- Логическая константа, F - Символьная строка }

Type {Описание типов введенных программистом }

M = array [1..100] of integer; { массив из 100 целых чисел }

Var { Описание переменных }

m1, m2: M; { m1, m2 - массивы целых чисел (типа М) }

a1: array [1..100 ] of real; { а1 - массив вещественных чисел }

ch: array [1..200 ] of char; { ch - массив символов }

ch1, ch2: char; { ch1, ch2 - символьные переменные }

s: string [79]; { s - строка до 79 символов }

a, d, x: real; { a, d, x - вещественные переменные }

yes, no: boolean; { yes, no - переменные логического типа }

f1, f2: text; { переменные для описания текстовых файлов }

Procedure NAME_1(Parm1: Real; Var Parm2: Real); { Заголовок процедуры }

{ NAME_1 - имя процедуры, Parm1, Parm2 - параметры }

{ Раздел описания }

BEGIN

{ Раздел выполнения }

END;

Function FUN_1(Parm3, Parm4: Real): Real; { Заголовок функции }

{ FUN_1 - имя функции, Parm3, Parm4 - параметры }

{ Раздел описания }

BEGIN

{ Раздел выполнения }

END;

BEGIN { Начало выполнения программы }

{ Раздел выполнения (тело программы) }

END. { Конец выполнения программы }

Вещественные типы

Наименование типа размет (байт) кол-во цифр диапазон значений
Single Real Duble Extended Comp   7..8 11..12 15..16 19..20 19..20 10-45..+38 10-39..+38 10-324..+308 10-4951..+4932 -263..+263

Целые типы

Наименование типа Размер (байт) Диапазон значений
Byte Shortint Word Integer Longint   0..255 -121..+127 0..65535 -32761..+32767 -2147483641..+2147483647

Логический тип

Переменные логического типа могут принимать значения: False (ложь) или True (истина).

Примеры описания:

VAR

b1, b2, b3, b4: boolean;

Символьный тип

Переменные символьного типа могут принимать значения одного из символов с кодами от #0 до #255, т. е. допускаются буквы русского алфавита и символы псевдографики. Символы с кодами от #0 до #31 (управляющие) в тексте воспринимаются как пробел, а в операторах вывода как символ или команда.

Примеры описания:

VAR

с, ch, e: char;

Строковый тип

Переменная строкового типа задается набором символов, заключенных в кавычки.

Примеры описания:

VAR

s: string[25]; { Длина переменной s может изменяться от 1 до 25 символов }

s1: string; { длина переменной s1 не указывается, наибольшее число символов равно 255 }

Примеры присвоения значения:

s:= 'Привет';

Массив

Массив - упорядоченные данные одного типа, состоящие из переменных (элементов массива). Элементы массива имеют свой порядковый номер (индекс) и значение. Значение присваивается отдельно каждому элементу массива, либо сразу всем элементам массива (копирование одного массива в другой в случае массивов одинакового типа). Массив может быть многомерным (без ограничения), но занимать не более 65520 байт.

Примеры описания:

VAR

M1: array[1..200] of integer; { М1, A1 - одномерные массивы целых и вещественных чисел }

A1: array[100..200] of real;

ch1: array['A'..'Z'] of char; { сh1, ch2 - одномерные массивы символов }

ch2: array[0..255] of char;

Тип диапазон и перечислимый тип задаются программистом.

Примеры описания:

TYPE

Date_M = 1..31;

Rush_b = 'А..Я';

Lat_b = 'A..Z'; {тип диапазон}

Otmetka = (2,3,4,5);

Ball = (1,2,3,4,5,6,7,8,9,10); {перечислимый тип}

VAR

t1, t2: Date_M;

c1: Ruch_b;

s1: Lat_b;

a1, a2: Otmetka;

b: Ball;

Типізовані константи — це змінні, яким надано значення на початку виконання програми. Такі константи називаються змінними, що ініціалізуються, або змінними з початковим значенням. Синтаксис оголошення типізованої константи:

const <ідентифікатор>:<тип> = <вираз>;

Тут значення вказаного справа від знака «=» виразу повинне мати той самий тип, що й ідентифікатор константи.

Зазвичай, ідентифікатори типів використовуються для визначення нових типів або для оголошення змінних. Але існують деякі функції, в яких ім'я типу використовується як параметр: SizeOf (T) - повертає кількість байтів, зайнятих змінною. Ця функція дуже важлива для написання ефективних програм. Функція SizeOf звільняє програміста від необхідності обчислювати об'єм даних в подібних випадках.

Прості типи

Прості типи поділяються на порядкові і дійсні. Порядкові, в свою чергу, поділяються на цілі, символьні, булеві, а також два типи, що визначаються користувачем: зчислені та піддіапазонні. Для всіх порядкових типів Object Pascal існує операція завдання типу для перетворення цілих значень в значення відповідного порядкового типу. Ця операція має вигляд X(T), де T - ім'я порядкового типу, X - цілий вираз.

Цілі типи

Цілі типи поділяються на фізичні (фундаментальні) і логічні (загальні).При програмуванні зручніше користуватися логічними цілими типами, котрі задають об'єм змінних в залежності від типу мікропроцесора та операційного середовища, щоб досягти максимальної ефективності. Фізичні цілі типи використовуються в тих випадках, коли важливим є діапазон значень і фізичний об'єм змінних.

Змінні фізичних типів мають різний діапазон значень в залежності від того, скільки байтів пам'яті вони займають(вик. функцію SizeOf).

До логічних цілих типів відносять Integer та Cardinal, діапазони значень яких визначаються іншими способами. Вони ніяк не зв'язані з діапазонами відповідних фізичних цілих типів.

Над змінними цілого типу можна виконувати різні операції. Слід зауважити, що x2~sqrt(x) (в Turbo Pascal x2~sqr(x)).

Символьні типи

Зазвичай символьні типи даних задають схему взаємозв'язку між частинами пам'яті різного об'єму і деякими стандартними методами кодування. В Object Pascal визначені два фізичних символьних типи і один логічний.

Фізичні типи - AnsiChar - однобайтові символи, WideChar - символи об'ємом в слово (2 байти). Символи, об'ємом в подвійне слово, відсутні.

Логічні символьні типи називаються Char. В класичній мові Pascal Char - єдиний символьний тип. В Delphi Char зазвичай відповідає фізичному символьному типу AnsiChar.

Булеві типи

Представлені такими типами, як Boolean, ByteBool, WordBool, LongBool. В Object Pascal вдалішим є тип Boolean, всі інші використовуються для сумісності з іншими мовами програмування та операційними системами.

Змінні типу Boolean можуть мати значення True або False. А змінні типу WordBool, ByteBool, LongBool можуть мати інші порядкові значення, що зазвичай інтерпретуються як False - у випадку нуля, або True - при ненульовому значенні

На будь-яких порядкових типах визначені функції:

PRED(X)повертає значення, що передує X. До найменшого значення не застосовна.

SUCC(X) повертає значення, що слідує за X. До найбільшого значення не застосовна.

ORD(X) повертає порядковий номер аргументу X. Значення порядкового типу нумеруються числами 0, 1, 2,... починаючи з найменшого. Виняток складає тип INTEGER, для котрого ORD(X)=X.

Такий спосіб виводу дозволяє виділяти певну кількість позицій під кожен

елемент списку виводу. Форматний вивід розглянемо на прикладі оператора

write. Для даних цілого, логічного та літерного типів форматний вивід

має вигляд:

write(вираз:n),

де n задає кількість позицій екрану, які відводяться для виводу значення

виразу. Якщо ця кількість менша за потрібну, мова ПАСКАЛЬ автоматично

розширяє поле виводу. Якщо кількість позицій більша за потрібну,

значення вирівнюється по правому краю поля, а зайві позиції заповнюються

пробілами.

Для кращої наочності виводу інформації існує форматний вивід даних.

Для даних дійсного типу форматний вивід має вигляд:

write(вираз:n:m),

де n задає загальну кількість позицій екрану, які відводяться для виводу

значення виразу, а m - кількість позицій для дробової частини числа.

Слід пам’ятати, що загальна кількість позицій виводу повинна включати

одну позицію на знак числа, і одну позицію на десяткову точку. Якщо

значення m менше за дійсну кількість цифр у дробовій частині, то зайві

цифри відкидаються з округленням. Якщо значення n менше за потрібне,

мова ПАСКАЛЬ автоматично розширяє поле виводу. Якщо кількість позицій

більша за потрібну, значення вирівнюється по правому краю поля, а зайві

позиції заповнюються пробілами.

В Турбо-Паскале применяются следующие условные знаки и служебные слова для описания различных операций:

Приоритет операции Условный знак Выражение Название операции Тип переменных в выражении Тип результата выполнения опрации
      ЛОГИЧЕСКИЕ ОПЕРАЦИИ
  not not A Логическое "не" Логический целый Логический целый
  and A and b Логическое "и" Логический целый Логический целый
  or A or B Логическое "или" Логический целый Логический целый
  xor A xor B Логическое исключающее "или" Логический целый Логический целый
      МАТЕМАТИЧЕСКИЕ ОПЕРАЦИИ
  * x*y Умножение Целый Целый при умножении
  / x/y Деление Смешанный вещественный Целых чисел, иначе вещественный
  div N div M Деление Цлый Целый
  mod N mod M Остаток от деления Целый Целый
  + x + y Сложение Целый вещественный Целый при операции с целыми числами, иначе вещественный
      ОПЕРАЦИИ СРАВНЕНИЯ
  = x=y Равно Число=число Логический
  <> X<>y Не равно Строка=символ Логический
  > x>y Больше Строка=символ Логический
  < x<y< td=""></y<> Меньше Строка=символ Логический
  >= x>=y Больше или равно Строка=символ Логический
  <= x<=y Меньше или равно Строка=символ Логический

Отметим, что операции в скобках имеют высший приоритет, т. е. сначала выполняются операции в скобках, в том числе вычисление аргументов и значения функции. Операции одинакового приоритета выполняются слева направо, например a/c*b соответствует (a/c)*b.

Приоритет операции Условный знак Выражение Название операции Тип переменных в выражении Тип результата выполнения операции
      СПЕЦИФИЧЕСКИЕ ОПЕРАЦИИ
  @ @x Адрес переменной Любой Указатель
  ch1 y ch1 n Сдвиг влево Целый Целый
  shr y chr n Сдвиг вправо Целый Целый
  * c * D Пересечение Множество Множество
  + c + d Обьединение Множество Множество
  - c - d Вычитание Множество Множество
  + s + t Сложение Строка, символ Строковый
  in e in d Вхождение в множество Элемент множество Логический

Под смешанным типом переменных в выражении подразумевается операция с целым и вещественным типом переменных.

Стандартные математические функции и процедуры Турбо-Паскаля

Наименование Функции Тип аргумента Тип значения Результат вычесления
  МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
abs(x) Целый вещественный Целый вещественный Абсолютное значение "x"
sin(x) Вещественный Вещественный Синус"x"рад
cos(x) Вещественный Вещественный косинус"x"рад
arctan(x) Вещественный Вещественный арктангенс "х" (-Pi/2 < y < td)< 2 Pi>
Sqrt(x) вещественный вещественный квадратный корень из "х"(Ц х, где x > 0)
Sqr(x) Целый вещественный Целый вещественный значение "х" в квадрате (х2)
Exp(x) вещественный вещественный значение "е" в степени "х" (ех, где e= 2. 718282...)
Ln(x) вещественный вещественный натуральный логарифм "х" (х > 0)
Frac(x) вещественный вещественный дробная часть "х"
Int(x) Вещественный Вещественный целая часть "х"
Random - вещественный случайное число (0 < =y< 1)
Random(x) Word Word случайное число (0 < =y< x)
Succ(c) Порядковый Порядковый следующий за "с" символ
Pred(c) Порядковый Порядковый предшествующий "с" символ
Наименование процедуры Тип аргумента Тип значения Результат вычесления
  МАТЕМАТИЧЕСКИЕ ПРОЦЕДУРЫ
Inc(x) целый целый Увеличивает "х" на 1 (x:=x+1;)
Dec(x) целый целый Уменьшает "х" на 1 (x:=x-1;)
Inc(x, n) целый целый Увеличивает "х" на n (x:=x+n;)
Dec(x, n) целый целый Уменьшает "х" на n (x:=x-n;)
  ПРОЦЕДУРЫ ПРЕОБРАЗОВАНИЯ ТИПОВ ПЕРЕМЕННЫХ
Str(x, s) x-целый или вещественный s-строковый Последовательность символов "s" из цифр числа "x"
Val(s, v, cod) s-строковый v-целый или вещественный cod- целый Двоичная форма числа "v"последовательности "s" cod=0 (код ошибки)
  ФУНКЦИИ ПРЕОБРАЗОВАНИЯ ТИПОВ ПЕРЕМЕННЫХ
Trunc(x) вещественный LongInt целая часть "х"
Round(x) вещественный LongInt округление "х" до целого
Odd(x) целый логический возвращает True если "х" - нечетное число
Сhr(x) Byte Char Символ ASCII кода "х"
Ord(c) Char Порядковый Byte LongInt ASCII код символа "с" Порядковый номер символа "с"

Поскольку при вызове функции или процедуры производятся некоторые вычисления, преобразования или выполняются другие действия, то вызов функции можно назвать опера-тором-функцией, а вызов процедуры - оператором-процедурой.

При вызове функция возвращает значение, которое необходимо присвоить переменной. Например, запись Y:= Sin(x); позволяет вычислить значение синуса угла "х", которое при-сваивается переменной "Y". Функции имеют высший приоритет, т. е. в выражении сначала вычисляется значение функции, а затем выполняются другие операции. Например: в выра-жении Y:= 5 * Cos(Pi + x); сначала вычисляется значение аргумента, затем значение функ-ции, которое умножается на пять.

При вызове процедура производит определенные действия и может возвращать значения параметров. Процедура может не иметь параметров, например, для инициализации распре-деления случайных чисел вызывается процедура Randomize;. Процедуры могут включать па-раметры, которые необходимо задать при вызове процедуры и параметры, которые возвра-щают значения после выполнения процедуры. Например, при вызове процедуры Str(x, s); параметр "x" должен быть задан, а параметр "S" возвращает строковый вид числа "x". В не-которых процедурах параметры изменяют свое значение, Например, процедура Inc(x); уве-личивает значение "x" на единицу, т. е. возвращает новое значение "x", что соответствует оператору x:=x+1; Таким образом, при вызове процедуры необходимо знать назначение и тип задаваемых параметров.

Оператор выбора CASE

Оператор служит для выбора одного из помеченных вариантов действия (операторов), в зависимости от значения "параметра". Оператор имеет вид:

Case "параметр" Of

"список помеченных операторов"

Else "оператор"

End;

Здесь "параметр" - выражение или переменная порядкового типа.

Из "списка помеченных операторов" выполняется оператор с меткой, включающей значение "параметра", иначе оператор после слова Else.

Конструкция Else "оператор" может отсутствовать. Напомним, что "оператор" может иметь вид: Begin "операторы" end;

Пример операторов для определения порядка целого числа N от 0 до 999:

case N of

0..9: writeln('однозначное');

10..99: writeln('двузначное');

100..999: writeln('трехзначное')

else writeln('Число "N" не входит в указанный диапазон')

end;

Приведем пример программы случайного предсказания одного из десяти вариантов ближайшего будущего с вероятностью 1/20, в остальных случаях - вы "неудачник".

PROGRAM FUTURE;

var N: word;

END.

Здесь функция Random(x) генерирует случайное число, с равномерной плотностью распределения на заданном интервале. Для инициализации распределения в начале программы необходимо вызвать процедуру Randomize.

Условный оператор IF

Условный оператор включает в себя операторы, которые выполняются или не выполняются в зависимости от записанного в операторе условия. Оператор имеет вид:

IF "условие" Then "оператор1" Else "оператор2";

где "условие" - выражение логического типа;
"оператор1" выполняется, если условие верно (True),
"оператор2" выполняется, если условие не верно (False).

Например, вычисление квадратного корня из числа "a" проводится при условии a>=0, операторами:

IF a>=0 Then b:= Sqrt(a)

Else

begin

WriteLn('a<0');

Readln;

Halt

end;

Оператор Halt прекращает выполнение программы.

Схема выполнения условного оператора имеет вид:

В условном операторе может отсутствовать блок Else оператор2; т. е. условный оператор может иметь вид:

IF "условие" Then "опертор1";

например: IFa<0 Then a:= abs(a);

Приведем пример программы определения весовой категории в зависимости от веса спортсмена.

PROGRAM VES; { определение весовой категории спортсмена }

Условная схема программы

CONST A1='легкая категория';

A2='средняя категория';

A3='тяжелая категория';

A4='сверхтяжелая категория';

var

V: integer;

BEGIN

Write('введите вес спортсмена V = '); ReadLn(v);

if V<62 then WriteLn(A1) {вложенный условный оператор }

else if V<75 then WriteLn(A2)

else if V<88 then WriteLn(A3)

else WriteLn(A4)

writeln('Нажмите Enter');

readln;

END.

Для разложения целого числа на цифры удобно применять операции: MOD и DIV. Например, если дано трехзначное число "N" ("N" соответствует "X1X2X3"), то цифры: X1X2X3, составляющие это число определяются блоком операторов:

X3:= N mod 10;

N:= N div 10;

X2:= N mod 10;

N:= N div 10;

X1:= N;

Если требуется определить, делится ли вещественное число "A" нацело на число "B", то можно применять функции Frac(x); и Int(x); например:

x:= A/B;

if Frac(x) = 0 then writeln('Число "A" делится нацело на число "B"');

if Int(x) = x then writeln('Число "A" делится нацело на число "B"');

Условный оператор может применяться для идентификации (распознавания) объекта по определенным признакам составляющих его элементов. Например, если объектом является треугольник, то элементами объекта могут быть: 1) три его угла (a, b, c); 2) три его стороны (a1, b1, c1); и т. д.

Признаками являются значения элементов по которым производится идентификация, например, для углов: 1) один угол > 90 - (один признак); 2) три угла < 90 - (три признака); и т. д.

В результате идентификации объект получает имя. Например, треугольник - остроугольный, либо тупоугольный и т. д.

Если идентификация проводится по одному признаку для нескольких элементов, то несколько условий связываются служебным словом "or", например:

If (a > 90) or (b > 90) or (c > 90) then writeln ('Треугольник - тупоугольный');

Если идентификация проводится по нескольким признакам, число которых равно числу элементов, то несколько условий связываются служебным словом "and", например:

If (a < 90) and (b < 90) and (c < 90) then

writeln('Треугольник - остроугольный');

Если имя объекта составное, то добавляются признаки для идентификации второй части имени и применяются вложенные условные операторы, например, для равнобедренного треугольника:

If (a < 90)and (b < 90) and(c < 90) then

If (a=b) or (b=c) or (a=c) then

writeln('Треугольник - остроугольный и равнобедренный')

else writeln('Треугольник - остроугольный');

Напомним, что условный оператор можно применять для контроля правильности вводимых данных, например:

If (a+b+c)<>180 then

begin

writeln('Суммауглов <> 180');

Halt

end;

Если для идентификации объекта достаточно меньшего числа признаков, чем число элементов, то условия, связанные "and" группируются, а группы соединяются служебным словом "or". Например, четырехугольник имеет элементами четыре стороны (a, b, c, d), а его имя устанавливается по двум признакам (равенство двух пар сторон), тогда можно использовать операторы:

If ((a=b) and (c=d)) or ((a=c) and (b=d)) or ((a=d) and (b=c)) then

writeln('Параллелограмм');


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: