Правила определения типа

Урок 2. «Типы данных. Операции и функции. Ввод данных»

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

Представьте ситуацию: группа туристов хочет забронировать место в гостинице. Какую информацию нужно заранее сообщить кроме времени пребывания? Скорее всего – это количество человек в группе, сколько женщин, сколько мужчин, возможно есть семейные пары, которые хотят проживать вместе и т.д. По сути мы сообщаем какие-то характеристики группы и в зависимости от этих характеристик для группы бронируется место.

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

Раздел описания начинается служебным словом var. Далее пишется список переменных с указанием через двоеточие их типов. Например:

programtwo; var  a,b,c:integer; d,e,f:real; s:string; begin
a,b,c : integer ;  
список   тип    

 

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

Все, что находится выше слова begin – называется разделом описания. Когда компилятор читает строчку «var b: integer;», он бронирует в оперативной памяти две ячейки и называет их b. Теперь, если он встретит в программе упоминание «b», то он обратится именно к этому кусочку памяти.

Целочисленный тип

Целочисленных  типов несколько. Они различаются диапазоном значений, количеством байт отведённых для их хранения и словом, с помощью которого объявляется тип.

Тип Диапазон Размер в байтах
shortint -128…127 1
integer -32 768…32 767 2
longint -2 147 483 648…2 147 483 647 4
byte 0…255 1
word 0…65 535 2

Объявить целочисленную переменную можно следующим образом:

Var book: integer;

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

В Pascal бывают следующие вещественные типы данных:

Тип Диапазон Память, байт Количество цифр
Real 2.9e-39 … 1.7e38 6 11-12
Single 1.5e-45 … 3.4e38 4 7-8
Double 5.0e-324 …1.7e308 8 15-16
Extended 3.4e-4932 … 1.1e493 10 19-20
Comp -9.2e63 … (9.2e63)-1 8 19-20

Объявить вещественную переменную можно следующим образом:

Var sum: real;

Логический тип

Переменная, имеющая логический тип данных может принимать всего два значения: true (истина) и false (ложь). Здесь истине соответствует значение 1, а ложь тождественная нулю. Объявить булеву переменную можно так:

Var t: boolean;

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

Символьный тип данных – это любой символ ПК (персональный компьютер), взятый в апострофы. Переменная данного типа занимает в памяти компьютера 1 байт. Объявляется она следующим образом:

Var c: char;

Строковый тип

Строка в Паскале представляет собой последовательность символов заключенных в апострофы, и обозначается словом String. Число символов (длина строки) должно не превышать 255. Если длину строки не указывать, то она автоматически определиться в 255 символов. Общий вид объявления строковой переменной выглядит так:

Var <имя_переменной>: string[<длина строки>];

Каждый символ в строке имеет свой индекс (номер). Индекс первого байта – 0, но в нем храниться не первый символ, а длина всей строки, из чего следует, что переменная этого типа будет занимать на 1 байт больше числа переменных в ней. Номер первого символа – 1, например, если мы имеем строку S=‘space’, то S[1]=s;.

Объявить строковую переменную можно так:

Var t: string;

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

В языке Pascal имеется одна унарная операция называемая присвоением знака минус (-1) и шесть бинарных операций:

· сложение (+);

· вычитание (-);

· умножение (*);

· вещественное деление (/);

· целочисленное деление (div);

· остаток от целочисленного деления (mod).

Обратите внимание, в языке Pascal имеются три операции деления, результатом операции деления (/) будет число с дробной частью, результатом операции div - только целое число, а результатом операции mod - остаток от целочисленного деления. Примеры:

0 / 2= 0.0 0 div 2 = 0 0 mod 2 = 0 33 div 15 = 2
1 / 2 = 0.5 1 div 2 = 0 1 mod 2 = 1 33 mod 15 = 3
2 / 2 = 1.0 2 div 2 = 1 2 mod 2 = 0 3 div 9 = 0
3 / 2 = 1.5 3 div 2 = 1 3 mod 2 = 1 3 mod 9 =3
4 / 2 = 2.0 4 div 2 = 2 4 mod 2 = 0 9 mod 0 – error

Важно помнить, что операции div  и mod работают только с целыми числами и результат их всегда целый. Например, 4.5 div 3 вызовет ошибку.

Функции.

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

Арифметические функции (основные)

Функция Назначение Тип результата
abs (x) абсолютное значение аргумента совпадает с типом аргумента
sqr (x) квадрат аргумента совпадает с типом аргумента
sqrt (x) квадратный корень аргумента вещественный
int (x) целая часть числа вещественный
frac (x) дробная часть числа вещественный

Функции преобразования типов

round (x) — округляет вещественное число до ближайшего целого.
trunc (x) — выдает целую часть вещественного числа, отбрасывая дробную.

Операции и функции в выражениях выполняются слева на право с учетом приоритетности:

1 Скобки и функции
2 *, /, div, mod
3 +, -

Оператор присваивания

В Pascal оператор присваивания записывается как:=. У оператора есть правая и левая часть. В левой части всегда должна быть переменная. Левая часть не может быть выражением! Например, записи вида: a+1:=a*b или a+b:=c вызовут ошибку. Что же происходит, когда компилятор читает строчку «c:=a*b»? Чтобы выполнить эту строчку компилятор выполняет аж четыре действия: взять значение ячеек памяти под именем a, взять значение ячеек памяти под именем b, сложить эти два значения и запомнить (положить) результат в ячейки памяти с именем с.

Правила определения типа

1. Если в сложении, вычитании, умножение участвует вещественное число, то результат всегда вещественный;

2. Деление и извлечение корня дают всегда вещественный результат;

3. Применение функций trunc и round дают целый результат;

4. В вещественную переменную можно положить и целое и вещественное значение, в целую только – целое.

Примеры:

Задание 1. Определить тип:

а) 5+0.0;                       Вещественный по правилу 1 б) 16 /4;   Вещественный по правилу 2
в) sqr (3);                       Целый,  так как аргумент целый г) sqr (4.0);   Вещественный, так как аргумент вещественный
д) trunc(-18/14);            Целый по правилу 3 е) sqrt (81);   Вещественный по правилу 2

Задание 2. Если у вещественная переменная, а n – целая то какие из следующих операторов присваивания правильные, а какие нет и почему?

а) у:= 5*n + 1;              Правая часть оператора присваивание целая. Команда верная, так как левая часть – вещественная переменная, в нее можно положить целое число.
б) n: = y + 3;   Правая часть оператора присваивание вещественная. Команда не верная, так как левая часть – целая переменная, а в целую переменную нельзя положить вещественное число.
в) n: = 4.0 +2;               Правая часть оператора присваивание вещественная. Команда не верная, так как левая часть – целая переменная, а в целую переменную нельзя положить вещественное число.
г) y: = 4+trunc(y);   Правая часть оператора присваивание целая. Команда верная, так как левая часть – вещественная переменная, в нее можно положить целое число.
д) n: = 3.0+ n div 2;      Правая часть оператора присваивание вещественная. Команда не верная, так как левая часть – целая переменная, а в целую переменную нельзя положить вещественное число.
e) y: = y mod 2;   Команда не верная. Здесь ошибка в вычислении правой части: div не работает с вещественными числами.
ж) n: = 2*n/2;                Не верно. Почему?
з) n: = sqr (sqrt (n)) Не верно. Сначала вычисляется квадратный корень. Он всегда вещественный, затем полученное (вещественное) значение возводится в квадрат. Результат вещественный.

Ввод данных

В Паскале ввод осуществляется с помощью процедур read() и readln(). read() вводит данные и оставляет курсор на этой же строке, а readln() вводит данные и переходит на строчку ниже. Что происходит, когда компилятор читает строчку «readln(b);»? Он ждет, когда пользователь наберет на клавиатуре какие-то данные, проверяет соответствует ли тип этих данных объявленному в разделе описания типу переменной b, если не соответствует выдает ошибку, если соответствует, то сохраняет эти данные ы ячейках памяти с именем b.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: