Использование данных в алгоритмах и программах. Типы данных.
ПОНЯТЬ
Большинство алгоритмов предназначено для получения результата путём преобразования данных. Совокупность данных, которые может обрабатывать исполнитель, вместе с системой команд по преобразованию этих данных определяют возможности конкретного исполнителя. Роль данных в алгоритмизации достаточно велика. Они являются одним из важнейших параметров алгоритма.
Всего для каждого алгоритма, независимо от того, какие алгоритмические конструкции входят в его состав, можно выделить 7 характеризующих его параметров:
совокупность возможных исходных данных;
совокупность возможных результатов;
совокупность возможных промежуточных результатов;
правило начала;
правила непосредственной обработки данных;
правило окончания;
правило извлечения (сообщения) результата.
При разработке алгоритмов целесообразно определять в явном виде каждый из этих параметров и прежде всего для преобразования данных какого типа предназначен алгоритм.
Пример
При решении квадратного уравнения исходными данными будут коэффициенты а, b, c. Они могут быть целыми или вещественными числами. Результатом будет либо сообщение, что корней нет, либо значение одного корня, либо значения двух корней. Промежуточным результатом будет значение дискриминанта. Причём, значения дискриминанта и корней уравнения будут вещественными числами. Начало алгоритма возможно, если правильно введены значения коэффициентов. Обработка данных идет в соответствии с методом нахождения корней уравнения по дискриминанту. Правило окончания – получение одного из трёх возможных результатов. Результат можно вывести на дисплей или записать в файл.
В программировании именно вид и способ кодирования данных задают возможность выбора действий и операторов, потому что для данных разного типа определены различные допустимые операции.
Пример
Бессмысленно умножать или делить символы текста.
Значениями коэффициентов квадратного уравнения могут быть только числа и не могут быть символы.
Нельзя получить точное целочисленное значение длины окружности или корня квадратного из вещественного числа.
Поэтому перед началом программы во многих ЯП, в частности Pascal, надо в явном виде указать типы всех используемых в программе данных. Для этого служит специальная описательная часть программы. Описание данных позволяет: с одной стороны, сообщить компьютеру, сколько ячеек памяти отвести под те или иные данные и закодировать их соответствующим образом, с другой стороны – автоматизировать проверку, соответствуют ли выполняемые над переменными операции указанному типу данных.
Пример
Пусть переменные a, b, c определены как переменные типа целые числа; переменные r, q – символьного типа; w – переменная логического типа. Тогда в ЯП Pascal операции c:=a+b; и w:=rq; будут допустимы, а операции c:=a/b; w:=r+q; недопустимы. И если такие операции встретятся в программе, то ещё до выполнения программы транслятор ЯП (транслятор проверяет правильность написания программы и переводит её в систему команд, понятную процессору) сообщит программисту, что в программе есть ошибки и их нужно устранить.
В ЯП Basic тип переменной может задаваться не в описательной части, а добавлением к идентификатору специальных знаков.
Пример
R%, A2% означает, что переменные R и A2 целого типа и к ним применимы операции целочисленной арифметики.
B$, STR$ означает, что переменные S и STR символьного или строкового типа и для них допустимы строковые функции и операции.
Большинство современных языков программирования имеет возможности обрабатывать данные самых разных видов: числа, символы, координаты, тексты, звук, изображения, таблицы и т.п. Каждому из этих видов данных в языке программирования могут соответствовать один или несколько типов.
Тип данных представляет собой не что иное, как название способа кодирования данных, используемого в данной среде программирования.
Пример
Для представления чисел в разных версиях Pascal используются такие типы как real, byte, integer, longint, word, complex и другие.
Данные принято делить на переменные и константы.

Рис. Основные характеристики данных
Для констант в явном виде задаётся имя и значение, которое остаётся постоянным в процессе выполнения программы. Для переменной программист описывает её имя (идентификатор) и задаёт тип. В процессе выполнения программы значение переменной может многократно меняться, но только в рамках заданного типа.
Пример
В алгоритме вычисления величины давления жидкости плотностью r на глубине h, представленном ниже, используются переменные P, r, h и константа g (ускорение свободного падения).
Блок-схема | Программа на языке Pascal |
 | const g=9,8; var P, r, h : real; begin write (‘Введите плотность жидкости и глубину:’); readln (r, h); P := r*g*h; write (‘Давление жидкости =’, P); end. |
