Операторы вывода (записи)




Вывод числовых данных, символов, строк и булевских значений на экран дисплея осуществляется с помощью операторов вызова стандартных процедур: WRITE(X1, Х2, ХЗ,...), или WRITELN(X1, Х2, ХЗ,...).

Отличие этих операторов состоит в том, что WRITELN после распечатки списка выражений XI, Х2, ХЗ,... автоматически переводит курсор в начало следующей строки, а после выполнения оператора WRITE курсор остается за последним символом, выведенным на экран.

Оператор WRITELN с пустым списком выводимых данных выводит строку пробелов. Управление форматом выводимых данных осуществляется непосредственно в операторе вывода. Для этого используется запись элемента из списка { X i} в виде — X [: В [: С ]], где X — выражение, идентификатор переменной или константа, В – ширина поля для вывода данного X, С – точность (только для типа REAL). Точность представления определяет количество цифр после точки (дробная часть числа). Если указанная ширина поля оказывается 'слишком большой', то
значение данного выводится со стоящими впереди пробелами. Если указанная ширина ноля 'мала', то в строке вывода для значения этого данного добавляются (автоматически) необходимые позиции. Параметры формата (ширина поля B и точность С) могут быть константой, переменной или выражением целого типа.

Пример 2.

Описать формат вывода арифметического выражения X, численное значение которого |X|< 1000, с точностью до пяти знаков после десятичной точки.

Решением этой задачи является оператор: WRITELN(X: 10: 5). На рисунке 1 показана схема формата Х:10:5.

Цифра 10 определяет ширину поля, то есть общее количество литер, отведенное для отображения вещественного числа вместе со знаком и десятичной точкой. Цифра 5 – точность - указывает количество цифр мантиссы. В этом примере результат вычисления X выводится на экран дисплея в форме вещественного числа с
фиксированной точкой.

Если задать формат в виде Х:8, то вещественное число будет представлено в формате с плавающей точкой и будет включать для своего представления восемь литер. Ограничение ширины поля скажется на разрядности мантиссы. Для вывода целой части X можно форматировать — Х:5:0. В этом случае 'точность' равна 0 и десятичная точка не отображается на экране. Дробная часть вещественного числа округляется с указанной точностью, а не отбрасывается.

Таблица 15. Примеры форматов вещественных чисел

X Тип Формат Результат Примечание
12.336 REAL X:5:2 12.34 Формат вещественного числа с фиксированной точкой
12.334 REAL X:5:2 12.33
-12.339 REAL X:6:2 -12.34
-0.0123 REAL X:6:3 -0.012
12.334 REAL X:5:0   Округление вещественного числа до целого числа с помощью формата
12.534 REAL X:5:0  
-12.534 REAL X:5:0 -13
-123.456 REAL X:10 1.235E+02 Формат вещественного числа с плавающей точкой
-12.3456 REAL X:8 -1.2E+01
12.3456 REAL X:8 1.2E+01
0.012 REAL X:11 1.2000E-02
0.0156 REAL X 1.5600000000E+02 Бесформатный вывод вещественного числа
12.3456 REAL X -1.2345600000E+01

 

Оператор присваивания

Вычисления в большинстве случаев реализуются с помощью оператора присваивания, который имеет формат:

<Идентификатор> := <Выражение>;

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

Арифметические выражения используют арифметические операции: *, /, DIV, MOD, AND, OR, +, -. Операнды имеют тип REAL или INTEGER.

Пример арифметического выражения:

X:= (1 - В)*ЕХР(-0.5*А)/(1 - А).

Список встроенных арифметических функций, наиболее часто используемых в программах на Паскале, приведен в таблице 8. Последовательность выполнения операции в выражении определяется их приоритетом. В первую очередь делаются операции умножения и деления (*, /), а в последнюю — сложения и вычитания (+, -) слева направо. Приоритетность арифметических операций:

 

1. Вычисления в круглых скобках;

2. Вычисления значений функции;

3. Унарные операции (NOT, унарный +, унарный -);

4. Арифметические операции 1 уровня (*, /, div, mod, and, shl, shr);

5. Арифметические операции 2 уровня (+, -, or, xor);

6. Операции отношения (=, <, >, <>, >=, <=, in);

 

В языке существуют ограничения на преобразование типов данных путем присваивания. Переменной А типа REAL можно присвоить значение переменной В типа INTEGER ==> А:= В. Однако обратное присвоение В:= А вызовет прерывание по причине несоответствия типов.

Для этого случая предусмотрены функции преобразования типов TRUNC (A) или ROUND (A), то есть используется присвоение вида В:= TRUNC(A) или В:= ROUND(A).

 

Примеры линейных программ

Пример 3. Рассчитать площадь шара в кв. см. Радиус шара ввести с клавиатуры в миллиметрах.

PROGRAM PR3; {Программа вычисляет площадь поверхности шара}

VAR PL: REAL; { PL - площадь шара}

R: INTEGER; { R - радиус }

BEGIN

WRITELN('Введите радиус шара, мм');

READLN(R);

PL:=4*PI*SQR(R)/100;

