Другие типы данных. Часть 1

Всё это время для переменных использовался только тип Integer, т. е. переменные могли принимать целочисленные значения в диапазоне от -32 768 до 32 767. А если диапазон слишком велик или, наоборот, его не хватает для занесения в память; а может, вы хотите работать с действительными числами или вообще с текстом?

Начнём с чисел. Целочисленные типы можно подразделить на натуральные и целые. К натуральным типам относятся Byte (1 байт, от 0 до 255) и Word (2 байта, от 0 до 65 535). К целым типам можно отнести ShortInt (1 байт, от -128 до 127), Integer (2 байта, от -32 768 до 32 767) и LongInt (4 байта, от -2 147 483 648 до 2 147 483 647). Так что, если, например, программе нужно узнать возраст пользователя, а возраст всегда положителен, нужно использовать натуральный тип. Так как возраст обыкновенного человека не превышает 255 лет, можно смело использовать тип Byte. Если же запрашивается ввод заработной платы, то, рассчитывая на всякого бизнесмена, берём тип LongInt.

Диапазоны действительных чисел неконкретны, и поэтому мы не будем их называть. Скажем лишь, что из всех действительных типов, к которым относятся Single (4 байта), Real (6 байт), Double, Comp (по 8 байт) и Extended (10 байт), предпочтительнее использовать Single, Double и Comp, хотя обычно используют Real.

Есть одна проблема. Она заключается в том, что вы должны заранее указывать, сколько знаков писать после запятой при выводе. То есть нужно писать не Write(R); , a Write(R:1:n); , где n - количество знаков после запятой. То есть, если R = 17.3, то Write(R); напишет что-то вроде 1.73000000000000Е+0001, а Write(R:1:2); даст более удовлетворительный результат: 17.30. Запись рода R:1:n мы рассмотрим позже.

Кстати, частное можно записать только в переменную действительного типа, вне зависимости от делимого и делителя. Даже I:=9 / 3; при целом I вызовет ощибку.

Теперь о тексте. За текст в Паскале отвечают два типа: Char (символ) и String (строка). Текст, как уже говорилось, заключается в одинарные кавычки. Делать это нужно в любом случае: при выводе, присваивании, сравнении.

Что можно сказать о переменных? В целях экономии памяти можно установить максимально возможную длину строки, указав её после слова String в квадратных скобках. Это число не должно превышать 255. Если же макс. длину не указывать, то по умолчанию она равна 255.

var
  S: String; {В принципе то же, что и String[255]}
  T: String[10]; {Строка T может вместить только 10 символов}

Если в переменную попробовать записать строку большей длины, чем та может вместить в себя, то данные обрезаются. То есть, если, например, выполнить оператор T:='Хлорофиллипт'; с вышеописанной переменной T и вывести её значение, то мы увидим на экране только Хлорофилли.

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

Тип Char содержит только один символ. Но и его (символ) нужно заключать в одинарные кавычки.

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

Что делает следующая программа?

program The_Tenth; {Программа "Десятый"}
var
  Len: Byte; {Переменная для измерения длины строки}
  S: String; {Строка}
  Ch: Char; {Символ}
begin
  Write('Введите несколько слов: ');
  repeat
    ReadLn(S); {Ввод строки}
    Len:=Length(S); {Где Length(S) - длина строки S}
    if Len < 10 then {Если введённая строка короче 10 символов}
      Write('Напишите что-нибудь подлиннее: ');
  until Len > 9;
{Это работает так: вначале запрашивается ввод строки. Затем, если строка слишком короткая, программа просит написать строку подлиннее и цикл повторяется. Иначе программа идёт дальше}
  Ch:=S[10];
  WriteLn('Десятый символ: ', Ch);
end.

Оглавление
Hosted by uCoz