Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1std_PrT.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
200.19 Кб
Скачать

1.4. Варианты заданий и условия задач.

Составить программу на языке ПАСКАЛЬ, содержащую простые (все целые типы, символьные, логические и вещественный тип real ) и скалярные (перечислимый и ограниченный) типы данных и операции над ними (по выбору студента), согласно заданного варианта. Примерный вид программы приведен в Приложении 3.

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

1.5. Вопросы для самопроверки.

1. Каковы особенности машинного представления целочисленных типов данных?

2. Каковы особенности выполнения арифметических действий над операндами целочисленных типов?

3. В чем заключается особенность машинного представления отрицательных целых чисел в памяти ЭВМ?

4. Машинное представления вещественных типов данных в памяти ЭВМ.

5. Почему операция точного сравнения ( = ) вещественных чисел, особенно полученных в результате вычислений, является "опасной", т. е. во многих случаях может привести к непредсказуемым результатам? Каким образом нужно ее модифицировать, чтобы получить корректный результат сравнения?

6. Отличие сложного типа Comp (целое в формате вещественного) от других вещественных типов данных и особенности его машинного представления.

7. Машинное представления символьного типа данных в памяти ЭВМ.

8. Понятие системы ASCII. Основная таблица кодов ASCII и ее особенности.

9. Расширение ASCII. Кодовые таблицы для поддержки символов кириллицы.

10. Основные характеристики стандарта Unicode.

11. Операции над символьным типом данных.

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

13. Особенности машинного представления перечислимых типов данных.

14. Операции над перечислимыми типами данных.

15. Особенности представления и использования ограниченного типа данных.

16. Структура файла компоновки программы.

17. Как влияет опция Word align data на размещение данных в памяти ЭВМ?

1.6. Методические указания.

1.6.1 Машинное представление целочисленных типов данных.

Форматы внутреннего представление целочисленных типов данных, использующиеся в языке Turbo Pascal 7.0 представлены в таблице 1.2.

Таблица 1.2.

Форматы внутреннего представление целочисленных типов данных в TP 7.0.

Тип

Диапазон

Как хранится

Длина

Byte (Байт)

0…255

Как байт без знака

1 байт

ShortInt (Короткое целое)

-128…+127

Как байт со знаком

1 байт

Word (Слово)

0…65535

Как слово без знака

2 байт

Integer (Целое)

-32768…+32767

Как слово со знаком

2 байт

LongInt (Длинное целое)

-2147483648… +2147483647

Как двойное слово со знаком

4 байта

В знаковых двоичных числах старший (левый) бит определяет знак числа: если он равен 0, то число считается положительным, а если он равен 1 - то отрицательным. Так как число нуль содержит во всех разрядах нули, то оно фактически относится к положительным числам.

В IBM PC-совместимых компьютерах (впрочем, как и в большинстве других современных мини- и микро-ЭВМ) принято соглашение, называемое иногда принципом "младшее - по младшему адресу", заключающееся в том, что младший байт "слова" (в данном случае под "словом" понимаются любые два смежные байта в памяти) имеет меньший адрес, а старший байт - больший адрес. Для пользователя, обычно, это несколько неудобное соглашение незаметно (он редко испытывает необходимость работать на уровне битов), но о нем следует помнить программисту при анализе действий шины и просмотре распечатки (дампа) содержимого памяти. В частности типы Word, Integer и LongInt хранятся в памяти ЭВМ в обратном (перевернутом) виде: вначале (по меньшему адресу) записывается менее значащий байт, а последним - наиболее значащий. Например:

Варианты заданий.

Таблица 1.1.

N п/п

Переменные целого типа

Переменные символьного типа

Переменная типа real

Переменные перечислимого типа (для заданного типа)

Переменные ограниченного типа (для заданного типа)

Byte

ShortInt

Word

Integer

LongInt

1

241

-120

$A05

4507

$FA1603

'S', '@', '4'

2.5

Дни недели

Year = 1900..1999;

2

$F4

24

46200

-30000

50000

'8', '$', ','

0.5

Месяцы года

Hours = 0..23;

3

89

-30

$ABCD

$A50

$ABCDEF

'0', '%', '!'

-1.25

Арифметические операторы

SmallRusBukva = 'а'..'я';

4

$8F

100

32456

$FA00

-1000000

'9', ';', '\'

3.75

Сезоны года

Index = 0..2*N-1;

5

167

-10

$1234

8199

$12345678

'7', '*', '>'

-0.5

Гласные буквы

Data = 1..31;

6

$FE

$1A

1234

-1030

12345678

'6', '?', '<'

-0,25

Ноты

Rost_Chel = 50..250;

7

84

$34

$A123

$9999

-12345678

'1', '+', 'Q'

0.375

Континенты

SymDigit = '0'..'9';

8

141

$7A

10240

9999

-500000

'5', '=', 'N'

-3.75

Единицы длины

Kurs = 1..5;

9

$A4

-100

32165

-9999

$AD61

'3', '#', 'F'

1.5

Цвета спектра

SmallBukva = 'a'..'z';

10

189

64

$AAAA

-8192

$1234

'2', ':', '|'

3.5

Члены бригады

Index = 0..20;

11

$AF

-64

$F000

8192

1234

'Z', '&', '~'

-0.75

Металлы

No_Mes = 1..12;

12

67

$64

300

$8111

-1234

'^', '(', '9'

-1.5

Газы

Diapazon = 10..25;

13

$AA

-34

34

$543

560300

'D', ')', '5'

-0.125

Полупроводники

DayInYear = 1..365;

14

100

$30

$34

543

-256

'{', 'J', '?'

-0.375

Диэлектрики

Ocenka = 2..5;

15

41

$60

$1AC

-543

$98765

'}', 'A', '^'

-1.0

Кафедры

Semestr = 1..10;

16

$41

-80

2048

$8AF

$DA00

'[', 'a', '4'

2.0

Факультеты

BigBukva = 'A'..'Z';

17

98

$5F

20480

$1AAA

-98765

']', 'V', '0'

2.25

Должность

Index = -10..20;

18

$F0

60

$DA

-16300

$256

'W', '_', '9'

-2.5

Ученая степень

Minuts = 0..59

19

76

$3A

576

11111

-222888

'L', '<', '0'

4.5

Ученое звание

RusBukva = 'А'..'я';

20

$6F

30

32456

-514

$DDCC

'U', '$', '8'

-3.5

Учебные курсы

DayOfWeek = 1..7

21

48

-48

$1BBB

$D206

456219

'R', '5', '%'

-2.0

Мебель

Diapazon = -5..15;

22

$48

-60

$C1DA

514

2255

'G', '@', '!'

-4.5

Машины

BigRusBukva = 'А'..'Я';

23

125

$4D

21500

$11111

-1004

'Y', '6', ')'

1.0

Растения

Index = 20..30;

24

235

$70

$D000

16300

-98765

'X', '+', '0'

0.25

Животные

Digit = 0..9;

25

$D6

34

$AF

-11111

256

'M', '7', '&'

0.125

Одежда

ASCII_Kod =0..255;

W ord: $102

LongInt: $1020304

Адресом "слова" считается адрес его младшего байта (в приведенных примерах это адреса байта 04 для LongInt и байта 02 для Word).

Следует отметить, что целочисленные типы данных образуют, так называемое, кольцо чисел. На рис 1.1 представлено такое кольцо для чисел типа ShortInt (короткое целое). Если в языке программирования отсутствует

контроль выхода за пределы допустимого диапазона, или он отключен, то при добавлении 1 к максимальному числу (в данном случае, +127) будет получено максимальное отрицательное число (-128). И наоборот, при вычитании из минимального отрицательного числа (-128) единицы, будет получено максимальное положительное число (+127). Аналогичные кольца характерны и для других целочисленных типов.

Для физического представления целых отрицательных чисел обычно используется форма их представления, называемая дополнительным кодом. Использование дополнительного кода позволяет заменить операцию вычитания на операцию сложения уменьшаемого числа с дополнительным кодом вычитаемого. Для того чтобы представить целое отрицательное число в дополнительном коде, необходимо представить это число в шестнадцатеричном коде (без учета знака), затем выполнить его побитовую инверсию и к результату прибавить 1.

Например, для того, чтобы получить физическое представление целого отрицательного числа -1607, необходимо:

1) Получить физическое представление положительного числа 1607

0000 0110 0100 01112 (064716)

2) Получить обратный код путем инверсии битов

1111 1001 1011 10002

3) Прибавить к полученному числу 1

1111 1001 1011 10012 - это и есть физическое представление числа -1607, (или F9В916).

В связи с тем, что разрядность современных процессоров увеличивается, в современных языках программирования сейчас различают: аппаратно-зависимые типы данных разрядность которых определяется величиной разрядной сетки процессора (или, как говорят, - “естественным размером целого”) и аппаратно-независимые типы данных (или типы с фиксированной разрядностью), разрядность которых не зависит от используемого процессора. В частности, в среде Delphi – дальнейшем развитии языка Turbo Pascal, целочисленные типы Cardinal и Integer являются аппаратно-зависимыми типами данных (без знака и со знаком соответственно), разрядность которых определяется величиной разрядной сетки. В версиях Delphi 5 и 6 они являются 32-х разрядными, однако, в дальнейшем их размер, несомненно, увеличится до 64 разрядов и т. д. В случае, если в приложении необходимо иметь гарантированную разрядность целочисленного типа данных, не зависящую от аппаратных средств и версий Delphi, то рекомендуется применение целочисленных типов с фиксированной разрядностью: Byte, Word, LongWord - для беззнаковых целых типов и ShortInt, SmallInt, LongInt, Int64 – для знаковых целых типов.

Арифметические действия над операндами целочисленного типа предполагают 8-битовую, 16-битовую и 32-битовую точность в соответствии со следующими правилами:

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

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

- Выражение справа в операторе присваивания вычисляется независимо от размера или типа переменной слева.

- Любые операнды размером в байт преобразуются к промежуточному операнду размером в слово, который совместим перед выполнением арифметической операции с типами Integer и Word.

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