Концепция типа данных в Pascal. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Концепция типа данных в Pascal.



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

Концепция типа данных в Pascal.

  1. Любой тип данных определяет множество значений, к которому принадлежат постоянные, функции или выражения
  2. Тип значения задаваемого постоянной, переменной или выражением можно определить по их виду или описанию.
  3. Каждая операция или функция требует аргумента фиксированного типа и выдает результат фиксированного типа. Транслятор может использовать информацию о типах для проверки типов и правильности конструкций.

В Pascal существуют скалярные и структурированные типы данных.

Скалярные типы включают:

    • Стандартные (целые, вещественные, символьные, логические, адресные)
    • Типы, определяемые пользователем (перечисляемый и интервальный)

Структурированные типы:

  • Массивы
  • Строки
  • Множества
  • Записи
  • Файлы и др.

Еще есть процедурный и объектный.

Есть понятия эквивалентности и совместимости типов.

Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий: Т1 и Т2 представляет собой один и тот же тип, Т1 и Т2 описаны с помощью равенства.

Менее строгие ограничения определяются совместимостью типов.

Типы являются совместимыми, если:

  • Они эквиваленты
  • Оба либо целые, либо действительные
  • Один тип интервальный, другой его базовый
  • Оба интервальные с общим базовым

 


Данные целого типа в языке Pascal.

Целые типы определяют константы, переменные и функции, значения которых реализуют значения целых чисел.

Название типа Тип диапазон значений требуемая память
Короткое целое со знаком Shortint -128.. 127 1 байт
Целое со знаком Integer -32768.. 32767 2 байта
Длинное целое со знаком Longint -2147483648.. 2147483647 4 байта
Короткое целое без знака Byte 0.. 255 1 байт
Целое без знака Word 0.. 65535 2 байта

 

Арифметические операции дающие целый результат: +, -, *, деление div, остаток от деления mod

5 div 2=2; 5 mod 2=1

К аргументам целого типа применяют следующие функции, результат которых имеет целый тип:

    • Абсолютная величина: Abs()
    • Квадрат: sqr()
    • Следующий за(): succ()
    • Предыдущий за (): pred()

Для быстрой работы с целыми типами:

  • Inc(x)=x+1
  • Inc(x, k)=x+k
  • Dec(x)=x-1
  • Dec(x, k)=x-k

 


Данные вещественного типа в языке Pascal.

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

Название типа Тип Диапазон значений Количество цифр мантиссы Размер (байт)
Вещественное число одинарной точности Real 2.9e-39.. 1.7e+38    
Вещественное число Single 1.5e-45.. 3.4e+38    
Вещественное число двойной точности Double 5.0e-324.. 1.7e+308    
Вещественное число повышенной точности Extended 3.4e-4932.. 1.1e+4932    
Целое число в формате вещественного Comp -9.2e+18.. 9.2e+18    

 

Comp – число без дробной части и без точки.

Операции: +, -, *, /

Булевские операторы: >, <

Дают вещественный результат:

Abs(x), sqr(x), sin(x), cos(x), arctan(x), ln(x), exp(x), sqrt(x), frac(x) – дробная часть;

int – целая часть; Pi=π; trunс – выделяет целую часть путем отсечения дробной части;

raund – округляет до ближайшего целого

Примечание: типы Single, Double, Extended работают при подключении сопроцессора, в том числе при эмуляции сопроцессора.


Данные логического типа в языке Pascal.(Boolean)

Переменные логического типа могут принимать значения:

False (ложно) или True (верно).

Примеры описания:

VAR b1, b2, b3, b4: boolean;

Примеры присвоения значения:

b1:= True; b2:= False; b3:= not b1; {или} b3:= False; b4:= b1;

Логические операции:

    • Отрицание – not
    • Конъюнкция – and
    • Дизъюнкция – or
    • Исключающая дизъюнкция – xor

Булевскому типу данных соответствует идентификатор Boolean. Переменные булевского типа имеют размер 1 байт и могут содержать значения TRUE или FALSE.

Значению FALSE соответствует 0, любое число отличное от нуля считается TRUE.

Var knopka, flag: boolean;

Begin

knopka:=true;


Данные символьного типа в языке Pascal.

Символьному типу соответствует стандартный идентификатор Char.

Символьный тип (char) определяет упорядоченную совокупность символов, допустимых в данных DBM.

Переменные символьного типа могут принимать значения одного из символов с кодами от #0 до #255, т. е. допускаются буквы русского алфавита и символы псевдографики. Символы с кодами от #0 до #31 (управляющие) в тексте воспринимаются как пробел, а в операторах вывода как символ или команда.

Значение символа переменной const – это один символ из набора символов. Const может быть записана ‘a’, или кодом #k; k – код символа.

Функции:

    • Ord(‘c’) – выводит код символа
    • Chr(k) – по коду символа выводит символ
    • upCase – переводит в верхний регистр для a..z

Из маленького ‘c’ получить ’C’:

Chr(ord(‘c’)-32) → ‘C’

Символьный тип, а также целые и булевские типы относят к, так называемым, порядковым типам.

 


Строки в языке Pascal.

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

String[максимальная длина строки]; длина строки – целочисленная константа в интервале 1-255.

Var St1: string[30]; s:string;- в данном случае длина строки будет равна максимальной 255 символов. Примеры объявлений:

Type Фамилия = string[15];

Имя = string[10];

Var F: Фамилия;

I: Имя;

Для хранения каждого символа строки обычно требуется 1 байт. Число в нулевом байте определяет в данный момент времени длину строки. Как и к массиву, к отдельным символам строки можно обратится с помощью индексов в квадратных скобках: F[3]; Нулевой индекс определяет позицию в которой содержится длина строки.

Работа со строками.

1. Присваивание: St:=’Pascal’; s:= ‘Дима’;

2. Оператор сцепления (склеивания) +: результатом является строка, длина которой равна сумме длин строк операндов.

3. Операторы отношения (>, <, =, <>, >=, <=,), имеющие более низкий приоритет, чем оператор сцепления, позволяют реализовать сравнение строк. Результат имеет логический тип. Сравнение строк производится посимвольно слева направо.

4. Определение длины строки: n: = length (st); где st – типа string, n – целого типа.

Пример:

for i:=1 to length(st) do

If st[1]=’a’ then K:=k+1;

5. Копия – выделение подстроки длиной n из строки st, начиная с позиции pos:

st1:= copy (st, pos, n);

Пример:

st:=’Pascal’;

St1:=copy(st,3,2);

Write(st1); результат: sc

6. Определение позиции символа: n: = Pos (st1,st) – определяет позицию начала вхождения строки st1 в строку st.

Пример:

st:=’Pascal’;

n: = Pos(’a’, st,); результат: n=2.

7. Удаление подстроки: Delete (st,pos,n), где pos указывает, начиная с какой позиции удаляется n символов.

Пример:

st:=’Формат’;

delete (st,6,1); результат: Форма.

8. Вставка подстроки: Insert (st1,st,pos), где st1 – строка, которая вставляется, st – строка, в которую вставляется подстрока st1, pos – позиция с которой вставляется подстрока.

9. Преобразование числа в сроку: Str (IBR,st)- преобразование числового значения IBR и помещение результата в строку st.

10. Перевод строки в число: Val(St,IBR,Cod) – преобразует значение St в величину целочисленного или вещественного типа и помещает результат в IBR. Cod – целочисленная переменная содержит 0, если преобразование прошло без ошибки, или номер позиции первого символа, на котором произошла ошибка.

Как уже отмечалось, переменная строкового типа (String) может рассматриваться как массив элементов символьного типа (Char). Например, если в программе определены переменные S: string; C: char; и задано S:='Москва', то S[1]='М', S[2]='о' и т. д. и возможно присвоение, например: C:= S[1]; Таким образом строка может рассматриваться как линейный массив символов. Элементы массива, составляющие строку можно переставлять местами и получать новые слова, применять функции работы с символами, например:

for i:= 1 to N div 2 do begin C:= S[i]; S[i]:= S[N-i+1]; S[N-i+1]:= C end; Writeln(S);

{исходное слово выведется справа налево: "авксоМ"}

Здесь N:= ord(S[0]); - число символов в переменной "S" хранится в переменной S[0]. Функция "ord" преобразует символьный тип в целый. N div 2 - количество перестановок для слова из "N" символов. В переменной "C" запоминается значение i-го элемента, который меняется с элементом, симметричным относительно середины строки.

Можно производить поиск и замену заданного символа в строке, например:

for i:=1 to N do if S[i]=' ' then writeln('найден символ пробел');

for i:=1 to N do if S[i]='/' then S[i]:='\'; {замена символа "/" на "\"}

 

Заменяя или переставляя символы в строке по определенной схеме (закону) можно зашифровать строку. Для дешифровки используется, как правило, схема обратной перестановки или замены символов. Например:

for i:=1 to N do S[i]:= chr(ord(S[i])+2); {преобразование исходных символов в символы с кодом большим на две единицы}

Напомним, что все используемые в MS-DOS символы имеют ASCII коды от 0 до 255.

Здесь удобно также использовать функции Pred(C); и Succ(C).

 


Записи в языке Pascal.

Запись – это структура данных, в которой под одним именем объединены переменные одного или различных типов. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа. Описание записи в языке Паскаль осуществляется с помощью служебного слова RECORD, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END:

Type {Объявление типа запись}

Student = record

Fio: string[20]; {Поле Ф.И.О.}

Group: integer; {Поле номера группы}

Ocn: array[1…3]of integer; {Поле массива оценок}

end;

Var

Stud: Student; {Объявление переменной типа запись}

 

Описание записей возможно и без использования имени типа, например:

var Stud: Record

FIO: String[20]; {Поле Ф.И.О.}

Group: integer; {Поле номера группы}

Ocn: array[1…3]of integer; {Поле массива оценок}

End;

F: file;

Ch: char;

St: string;

…….

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

Stud.Fio:= ‘Петров В.П.’; {Внесение данных в поля записи}

Stud.Group:=202;

……

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

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

With Stud do

Begin

Fio:=’Петров.В.П.’;

Group:=202;

End;

Инициализация записей осуществляется с помощью типизированных констант:

type

RecType= Record

x,y: Word;

ch: Char;

dim: Array[1..3] of Byte

end;

const

Rec: RecType= (x: 127; y: 255;ch: ‘A’;dim: (2, 4, 8));

........



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 1315; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.174.239 (0.049 с.)