Домой! Типы данных


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

Целые числа - это числа, с помощью которых Вы учились считать (1, 5, -21 и 752, например).

Вещественные числа имеют дробные части (3.14159) и экспоненты (2.579x10**24). Они также известны как числа с плавающей точкой.

Символы - это любые буквы алфавита, символы и цифры 0-9. Они могут использоваться отдельно (а, z, !, 3) или объединяться в символьные строки ('Это только проверка').

Булевские выражения имеют только два значения: TRUE или FALSE (истина или ложь). Они используются в условных выражениях.

Указатели - это адреса ячеек памяти, содержащих информацию.

Целые числа.

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

В Turbo Pascal поддерживается целочисленный тип MaxInt = 32,767, допуская значение -32,768. Переменная целочисленного типа занимает 2 байта.

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

   +Таблица 2.1. Целочисленные типы данных.
------------------------------------------------------------
    Тип                      Диапазон             Размер
                                                  в байтах
------------------------------------------------------------
Byte                            0..255                1
(целое длиной в байт)

Shortint                     -128..127                1
(короткое целое)

Integer                    -32768..32767              2

(целое)

Word                            0..65535              2
(длиной в слово)

Longint               -2147483648..2147483647         4
(длинное целое)
-----------------------------------------------------------

Заключение: Turbo Pascal позволяет использовать шестнадцатиричные целые значения (основание 16). При описании шестнадцатиричной константы перед ней указывается знак доллара $, например $27=39.

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

В стандартном Паскале тип Real представляет значение с плавающей точкой, содержащее мантиссу и экспоненту - степень числа 10.

Количество значащих цифр в мантиссе и диапазон значений экспоненты зависят от компьютера. В Turbo Pascal данные вещественного типа Real имеют размер в 6 байт, с 11 значащими цифрами, мантиссы и экспоненты от 10**-38 до 10**38.

Кроме того Turbo Pascal поддерживает стандарт IEEE 754 для двоичной арифметики с плавающей точкой. В этом случае добавляются типы данных с Single, Double, Extended и Comp:

Single - размер 4 байта, допускается 7 значащих цифр и диапазон экспоненты от 10**-45 до 10**38;

Double - размер 8 байт, допускается 15 значащих цифр и диапазон экспоненты от 10**-324 до 10**308;

Extended - размер 10 байт, допускается 19 значащих цифр и диапазон экспоненты от 10**-4951 до 10**4931.

Если у вас есть процессор 8087, и включена работа с числовым сопроцессором ({$N+}), Turbo Pascal генерирует инструкции 8087 для поддержки этих типов и выполнения всех операций с плавающей точкой на 8087.

Если у Вас нет 8087, но Вы хотите использовать IEEE типы, Вы можете указать Turbo Pascal эмулировать процессор 8087, разрешая и эмуляцию 8087 и обработку с плавающей точкой (директивы {$E+,N+}). Turbo Pascal подключает специальную библиотеку, которая выполняет операции с плавающей точкой, так же как процессор 8087.

         Таблица 2.2 Вещественные типы данных.

-------------------------------------------------------------------
     Тип             Диапазон                Значение     Размер в
                                               цифры        байтах
-------------------------------------------------------------------
 Real               2.9х10Е-39..1.7х10Е38      11-12          6
 (вещественный)

 Single(с одинар-   1.5х10Е-45..3.4х10Е38        7-8          4
 ной точностью)

 Double(с двойной    5.0х10Е-324..1.7х10Е308    15-16         8
 точностью)

 Extended(повышен-  1.9х10Е-4951..1.1х10Е4932   19-20         10
 ной точности)

 Comp(сложный)          -2Е+63+1..2Е+63-1       19-20         8

 *Comp - только целые значения

-----------------------------------------------------
     Вызовем редактор Turbo Pascal и заведем программу:

      program DoRatio;
      var
        A, B: Integer;
        Ratio: Real;
      begin
        Write('Enter two numbers: ');
        Readln(A, B);
        Ratio := A div B;
        Writeln('The ratio is ', Ratio)
      end.

Сохраним ее в файле DORATIO.PAS с помощью функции основного меню File/Save As. Нажмите ALT-R для компиляции и запуска программы. Введем два значения, 10 и 3, и получим результат 3.000000.

Ожидая ответа 3.3333333333, мы получили результат 3. Получили такой результат, потому что был использован оператор "div" для деления целых чисел.

Исправим оператор "div" на Ratio := A / B; сохраним код (F2), откомпилируем и выполним. Новый результат 3.3333333333, как и ожидали. Оператор деления "/" обеспечивает более точный результат.

+Символьные и строковые типы данных.

Научившись записывать числовые данные, выучим запись и использование символьных и строковых данных. Паскаль позволяет определять тип Char, имеющий размер в один байт и содержащий один символ. Символьные константы содержат один символ, заключенный в апострофы ('A','e','г','2'). Заметим, что '2' означает символ 2, а 2 означает целое число 2 (и 2.0 - вещественное число) .

     program DoRatio;
     var
       A, B: Integer;
       Ratio: Real;
       Ans: Char;
     begin
        repeat
          Write('Enter two numbers: ');
          Readln(A, B);
          Ratio := A / B;

          Writeln('The ratio is ', Ratio);
          Write('Do it again? (Y/N)  ');
          Readln(Ans);
        until UpCase(Ans) = 'N';
     end.

После вычисления коэффициента, выдается сообщение:

Do it again? (Y/N). (Повторить? (Да/Нет)).

Программа находится в состоянии ожидания одного из указанных символов и нажатия клавиши "Enter". Если Вы нажмете "n" или заглавную "N", то условие "until" будет выполнено и цикл закончится. В случае, если Вы ответите "Y" ("y"), то выполнение цикла будет продолжено.

"N" и "n" не одно и тоже, потому что они имеют различные значения в коде ASCII. Каждый символ имеет свой код ASCII, представленный 8-битным значением (символ занимает 1 байт). Приложение B в Руководстве программиста содержит список кодов ASCII для всех символов.

В Turbo Pascal существуют два дополнительных способа описания символьных констант: с помощью символа "^" и символа числа "#".

Символы с кодами от 0 до 31 - управляющие символы. Они обозначаются аббревиатурами (CR - возврат каретки, LF - перевод строки, ESC - выход) или с помощью двух клавиш, одна из которых Ctrl + буква. Значение буквы получается прибавлением 64 к управляющему коду.

Например, управляющий символ кода ASCII 7 известен как Bel или CtrlG. Turbo Pascal дает возможность представить символы с помощью "^", за которым следует буква (или символ). Так, "^G" то же самое, что и Ctrl-G. "^G" можно использовать в операторах Turbo Pascal: Writeln (^G). Этот метод применим только к управляющим символам.

Вторая возможность обозначения - использование символа номера "#", за которым следует код ASCII. Так, #7 то же самое, что и "^G", #65 - 'A', a #233 - один из специальных псевдографических символов IBM PC.

В большинстве случаев используются строки символов. В стандартном Паскале не поддерживается тип строк символов. В Turbo Pascal реализована эта возможность. Рассмотрим программу

       program Hello;
       var
          Name: String(30);
          begin
             Write('What is your name? ');
             Readln(Name);
             Writeln('Hello, ', Name)
           end.

Переменная Name объявлена, как string (строка), и под нее резервируется 30 байт (для 30 символов). Кроме того, Turbo Pascal отводит еще один байт, в котором содержится текущая длина строки. В этом случае, независимо от того, какой длины будет введено имя, оператор Writeln распечатает имя указанной длины. Если будет введено имя больше 30 символов, то будут использоваться только первые 30 символов, а остальные будут проигнорированы.

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

Turbo Pascal предлагает несколько процедур и функций, работающих со строковыми переменными. Их описание дано в главе 1 Справочного руководства по библиотеке.

+Булевские данные.

Встроенный тип Boolean данных в Turbo Pascal имеет два возможных значения: True и Falsе (истина и ложь). Можно объявить переменную типа Boolean, и присвоить ей значение True или False, или же, что более важно, присвоить ей значение выражения, которое при вычислении принимает одно из этих значений.

Булевское выражение - это выражение, которое принимает значение True или False.

Оно состоит из выражений отношений, булевских операторов, булевских переменных и/или других булевских выражений. Например:

while (Index <= Limit) and not Done do...

while содержит булевское выражение. Булевское выражение в этом случае все, что находится между ключевыми словами while и do. Done - это переменная (или функция) булевского типа.

+Указатели.

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

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

          type

             Buffer = string[255];
             BufPtr = ^Buffer;
          var
             Buf1: Buffer;
             Buf2: BufPtr;

Тип данных Buffer определен, как строковая переменная размером 255 байт, в то же время BufPtr - указатель на Buffer. Переменная Buf1 имеет тип Buffer и занимает (255+1) байт памяти. Переменная Buf2 имеет тип BufPtr, это 32-битовый адрес и занимает 4 байта памяти.

Куда указывает Buf2? В данный момент никуда. Прежде чем использовать BufPtr, необходимо зарезервировать (распределить) память и запомнить ее адрес в Buf2. Вы делаете это, используя процедуру New:

New(Buf2);

Поскольку Buf2 указывает на тип Buffer, то этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.

Как использовать Buf2 и данные, на которые он указывает? С помощью оператора ^. Например, необходимо поместить строку и в Buf1 и в буфер, на который указывает Buf2:

     Buf1  :  = 'Эта строка помещается в Buf1';
     Buf2^:  = 'Эта строка  помещается  по  указателю Buf2';

Отметим различие между Buf2 и Buf2^: Buf2 означает 4-байтовую переменную указателя; Buf2^ - 256-байтовую строковую переменую, адрес которой в Buf2.

Теперь, как освободить память, на которую указывает Buf2? Используя процедуру Dispose. Эта процедура освобождает память. После того, как при помощи Dispose освобождена память, следует присвоить указателю значение nil, т.е. указатель ни на что не указывает:

     Dispose(Buf2);
     Buf2 := nil;

Заметим, что значение nil присваивается указателю Buf2, а не Buf2^.

Rambler's Top100
Hosted by uCoz