Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.docx
Скачиваний:
6
Добавлен:
26.09.2019
Размер:
1.2 Mб
Скачать

Порядковые типы данных

Среди базовых типов данных особо выделяются порядковые типы. Такое название можно обосновать двояко:

  1. Каждому элементу порядкового типа может быть сопоставлен уникальный (порядковый) номер. Нумерация значений начинается с нуля. Исключение - типы данныхshortint, integer и longint. Их нумерация совпадает со значениями элементов.

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

Стандартные подпрограммы, обрабатывающие порядковые типы данных

Только для величин порядковых типов определены следующие функции и процедуры:

  1. Функция ord(x) возвращает порядковый номер значения переменной x (относительно того типа, к которому принадлежит переменная х).

  2. Функция pred(x) возвращает значение, предшествующее х (к первому элементу типа неприменима).

  3. Функция succ(x) возвращает значение, следующее за х (к последнему элементу типа неприменима).

  4. Процедура inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+1).

  5. Процедура inc(x,k) возвращает k-е значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+k).

  6. Процедура dec(x) возвращает значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-1).

  7. Процедура dec(x,k) возвращает k-e значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-k).

На первый взгляд кажется, будто результат применения процедуры inc(x) полностью совпадает с результатом применения функции succ(x). Однако разница между ними проявляется на границах допустимого диапазона. Функция succ(x) неприменима к максимальному элементу типа, а вот процедура inc(x) не выдаст никакой ошибки, но, действуя по правилам машинного сложения, прибавит очередную единицу к номеру элемента. Номер, конечно же, выйдет за пределы диапазона и за счет усечения превратится в номер минимального значения диапазона. Получается, что процедуры inc() и dec() воспринимают любой порядковый тип словно бы "замкнутым в кольцо": сразу после последнего вновь идет первое значение.

Поясним все сказанное на примере. Для типа данных

type sixteen = 0..15;

попытка прибавить 1 к числу 15 приведет к следующему результату:

+ 1 1 1 1

1

1 0 0 0 0

Начальная единица будет отсечена, и потому получится, что inc(15)=0.

Аналогичная ситуация на нижней границе допустимого диапазона произвольного порядкового типа данных наблюдается для процедуры dec(x) и функции pred(x):

dec(min_element)= max_element

Типы данных, относящиеся к порядковым

Опишем теперь порядковые типы данных более подробно.

  1. Логический тип boolean имеет два значения: false и true, и для них выполняются следующие равенства:

  2. ord(false)=0, ord(true)=1, false<true,

  3. pred(true)=false, succ(false)=true,

  4. inc(true)=false, inc(false)=true,

dec(true)=false, dec(false)=true.

  1. В символьный тип char входит 256 символов расширенной таблицы ASCII (например, 'a', 'b', 'я', '7', '#'). Номер символа, возвращаемый функцией ord(), совпадает с номером этого символа в таблице ASCII.

  2. Целочисленные типы данных сведем в таблицу:

    Тип данных

    Количество

    Диапазон

    байтов

    битов

    shortint

    byte

    integer

    word

    longint

    1

    1

    2

    2

    4

    8

    8

    16

    16

    32

    -128..127

    0..255

    -32768..32767

    0..65535

    -2147483648..2147483647

    -27..27-1

    0..28-1

    -215..215-1

    0..216-1

    -231..231-1

  3. Перечисляемые3) типы данных задаются в разделе type явным перечислением их элементов. Например:

  4. type week =(sun,mon,tue,wed,thu,fri,sat)

0 1 2 3 4 5 6

Напомним, что для этого типа данных:

inc(sat) = sun, dec(sun) = sat.

  1. Интервальные типы данных задаются только границами своего диапазона. Например:

  2. type month = 1..12;

budni = mon..fri;

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

type valid_for_identifiers = 'a'..'z','A'..'Z','_','0..9';

Этот тип состоит из объединения нескольких интервалов, причем в данном случае изменен порядок латинских букв: если в стандартном типе char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для величин этого типа выполняются следующие равенства:

inc('z')='A'; dec('0')='_', pred('9')='8'; ord('b')= 2.

ЦЕЛЫЕ ТИПЫ ДАННЫХ.АРИФМЕТИЧЕСКИЕ ФУНКЦИИ ЯЗЫКА ПАСКАЛЬ, РЕЗУЛЬТАТ КОТОРЫХ ЦЕЛОЕ ЧИСЛО.

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

В языке Турбо Паскаль определено пять целых типов:

– Shortint (диапазон представления от -128 до 127, 1 байт);

– Integer (диапазон представления от -32767 до 32768, 2 байта);

– Longint (диапазон представления от -2147483648 до 2147483647, 4 байта);

– Byte (диапазон представления от 0 до 255, 1 байт), – Word (диапазон представления от 0 до 65535, 2 байта).

Значения целых типов могут изображаться в программе двумя способами: в десятичном виде (традиционно, в виде последовательности цифр) и в шестнадцатеричном виде (в этом случае число предваряется знаком «$», а цифры старше 9 обозначаются латинскими буквами от А до F).

Пример:

Var

x1, x2:integer;

y1:byte;

y2:word;

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

Также с целыми числами можно производить операции, результаты которых не целые числа. Это обычное деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с целыми числами: abs, sqr, sqrt, sin, cos, exp, ln и др.

Над данными целого типа определены следующие операции отношения: равно «=», не равно «<>», больше «>», меньше «<», больше или равно «>=», меньше или равно «<=», вырабатывающие результат логического типа (Boolean).

Для целых чисел определены следующие стандартные функции:

– Odd(x) – возвращает результат логического типа: для четного аргумента – false, а для нечетного – true;

– Succ(x) – возвращает следующее целое число (х+1);

– Pred(x) – возвращает предыдущее целое число (х-1);

– Ord(x) – возвращает аргумент x;

– Abs(x) – возвращает модуль х;

– Srq(x) – возвращает квадрат числа х;

– Sqrt(x) – возвращает значение корня числа х;

– Exp(x) – возвращает е в степени х (экспоненту), результат вещественного типа;

– Sin(x) – возвращает синус х, результат вещественного типа;

– Cos(x) – возвращает косинус х, результат вещественного типа;

– Ln(x) – возвращает натуральный логарифм х, результат вещественного типа;

– Dec(x, i) – уменьшает значение х на i, если i не задано, то на 1;

– Inc(x, i) – увеличивает значение х на i, если i не задано, то на 1

ЛОГИЧЕСКИЙ ТИП ДАННЫХ.ЛОГИЧЕСКИЕ ФУНКЦИИ В ЯЗЫКЕ ПАСКАЛЬ.ТАБЛИЦА ИСТИННОСТИ.

В Турбо Паскале логический тип данных носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

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

Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один логический тип данных Boolean, элементы которого могут принимать лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0 добавлены еще три логических типа данныхByteBool, WordBool и LongBool.

Название логического типа данных

Значению False соответствует

Значению True соответствует

Размер памяти для логического типа данных

Boolean

Число 0

1

1 байт

ByteBool

Число 0

Любое число, отличное от 0

1 байт

WordBool

Число 0 в обоих байтах

2 байта

LongBool

Число 0 во всех байтах

4 байта

Отметим, что новые логические типы данных были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.

Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean;

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

Пример переменных с булевым значением

X:=true; y:=5>3

Логические выражения

Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выраженийиспользуются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно).

Сложные условия составляются из простых с помощью логических операцийand (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).

Пример логических выражений:

5>3; 2<=6; (x<2)and(x>=0) 2*x+5<>0

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

СИМВОЛЬНЫЙ ТИП ДАННЫХ.СРАВНЕНИЕ ВЕЛИЧИН СИМВОЛЬНОГО ТИПА.

ип  данных CHAR

Каждая переменная символьного типа может принимать значение только одного символа. Все символы упорядочены в соответствии с принятым в ЭВМ коде (например ASCII). При этом порядковый но­мер символов называется кодом (например, код латинского символа 'А '  равен 65; символа '3' равен 51). Для символьных данных не определены никакие арифметические операции, но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания. Существуют две стандартные функции преобразования : 1) ORD (C) принимает значение кода символа С; 2) значение функции CHR(I) является символ с кодом Например:ORD('А ')=65 CHR(ORD(C))=C   ; CHR (65) = A   ; Строка - это последовательность символов. Строку можно представить как массив, элементы которого имеют тип CHАR. Например: BUK: array[1..17] of char; Массив BUK-массив символов, который содержит 17 символов. Если символов меньше, то строка дополняется пробелами справа. В про­тивном случае возникает ошибка несоответствия типов. Так как массивы символов являются обычными массивами с элементами типа CHAR, они обладают всеми свойствами массивов.

Пример: Из набора 10 любых символов напечатать только заглавные английские буквы и их коды.

program lr1; type sl =array [1..10] of char; var   s: sl; {описание массива символов} i: integer; begin  writeln ('введите 10  символов'): for i:=1 to 10 do  readln (s[i]);          {ввод массива} for i:=1 to 10 do if (s[i]>=’A’) and (s[i]<= ‘Z’) then  writeln (‘Символ :’, s[i], ‘ его код =’, ord (s[i]); readln; end.

Тип данных STRING

В Турбо Паскале предусмотрен тип данных STRING. Переменная типа STRING может принимать значения переменной длины. Максимально возможная длина переменной 255 символов. Например: str: STRING[200]; ow: STRING[10]; В скобках указывается максимальная длина для данной переменной. Для ввода значений типа STRING необходимо использовать READLN, а не READ. За один раз может быть введена только одна строка. Две строки можно сравнивать, используя операции отношения (сначала сравниваются самые левые символы, если они равны, то сравниваются следующие). Для работы с переменными типа STRING используют следующие стандартные процедуры и функции:

1) Функция LENGTH C:=LENGTH(str); Переменной С будет присвоено целое значение, показывающее количествo символов в строковой переменной str .

2) Функция СОNCAТ - сцепление строк в порядке их перечисления. str:=CONCAT(st1,st2,...,stN);str-переменная типа STRING, состоящая из строк st1,...,stN.

3) Функция POS P:=POS (st1, st2); Р-целое число, показывающее номер позиции, с которой начина­ется строка st1 в строкe st2.

4) Функция COPY  S1:=COPY( str, I, J); Sl-символьная подстрока, выделенная из строки str с позиции I, длиной J символов.

5) Процедура DELETE(Str, I, J);  Из строки str удаляется J символов, начиная с I позиции.

6) Процедура INSERT(Str1, Str2, I); Строка Str1 вставляется с I позиции в строку Str2.

7) Процедура STR (V, S1); Числовое значение переменной V преобразуется в строку символов и записывается в строку S1.

8) Процедура VAL (S1, V, C);

Строковое выражение S1 преобразуется в величину целочислен­ного или вещественного типа и записывается в переменной V . Если при  этом ошибок не обнаруживается, то С будет равно 0 . В противном  случае значение С будет равно номеру позиции пер­вого ошибочного символа и V будет неопределено. Строка S1 не должна содержать незначащих пробелов, перемен­ная V может быть целой или вещественной, а переменная С - только целой .

Пример: Подсчитать количество слов во введенной с клавиатуры строке.

program lr2; var s: string[30]; kol, i, n: integer; begin writeln ('введите строку'); readln (s); kol:=0;          {счетчик количества слов} n:= length(s);            {определяем длину введенного текста} s:= concat('  ',s); {добавляем пробел к первому слову} for i:=1 to n do if (copy (s,i,1)='  ') and (copy (s,i+1,1)<>' ')  then  kol := kol+1;{подсчет количества слов} writeln (s,'  количество слов= ',  kol); readln; end.

ПЕРЕЧИСЛЯЕМЫЕ ТИПЫ ДАННЫХ.СПОСОБЫ ОПИСАНИЯ.