Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

для т. точно

.pdf
Скачиваний:
7
Добавлен:
14.05.2015
Размер:
532.34 Кб
Скачать

*Сложные (структурные) типы данных. Данные этих типов, как и данные базовых типов, занимают в памяти фиксированную область. Фактически, являются совокупностью данных базового или самого структурного (кроме файлов) типа.

Идентификатор заложен в транслятор (массив, запись, множество, файл). Кодирование требует уточнений.

Набор внутритиповых операций связан с обращением к данным. Набор операций связи с данными других типов связан с кодированием.

*Динамические типы данных. Область памяти, где хранятся данные этих типов, может изменять со временем свои размеры.

В современных языках программирования специальных средств не имеют. Идентификатор определяется программистом.

Кодирование определяется программистом.

Набор внутритиповых операций определяется программистом.

Набор операций связи с данными других типов определяется программистом.

***** БАЗОВЫЕ ТИПЫ ДАННЫХ 1 Базовые (простые) типы данных (базовые способы хранения информации).

Для работы с данными этих типов не требуется никаких уточнений, достаточно только указать тип.

Идентификатор, кодирование и набор операций заложены в транслятор. Есть возможность увеличения набора операций (функции пользователя).

3 Получение информации базовых типов происходит специальным оператором присваивания, из константы или чтением с клавиатуры (или из файла).

Вывод данных базовых типов организуется единой стандартной командой.

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

Базовый тип данных - данные логического типа.

При оформлении условий используется тип данных - логический.

Другое название Булевый. Допустимые значения ["истина", "ложь"]. Данные этого типа хранят значения всевозможных условий, пори помощи которых образуются ветвления и циклы (вспомните урок про структуры алгоритмов). Способы представления (хранения).

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);

определяемые программистом на основе string;

строки в динамической памяти.

Строка типа 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');

Процедуры и функции для работы со строками

Функция Concat(s1, s2, ..., sn) возвращает строку, являющуюся слиянием строк s1, s2, ..., sn. Ее действие аналогично операции конкатенации.

Функция Copy(s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s. Параметры len иstart должны быть целого типа. Процедура Delete(s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len.

Процедура Insert(subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.

Функция Length(s) возвращает фактическую длину строки s, результат имеет тип byte.

Функция Pos(subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или 0, еслиsubs не содержится в s. Процедура Str(x, s) преобразует числовое значение x в строку s, при этом для x может быть задан формат, как в процедурах вывода write и writeln, например, Str(x:6:2, s).

Процедура Val(s, x, errcode) преобразует строку s в значение числовой переменной x, при этом строка s должна содержать символьное изображение числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибочного символа, а значение не x определено.

14)Файлы 1 Определение.

Файл - информация, подготовленная для хранения во внешней памяти или к использованию на внешних устройствах (ВУ). Частным случаем файла является ТЕКСТ (TEXT)

Текст - файлы последовательного доступа (чтение и запись данных начинаются всегда от начала файла)

В файлах могут храниться как данные, так и команды (программы) Различают файлы программы:

-хранящие текст программы на языке высокого уровня

-хранящие исполняемый код для прцессора

файлы данных:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]