Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Function ...

Читайте также:
  1. endfunction
  2. FUNCTIONAL STYLES
  3. FUNCTIONS OF PROSODY
  4. Key(s) Function
  5. Key(s) Function
  6. New playback function in piano roll.
  7. Notion, attributes, functions, sources and system of law. Notion and structure of legal rules.
  8. Online services and functionality
  9. Prosody and intonation. Utterance prosody and its linguistic functions.

Procedure...

Begin

{раздел операторов}

End.

Оператор присваивания — один из самых простых и наиболее часто используемых операторов в любом языке программирования, в том числе и в Pascal. Он предназначен для вычисления нового значения некоторой переменной, а также для определения значения, возвращаемого функцией. В общем виде оператор присваивания можно записать так:

переменная:= выражение;

Оператор выполняется следующим образом. Вычисляется значение выражения в правой части присваивания. После этого переменная, указанная в левой части, получает вычисленное значение. При этом тип выражения должен быть совместим по присваиванию с типом переменной! Как отмечалось ранее, тип выражения определяется типом операндов, входящих в него, и зависит от операций, выполняемых над ними.

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

X:= (Y + Z) / (2 + Z * 10) - 1/3;

LogPer:= (A > B) And (C <= D);

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

Операнд 1 Операнд 2 Результат
Integer Integer Integer
Integer Real Real
Real Integer Real
Real Real Real

Для операции деления тип результата в зависимости от типа операнда будет таким:

Операнд 1 Операнд 2 Результат
Integer Integer Real
Integer Real Real
Real Integer Real
Real Real Real

В Pascal есть операции целочисленного деления и нахождения остатка от деления. При выполнении целочисленного деления (операция div) остаток от деления отбрасывается.

Например, 15 div 3 = 5; 18 div 5 = 3; 123 div 10 = 12, 7 div 10 = 0.

С помощью операции mod можно найти остаток от деления одного целого числа на другое.

Например, 15 mod 3 = 0; 18 mod 5 = 3; 123 mod 10 = 3, 7 mod 10 = 7.

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

Порядок действий при вычислении значения выражения:

  1. вычисляются значения в скобках;
  2. вычисляются значения функций;
  3. выполняется унарные операции (унарный минус — смена знака);
  4. выполняются операции умножения и деления (в том числе целочисленного деления и нахождения остатка от деления);
  5. выполняются операции сложения и вычитания.

Встроенные математические функции языка Pascal

Математическая запись Запись на Pascal Назначение
cos x cos(x) Косинус x радиан
sin x sin(x) Синус x радиан
e x exp(x) Значение e в степени x
[ x ] trunc(x) Целая часть числа x
| x | abs(x) Модуль числа x
x 2 sqr(x) Квадрат числа x
sqrt(x) Квадратный корень из x
{ x } frac(x) Дробная часть x
arctg x arctan(x) Арктангенс числа x
ln x ln(x) Натуральный логарифм x
p Pi Число p

Возведение в степень (кроме возведения в квадрат и возведения в степень числа e) отсутствует. Для возведения в произвольную степень можно воспользоваться очевидным равенством: xy =e y ln x . Для возведения числа в натуральную степень можно написать собственную функцию. Например,

{Функция возведения вещественного числа X в натуральную степень N}

Function Stepen(X: Real; N: Integer): Real;

Var I: Integer; St: Real;

Begin

St:= 1;

For I:= 1 To N Do St:= St * X;

Stepen:= St;

End;

Другой способ получить натуральное значение z = xy, где x, y — натуральные, это сделать так: Z:= Round(Exp(Y * Ln(X))).

Примечание. Интересной является задача получения степени любого целого числа (за исключением нуля), если основание степени — неотрицательное целое, без использования развилки. Одно из возможных решений: (–1)*Ord(Odd(Y)) * Exp(Y * Ln(X)) + Ord(Odd(Y+1)) * Exp(Y * Ln(X)). Здесь Ord(K) — функция, возвращающая порядковый номер величины K в том или ином порядковом типе (в примере использовано свойство, что порядковый номер False равен 0, а порядковый номер True — 1).

Примеры записи математических выражений:

Математическая запись Запись на Pascal
1. x 2 – 7 x + 6 Sqr(x) - 7 * x + 6
2. (Abs(x) - Abs(y)) / (1 + Abs(x * y))
3. Ln(Abs((y - Sqrt(Abs(x))) * (x - y / (z + Sqr(x) / 4))))

Логический операнд — это конструкция соответствующего языка программирования, которая задает правило для вычисления одного из двух возможных значений: True или False.

Чаще всего логические выражения используют в операторах присваивания или для записи того или иного условия. Составными частями логических выражений могут быть: логические значения (True, False); логические переменные; отношения.

Например, 1) Y:=True; 2) Z:=False; 3) LogPer:=A > B; 4) Log1:=(A = B) And (C <= D).

Как видно из примеров, отношение — это два выражения, разделенных между собой знаком операции отношения (>, <, =, <>, <=, >=). Отношение является простейшей конструкцией логического выражения. Оно вычисляет результат True, если выполняется заданное соотношение, и False — в противном случае.

Примечание. Несмотря на то, что операции отношения =, <>, >=, <= определены для вещественных типов, реально они в большинстве случаев корректно не работают в силу того, что множество вещественных величин, представимых в памяти ЭВМ, дискретно. Поэтому их следует, если это возможно, избегать. В том случае, когда всё-таки для вещественных возникает необходимость вычисления указанных отношений, разумно проверять вещественные величины не на равенство, а на близость расположения друг к другу, т.е. заменять отношения вида A=B отношениями вида |A-B|<E, где E — достаточно малое по абсолютной величине число (в общем случае — так называемое машинное епсилон).

В языке Pascal операции отношения определены для величин любого порядкового типа (целые, символьный, логический, перечислимый, диапазон). Операции отношения могут быть выполнены также над строковыми выражениями. Сравнение двух строк выполняется посимвольно слева направо в соответствии с их лексикографической упорядоченностью в таблице кодов ASCII. Эта упорядоченность предполагает, что "1"<"2", "a"<"b", "B"<"C" и т.д. Как только в процессе попарных сравнений символов с одинаковой порядковой позицией обнаруживается больший по коду ASCII символ, данный процесс прекращается, и считается, что строка с этим символом соответственно больше другой строки. Если строки имеют разную длину и их символы совпадают до последнего знака, то считается, что более короткая строка меньше.

Логическое выражение — это логический операнд или последовательность логических операндов, разделенных между собой знаками логических операций (NOT, AND, OR, XOR).

Порядок действий при вычислении значения логического выражения:

  1. вычисляются значения в скобках;
  2. вычисляются значения функций;
  3. выполняется унарные операции (операция NOT);
  4. выполняется операция AND;
  5. выполняются операции OR, XOR;
  6. выполняются операции отношения.

Действия выполняются слева направо с учетом их приоритета. Желаемая последовательность операций обеспечивается путем расстановки скобок в соответствующих местах выражения.

При реализации некоторых программ удобно использовать функции, которые имеют логическое значение. Обычно они используются для того, чтобы на некоторый вопрос получить ответ “ДА” или “НЕТ”.

Например, следующая функция возвращает True, если её аргумент — простое число, и False — в противном случае:

Function Simple (Pr: Integer): Boolean;

Var I: Integer; LogPer: Boolean;

Begin I:= 2; {счетчик}

Repeat

LogPer:= (Pr Mod I = 0); {логическая переменная, принимающая

значение TRUE,если число Pr составное}

I:= I + 1

Until (I > Pr Div 2 + 1) Or (LogPer);

{цикл завершаем в том случае, когда счетчик становится больше половины

данного числа или обнаруживаем, что число составное}

Simple:= Not LogPer

{значение функции равно TRUE, если число простое, и FALSE — в противном случае}

End;

Рассмотрим примеры задач, где алгоритм решения является линейным.

Задача 1. Скорость первого автомобиля v 1 км/ч, второго — v 2 км/ч, расстояние между ними s км. Какое расстояние будет между ними через t ч, если автомобили движутся в разные стороны?

Согласно условию задачи искомое расстояние s 1= s +(v 1+ v 2) t (если автомобили изначально двигались в противоположные стороны) или s 2=|(v 1+ v 2) t-s| (если автомобили первоначально двигались навстречу друг другу).

Чтобы получить это решение, необходимо ввести исходные данные, присвоить переменным искомое значение и вывести его на печать.

Program Car;

Var V1, V2, T, S, S1, S2: Real;

Begin

Write('Введите скорости автомобилей, расстояние между ними и время движения:');

ReadLn(V1, V2, S, T);

S1:= S + (V1 + V2) * T;

S2:= Abs((V1 + V2) * T - S);

WriteLn('Расстояние будет равно ', S1:7:4, ' км или ', S2:7:4, ' км')

End.

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

Разумно, чтобы программа вела диалог с пользователем, т.е. необходимо предусмотреть в ней вывод некоторых пояснительных сообщений. В противном случае даже сам программист может через некоторое время забыть, что необходимо вводить и что является результатом.

Для всех величин в программе объявлен тип Real, что связано со стремлением сделать программу более универсальной и работающей с как можно большими наборами данных.

Задача 2. Записать логическое выражение, принимающее значение TRUE, если точка лежит внутри заштрихованной области, иначе — FALSE.

Прежде всего обратим внимание на то, что эту сложную фигуру целесообразно разбить на несколько более простых: треугольник, лежащий в I и IV координатных четвертях, и треугольник, лежащий во II и III четвертях. Таким образом, точка может попасть внутрь одной из этих фигур, либо на линию, их ограничивающую. Количество отношений, описывающих какую-либо область, обычно совпадает с количеством линий, эту область ограничивающих. Чтобы точка попала внутрь области, необходима истинность каждого из отношений, поэтому над ними выполняется операция AND. Так вся область была разбита на несколько, то между отношениями, описывающими каждую из них, используется операция OR.

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

(X >= 0) And (Y >= 1.5 * X – 1) And (Y <= X) OR (X <= 0) And (Y >= –1.5 * X – 1) And (Y <= –X)

Задача 3. Вычислить значение выражения

Для решения задачи достаточно ввести все данные, безошибочно записать выражение и вывести результат. Примечание. При решении этой задачи не учитывается область определения выражения, считается, что вводятся только допустимые данные.

Program Expression;

Var X, Z: Real;

Begin

Write('Введите значения переменной X: '); ReadLn(X);

Z:= 6 * ln(sqrt(exp(x+1)+2*exp(x)*cos(x))) /

ln(x - exp(x+3) * sin(x)) + abs(cos(x) / exp(sin(x)));

WriteLn('Значение выражения: ', Z: 12: 6)

End.

 




Дата добавления: 2014-12-19; просмотров: 45 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.015 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав