- •ПРЕДИСЛОВИЕ
- •1.1. История и классификация языков программирования высокого уровня
- •1.2. Первое (знакомство с Паскалем
- •Задания
- •Лекция 2
- •2.1. Некоторые сведения о системе ТУрбо-Паскаль
- •2.2. Способы описания языка программирования
- •Лекция 3
- •3.2. Типы данных
- •4.1. Структура Паскаль-программы
- •4.2. Арифметические операции, функции, выражения Арифметический оператор присваивания
- •Форматы процедуры write
- •Задания
- •1. Что будет напечатано программой
- •если последовательно вводятся три числа: 36, -6, 2345?
- •5.2. Функции, связывающие различные типы данных
- •Задания
- •Теперь посмотрим, как это программируется наТЛаскале.
- •Здесь
- •<параметр цикла>::= <имя простой переменной порядкового типа>
- •Задания
- •7.1. Подпрограммы-процедуры
- •7.2. Подпрограммы-функции
- •7.4. Рекурсивные подпрограммы
- •8.1. Что такое рекуррентная последовательность
- •8.2. Программирование вычислений рекуррентных последовательностей
- •Задания
- •Задания
- •6. Вывод результата.
- •Теперь будем составлять подпрограммы.
- •Задания
- •12.2. Операции над множествами
- •12.3. Примеры использования множеств
- •Красивая программа! К сожалению, ею нельзя воспользоваться для
- •В этой программе использована функция определений размера файла:
- •.Fiiesize(<HMH файловой переменной>);
- •Задания
- •14.2. Работа с файлами записей
- •Задания
- •15.2. Связанные списки
- •Лекция 16
- •16.1. Организация внешних подпрограмм
- •16,2. Создание и использование модулей
- •распечаткой текста программы с подробными комментариями.
- •выполнения следующих операции над обыкновенными дробями вида -q
- •(Р — целое, Q — натуральное):
- •1) сложение;
- •2) вычитание;
- •3) умножение;
- •4) деление;
- •5) сокращение дроби;
- •7) функции, реализующие операции отношения (равно, не равно,
- •Используя этот модуль, решить задачи:
- •При разработке модуля рекомендуется такая последовательность
- •Задания
- •Приведем текст программы целиком.
- •ЗАДАНИЯ ПО ТЕМЕ “ЛИНЕЙНЫЕ АЛГОРИТМЫ”
- •ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
- •Сортировка массивов
- •ЗАДАЧИ ПО ТЕМЕ “ОБРАБОТКА СТРОК”
- •ЗАДАНИЯ ПО ТЕМЕ “МОДУЛИ”
- •ЗАДАНИЯ ПО ТЕМЕ “ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ”
- •Задачи, предлагавшиеся на школьных олимпиадах по программированию (Пермская область)
- •Учебное издание
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 вывода>)
Здесь элементами списка вывода могут быть выражения различных типов (в частности, константы и переменные).
Пример: