Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆
  1. 78*31+78*24+78*17+22*72

  2. 7,3*10,5+7,3*15+2,7*10,5+15*2,7

  3. Тема 2.1.2 Данные: понятия и типы

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

После изучения темы студент должен

знать:

  • классификацию типов данных;

  • Примеры использования;

  • Способы преобразования типов данных;

уметь

  • Использовать типы данных для написания программ;

  • Осуществлять преобразование типов данных.

Данные в языке Паскаль

В языке Паскаль любая переменная характеризуется своим типом.

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

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

Тип переменной определяется при ее описании, и он не может быть

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

Паскаль имеет развитую систему типов. Классификация типов данных,

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

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

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

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

  • целый тип;

  • логический (или булевой) тип;

  • символьный тип;

  • перечислимый (или перечисляемый) тип;

  • ограниченный (или интервальный) тип, который также называют тип-диапазон.

К любому из них применима стандартная функция ORD(Х), результатом которой является порядковый номер значения Х. К порядковым типам можно также применять функции:

PRED(X) - возвращает предыдущее значение порядкового типа;

SUCC(X) - возвращает следующее значение порядкового типа.

Целые типы данных

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

В таблице 1 приведены имена (или названия) всех возможных целых типов (их всего 5), а также длина их внутреннего представления в байтах и диапазоны возможных значений каждого из типов.

Таблица 1

Целые типы

Название

Длина, байт

Диапазон значений

Byte

1

0…255

ShortInt

1

-128…+127

Word

2

0…65535

Integer

2

-32768…+32767

LongInt

4

-2147483648…+2147483647

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

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

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

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

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

Таблица 2

Стандартные функции, применимые к целым типам

Обращение

Тип

аргумента

Тип

результата

Действие

Hi(X)

Integer

Word

Byte

Byte

Возвращает старший байт аргумента

Lo(X)

Integer Word

Byte

Word

Возвращает младший байт аргумента

Odd(X)

LongInt

Boolean

Возвращает значение True,

если Х - если Х - нечетное

Swap(X)

Integer

Word

Integer

Word

Меняет местами байты в слове

Таблица 3

Стандартные процедуры, применимые к целым типам

Описание

процедуры

Тип параметров

Назначение

Randomize

Без параметров

Гарантирует несовпадение последо- вательностей случайных чисел,

выдаваемых функцией Random

Inc(X)

X - целое

Увеличивает значение Х на 1

Dec(X)

X - целое

Уменьшает значение Х на 1

Inc(X,N)

Dec(X,N)

Увеличивает значение Х на N

Dec(X,N)

Dec(X,N)

Уменьшает значение Х на N

Символьный тип данных

Значениями символьного типа (Char) являются символы из множества ASCII (American Code for Information Interchange - Американский стандартный код для обмена информацией). Это множество состоит из 256 различных символов, упорядоченных определенным образом. Оно содержит символы строчных и прописных букв, цифр и других символов, включая специальные управляющие символы. Каждому символу приписывается целое число в диапазоне от 0 до 255. Это число служит кодом внутреннего представления символа, его возвращает функция ORD.

Если символьное значение имеет графическое изображение, то оно изображается в программе соответствующим знаком, заключенным в апострофы (одинарные кавычки): 'A', 'B', …, 'a', 'b', …, '1', '2', …, '*', '+' и т. д.

Если символ не имеет графического изображения, то используют другую форму записи: #K, где К - целочисленный код символа.

Например: #13 - Enter; #27 - Esc; #8 - Backspace.

Так как символы упорядочены, то к типу Char применимы операции сравнения, например: 'A' < 'M'; 'A' < 'a' и т. п., а также стандартные функции:

CHR(b) - преобразует выражение b типа byte в символ и возвращает его своим значением.

Например: Chr(90) возвращает в качестве результата символ 'Z'.

ORD(S) - возвращает в качестве результата код символа S в таблице символов ASCII.

Например: Ord('Z') возвращает код, равный 90.

UPCASE(CH) - возвращает прописную латинскую букву, если CH - строчная латинская буква, в противном случае возвращает сам символ CH.

Например: Upcase('z') возвращает символ 'Z'.

PRED(S) - возвращает символ, предшествующий символу S.

SUCC(S) - возвращает символ, следующий за символом S.

Перечислимый тип данных

Перечислимый (или перечисляемый) тип данных задается списком значений (объектов), которые могут принимать переменные этого типа. При этом каждый объект имеет имя. Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе - 1 и т.д. Максимальное число объектов в перечисляемом типе равно 65366 значений. К значениям перечислимого типа применимы стандартные функции Ord, Pred, Succ, а также операции отношений.

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

Рассмотрим примеры порядковых типов.

  1. Описание дней недели:

TypeDays=(Monday,Tuesday,Wednsday,Thday,Friday,Sutterday,Sunday).

  1. Описание месяцев года:

TypeYear=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec).

Ограниченный тип данных

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

<минимальное значение> .. <максимальное значение>

Примеры определения типов - диапазонов:

Typedate=1..31; TypeMonth=1..12; TypeSim='A'..'Z'

Можно сразу определить переменную типа - диапазон:

Day:1..31; Month:1..12; Sim:'A'..'Z' и т.п.

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

К значениям этого типа могут быть применены стандартные функции:

HIGH(X) - возвращает максимальное значение типа - диапазона, к которому принадлежит переменная Х;

LOW(X) - возвращает минимальное значение типа - диапазона, к которому принадлежит переменная Х.

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

Эта группа типов представляет множества значений в различных диапазонах. ТР поддерживает пять различных вещественных типа (табл. 4).

Таблица 4

Название

Длина, байт

Число цифр мантиссы

Диапазон значений

