Главная | RSS Понедельник, 25.09.2017, 23:25

Меню сайта
Форма входа
Логин:
Пароль:
Категории раздела
Алгоритмы [1]
Pascal [19]
Delphi [20]
Поиск по сайту

Баннер сайта
Установите мой
баннер себе на сайт

 

Каталог статей

Главная » Статьи » Алгоритмизация и программирование » Pascal [ Добавить статью ]

Лекции по программированию на Паскале. Часть 2
Лекции по программированию на Паскале. Часть 2

10. О П Е Р А Т О Р Ы В В О Д А
И В Ы В О Д А

Рассмотрим организацию ввода и вывода данных с терминального уст-
ройства. Терминальное устройство - это устройство, с которым работает
пользователь, обычно это экран (дисплей) и клавиатура.
Для ввода и вывода данных используются стандартные процедуры ввода
и вывода Read и Write, оперирующие стандартными последовательными файлами
INPUT и OUTPUT.
Эти файлы разбиваются на строки переменной длины, отделяемые друг
от друга признаком конца строки. Конец строки задается нажатием кла-
виши ENTER.
Для ввода исходных данных используются операторы процедур ввода:

Read(A1,A2,...AK);
ReadLn(A1,A2,...AK);
ReadLn;

Первый из них реализует чтение К значений исходных данных и прис-
ваивание этих значений переменным А1, А2, ..., АК. Второй оператор
реализует чтение К значений исходных данных, пропуск остальных значе-
ний до начала следующей строки, присваивание считанных значений пере-
менным А1, А2, ..., АК. Третий оператор реализует пропуск строки ис-
ходных данных.
При вводе исходных данных происходит преобразование из внешней
формы представления во внутреннюю, определяемую типом переменных. Пе-
ременные, образующие список ввода, могут принадлежать либо к целому,
либо к действительному, либо к символьному типам. Чтение исходных
данных логического типа в языке ПАСКАЛЬ недопустимо.
Операторы ввода при чтении значений переменных целого и
действительного типа пропускает пробелы, предшествующие числу. В то
же время эти операторы не пропускают пробелов, предшествующих значе-
ниям символьных переменных, так как пробелы являются равноправными
символами строк. Пример записи операторов ввода:

var rV, rS: Real;
iW, iJ: Integer;
chC, chD: Char;
................
Read(rV, rS, iW, iJ);
Read(chC, chD);

Значения исходных данных могут отделяться друг от друга пробелами
и нажатием клавиш табуляции и Enter.
Для вывода результатов работы программы на экран используются
операторы:

Write(A1,A2,...AK);
WriteLn(A1,A2,...AK);
WriteLn;

Первый из этих операторов реализует вывод значений переменных А1,
А2,...,АК в строку экрана. Второй оператор реализует вывод
значений переменных А1, А2, ..., АК и переход к началу следующей
строки. Третий оператор реализует пропуск строки и переход к началу
следующей строки.
Переменные, составляющие список вывода, могут относиться к целому,
действительному, символьному или булевскому типам. В качестве элемен-
та списка вывода кроме имен переменных могут использоваться выражения
и строки.
Вывод каждого значения в строку экрана происходит в соот-
ветствии с шириной поля вывода, определяемой конкретной реализацией
языка.
Форма представления значений в поле вывода соответствует типу пе-
ременных и выражений: величины целого типа выводятся как целые деся-
тичные числа, действительного типа - как действительные десятичные
числа с десятичным порядком, символьного типа и строки - в виде сим-
волов, логического типа - в виде логических констант TRUE и FALSE.
Оператор вывода позволяет задать ширину поля вывода для каждого
элемента списка вывода. В этом случае
элемент списка вывода имеет вид А:К, где
А - выражение или строка, К - выражение либо константа целого типа.
Если выводимое значение занимает в поле вывода меньше позиций, чем К,
то перед этим значением располагаются пробелы. Если выводимое значе-
ние не помещается в ширину поля К, то для этого значения будет отве-
дено необходимое количество позиций. Для величин действительного типа
элемент списка вывода может иметь вид А:К:М, где А - переменная или выраже-
ние действительного типа, К - ширина поля вывода, М - число цифр
дробной части выводимого значения. К и М - выражения или константы
целого типа. В этом случае действительные значения выводятся в форме
десятичного числа с фиксированной точкой.
Пример записи операторов вывода:
. . . . . . . . . . . .
var rA, rB: Real; iP,iQ:Integer;
bR, bS: Boolean; chT, chV, chU, chW: Char;
. . . . . . . . . . . .
WriteLn(rA, rB:10:2);
WriteLn(iP, iQ:8);
WriteLn(bR, bS:8);
WriteLn(chT, chV, chU, chW);

11. С Т Р У К Т У Р А П Р О Г Р А М М Ы

Программа на языке ПАСКАЛЬ состоит из заголовка, разделов описаний
и раздела операторов.
Заголовок программы содержит имя программы, например:

Program PRIM;

Описания могут включать в себя раздел подключаемых библиотек (мо-
дулей), раздел описания меток, раздел описания констант, раздел опи-
сания типов, раздел описания переменных, раздел описания процедур и
функций.
Раздел описания модулей определяется служебным словом USES и со-
держит имена подключаемых модулей (библиотек) как входящих в состав
системы TURBO PASCAL, так и написанных пользователем. Раздел описания
модулей должен быть первым среди разделов описаний. Имена модулей от-
деляются друг от друга запятыми:

uses CRT, Graph;

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

label 3, 471, 29, Quit;

Описание констант позволяет использовать имена как синонимы конс-
тант, их необходимо определить в разделе описаний констант:

const K= 1024; MAX= 16384;

В разделе описания переменных необходимо определить тип всех пере-
менных, используемых в программе:

var P,Q,R: Integer;
A,B: Char;
F1,F2: Boolean;

Описание типов, прцедур и функций будет рассмотрено ниже. Отдель-
ные разделы описаний могут отсутствовать, но следует помнить, что в
ПАСКАЛЬ - программе должны быть обязательно описаны все компоненты
программы.
Раздел операторов представляет собой составной оператор, который
содержит между служебными словами

begin.......end

последовательность операторов. Операторы отделяются друг от друга
символом ;.
Текст программы заканчивается символом точка.
Кроме описаний и операторов ПАСКАЛЬ - программа может содержать
комментарии, которые представляют собой произвольную последователь-
ность символов, расположенную между открывающей скобкой комментариев
{ и закрывающей скобкой комментариев }.
Текст ПАСКАЛЬ - программы может содержать ключи компиляции, кото-
рые позволяют управлять режимом компиляции. Синтаксически ключи ком-
пиляции записываются как комментарии. Ключ компиляции содержит символ
$ и букву-ключ с последующим знаком + (включить режим) или - (выклю-
чить режим). Например:

{$E+} - эмулировать математический сопроцессор;
{$F+} - формировать дальний тип вызова процедур и функций;
{$N+} - использовать математический сопроцессор;
{$R+} - проверять выход за границы диапазонов.

Некоторые ключи компиляции могут содержать параметр, например:

{$I имя файла} - включить в текст компилируемой программы назван-
ный файл.

Пример записи простой программы:

Program TRIANG;
var A, B, C, S, P: Real;
begin
Read(A,B,C);
WriteLn(A,B,C);
P:=(A+B+C)/2;
S:=Sqrt(P*(P-A)*(P-B)*(P-C));
WriteLn('S=',S:8:3)
end.

12. Б И Т О В А Я А Р И Ф М Е Т И К А

