Первая лекция курса "Учимся программировать".
Данный материал рассчитан как для проведения начальных уроков изучения языка программирования, так и для подготовки учеников к олимпиадам.
ЧИСЛОВЫЕ ТИПЫ.
ОПЕРАТОР ПРИСВАИВАНИЯ.
Язык программирования Паскаль, как и любой другой, имеет свой алфавит. Это набор символов (разрешенный к использованию и воспринимаемый компилятором), с помощью которого могут быть образованны величины, выражения и операторы данного языка. Алфавит языка включает в себя все символы, представленные в кодировочной таблице, которая в настоящий момент загружена в оперативную память или хранится в ПЗУ. Каждому символу соответствует индивидуальный числовой код от 0 до255.
Алфавит языка составляют:
1. Символы, используемые для составления идентификаторов
- латинские строчные и прописные буквы;
- арабские десятичные цифры;
- символ подчеркивания
2. Символы - разделители:
- Символ пробела (код 32). Основное назначение этого символа - разделение ключевых слов и имен.
- Управляющие символы (коды от0 до 31). Эти символы могут применяться при описании строчных и символьных констант. Управляющие символы с кодом 9(табуляция), а также 10 и 13 (замыкающие строку) используются в качестве разделителей при написании программ.
3. Специальные символы : }#(+ .; >]$), /<@ ^‘ * - : = [ {
Символ ";" ставится после завершения каждого оператора, за исключением последнего оператора end, после которого ставится точка, тем самым информируя компилятор об
окончании текста программы.
4. Составные символы - группа символов, которые воспринимаются компилятором как единое целое:
<= >= := (* *) (. .) ..
Некоторые специальные символы являются также знаками операций. Левая квадратная скобка ([) эквивалентна паре символов, состоящей из левой круглой скобки и точки ((.). Аналогично правая квадратная скобка (]) эквивалентна паре символов, состоящей из точки и правой круглой скобки (.)).
5. Зарезервированные слова. Зарезервированные слова имеют строго
определенное назначение, которое не может быть изменено. Поэтому описание пользовательских идентификаторов, идентичных зарезервированным словам ,не допускается!
Для Турбо-Паскаля безразличен регистр клавиатуры, поэтому вы можете использовать в своей программе как строчные, так и прописные буквы.
В математике принято классифицировать переменные в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными, между переменными, представляющими отдельные значения и множество значений и так далее.
При обработке данных на ЭВМ такая классификация еще более важна. В любом алгоритмическом языке каждая константа, переменная, выражение или функция бывают определенного типа.
В языке ПАСКАЛЬ существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию.
Концепция типа языка ПАСКАЛЬ имеет следующие основные свойства:
- любой тип данных определяет множество значений, к которому принадлежит константа, которые может принимать переменная или выражение, или вырабатывать операция или функция;
- тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию;
- каждая операция или функция требует аргументов фиксированного типа и выдает результат фиксированного типа.
Отсюда следует, что транслятор может использовать информацию о типах для проверки вычислимости и правильности различных конструкций.
Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня.
Тип данных определяет:
n формат представления данных в памяти компьютера;
n множество допустимых значений, которые может принимать принадлежащая к выбранному типу переменная или константа ;
n множество допустимых операций, применимых к этому типу.
Множество типов языка Паскаль можно разделить на две группы:
а) стандартные (предопределенные) типы;
б) типы, определяемые пользователем (пользовательские типы).
К стандартным типам относят:
n группу целых типов ( Schortint, Integer, Longint, Byte, Word);
n группу вещественных типов (Single, Real, Double, Extended, Comp);
n группу булевских типов ( Boolean);
n символьный тип (Char);
n строковые типы (String); n указательный тип (Pointer); n текстовый тип (Text).
Символьный тип, а также целые и булевские относят к, так называемым, порядковым типам. Порядковые типы характеризуются следующими свойствами:
а) Множество допустимых значений любого порядкового типа представляет собой
упорядоченную последовательность, каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет порядковый номер 0, следующее значение имеет порядковый номер 1 и так далее.
Исключение составляют порядковые типы Integer, Shortint, Longint Порядковым номером значений этих типов является само значение.
б) К любому значению порядкового типа можно применить стандартную функцию ORD,
возвращающую порядковый номер этого значения.
в) Для любого значения порядкового типа можно определить предыдущее и последующее
значение с помощью стандартных функций PRED и SUCC (кроме булевских).
В данный момент нас больше интересуют простые типы, к которым относятся :
-целочисленный типы,
-логический тип,
-вещественный тип.
-символьный тип,
-перечисляемый тип,
-интервальный тип,
Числа в языке ПАСКАЛЬ обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например: 217 -45 8954 +483 Действительные числа используются в форме с десятичной точкой или в форме с
применением десятичного порядка, который изображается буквой Е (0,2*10-12 - это 0.2Е-12, что означает 0,2 умножить на 10 в степени -12):
28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16
ПАСКАЛЬ допускает запись целых чисел и фрагментов действительных чисел в форме с
порядком в шестнадцатеричной системе счисления: $7F $40 $ABC0
Выражение состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке ПАСКАЛЬ принят следующий приоритет операций:
1. унарная операция not, унарный минус -, вычисление функции, возведение в степень;
2. операции типа умножения * / div mod and shl shr
3. операции типа сложения + - or xor
4. операции отношения = <> < > <= >= in {}
Выражения входят в состав многих операторов языка ПАСКАЛЬ, а также могут быть аргументами встроенных функций.
В Турбо-Паскале имеется пять встроенных целочисленных типов: integer (целое), shortInt (короткое целое), longInt (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый
тип обозначает определенное подмножество целых чисел, как это показано в следующей таблице:
Тип |
Диапазон |
Формат |
Shortint |
-128 .. 127 |
8 битов со знаком |
Integer |
-32768 .. 32767 |
16 битов со знаком |
Longint |
-2147483648 .. 2147483647 |
32 бита со знаком |
Byte |
0 .. 255 |
8 битов без знака |
Word |
0 .. 65535 |
16 битов без знака |
Верхнее граничное значение различных переменных целочисленных типов задано в Турбо
Паскале 7.0 как константа и имеет соответствующее имя:
MaxInt=32767=215-1;
MaxLongint=2147483647=231-1.
Значение одного целочисленного типа может быть явным образом преобразовано к другому целочисленному типу с помощью приведения типов.
На множестве целых чисел определены только операции, результат которых также есть целое число. Такими операциями являются :
n сложение;
n вычитание;
n умножение;
n целочисленное деление а div b; Например,
3 div 2=1; (-9) div 2=-4;
n остаток от деления а mod b; Например,
3 mod 3=0; 15 mod (-9) =-6; 5 mod 3 =2.
Между результатами операций mod и div существует связь: a mod b=a-(a div b)*b.
Операции отношения, примененные к целым операндам, дают результат логического типа TRUE или FALSE ( истина или ложь ).
В языке ПАСКАЛЬ имеются следующие операции отношения: равенство =, неравенство <>, больше или равно >=, меньше или равно <=, больше >, меньше < .
Применимы следующие стандартные (встроенные) функции, результат выполнения которых имеет целый тип:
TRUNC(x) - отбрасывает дробную часть числа х;
ROUND(x) - округляет число х до целого;
ABS(x) - вычисляет абсолютное значение числа х; SQR(x) - возводит в квадрат число х.
DEC(x) - уменьшает значение переменной на 1;
INC(x) - увеличивает значение переменной на 1; и процедура
RANDOMIZE , включающая датчик случайных целых чисел.
Действительные числа не могут храниться в целочисленных переменных и выступать в качестве их значений. Эти числа можно представить
n с фиксированной запятой, например, -2.345, 345.7, 5.0 и т.п.
n с плавающей запятой с фиксированным числом цифр.
Запись значения в формате с плавающей запятой обычно включает три значения - m, b и e - таким образом, что m*be n , где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон представления и точность вещественного типа.
Имеется пять видов вещественных типов:
n вещественное с одинарной точностью,
n с двойной точностью, n с повышенной точностью и n сложное.
Вещественные типы различаются диапазоном и точностью связанных с ними значений :
Тип |
Диапазон |
Цифры |
Размер |
Real |
2.9x10-39 до 1.7x1038 |
от 11 до 12 |
6 байт |
Single с одинарной точностью |
1.5x10-45 до 3.4x1038 |
от 7 до 8 |
4 байта |
Double с удвоенной точностью |
5.0x10-324 до 1.7x10308 |
от 15 до 16 |
8 байт |
Extended с повышенной точностью |
3.4x10-4932 до 1.1x104932 |
от 19 до 20 |
10 байт |
Comp |
-263+1 до263-1 |
|
8 байт |
Сложный тип содержит только целочисленные значения в диапазоне от -263+1 до 263-1, что приблизительно равно-9.2x1018 и 9.2x1018.
Для обработки действительных чисел предусмотрены следующие операции:
n сложение;
n вычитание; n умножение; n деление.
Примечание. Операции возведение в степень нет, но существует такое вычисление
EXP(LN(a)*x), которое равно ах, при a>0
В Паскале определены следующие функции, дающие результат вещественного типа:
ABS(x)- модуль х;
ARCTAN(x)- arctgx;
COS(X)- cosx;
EXP(x)- ex
FRAC(x)- дробная часть числа х;
INT(x)- аналог функции Trunc, но с вещественным результатом
LN(x)- натуральный логарифм от х;
RANDOM(x)- случайное число из [0,x];
SIN(x)- sinx
SQR(x)- х2
SQRT(x)- корень квадратный из х.
Также существует константа Pi =3.1415926535897932385.
Оператор присваивания состоит из идентификатора переменной или пользовательской функции, символа « : =» и выражения.
ИМЯ1:= значение; выражение; ИМЯ2
- Если в правой части оператора стоит значение, то переменной с именем ИМЯ1 присвоится это новое значение.
- Если в правой части стоит идентификатор, то значение этой переменное присвоится переменной с именем, которое стоит в левой части оператора.
- Если в правой части - выражение, то выполнение оператора присваивания приводит к вычислению значения, определяемого выражением, и присваиванию этого значения переменной с именем ИМЯ1.
Допускается присваивание значений не только простых, но и структурированных типов, таких как массивы, записи и множества.
Обязательным является требование, чтобы тип выражения в правой части оператора и тип переменной или результата в левой части оператора были совместимыми по присваиванию.
ЛОГИЧЕСКИЙ ТИП
И ПРОСТЕЙШИЕ ПРОГРАММЫ.
Значения логического(булевского) типа обозначаются встроенными идентификаторами констант False(ложь) и True(истина). Логические переменные могут использоваться для хранения результатов каких-либо логических вычислений. Для булевских переменных, принимающих одно из двух допустимых значений, разрешены только операции сравнения и логические операции AND(логическое «и»), OR(«или»), XOR( исключающее «или»), NOT(логическое «не»).
Операнды |
|
Операции |
|
||
А |
В |
Not A |
A and B |
A or B |
A xor B |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Где 1-TRUE; 0- FALSE.
В Паскале определена функция, имеющая результат логического типа:
true , если _ х нечетное ;
ODD (x)
false , если _ хчетное .
Разберем задачу
Определить, есть ли среди цифр заданного трехзначного числа одинаковые.
Идея решения.
1) Выделить каждую цифру трехзначного числа;
2) логической переменной дать возможность проверить будут ли в этом числе равные цифры. Алгоритм решения:
1) вводим трехзначное число ;
2) выделим первую цифру как результат деления на 100;
3) выделим последнюю цифру, как остаток от деления на 10;
4) отбросим последнюю цифру с помощью целочисленного деления на 10, получаем двухзначное число, состоящее из первой и второй цифры данного числа;
5) выделим из него последнюю цифру как остаток от деления на 10;
6) имея три цифры, составим логическое выражение проверки на существование равных цифр; 7) выведем значение логической переменной. Алг Task1(цел n, нат a,b,c, лог Z); aрг n , a,b,c; рез z
нач вывести(‘Введите трехзначное число’); введите(n);
a:= [n / 100]; c:=n mod 10; n:=[n / 10]; b:= n mod 10; z:= (a=b) or (b=c) or (a=c); вывести( z); кон.
Программа решения Program Task1;
var n : longint; {данное число}
a,b,c : 0..9; {переменные для хранения цифр} z : boolean; {логическая переменная}
begin writeln(‘Введите трехзначное число’); readln(n);
a:= n div 100; {первая цифра} c:=n mod 10; {последняя цифра}
n:=n div 10; {отбрасываем последнюю, остается первая и вторая} b:= n mod 10; {а вот и вторая цифра}
z:= (a=b) or (b=c) or (a=c); {равны ли эти цифры? } writeln( z); {ответ - true или false } end.