Урок 2. «Типы данных. Операции и функции. Ввод данных»
На этом уроке мы познакомимся с основными типами данных в языке Pascal, научимся данные вводить и обрабатывать с помощью различных операций и функций.
Представьте ситуацию: группа туристов хочет забронировать место в гостинице. Какую информацию нужно заранее сообщить кроме времени пребывания? Скорее всего – это количество человек в группе, сколько женщин, сколько мужчин, возможно есть семейные пары, которые хотят проживать вместе и т.д. По сути мы сообщаем какие-то характеристики группы и в зависимости от этих характеристик для группы бронируется место.
Что-то подобное нужно учитывать при написании программ. Под каждую переменную необходимо зарезервировать место в оперативной памяти. Чтобы компилятор (программа, которая переводит наш код в язык понятный компьютеру) знал сколько под переменную нужно будет выделить памяти и как будут храниться данные в разделе описания указывают имя и тип каждой переменной.
Раздел описания начинается служебным словом var. Далее пишется список переменных с указанием через двоеточие их типов. Например:
|
|
programtwo; var a,b,c:integer; d,e,f:real; s:string; begin |
|
Если переменные имеют один и тот же тип, то их можно записать списком и указать тип сразу для всего списка.
Все, что находится выше слова 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.
|
|