Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

4.1. Структура Паскаль-программы

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

Program

<имя программы>;

Label

<раэдел метох>;

Const

<раэдеп хонстант>;

Туре

<раэдеп тзшов>;

Var

<раэдеп переменных>;

Procedure (Function) <раэдел подпрограмм^

Begin

операторов>

<раэдеп

End.

 

Раздел операторов имеется в любой программе и является основ­ ным. Предшествующие разделы носят характер описаний и не все обя­ зательно присутствуют в каждой программе.

ВТурбо-Паскале, в отличие от стандарта, возможно:

отсутствие заголовка программы;

разделы Const, Type, Var, Label могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз.

4.2.Арифметические операции, функции, выражения Арифметический оператор присваивания

Карифметическим типам данных относятся группы вещественных и целых типов. К ним применимы арифметические операции и опера­

ции отношений. ‘

Операции над данными бывают унарными (применимые к одному операнду) и бинарными (применимые к двум операндам). Унарная арифметическая операция — одна. Это операция изменения знака. Ее формат:

- < величина >

Бинарные арифметические операции стандартного Паскаля опи­ саны в табл. 4.1. В ней I обозначает целые типы, R — вещественные типы.

 

 

 

 

 

Таблица 4.1

Знак

Выражение

Типы операндов

Тип результатов

Операция

+

А + В

R, R

 

R

Сложение

 

 

I, I

 

I

 

 

А - В

I, R

R, I

R

 

-

R, R

 

R

Вычитание

 

 

1,1

R, I

I

 

 

 

I, R

R

Умножение

 

А * В

R, R

 

R

 

 

U

R, I

I

 

 

 

I, R

R

 

/

А/В

R, R

 

R

Вещественное

 

 

1,1

R, I

R

деление

div

 

I, R

R

 

A div В

1,1

 

I

Целое деление

mod

A mod В

1,1

 

I

Остаток от целого деления

К арифметическим величинам могут быть применены стандартные функции Паскаля. Обращение к функции имеет следующую структуру:

< функция>

<имя функции>■— >(7V*« <фактический параметр> -т>(Т)— ►

— О

Функция выступает как операнд в выражении. Например, в следу­ ющем операторе присваивания

X := 2 * Sin(A) / Ln(3.5) + Cos(C - D)

операндами являются три функции: sin, In, cos. Их запись такая же, как в математике. Аргументы называются фактическими параметрами и являются, в общем случае, выражениями арифметического типа. Аргу­ менты записываются в круглых скобках. Результат вычисления фун­ кции — величина соответствующего типа.

Табл. 4.2 содержит описания математических стандартных функций Турбо-Паскаля.

Обращение

Тип

Тип

Функция

 

аргумента

результата

 

Pi

R

Число 7Г= 3.1415926536Я + 00

abs(x)

I,R

I, R

Модуль аргумента

arctan(x)

I, R

R

Арктангенс (радианы)

cos(x)

I,R

R

Косинус в радианах)

exp(x)

I, R

R

ех — экспонента

frac(x)

I, R

R

Дробная часть х

int(x)

I,R

R

Целая часть х

ln(x)

I,R

R

Натуральный логарифм

random

 

R

Псевдослучайное число

 

 

 

в интервале [0, 1]

random(x)

I

I

Псевдослучайное число

 

 

 

в интервале [0, х]

round(x)

R

I

Округление до ближайшего целого

sin(x)

I, R

R

Синус (я в радианах)

sqr(x)

I, R

I, R

Квадрат х

sqrt(x)

I, R

R

Корень квадратный

trunc(x)

R

I

Ближайшее целое,

 

 

 

не превышающее х по модулю

Арифметическое выражение задает порядок выполнения дей­ ствий над числовыми величинами. Арифметические выражения содер­ жат арифметические операции, функции, операнды, круглые скобки. Одна константа или одна переменная — простейшая форма арифме­ тического выражения.

Например, запишем по правилам Паскаля следующее математиче­ ское выражение:

2а -1- ^/0,5 sin(х + у) 0,2с -1 п (х - у)

На Паскале это выглядит так:

(2 * А + Sqrt(0.5 * sin(X + Y))) / (0.2 * С - Ln(X - Y ) ) .

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

1.Все символы пишутся в строчку на одном уровне. Проставляются все знаки операций (нельзя пропускать *).

2.Не допускаются два следующих подряд знака операций. (Нельзя

А+ - В; можно А + (-В ).)

3.Операции с более высоким приоритетом выполняются раньше операций с меньшим приоритетом. Порядок убывания приоритетов:

вычисление функции;

унарная операция смены знака (-);

*, /, div, mod;

-----h “ ■

4.Несколько записанных подряд операций одинакового приоритета

выполняются последовательно слева направо.

5. Часть выражения, заключенная в скобки, вычисляется в первую очередь. (Например, (A+B )*(C -D ) — умножение производится после сложения и вычитания.)

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

Пример. Цифрами сверху указал порядок выполнения операций:

1

7

4

5

3

6

2

12

11

10

8

9

(l+ y )* (2 * x + sq rt(y )-(x + y))

/

(j/ + l

/

( sqr (х) - 4)).

Данное арифметическое выражение соо тветствует следующей матема­ тической формуле:

(l + y)2 £ ± V R z ( £ ± y ) .

J '+ j n r i

ВПаскале нет операции или стандартной функции возведения числа

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

если у — целое значение, то степень вычисляется через умно­ жение; например, х3 — ►х * х * х; большие степени следует вычислять умножением в цикле;

если у — вещественное значение, то используется следующая

математическая формула:

х у _ gylu^

На Паскале это будет выглядеть так:

Exp(Y * Ln(x))

Очевидно, при вещественном у не допускается нулевое или отрица­ тельное значение х. Для целого у такого ограничения нет.

Например, \faT-FT = + 1)5. На Паскале это будет так:

Ехр(1 / 3 * Ln(A + 1))

Выражение имеет целый тип, если в результате его вычисления по­ лучается величина целого типа. Выражение имеет вещественный тип, если результатом его вычисления является вещественная величина.

А риф метический оператор присваивания имеет следующую структуру:

<арифм. оператор присваивалия>

< арифметическое выражение> ---

Например: Y :* (F * N - 4.5)

/ Cos(X).

Порядок выполнения оператора присваивания нами уже рассматри­ вался. Следует обратить особое внимание на следующее правило: тип переменной и выражения должны быть одинаковыми. Исключение со­ ставляет случай, когда выражение имеет целый тип, а переменная — вещественный.

 

Задания

1.

Для следующих формул записать соответствующие арифметиче­

ские выражения на Паскале:

а)

а + bx + cyz; б) [(ах - b)x + с]х - d\

2.Записать математические формулы, соответствующие следую­ щим выражениям на Паскале:

а) (p+q)/(r+s)-p*q/(r*s);

б) lE3+beta/ (x-gamma*delta); в) a/b*(c+d)- (а-Ъ)/Ъ/С+1Е-8.

3.Почему в Паскале аргумент функции всегда записывают в скоб­ ках (например, пишут 1п(5), а не 1п5)?

4.Записать на Паскале следующие формулы:

а)

 

(1 + х)2\

б)

VI + х2;

 

 

 

в) cos2 я3;

Г) log2| ;

\

 

 

 

ч

ех + е~х

 

 

 

ж) аУ2;

з) v'T+lr;

д)

 

arcsm г;

 

е)

-----^-----5

 

 

 

n)JJT+8Z-

x ) ? V L z M * ± M .

д)

^ + sin

*4

'

 

 

 

 

'

 

107 + ln4!

' cos2 + |ctg7 |‘

 

5.

Вычислить значения выражений:

 

 

a) tru n c(6 .9);

б) round(6 .9);

в) trunc(6 .2); г) round(6 .2 );

д) 20

div

6;

 

е) 20

mod 6;

 

ж) 2

div 5;

о) 2 mod 5;

и) 3 * 7 div

2 mod 7

/

3

- tru n c(s in (l)).

 

 

6. Определить тип выражения:

 

 

 

а) 1 + 0.0;