WRITELN('Площадь шара =', PL:8:1, 'кв. см')

END.

 

Пример 4. Осуществить расчеты по формуле:

,

где φ=arctg(b/a), ψ=arctg(d/c), c=n*a, d=m*b.

Поскольку набор символов, используемых в идентификаторах переменных в программе (латиница), не включает традиционные для тригонометрии символы греческого алфавита α, β, φ, ψ, необходимо составить таблицу имен, которая установит соответствие между идентификаторами переменных и этими символами. В таблице имен мы также зафиксируем промежуточные (рабочие) переменные, упрощающие программирование исходной формулы:

Математическая величина, выражение Идентификатор переменной в программе
α ALPHA
β BETA
φ FI
ψ PS I
α + φ + 15° AF
β + ψ + 75° BP
SQAB
SQCD

 

Программирование линейных вычислительных процессов очень похоже на вычисления по формулам, которые математик осуществляет на бумаге. Алгоритм таких вычислений, как правило, не составляется в виде блок-схем. Наиболее удобной формой представления такого алгоритма является формульно-словесный способ, при котором действия пронумерованы пунктами 1, 2,3 и т.д. Каждое действие поясняется словами, формулами и расчетами.

Алгоритм решения этой задачи описан формульно-словесным способом:

1. Ввод с клавиатуры параметров А, В, М, N, ALPHA, BETA.

2. Вычисление аргументов тригонометрических функций по формулам:

где AF и BP промежуточные рабочие переменные, которые в исходной формуле встречаются по два раза в числителе и знаменателе. Следует отметить, что аргументы встроенных функций Sin и Cos в Паскале должны задаваться в радианах. В исходной формуле подразумевается, что углы α, β, φ, ψ измеряются в радианах. Поэтому углы 15° и 75° градусов подлежат пересчету в радианы, что и сделано в приведенных выше формулах для расчета AF и BP.

3. Последовательное вычисление величин С, D, FI, PSI по формулам:

C = n*a, D = m*b, FI = arctg(b/a), PSI = arctg(d/c).

4. Нахождение значений промежуточных переменных SQAB и SQCD по формулам:

,

5. Вычисление Y по упрощенной формуле за счет уже выполненных в предыдущих пунктах алгоритма расчетов.

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

PROGRAM PR4;

VAR

ALPHA, BETA, FI, PSI, SQAB, SQCD, AF, BP, А, В, C, D, N, M, Y: REAL;

BEGIN

WRITELN('Введите значения А, В, M, N');

READLN(A, В, M, N);

WRITELN('Введите значения АЛЬФА, БЕТТА');

READLN(ALPHA, BETA);

С:= N*A;

D:= M*B;

FI:= ARCTAN(B/A);

PSI:= ARCTAN(D/C);

AF:= ALPHA + FI + 15*PI/180;

BP = BETA + PSI + 75*PI/180;

SQAB:= SQRT(A*A + B*B);

SQCD:= SQRT(C*C + D*D);

Y:=ARCTAN((0.5*SQAB*SIN(AF)+SQCD*SIN(BP))/(SQAB*COS(AF) + SQCD*COS(BP)));

WRITELN('Y =', Y:7:3)

END.

Следует выделить следующие типичные действия программиста при разработке программ такого класса (формализация линейного вычислительного процесса).

1. Формирование таблицы имен. На этом этапе подбираются латинские обозначения (идентификаторы) для отображения в программе математических величин, используемых в формулах. Для некоторых выражений, встречающихся в формулах два и более раза, можно ввести свои идентификаторы (временные переменные). Эти величины рассчитываются один раз перед основной формулой (формулами), что упрощает исходные формулы и ускоряет расчеты.

2. Учитывая последовательный принцип выполнения операторов в программе – друг за другом по мере их написания – необходимо установить порядок расчета формул. Основное требование состоит в том, чтобы при расчете формулы все переменные и параметры были ранее вычислены или введены с клавиатуры. Если формулы можно упростить путем алгебраических преобразований, то это нужно сделать до начала программирования.

3. Все математические величины нужно разбить на две группы: константы и переменные. Константы следует определить в разделе CONST программы, а переменные — в разделе VAR.

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

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

6. Если в тригонометрических функциях в качестве аргументов используются величины в градусах, то необходимо в программе сделать преобразование этих величин в радианы.

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

 

Пример 5. Осуществить расчеты по формуле:

Для решения этой задачи следует использовать известные математические преобразования, которые приведут исходную формулу к виду, удобному для программирования. Эти преобразования описаны в следующей таблице:

Исходная формула Формула для программирования Текст программы
, Z>0 EXP(LN(Z)/N)
Zn+l, Z>0 EXP((N+1)*LN(Z))
LogN|X +11 LN(ABS(X+1))/LN(N)

 

PROGRAM PR5;

VAR

X, Y: REAL;

N: INTEGER;

BEGIN

WRITELN('Введите значения X, N');

READLN(X, N);

Y:= EXP(LN(ABS(EXP((N+1)*LN(X)) + LN(ABS(X+1))/LN(N)))/N);

WRITELN(Y = ', Y:8:4)

END.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: