Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок из серии Pas ABC.doc
Скачиваний:
10
Добавлен:
17.08.2019
Размер:
694.78 Кб
Скачать

Перечисляемый тип

Перечисляемый тип - тип данных, заданный списком принадлежащих ему значений.

Идентификатор типа и набор допустимых значений для перечисляемого типа определяются программистом. Для этого используется специальный оператор Type.

Формат оператора:

type

<имя_типа> = (значение 1, значение2, ..., значениеN);

var

<идентификатор, ... > : <имя типа>;

В определении перечисляемого типа значения от значение1 до значениеN являются константами типа имя_типа.

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

Пример.

type

Gaz = (Ge,C,O,N);

Metall = (Na, K, Li, Cb, Zn);

var

G1, G2, G3: Gaz;

Met1, Met2: Metall ;

В данном примере приведены два пользовательских типа данных - Gaz и Metall, определены их значения - обозначения некоторых газов и металлов периодической таблицы Д.И. Мендилеева. Переменные G1, G2, G3 и Met1, Met2 могут принимать только одно из перечисленных значений.

Имена внутри скобок являются константами соответствующего типа перечисления.

Набор операций

Для значений перечисления одного и того же типа определены операции отношения. Упорядочение осуществляется по номеру элемента в описании типа. Например, будет истинно выражение Winter < Spring, так как Spring имеет больший номер по порядку в описании типа, чем Winter.

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

Стандартные функции

Так как перечисляемый тип относится к порядковым типам, то для него определены функции: Succ(), Pred() и Ord().

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

type

Boolean = (False, True);

Поэтому для значений False b True справедливы результаты вычисления выражений:

false < True; Ord(False) = 0; Ord(true) = 1; Succ(False) = True; Pred(True) = False .

Интервальный тип (диапазон)

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

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

Формат:

type

<имя типа> = (<константа1> .. <константа2>);

var

<идентификатор, ...>:<имя типа>;

Например:

type

Days = 1 .. 31;

var

RabDay, BolnDay: Dais

В данном примере переменные RabDay BolnDay имеют тип Days и могут принимать любые значения из диапазона 1 .. 31. Выход из диапазона вызывает программное прерывание.

Интервальный и перечисляемый типы относятся к порядковым типам. Значит, для интервального типа определены операции отношения, и функции для определения порядкового номера, предыдущего и последующего элементов, т. е финкции Succ(), Pred() и Ord().

На этом уроке мы описали простые (скалярные), пользовательские типы данных: перечисляемый и интервальный.

Урок 18 из серии: "Язык программирования Паскаль"

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

Идентификатор типа

Допустимые значения

Размер выделяемой памяти

real

5.0∙10-324 - 1.7∙10308

8 байт

Например описания величин вещественного типа:

var

Summa: real;

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

Число с фиксированной точкой изображается десятичным числом с дробной частью (дробная часть может быть нулевой). Дробная часть отделяется от целой с помощью точки, например 127.3, 25.0, -16.003, 200.59, 0.54.

Число с плавающей точкой имеет вид mEp, где m - мантисса, а p - порядок числа. В качестве m могут быть целые числа и действительные числа с фиксированной точкой, в качестве p - только целые числа. Как мантисса, так и порядок могут содержать знаки "+" и "-".

Математическая запись

Запичь с плавающей точкой

0,000009

9Е-6

0,62*104

0.62Е+4

-10,8*1012

-10.8Е12

20*10-3

20Е-3

Набор операций

Над данными вещественного типа определены следующие арифметические операции: " + " - сложение; " - " - вычитание; " * " умножение; " / " - деление. Результат выполнения этих операций получается также вещественного типа.

Над данными вещественного типа определены следующие операции отношения: " = " - равно; " <> " - не равно; " < " - меньше; " > " - больше; " <= " - меньше или равно (не больше); " >= " - больше или равно (не меньше).

Операции отношения вырабатывают результат логического типа

Стандартные функции

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

Имя и параметры

Действие

abs(x)

вычисление абсолютного значения Х

sqr(x)

вычисление квадрата Х

sqrt(x)

вычисление квадратного корня из Х

sin(x)

вычисление синуса x

cos(x)

вычисление косинуса Х

arctan(x)

вычисление арктангенса Х

exp(x)

вычисление ех

ln(x)

вычисление натурального алгоритма x

trunc(x)

вычисление целой части Х

round(x)

округление Х в сторону ближайшего целого

Примечание. Аргумент функции следует за именем функции и заключается в круглые скобки. В тригонометрических функциях синуса и косинуса аргумент задается только в радианной мере угла.

Вывод данных вещественного типа

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

Изменить стандартную форму вывода можно, используя формат:

Write(x:m:n:),

где х - величина вещественного типа (константа, переменная, выражение);

m - общее поле выводимого числа (включая знак числа, целую часть, точку и дробную часть);

n - поле дробной записи.

При использовании форматов число выводится в форме с фиксированной точкой. Так, использование формата Write(r:10:4) для вывода значения r, равного -35.245367, приводит к выводу значения -35.2454.

Пример 1. Напечатать таблицу значений функции y = sin(x) на отрезке [0,1] с шагом 0.1

Решение.

Постановка задачи наталкивает нас на использование цикла с вещественным параметром, но цикл с параметром предполагает использование переменной порядкового типа, а тип Real таковым не является.

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

Program Primer1_1;

Var i : Real;

Begin

i:=0;

While i<=1 Do

Begin

Writeln(i:2:1,' ',sin(i):4:3);

i:=i+0.1;

End;

End.

Program Primer1_2;

Var i: Integer;

Begin

i:=0

While i<=10 Do

Begin

Writeln(i,' ',sin(i/10):4:3);

Inc(i);

End;

End.

На первый взгляд, работа этих программ должна быть одинаковой, но, запустив программы, мы обнаружим, что первая программа выдает значения функции sin(x) для всех значений х от 0 до 0.9, а вторая программа - для всех значений х от 0 до 1.

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

Пример 2. Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления бесконечного ряда

х - х2/2 + х3/3 -...

с заданной точностью Е.

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

Решение.

Переменные:

y - сумма ряда; e - заданная точность вычислений sl - очередное слогаемое; st - степень;

z - переменная, отвечающая за знак.

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

При нахождении значения степени хn можно воспользоваться циклом с параметром, но, с другой стороны, чтобы вычислить значения хn достаточно значение х n-1 (найдено на предыдущем шаге) умножить на х.

Итак, решение будет выглядеть следующим образом:

Program Primer2;

var

x, st, sl, y, e: Real;

n, z : Integer

Begin

Write ('Введите х, принадлежащее (-1,1)' );

Readln(x);

Write ('Введите погрешность вычисления ' );

Readln( e );

y := 0; n := 1; z:=1; st:=x; sl:=x;

Repeat

y:=y+z*sl;

n:=n+1; z:=-z; st:=st*x;

sl:=st/n;

Until sl < e;

Writeln (y);

Readln;

End.

До встречи на следующем уроке.

Урок 19 из серии: "Язык программирования Паскаль"

Все простые данные, которые рассматривались на предыдущих уроках, имели характерное свойства - неделимость.

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

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

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

  • регулярный тип (массивы);

  • комбинированный тип (записи);

  • файловый тип (файлы);

  • множественный тип (множества);

  • строковый тип (строки).

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

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

Запись(record). Она включает в себя несколько полей, тип которых может отличаться друг от друга. Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т.д. В этом примере наименование – величина типа string, количество – integer, цена – real, наличие сертификата – boolean.

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

Строка(string) – последовательность символов кодовой таблицы персонального компьютера. Количество символов в строке может изменяться от 0 до 255.

Множество (set) - это набор взаимосвязанных по какому-либо признаку или группе признаков элементов. Каждый элемент во множестве называется элементом множества. Множество должно состоять из порядковых элементов, и их число не должно превышать 255.

Файл(file) - последовательность однотипных компонентов, записанных на внешнем носителе под определенным именем. Тип этих компонентов может быть любой, за исключением типа - файла. Размер файла не объявляется.

На следующем уроке начнем изучать массивы.

Урок 20 из серии: "Язык программирования Паскаль"

Изучение даных структурированного типа начнем с регулярного типа данных - массивов.

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

Массив — структурный тип данных, состоящий из фиксированного количества элементов, объединённых одним именем, име­ющих один и тот же тип, где каждый элемент имеет свой номер (индекс).Когда возникает необходимость использовать массивы?

Рассмотрим следующую задачу: ввести с клавиатуры 30 целых и вычислить их сумму, при этом каждое из чисел сохранить в памяти для последующей обработки. Мы будем вынуждены ввести 30 имен переменных, что, естественно очень неудобно.

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

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

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

Элемент массива— отдельная переменная, входящая в массив.

Размерность массива— количество индексов, по которым определяется положение элемента в массиве.

Индексы элемента массива- совокупность номеров, определяющих его местоположение в массиве.

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

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

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

Поэтому в двумерном массиве - два индекса, номер строки и номер столбца.

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

Переходим к изучению массивов.