Real

6

11-12

2.9 E-39…1.7 E +38

Single

4

7-8

1.5 E-45…3.4 E+38

Double

8

15-16

5.0 E-324…1.7 E+308

Extended

10

19-20

3.4E-4951…1.1E+4932

Comp

8

0

-2 E+63… +2 E+63 -1

Все вещественные типы, кроме Real, используются если в ПК есть арифметический сопроцессор.

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

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

0.5, 5.25, 5.0, -16. 055 и т.п.

Значения с плавающей точкой изображаются следующим образом: m E p,

где m - мантисса вещественного числа, Е - признак порядка (число 10), р - порядок числа; m - целое или вещественное число с фиксированной точкой, положительное или отрицательное; р - только целое, положительное или отрицательное, например:

4 Е -5 ( ), 0.62 Е 4 ( ), -1.6 Е 22 .

Над значениями вещественных типов допустимы четыре арифметических операции: *, /, +, -.

Целые и вещественные числа именуются как "число без знака".

В таблице 5 приведены некоторые стандартные математические функции и функции преобразования типов, которые используются при работе с целыми и вещественными значениями.

Таблица 5

Вызов

Функции

Тип

аргумента

Тип

результата

Назначение функции

Abs(X)

Целый

Вещественный

Целый

Вещественный

Вычисление абсолютного

значения Х

Sin(X)

Вещественный

Вещественный

Синус Х радиан

Cos(X)

Вещественный

Вещественный

Косинус Х радиан

ArcTan(X)

Вещественный

Вещественный

Арктангенс Х радиан

Sqrt(X)

Целый

Вещественный

Вещественный

Вещественный

Квадратный корень из Х,

(Х>0)

Sqr(X)

Целый

Вещественный

Целый

Вещественный

Значение Х, возведенное

в квадрат

Exp(X)

Вещественный

Вещественный

Значение е в степени Х

Ln(X)

Вещественный

Вещественный

Натуральный логарифм Х,

(Х>0)

Pi

Нет аргумента

Вещественный

Значение числа

Trunc(X)

Вещественный

Longint

Целая часть числа Х

Frac(X)

Вещественный

Вещественный

Дробная часть числа Х

Int(X)

Вещественный

Вещественный

Целая часть числа Х

Round(X)

Вещественный

Longint

Округление Х до

ближайшего целого

Random

Нет аргумента

Вещественный

Случайное число из

диапазона (0...1)

Random(X)

Word

Word

Случайное число из

диапазона (0...Х)

Odd(X)

Целый

Логический

Возвращает значение True,

если Х - если Х - нечетное

Замечания к таблице 5:

  1. Под целым типом понимается один из типов языка (Byte, ShortInt, Word, Integer, LongInt);

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

  3. Функция ArcTan(X) возвращает главное значение арктангенса (в диапазоне от -  /2 до + /2).

  4. Функции Trunc и Int отличаются только типом возвращаемого значения.

Пример 1

Используя среду программирования Delphi вывести на экран результат вычисления следующего выражения:

a=

Листинг

Результат

Пример 2

Используя среду программирования Delphi вывести на экран результат вычисления следующего выражения:

B=122

Листинг

Результат

Преобразование типов. Совместимость типов

Рассмотрим такую ситуацию, пусть заданы типы Т1 и Т2, а также описаны переменные р1 и р2 следующим образом:

Var p1 : T1; p2 : T2;

Возникает вопрос, когда можно записать р1 := р2?

Чтобы ответить на этот вопрос, рассмотрим совместимость простых типов по присваиванию.

Операция р1 := р2 является допустимой, если истинно одно из следующих утверждений:

Т1 и Т2 - тождественные типы.

Типы являются тождественными, если они описаны одним и тем же идентификатором или происходят от одного и того же идентификатора.

Например,

Type

T1 = Real;

T2 = Real;

 T3 = T1;

T4 = (red, gren, blue, black, white);

 T5 = (red, gren, blue, black, white);

T6 = T4;

Здесь Т1, Т2 и Т3 - идентичные типы, Т4, Т5 - не идентичны, поскольку (red, gren, blue, black, white) не являются идентификатором типа, Т4, Т6 являются идентичными. Т2 является поддиапазоном типа Т1.

Например,

Type

T1 = Real;

T2 = Integer;

(множество целых чисел входит в диапазон вещественных чисел).

Т1 и Т2 - являются отрезками одного и того же типа.

Например,

Type

T1 = 1..100;

T2 = -3..20;

 week = (d1, d2, d3, d4, d5, d6, d7);

working_week = (d1..d5).

Совместимость по присваиванию станет более понятна, если вспомнить, что переменные в памяти занимают определённое число байт.

Так, переменная типа Integer занимает 2 байта, типа - Real 6 байтов, а в большее число ячеек всегда можно поместить меньшее, а наоборот не всегда.

Совместимость типов необходима также в выражениях и операциях сравнения.

 Program Example;

Var a : Byte;

 b : Integer;

c : Longint;

 Begin

Writeln('Введите 2 числа:(Byte, Integer)');

Readln(a, b);

 c:=a + b;

 Writeln(c);

 End.

Контрольные вопросы

  1. Классификация типов данных

  2. Порядковые типы

  3. Целые типы

  4. Символьные типы

  5. Перечислимые типы

  6. Ограниченные типы

  7. Вещественные типы

  8. Примеры использования

  9. Способы преобразования типов, примеры

  10. Совместимость типов, примеры

Задания для самостоятельной работы

Используя среду программирования Delphi осуществить вычисления следующих выражений

  1. 7,3*10,5+7,3*15+2,7*10,5+15*2,7

  2. (32+62)/25

  3. (42- )2