Учебный курс. Микро Паскаль. Типы данных.

AVR
Статья №2

Доброго времени суток.

Мы продолжаем. Сразу хочу оговорить важный момент. Я пишу этот курс специально для начинающих. Судя по вопросам, заданным мне, у новичков возникают такие вопросы, которым в большинстве книг вообще не уделяется внимания. Однако они возникают. Буду постепенно все расписывать начиная с самых азов. Может потом, доберусь до указателей и всего остального. Так что наберитесь терпения.

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

Простой порядковый тип
К нему относится:

bit или sbit. Бит. Разрядность 1 бит, может принимать значение 1 или 0.

byte. Байт. Разрядность 8 бит, может принимать значение 0… 255.

short. Короткий целый. Разрядность 8 бит, может принимать значение -127… 128.

word. Слово. Разрядность 16 бит, может принимать значение 0… 65535.

integer. Целый. Разрядность 16 бит, может принимать значение -32768… 32767.

dword. Двойное слово. Разрядность 32 бит, может принимать значение 0… 4294967295

longint. Длинный целый. Разрядность 32 бит, может принимать значение -2147483648… 2147483647

Простой вещественный тип.
К нему относятся:

real. 6 байтовый вещественный. Разрядность 32 бит, может принимать значение ±1.17549435082 * 10-38… ±6.80564774407 * -39

Символьный тип.
char. Разрядность 8 бит. Используется для описания символьных переменных. Может принимать значение символов кода ASCII.
С этими типами надеюсь все ясно, объявляют переменные с этими типами так:

var
a: byte;


Здесь служебное слово var дает понять компилятору, что дальше у нас идет перечисление всех переменных, используемых в программе.
Мы объявили переменную а, размером в байт. Можно переменные одного типа писать через запятую вот так:

a, b, c: word;


К переменным можно применять арифметические и логические операции. Примерно так:

a := b+c;


Читается так. А присвоить значение суммы B и C.

Строковой тип
String. Строки. Допустимым значением является набор символов.
Объявление строки несколько иное:

str: string[6];


или

s: string[3];


В квадратных скобках указывается размерность строки. Максимальный размер строки 255 байт. Надо сказать на самом деле в данном примере мы объявили строку S длинной в 4 байта, а не три. Почему?
Для знатоков Паскаля нужно рассказать различия между строками Паскаля и Микро Паскаля. В Паскале строка по сути является массивом символов, причем в нулевой позиции массива храниться фактическая длинна строки. А собственно строка начинается с первой позиции. В Микро Паскале же конец строки помечается нулем. Не нулем в смысле символа, а нулевым символом из кода ASCII.Сама же строка начинается с нулевой позиции. Это по большему счету тип pchar из того же Delphi

Не большое отступление.
ASCII – это аббревиатура от American Standard Code for Information interchange (американский стандартный код для обмена информацией). Согласно стандарту, каждому символу соответствует свой числовой код, принимающий значения от 0 до 127. Существует еще расширенная таблице кодов ASCII, которая состоит из двух частей. Первая, в которую входят символы с кодами 0..127, является универсальной, а вторая (коды с 128 по 255) для специальных символов и букв национального алфавита.
Более подробно можно почитать например в вики.
А посмотреть коды ASCII можно и в Микро Паскале. Пункт меню Tools > Ascii Chart.

Над строками можно производить операции присвоения:

str:= ‘при’;


Или объединения:

s:= ‘мер’;
str := str + s;


После данного примера в переменной str будет лежать слово «пример».
К любому элементу строки можно обратиться по индексу, точно так же как к массиву, о котором ниже.

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

Mассивы это наборы однотипных и однородных данных, имеющих одно общее для всех элементов имя. Элементы массива хранятся в памяти последовательно.

Объявление массива выглядит так:

m: array [1..10] of byte;


Либо, если диапазон начинается с нуля можно и так:

m: array [10] of byte;


Здесь в квадратных скобках указывается диапазон массива. К каждому элементу массива можно обратиться по индексу:

m:[1] := 5;
m[2] := 10;
a := m[10];


Массивы могут быть многомерными. Объявление многомерных массивов не много отличается от стандартного Паскаля и выглядит так:

m2: array [1..5] of array [1..5] of byte;


И соответственно доступ к такому массиву:

m2[1][2]:= 123;


Массивы огут быть константами. в этом случае запись массива имеет вид:

m3 : array[1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31);


Из такого массива можно только считывать данные, запись в него не возможна.
Ну раз уж зашел разговор о константах, опишем и их. Описание констант начинается со служебного слова const. Далее идет описание констант. Константы могут быть не типизированные:

a = 4;
b = 3.25;


То есть без указания конкретного типа.
и типизированные

c: word = 65535;


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

  • +6
  • 10 марта 2011, 20:58
  • Rom

Комментарии (7)

RSS свернуть / развернуть
> real. 6 байтовый вещественный. Разрядность 32 бит
4-байтовый, на самом деле. Это не дельфи, где real 48-битный для совместимости с ранними версиями турбопаскаля.
+1
  • avatar
  • Vga
  • 10 марта 2011, 22:31
Как он описан в хелпе Микро Паскаля так и написал. Может там опечатка.
0
type | Size | Range
real | 32–bit | ±1.17549435082 * 10-38… ±6.80564774407 * 1038
O'RLY?
0
Сегодня ночью потратил часа 2 на оформление странички, залил смотрю — ужас! Все сплошным текстом без намеков на оформления. Видимо в виду отсутствие опыта сделал что то не так. Плюнул и пошел спать. Сейчас хотел исправить, гляжу, все сделано без меня.
Спасибо тебе, добрый человек.
+1
  • avatar
  • Rom
  • 11 марта 2011, 06:29
Пожалста :))) Вообще юзаю для оформления semagic, а тэги лайвстрита (хтмл, только с рядом ограничений) загнал в макросы, удобно.

Да. Переношу все темы про микропаскаль в авр. Тут имхо им не место. Т.к. сей блог преднозначен для алгоритмических и языковых хитростей (типо статей Neiver'a про шаблоны С++), не для описания стандартных сред на контроллеры.
0
Строго говоря там им тоже не совсем место, ибо mP поддерживает AVR, PIC, dsPIC, 8051.
Кстати, о 8051. Почему его блогом обделили?)
P.S. Выложи справочку по функциям/тэгам/etc лайвстрита. Хотя бы на английском.
0
Вообще юзаю для оформления semagic.
Вот на нем то и попался. Наверное тэг какой не правильный поставил.
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.