Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Напомним о понятии «переменная».В алгоритмических языках под переменной понимают область памяти, где хранятся обрабатываемые данные. (Исходные, промежуточные и итоговые.). Название происходит от того, что при работе ЭВМ данные могут менять свои значения.Область памяти характеризуется размером и адресом начала.
Чтобы разные переменные человеку легче было отличать друг от друга, им даются имена (идентификаторы). (Компьютер отличает переменные друг от друга по их началу в памяти.)
Информацию, хранящуюся в переменной в момент обращения к этой переменной называют ЗНАЧЕНИЕМ переменной.
адрес начала и размер в памяти
| | |
+--+- память -+----------+
| | |
| ПЕРЕМЕННАЯ |
| / \ |
+- имя значение – тип
(возможный диапазон значений)
В переменных хранятся разные данные, разные по размеру и назначению. Компьютер работает и с числами, и с буквами, и с картинками. Выполняемые над разными объектами действия должны быть различны.
Для обеспечения принципа детерминированности (компьютер должен знать, что можно делать с разными данными), все данные разбиты на группы, с данными одной группы можно выполнять определенный набор действий. Заодно, договорились, что и размер места в памяти данных одного типа одинаков. Описанные группы данных называют данными одного типа. Типы данных так же имеют имена.
Будем изучать все типы данных по одной схеме:
1) имя типа
2) размер в памяти (кодирование)
3) набор операций
4) связь с данными других типов
К простейшим (базовым) типам данных относят такие, для которых достаточно только имени, чтобы компьютер понял, сколько места выделить в памяти для их хранения и какие операции с ними можно выполнять.
*** Классификация типов данных
типы данных
/ \
статические динамические
/ \ \
простые сложные +-стек
/ \ \---- ¦
стандартные нестандартные +-массив +-очередь
(базовые) (переменные) ¦ ¦
------- ¦ +-запись +-список
+-целое число +-перечисляемый ¦ ¦
¦ ¦ +-множество L-каталог
+-действительный L-ограниченный ¦
¦ (вещественный) (интервальный) +-файл
¦ ¦
+-логический +-граф
¦ ¦
L-символьный (строковый) L-дерево
* Сложные (структурные) типы данных. Данные этих типов, как и данные
базовых типов, занимают в памяти фиксированную область.
Фактически, являются совокупностью данных базового или самого
структурного (кроме файлов) типа.
Идентификатор заложен в транслятор (массив, запись, множество, файл).
Кодирование требует уточнений.
Набор внутритиповых операций связан с обращением к данным.
Набор операций связи с данными других типов связан с кодированием.
* Динамические типы данных. Область памяти, где хранятся данные этих
типов, может изменять со временем свои размеры.
В современных языках программирования специальных средств не имеют.
Идентификатор определяется программистом.
Кодирование определяется программистом.
Набор внутритиповых операций определяется программистом.
Набор операций связи с данными других типов определяется программистом.
***** БАЗОВЫЕ ТИПЫ ДАННЫХ
1 Базовые (простые) типы данных (базовые способы хранения информации).
Для работы с данными этих типов не требуется никаких уточнений,
достаточно только указать тип.
Идентификатор, кодирование и набор операций заложены в транслятор.
Есть возможность увеличения набора операций (функции пользователя).
3 Получение информации базовых типов происходит специальным оператором
присваивания, из константы или чтением с клавиатуры (или из файла).
Вывод данных базовых типов организуется единой стандартной командой.
Логический тип
Базовый тип данных - данные логического типа.
При оформлении условий используется тип данных - логический.
Другое название Булевый. Допустимые значения ["истина", "ложь"]. Данные этого типа хранят значения всевозможных условий, пори помощи которых образуются ветвления и циклы (вспомните урок про структуры алгоритмов).
Способы представления (хранения).
BASIC PASCAL C
не выделен, но <им.пер.>:boolean; не выделен, но
"истина"=-1 "истина"=true "истина"= 1
"ложь"= 0 "ложь"=false "ложь"= 0
целого типа целого типа
Основные операции. (Образование сложных условий.)
При работе с логическими данными используются операции:
унарная – отрицание. Как выполняются логические операции нетрудно разобраться с помощью таблиц истинности. В этих таблицах 1 соответствует истине, 0 обозначает ложь.
Имеются бинарные (с двумя аргументами) операции:
not a not a отрицание
a and b a and b логическое И
a or b a or b логическое ИЛИ
a xor b a xor b исключающее ИЛИ
Эти операции реализованы и в бейсике, и в паскале.
Операции
a imp b - импликация (следование)
a eqv b - эквивалентность
имеются только в бейсике.
Специалисты по математической логике знают, как любую логическую формулу представить в виде набора операций, состоящих из конъюнкций (логическое «И»), дизъюнкций (логическое «ИЛИ») и отрицаний (логическое «НЕ»).
BASIC PASCAL
not a not a отрицание
a and b a and b логическое И
a or b a or b логическое ИЛИ
a xor b a xor b исключающее ИЛИ
a imp b - импликация (следование)
a eqv b - эквивалентность
Образуются данные логического типа при сравнении данных одинакового типа на совпадение (равны, не равны).
Если тип упорядочен, допустимы сравнения: >, >=, <, >=.
В языке PASCAL есть функция определения четности числа:
odd(x) = true, если аргумент четный,
= false, если аргумент нечетный.
В языке BASIC можно перемешивать данные числовых и логического типа:
функция y=F(x) при x>a
=G(x) при x<=a
может быть записана y=-F(x)*(x>a)-G(x)*(x<=a).
10)Базовый тип данных - целое число.
(Имена типов приводятся согласно ЯП Паскаль)
Компьютер предназначен прежде всего, для работы с числами. Выделяют несколько типов целых чисел.
Целые натуральные (без знака) и целые со знаком. Кроме того, целые числа занимают разное количество байт.
Для числа без знака используется двоичная запись в выделенное место памяти. Поскольку счет идет с 0, то:
для одного байта диапазон [0..255] (byte) {=2^8-1}; для двух байт - [0..65535] (unsign) {=2^16-1}; для четырех байт - [0..4294967295] {=2^32-1}
Для числа со знаком самый старший бит выделен для знака 0 - число положительное, 1 - отрицательное.
В целом, отрицательное число образуется из положительного за два шага: 1) в двоичной записи числа обратим цифры "1" в цифры "0" и наоборот, 2) к полученному числу добавим 1 (действие выполняем в двоичной системе счисления).Очевидно появление цифры "1" на первом месте, если там был "0".
Такое кодирование решает три задачи:
1) образование положительного числа из отрицательного выполняется теми же двумя операциями (убедитесь сами!)
2) числа "+0" и "-0" представляются одинаково.
3) кодирование самообратимо { k(k(x))=x }
00000101 - число 5 в 1 байте
00000101 - исходное
11111010 - после инверсии
11111011 - после добавления 1
11111011 - число -5 в 1 байте
11111011 - исходное
00000100 - после инверсии
00000101 - после добавления 1
Описанный способ представления отрицательных чисел называется «дополнительное кодирование». Дополнение до 1, которая при сложении числа А с числом –А уйдет за пределы выделенной области, останется 0.
Прежде встречались:- прямое кодирование – просто у отрицательных чисел вписывалась 1 в старший бит. Тое есть число 0 можно было писать 00000000 и 10000000 (+0 и -0!!!)
- обратное кодирование – у числа 0 менялись на 1, а 1 на 0. Тоже в наличии значения +0 и -0 соответственно 00000000 и 11111111
В зависимости от выделяемой памяти имеются:
для одного байта диапазон [-128..+127] (shortint)
для двух байт - [-32768..+32767] (integer)
для четырех байт - [-2147483648..+2147483647] (longint)
В языке PASCAL
имя типа диапазон значений
byte 1 байт, без знака, 0..255
word 1 байт, без знака, 0..65535
shortint 1 байт, со знаком, -128..+127
integer 2 байт, со знаком, -32768..+32767
longint 4 байт, со знаком, -2147483648..+2147483647
Способ кодирования – двоичное представление и дополнительный код для отрицательных чисел.
Основные операции. BASIC PASCAL
сложение a и b a+b a+b
вычитание a и b a-b a-b
умножение a на b a*b a*b
Делить целые числа нельзя! – Результат – не целое число.
деление нацело a на b a\b a div b
остаток от деления a на b a mod b a mod b
взятие модуля a abs(a) abs(a)
логические И от a и b a and b a and b
ИЛИ от a и b a or b a or b
отрицание a not a not a
Связь с данными других типов.
В языке pascal различают 5 типов целочисленных данных, связь между ними автоматическая, то есть аргументы операций приводятся к одному типу, выполняется операция. Попытка сохранения результата в другом типе, например word как integer, может привести к ошибкам. Числа, большие чем 32767, будут показаны как отрицательные.Пока другие типы не изучались, связь целочисленных типов с ними рассматривать не будем.
В языке basic программу можно написать не обращая внимания на типы. Имеющийся целочисленный тип соответствует паскалевскому типу integer, обозначается наличием знака % в конце имени переменной.
11.*** Тип данных "действительное число".
1 Базовый тип данных - действительное число
Число представляется в нормальной нормированной форме, то есть разбивается на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок. Диапазон значений зависит от записи (двоичная или двоично-десятичная), от размеров выделенных мест для хранения мантиссы и порядка.
2 Способы представления (хранения).
Несколько байт двоичной или двоично-десятичной записи.
Число представляется в нормальной форме, то есть разбивается
на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок.
Диапазон значений зависит от записи (двоичная или двоично-десятичная),
от размеров выделенных мест для хранения мантиссы и порядка.
4 Основные операции.
BASIC PASCAL Как получить
сложение a и b a+b a+b
вычитание a и b a-b a-b
умножение a на b a*b a*b
деление a на b a/b a/b
возведение a в степень b a^b
функции
возведение x в квадрат sqr(x)
квадратный корень из x sqr(x) sqrt(x)
экспонента от x exp(x) exp(x)
10 в степени x - exp10(x)
логарифм натуральный от x log(x) ln(x) |log (x)= ln(x)/ln(a)
логарифм десятичный от x - log(x) | a
синус от x sin(x) sin(x)
косинус от x cos(x) cos(x)
тангенс от x tan(x) - | =sin(x)/cos(x)
котангенс от x - - | =1/tg(x) _____
арксинус от x - - | =arctg(x/V1-x*x)
арккосинус от x - - | =pi-arcsin(x)
арктангенс от x atn(x) arctan(x)
арккотангенс от x - | =pi/2+arctg(x)
[x] - целая часть от x int(x) trunc(x)
округление до целого x - round(x) | =[x+0.5]
{x} - дробная часть от x - - | =x-[x]
взятие модуля x abs(x) abs(x)
5 Связь с данными других типов.
В операциях среди аргументов допустимы данные целого типа, автоматически
произойдет их преобразование в данные действительного типа.
При округлении результат будет целого типа.
12)Строковый (литерный).
К базовым, с некоторой натяжкой, можно отнести тип данных «строка».
Способ хранения и набор операций со строками компьютеру известны, но, фактически, строка – это упорядоченный набор знаков. По умолчанию, для хранения строки выделено 256 байт, но при желании можно длину строк уменьшить, память сэкономить.
Из-за возможности доопределения, некоторые авторы учебников строковый тип данных к базовым не относят.
Вместе со знаками в памяти хранится длина строки, чтобы выводить не все 256 знаков. В языке pascal для хранения длины строки используется элемент набора с номером 0. В этот байт записывается число от 0 до 255.
В языке basic длина строки хранится отдельно, вместе с именем, поэтому можно использовать строки длиной 256 знаков.
Тип строка в языке pascal отмечается словом string, в языке basic, после имени переменной пишут знак доллара ’$’, в некоторых версиях вместо знака доллара используется знак «солнышко» - круг поверх косого креста.
0 1 2 3 4 5 6... 255
б у к в ы
код 5 код б код у код к код в код ы
Первый знак строки занимает 1 байт, второй – второй,...
Нулевой байт хранит длину строки.
pascal basic
var s:string; s$=”буквы”
begin s:=’буквы’; end. (s¤=”буквы”)
К операциям преобразования строк относим:
Выделение части строки (с указанного места указанной длины).
Конкатенация, соединение (склейка) двух строк в одну. (Часто операция обозначается знаком ‘+’ между аргументами.)
Удаление части строки.
Вставка одной строки внутрь другой.
Не реализованные в некотором языке операции вполне заменимы набором имеющихся.
Например, удалить часть строки можно путем склейки кусочка слева и кусочка справа. Средняя часть будет потеряна.
BASIC PASCAL
выполняем вырезку из строки =mid$(s$,m,l) =copy(s,m,l)
=left$(s,l)
=right$(s,l)
склеиваем две строки =s1$+s2$ =concat(s1,s2)
удаляем часть строки delete(s,m,l)
вставляем строку в строку insert(p,s,m)
замена фрагмента строки mid$(a$,m,x)=
О строке можно извлечь информацию:
Число – длину строки.
Номер места, начиная с которого одна строка находится внутри другой (поиск подстроки в строке).
Имеются просто команды преобразования числа в строку цифр и, обратно, строки цифр в число.
BASIC PASCAL
определяем длину строки =len(s$) =length(s)
ищем подстроку в строке =instr(s$,p$) =pos(p,s)
преобразуем число в строку =str$(x) str(n,s)
=bin$(x)
=oct$(x)
=hex$(s)
преобразуем строку в число =val(x$) val(s,n,c)
Строки используются для хранения последовательностей символов. В Паскале три типа строк:
Строка типа string может содержать до 255 символов. Под каждый символ отводится по одному байту, в котором хранится код символа. Еще один байт отводится под фактическую длину строки. Для коротких строк использовать стандартную строку неэффективно, поэтому в язык введена возможность самостоятельно задавать максимальную длину строки, например:
type str4 = string [4];
Здесь описан собственный тип данных с именем str4. Переменная этого типа занимает в памяти 5 байт. Длина строки должна быть константой или константным выражением.
Примеры описания строк:
const n = 15;
var s: string; { строка стандартого типа }
s1: str4; { строка типа str4, описанного выше }
s2: string [n]; { описание типа задано при описании переменной }
Инициализация строк, как и переменных других типов, выполняется в разделе описания констант:
const s3: string [15] = 'shooshpanchik';
Операции
Строки можно присваивать друг другу. Если максимальная длина результирующей строки меньше длины исходной, лишние символы справа отбрасываются:
s2:= 'shooshpanchik';
s1:= s2; { в s1 будут помещены символы "shoo" }
Строки можно склеивать между собой с помощью операции конкатенации, которая обозначается знаком +, например:
s1:= 'ком';
s2:= s1 + 'пот'; { результат - "компот" }
Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны:
'abc' > 'ab'
'abc' = 'abc'
'abc' < 'abc '
Имя строки может использоваться в процедурах ввода-вывода:
readln (s1, s2);
write (s1);
При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (Enter) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.
К отдельному символу строки можно обращаться как к элементу массива символов, например, s1[4]. Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:
s1[4]:= 'x'; writeln (s2[3] + s2[5] + 'r');
Дата публикования: 2015-11-01; Прочитано: 604 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!