Для примера рассмотрим типы данных, допустимых в ЯП Pascal.
Они делятся на простые и составные. Среди простых типов данных особое значение имеют стандартные типы, которые являются базовыми для всех остальных.
Переменные стандартных типов данных – это переменные, которые могут принимать значения вещественных чисел, целых чисел, целых чисел без знака, символов, логических значений.
Тип real – вещественные числа. Значения этого типа занимают 4 или 8 байт (в разных версиях языка). В последнем случае они содержат 15-16 значащих цифр и по модулю не могут превосходить величины 1.7∙10308.
Константы и переменные типа real можно записывать как в форме с фиксированной точкой, так и в форме с плавающей точкой (в экспоненциальной форме).
Пример
С фиксированной точкой: +1.7; -0.013; -1234,56.
В экспоненциальной форме: -2.5e+3 = -2500; 1.4e-1 = 0.14; 1.0е-6 = 0.000001.
Для переменных типа real допустимы арифметические операции и операции отношений: + (сложение), - (вычитание), * (умножение), / (деление), = (равно), (больше), = (не меньше), (не равно).
К дискретным (порядковым) типам относятся: целые числа, целые без знака, символы, логические значения.
Тип integer – целые числа. Значения этого типа занимают 2 или 4 байта и находятся в диапазоне либо [-32768; +32767], либо [-2147483648; +2147483647].
Тип byte – целое число без знака. Значения этого типа занимают 1 байт и находятся в диапазоне [0; 255].
Для целых чисел допустимы арифметические операции и операции отношений: + (сложение), - (вычитание), * (умножение), div (деление нацело), mod (остаток от деления), =, , =, .
Тип char - символьный. Значения этого типа занимают 1 байт и представляют собой символы в таблице кодировки.
Для символов допустимы операции отношений: =, , =, .
Тип boolean – логический. Переменные и константы логического типа занимают 1 байт и принимают одно из двух значений True (истина) и False (ложь).
Для переменных и выражений логического типа допустимы логические операции: not (отрицание), and (и – конъюнкция), or (или – дизъюнкция), xor (исключающее или - строгая дизъюнкция).
Кроме стандартных типов данных можно использовать перечислимый и интервальный типы.
Перечислимый тип определяется явным перечислением упорядоченного набора значений:
Пример
type Season = (Winter,Spring,Summer,Autumn);
DayOfWeek = (Mon,Tue,Wed,Thi,Thr,Sat,Sun);
Интервальный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b, где a - нижняя, b - верхняя граница интервального типа.
Пример
var a: 1..10;
c: 'a'..'z';
d: Mon..Thr;
Составные типы данных, как видно из названия, составляются из простых.
Из курса 8 класса Вы знаете, что если предстоит обрабатывать большие объёмы данных, то прежде их целесообразно структурировать. Наиболее распространёнными структурами данных являются табличная (реляционная), иерархическая (древовидная) и сетевая (графовая). Большинство языков программирования имеют средства удобной работы с таблицами. Но поскольку таблицы могут быть самыми разными, то для их представления в памяти компьютера используются различные типы. В Pascal это массивы, строки, записи.
Тип array – массив. Массив представляет собой набор однотипных элементов, каждый из которых имеет свой номер, называемый индексом. Индексов может быть несколько, тогда массив называется многомерным.
Описание массива задаётся следующим образом:
array [тип индекса1, ..., тип индексаN] of базовый тип
Чаще всего тип индекса представляет собой интервальный тип в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа.
Пример
var a1,a2: array [1..10] of integer;
b: array ['a'..'z'] of string;
c: array [2000..2007, 1..12] of real;
Базовый тип может быть любым.
Важно, что обратиться к каждому элементу массива можно только указав имя массива и номер (индекс) элемента в нём.
Пример
a1[1] – первый элемент массива а1.
a1[k] – k-ый элемент массива а1.
b[‘z’] – последний элемент массива b.
c[2006, 6] – элемент массива с, содержащий данные относящиеся, скорее всего, к июню 2006 года.
Тип string – строковый тип. Строки в Pascal – это последовательность не более чем из 255 символов. При описании var S: string; под переменную S отводится 256 байт, при этом в нулевом байте хранится длина строки. По сути строка – это массив символов.
Пример
Пусть дано описание: var S : string [20].
Это значит, что S - строка символов длиной 20. Обратиться к k–ому символу этой строки (1 k 20) в программе можно одним из двух способов: S[k] или copy(S,k,1).
Для данных строкового типа определены специальные операции: выделение подстроки, поиск заданной подстроки, вставка и удаление подстроки, сцепление строк и др. Некоторые из этих операций представлены в кратком справочнике языка Pascal, данном в приложении.
Тип record - запись. Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи. Описание записи задаётся следующим образом:
record список полей1: тип1; ... список полейN: типN; end:
Пример
Var Date : record
Day: 1..31;
Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
Year: Integer;
end;
Кроме того, в Pascal определены такие типы данных, как set – множество, file – файл, object –объект и другие.
Отметим еще раз, что возможности языка программирования во многом определяются тем, какие типы данных и какие операции над данными в нём определены. Это необходимо учитывать уже на этапе разработки алгоритма, если алгоритм будет «переводиться» на конкретный язык программирования.
ЗНАТЬ
Параметры алгоритма:
совокупность возможных значений исходных данных;
совокупность возможных значений результатов;
совокупность возможных промежуточных результатов;
правило начала;
правила непосредственной обработки данных;
правило окончания;
правило вывода результата.
Алгоритмы предназначены для обработки (преобразования) данных.
Основные данные в программе хранятся в виде переменных и констант.
Для константы в явном виде задаётся имя (идентификатор) и значение, которое не может меняться в ходе выполнения программы, а тип автоматически определяется по значению.
Для переменной описывается её имя и тип, и в ходе программы автоматически проверяется, чтобы переменная принимала значения указанного типа (или совместимого с ним).
В каждом языке программирования определены допустимые типы данных и допустимые операции для каждого из типов данных.
Тип данных тесно связан со способом кодирования данных, их представления в памяти компьютера и способом обращения к данным в процессе выполнения программы. Каждый тип данных имеет своё название.
Данные бывают простые и структурированные. Соответственно бывают простые и структурированные типы данных.
Основными структурированными типами данных в языках программирования являются массивы, строки, записи, файлы.
К простым типам данных относятся целые и вещественные числа, символы, логические значения, явное перечисление допустимых значений или указание диапазона значений.
К данным в языках программирования относятся также такие элементы программы, как метки (по ним осуществляются переходы в программе), процедуры и функции, определяемые программистом и ряд других объектов.
Целесообразность описательной части программы в языках программирования вытекает из того, что данные разного типа кодируются, хранятся в памяти компьютера и обрабатываются по-разному. Предварительное описание данных позволяет автоматически проверять правильность размещения данных в памяти и их преобразования в процессе выполнения программы.
УМЕТЬ
1. Проанализируйте и поясните схему «Допустимые операции над данными», представленную в кратком справочнике языка программирования Pascal. Ответьте на вопросы:
- одинаковы ли арифметические операции для данных вещественного и целого типов?
- одинаковы ли операции отношения (сравнения) для данных вещественного и целого типов?
- что будет являться результатом операций отношения?
- какие операции допустимы для данных символьного и логического типов?
2. Проанализируйте стандартные функции ЯП Pascal (они приведены в кратком справочнике) и ответьте на вопросы:
- одинаковы ли по назначению функции sqrt(x) и sqr(x)?
- какие функции допустимы для данных целого типа?
- какие функции предназначены для обработки данных строкового типа?
3. Пусть переменные a, b, c определены как переменные целого типа; переменные r, q – символьного типа; w – переменная логического типа. Какие из следующих выражений будут верными, а какие ошибочными.
а) a := b+sqrt(c); a := b + int(sqrt(c));
б) a := b+r; a := b + ord(r);
в) w := a+b; w := a b;
г) q := a; q := chr(a);
Практикум
Работа в среде программирования. Знакомство с оператором присваивания и стандартными функциями.
Для описания переменных в описательной части программы в ЯП Pascal используется служебное слово var (от англ. variable – переменная), после которого указываются имена переменных и через двоеточие тип данных.
Пример
var a, b, c : integer; {переменные целого типа}
x, y, z : real; {переменные вещественного типа}
r, q : char; {переменные символьного типа }
w : boolean; {переменные логического типа }
Для определения констант в описательной части программы используется служебное слово const, после которого указываются имена констант и их значения, которые не могут быть изменены в процессе выполнения программы.
Пример
const G=9,8; N=100; R=’Информатика’;
Круг «данных» в языке программирования не ограничивается переменными и константами. Кроме описания переменных и определения констант программист должен описать используемые в программе метки, типы, функции, процедуры, у которых есть собственный идентификатор, поскольку всё это тоже является исходными данными для программы. А потому существуют специальные служебные слова: для описания функций - function, процедур - procedure, типов - type, меток – label и т.д.
Присвоить значение переменной в программе можно либо с помощью оператора ввода «read», либо с помощью оператора присваивания «:=».
С помощью оператора ввода можно ввести значение переменной с клавиатуры или из заранее заготовленного файла.
Формат оператора присваивания:

Выражение может содержать: константы, имена переменных, знаки операций, стандартные функции и функции, определяемые пользователем, круглые скобки для задания порядка выполнения операций.
Аргументы функций всегда заключаются в круглые скобки.
Если в качестве выражения используется стандартная функция random(а), то переменной будет присвоено «случайное» значение из диапазона [0, a).
1 | Найдите ошибки в записи и использовании оператора присваивания в следующих фрагментах программ: а) var x, y : integer; … x := sin(y); x+2 := y; б) var s, n : string (20); … n:=length (s); s := s+s; в) var c1, c2 : char; h : boolean; … c1 := 5; c2 := ‘5’; h := c1=c2; h := c2; |
2 | Разработайте алгоритмы, составьте и отладьте программы для решения следующих задач. 1) Для случайного целого двухзначного числа выведите число, полученное в результате перестановки его цифр (например для 15 должно быть выведено 51). 2) Известны длины сторон треугольника. Вычислить его площадь по формуле Герона: , где р – полупериметр. 3) Проверьте, является ли истинным высказывание, что среднее арифметическое двух чисел не меньше их среднего геометрического. Среднее геометрическое чисел равно корню квадратному из их произведения. |