Битовая или поразрядная арифметика введена в TURBO PASCAL для
обеспечения возможности работы с двоичными разрядами (битами). Опера-
ции битовой арифметики применимы только к целым типам.
Первая группа операций - логические операции not, and, or и xor.
Операция not является одноместной, она изменяет каждый бит целого
числа на обратный.
Операции and, or и xor - двуместные, операнды этих операций - целые
величины одинаковой длины. Операции выполняются попарно над всеми
двоичными разрядами операндов.
Вторая группа операций - это операции сдвига влево shl и сдвига
вправо shr:

I shl N
I shr N.

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

13. О П Е Р А Т О Р П Е Р Е Х О Д А

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

goto 218;

14. Э Л Е М Е Н Т Ы С Т Р У К Т У Р Н О Г О
П Р О Г Р А М М И Р О В А Н И Я

Структуризованная программа (или подпрограмма) - это программа,
составленная из фиксированного множества базовых конструкций. Расс-
мотрим основные определения и способы образования этих конструкций в
схемах алгоритмов.
{}
Из операций, развилок и слияний строятся базовые конструкции: сле-
дование, ветвление, цикл. Применяя только эти три конструкции, можно
реализовать алгоритм решения любой задачи.
Конструкция, представляющая собой последовательное выполнение двух
или более операций, называется следованием.
Конструкция, состоящая из развилки, двух операций и слияния, назы-
вается ветвлением. Одна из операций может отсутствовать.
Конструкция, имеющая линии управления, ведущие к предидущим опера-
циям или развилкам, называется циклом.
Конструкции следование, ветвление и цикл можно представить как
операции, так как они имеют единственный вход и единственный выход.
Произвольную последовательность операций можно представить как одну
операцию.
Операция может быть реализована любым оператором языка ПАСКАЛЬ
(простым или составным), либо группой операторов, за исключением опе-
ратора перехода GOTO.
В языке ПАСКАЛЬ количество базовых конструкций увеличено до шести,
это:
-следование;
-ветвление;
-цикл с предусловием;
-цикл с постусловием;
-цикл с параметром;
-вариант.
Далее рассмотрим, как эти базовые конструкции реализуются в языке
ПАСКАЛЬ.

15. У С Л О В Н Ы Й О П Е Р А Т О Р
{}
Условный оператор в короткой форме работает по правилу: если бу-
левское выражение B истинно, то выполняется оператор ОР1, далее вы-
полняется оператор, следующий за условным. Если булевское выражение B
ложно, то будет выполняться оператор, следующий за этим условным опе-
ратором.

16. Ц И К Л С П Р Е Д У С Л О В И Е М{}
17. Ц И К Л С П О С Т У С Л О В И Е М{}
18. Ц И К Л С П А Р А М Е Т Р О М{}
19. О П Е Р А Т О Р Ы З А В Е Р Ш Е Н И Я Ц И К Л А

Для всех операторов цикла выход из цикла осуществляется как
вследствие естественного окончания оператора цикла, так и с
помощью операторов перехода и выхода.
В версии ТУРБО ПАСКАЛЬ 7.0 определены стандартные процедуры Break и
Continue. Процедура Break выполняет безусловный выход из цикла. Проце-
дура Continue обеспечивает переход к началу новой итерации цикла.

20. О П Е Р А Т О Р В А Р И А Н Т А{}
21. П Е Р Е Ч И С Л Я Е М Ы Й Т И П Д А Н Н Ы Х

Перечисляемый тип представляет собой ограниченную упорядоченную
последовательность скалярных констант, составляющих данный тип. Зна-
чение каждой константы задается ее именем. Имена отдельных констант
отделяются друг от друга запятыми, а вся совокупность констант, сос-
тавляющих данный перечисляемый тип, заключается в круглые скобки.
Программист объединяет в одну группу в соответствии с каким - либо
признаком всю совокупность значений, составляющих перечисляемый тип.
Например, перечисляемый тип Rainbow(РАДУГА) объединяет скалярные значения
RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ,
ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ). Пе-
речисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные
значения RED, YELLOW, GREEN (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ).
Перечисляемый тип описывается в разделе описания типов, который
начинается со служебного слова type, например:

type
Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

Каждое значение является константой своего типа и может принадле-
жать только одному из перечисляемых типов, заданных в программе. Нап-
ример, перечисляемый тип Traffic_Light не может быть определен в одной
программе с типом Rainbow, так как оба типа содержат одинаковые конс-
танты.
Описание переменных, принадлежащих к скалярным типам, которые объ-
явлены в разделе описания типов, производится с помощью имен типов.
Например:

type Traffic_Light= (RED, YELLOW, GREEN);
var Section: Traffic_Light;

Это означает, что переменная Section может принимать значения RED,
YELLOW или GREEN.
Переменные перечисляемого типа могут быть описаны в разделе описа-
ния переменных, например:

var Section: (RED, YELLOW, GREEN);

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

Section:= YELLOW;

Упорядоченная последовательность значений, составляющих перечисля-
емый тип, автоматически нумеруется, начиная с нуля и далее через еди-
ницу. Отсюда следует, что к перечисляемым переменным и константам мо-
гут быть применены операции отношения и стандартные функции Pred,
Succ, Ord.
Переменные и константы перечисляемого типа не могут быть элемента-
ми списка ввода или вывода.

22. И Н Т Е Р В А Л Ь Н Ы Й Т И П Д А Н Н Ы Х

Отрезок любого порядкового типа
может быть определен как интервальный или ограниченный
тип. Отрезок задается диапазоном от минимального до максимального
значения констант, разделенных двумя точками. В качестве констант мо-
гут быть использованы константы, принадлежащие к целому, символьному,
логическому или перечисляемому типам. Скалярный тип, на котором стро-
ится отрезок, называется базовым типом.
Минимальное и максимальное значения констант называются нижней и
верхней границами отрезка, определяющего интервальный тип. Нижняя
граница должна быть меньше верхней.
{}
Над переменными, относящимися к интервальному типу, могут выпол-
няться все операции и применяться все стандартные функции, которые
допустимы для соответствующего базового типа.
При использовании в программах интервальных типов данных может осущест-
вляться контроль за тем, чтобы значения переменных не выходили за
границы, введенные для этих переменных в описании интервального типа.
23. М А С С И В Ы

Массивы представляют собой ограниченную упорядоченную совокупность
однотипных величин. Каждая отдельная величина называется компонентой
массива. Тип компонент может быть любым, принятым в языке ПАСКАЛЬ,
кроме файлового типа. Тип компонент называется базовым типом.
Вся совокупность компонент определяется одним именем. Для обозна-
чения отдельных компонент используется конструкция, называемая пере-
менной с индексом или с индексами:

A[5] S[k+1] B[3,5].

В качестве индекса может быть использовано выражение. Тип индексов
может быть только интервальным или перечисляемым. Действительный и
целый типы недопустимы. Индексы интервального типа, для которого ба-
зовым является целый тип, могут принимать отрицательные, нулевое и
положительные значения.{}
В операторной части
программы один массив может быть присвоен другому, если их типы иден-
тичны, например:

R1:=Z.

Для ввода или вывода массива в список ввода или вывода помещается
переменная с индексом, а операторы ввода или вывода выполняются в
цикле.
{}
Первый индекс определяет номер строки, второй - номер столбца.
Двумерные массивы хранятся в памяти ЭВМ по строкам.
Инициализация массивов (присвоение начальных значений всем компо-
нентам массивов) осуществляется двумя способами.
Первый способ - с использованием типизированных констант, напри-
мер:

type Dim10= Array[1..10] of Real;

const
raM10: Dim10 = ( 0, 2.1, 4, 5.65, 6.1, 6.7, 7.2, 8, 8.7, 9.3 );

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

type Dim3x2= Array[1..3,1..2] of Integer;

const
iaM3x2: Dim3x2= ( (1, 2)
(3, 4)
(5, 6) );

Второй способ инициализации - использование разновидности процеду-
ры FillChar:

FillChar( var V; NBytes: Word; B: Byte );

Эта процедура заполняет участок памяти однобайтовым значением. Напри-
мер, для обнуления массива A[1..10] of Real можно записать:

FillChar(A, 40, 0);

или

FillChar(A, SizeOf(A), 0);

{}
24. С Т Р О К И

Особое место в языке ПАСКАЛЬ занимают массивы символов. Стандарт-
ный ПАСКАЛЬ допускает два способа хранения символьных массивов в па-
мяти ЭВМ: распакованный и упакованный. Распакованные массивы символов
хранятся в памяти ЭВМ по одному символу в машинном слове, упакованные
- по одному символу в байте. При описании упакованного массива симво-
лов используют служебное слово PACKED, например:

var MAS: Packed Array[1..20] of Char;

Описание распакованного массива символов имеет вид:

var M: Array[1..20] of char;

Для преобразования символьного массива из распакованной формы в
упакованную и наоборот, из упакованной в распакованную, в язык ПАС-
КАЛЬ введены две стандартные функции Pack, UnPack.
Упакованный массив символов образует символьную строку. Символьная
строка может быть либо строковой константой, либо строковой перемен-
ной. Строковая константа, или строка, представляет собой совокупность
символов, заключенную в апострофы. Строка - это элементарная конс-
трукция языка ПАСКАЛЬ. Строковые константы могут входить в состав вы-
ражений. Как и числовые константы, они могут быть описаны в разделе
описания констант.
Строковые переменные - это одномерные упакованные массивы симво-
лов, для описания которых в TURBO PASCAL введен тип String.
Например, если строка содержит до 30 символов, ее тип будет опре-
делен как

type s= String[30];

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

type s= String;

Тип String без указания длины совместим со всеми типами строк.
Особенностью строковых переменных является то, что к ним можно об-
ращаться как к скалярным переменным, так и к массивам. Во втором слу-
чае применяется конструкция "переменная с индексом", что обеспечивает
доступ к отдельным символам строки. При этом нижняя граница идекса
равна 1. Отдельный символ строки совместим с типом Char.
В памяти ЭВМ строка занимает количество байтов, на единицу большее
ее длины. Нулевой байт строки содержит ее длину.
Для строк определены операции присваивания, слияния (конкатенации)
и сравнения.

Для сравнения строк применяются все операции отношения. Сравнение
строк происходит посимвольно, начиная с первого символа. Строки рав-
ны, если имеют одинаковую длину и посимвольно эквивалентны.
Строки могут быть элементами списка ввода - вывода, при этом запи-
сывается имя строки без индекса.
При вводе строковых переменных количество вводимых символов может
быть меньше, чем длина строки. В этом случае вводимые символы разме-
щаются с начала строки, а оставшиеся байты заполняются пробелами. Ес-
ли количество вводимых символов превышает длину строки, лишние
символы отбрасываются.
Инициализация строк может производиться как с помощью типизирован-
ных констант:

const sName: String[9]= 'IBM PC/AT';

так и с использованием второй разновидности функции FillChar:

FillChar( var V; NBytes: Word; C: Char );

например:

FillChar(A, SizeOf(A), '0');

Для работы со строками в TURBO PASCAL включены процедуры и функ-
ции, которые обеспечивают редактирование и преобразование строк.
{}

http://www.codenet.ru

Категория: Pascal | Добавил: Vitali (11.05.2008) | Автор: Тыртышник Виталий
Просмотров: 995 | Рейтинг: 0.0/0 |
Всего комментариев: 0
avatar
Поиск по сайту

Наш опрос
С каким языком программирования вы хотели бы работать на уроках информатики?
Всего ответов: 559
Друзья сайта
Система Orphus
Статистика


Онлайн всего: 30
Гостей: 30
Пользователей: 0

Flag Counter
Архив записей

Copyright MyCorp © 2017