б)

20

/

4;

в)

sqr(4);

 

 

г) sqrt(16);

д) sin (0 );

е) trunc(-3 .1 4 ).

 

 

7.

Если у — вещественная переменная, а п

— целая, то какие из

следующих операторов присваивания правильные, а какие нет:

a) У

:=

n

+

1;

 

д) У

:=

n

div

2;

 

 

6) n

••=

у

-

1;

 

e) У

:=

у

div

2;

 

 

в) n

:=

4.0;

 

 

ж) n

:=

n

/ 2;

 

 

r) У

:=

tru n c(у);

з) n

:=

sq r(sq rt(n ))?

 

8.Поменять местами значения целых переменных х и у, не исполь­ зуя дополнительные переменные. Найдя такой алгоритм, определите,

вчем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?

9.Присвоить целой переменной h значение цифры, стоящей в раз­ ряде сотен в записи положительного целого числа к (например, если

А; = 28796, то Л = 7).

10.Целой переменной S присвоить значение суммы цифр трехзнач­ ного целого числа А;.

11.Какую задачу решает следующая программа?

Program Test;

Type Natur = l..MaxInt;

Var N

Natur;

X

Real;

Begin

ReadLn(N);

 

X := 0;

 

While N > 0 Do

 

Begin

 

X := X + i.0;

Н :« N - 1

End;

WriteLn(X)

End.

Можно ли того же самого результата достичь более простым спосо­ бом?

4.3. Ввод с клавиатуры и вывод на экран

Ввод данных — это передача информации от внешних устройств в оперативную память. Вводятся, как правило, исходные данные решае мой задачи. Вывод — обратный процесс, когда данные передаются из оперативной памяти на внешние носители (печать, дисплей, магнит­ ные устройства и т.д.). Результаты решения всякой задачи должны быть выведены.

Основными устройствами ввода-вывода у персонального ком­ пьютера являются клавиатура и дисплей (телеэкран). Именно через эти устройства, главным образом, осуществляется диалог между че­ ловеком и ПК.

Оператор ввода с клавиатуры имеет следующий формат:

геа<1(<список ввода>),

где < Список ввода> — это последовательность имен переменных, раз­ деленных запятыми. Слово read переводится “читать” . (Точнее го­ воря, read — это оператор обращения к стандартной процедуре ввода.) Например,

read(a, b, с, d)

При выполнении этого оператора происходит остановка работы ком­ пьютера, после чего пользователь должен набрать на клавиатуре зна­ чения переменных a, b, с, d, отделяя их друг от друга пробелами. При этом вводимые значения высвечиваются на экране. В конце на­ жимается клавиша [Enter]. Значения должны вводиться з строгом со­ ответствии с синтаксисом Паскаля.

Пример:

Var Т: Real;

J; Integer;

К: Char;

Begin

Read(T, J, К);

Набираем на клавиатуре:

253.98 100 G [Enter].

Если в программе имеется несколько операторов read, то данные для них вводятся потоком, т.е. после считывания значений перемен­ ных для одного оператора read данные для следующего оператора чита­ ются из той же строки на экране, что и для предыдущего до окончания строки, затем происходит переход на следующую строку.

Пример:

Var А, В Integer;

С, D Real;

Begin

Read(А, В);

Read(С, D);

Набираем на клавиатуре:

18758 34 [Enter] 2.62Е-02 1.54Е+01 [Enter].

Другой вариант оператора ввода с клавиатуры имеет вид:

readln(<cnncoK ввода>)

Здесь слово readln означает read line — читать строку. Этот опера­ тор отличается от read только тем, что после считывания последнего в списке значения для одного оператора readln данные для следующего оператора будут считываться с начала новой строки. Если в предыду­ щем примере заменить операторы read на readln:

ReadLn(A, В);

ReadLn(C, D);

то ввод значений будет происходить из двух строк:

18758 34 [Enter] 2.62Е-02 1.54Е+01 [Enter]

Оператор вывода на экран (обращение к стандартной процедуре вывода) имеет следующий формат:

write(<cnncoK вывода>)

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

Пример: