Главная страница
Навигация по странице:

  • «Основные (базовые) типы данных»

  • программирование_занятие_5. Действительное число


    НазваниеДействительное число
    Анкорпрограммирование_занятие_5.doc
    Дата19.12.2017
    Размер124 Kb.
    Формат файлаdoc
    Имя файлапрограммирование_занятие_5.doc
    ТипДокументы
    #13131
    КатегорияИнформатика. Вычислительная техника

    изучается:

    Понятие типа данных, базовые типы данных.

    Целочисленные типы данных.

    Тип данных "действительное число".

    Логический тип данных.

    Знаковый тип данных.

    Строковый тип данных.

    Перечислимый тип данных.

    Ограниченный тип данных.
    базовый материал:

    Алгоритм и его свойства. (из 1 урока)

    Переменная. (из 1 урока)
    «Основные (базовые) типы данных»


    Понятие типа данных


    Напомним о понятии «переменная».

    В алгоритмических языках под переменной понимают область памяти, где хранятся обрабатываемые данные. (Исходные, промежуточные и итоговые.). Название происходит от того, что при работе ЭВМ данные могут менять свои значения.

    Область памяти характеризуется размером и адресом начала.

    Чтобы разные переменные человеку легче было отличать друг от друга, им даются имена (идентификаторы). (Компьютер отличает переменные друг от друга по их началу в памяти.)

    Информацию, хранящуюся в переменной в момент обращения к этой переменной называют ЗНАЧЕНИЕМ переменной.

    адрес начала и размер в памяти

    | | |

    +--+- память -+----------+

    | | |

    | ПЕРЕМЕННАЯ |

    | / \ |

    +- имя значение – тип

    (возможный диапазон значений)

    В переменных хранятся разные данные, разные по размеру и назначению. Компьютер работает и с числами, и с буквами, и с картинками. Выполняемые над разными объектами действия должны быть различны.

    Для обеспечения принципа детерминированности (компьютер должен знать, что можно делать с разными данными), все данные разбиты на группы, с данными одной группы можно выполнять определенный набор действий. Заодно, договорились, что и размер места в памяти данных одного типа одинаков. Описанные группы данных называют данными одного типа. Типы данных так же имеют имена.
    Для успешной работы с типами данных, для каждого типа нужно знать:

    - представление в памяти компьютера (кодирование), от этого зависит диапазон возможных значений;
    - перечень возможных действий над данными такого типа;
    - как связаны данные конкретного типа с данными других типов.
    Будем изучать все типы данных по одной схеме:

    1) имя типа
    2) размер в памяти (кодирование)
    3) набор операций
    4) связь с данными других типов
    К простейшим (базовым) типам данных относят такие, для которых достаточно только имени, чтобы компьютер понял, сколько места выделить в памяти для их хранения и какие операции с ними можно выполнять.


    Целочисленные типы


    Базовый тип данных - целое число.
    (Имена типов приводятся согласно ЯП Паскаль)
    Компьютер предназначен прежде всего, для работы с числами. Выделяют несколько типов целых чисел.

    Целые натуральные (без знака) и целые со знаком. Кроме того, целые числа занимают разное количество байт.
    Для числа без знака используется двоичная запись в выделенное место памяти. Поскольку счет идет с 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, обозначается наличием знака % в конце имени переменной.


    Тип «действительное число»


    Базовый тип данных - действительное число
    Для представления (хранения) действительного числа выделяется несколько байт двоичной или двоично-десятичной записи.

    Число представляется в нормальной нормированной форме, то есть разбивается на мантиссу - число в диапазоне от 0.1 до 1.0 и порядок. Диапазон значений зависит от записи (двоичная или двоично-десятичная), от размеров выделенных мест для хранения мантиссы и порядка.

    Записать действительное число можно в экспоненциальной форме (с плавающей запятой), когда мантисса и порядок разделены латинской буквой е, или в форме с фиксированной запятой, когда в качестве десятичного знака используется точка. Независимо от записи в программе, в памяти компьютера действительное число хранится в нормальной нормированной форме.
    -11 <- порядок

    у = 6,7 х 10

    | 0.67е-10

    мантисса в памяти компьютера

    67e-12 0.000000000067
    с плавающей запятой с фиксированной запятой
    В языке паскаль используется только двоичное представление.

    В зависимости от количества выделенных байтов и их распределения, сколько под мантиссу и порядок, различают имена типов: real, single, double, extended, comp.

    Для использования этих типов (кроме real) требуется подключение математического сопроцессора, которое выполняется командой {$N+}, обычно в начале программы.
    Тип Диапазон Точность Байт

    Real 2.9e-39..1.7e38 11-12 6

    Single 1.5e-45..3.4e38 7-8 4

    Double 5.0e-324..1.7e308 15-16 8

    Extended 3.4e-4932..1.1e4932 19-20 10

    Comp -9.2e18..9.2e18 19-20 8
    В языке basic, тип одинарной точности (4 байта) отмечается знаком ! в конце имени переменной, а тип двойной точности (8 байт) отмечается знаком #.

    Выше отмечалось, что на «бейсике» можно писать программы не особо задумываясь о типах данных. Все числовые переменные, по умолчанию, считаются переменными двойной точности, то есть занимают 8 байт памяти. Преобразование типов выполняется автоматически, в том числе округление при переводе действительных чисел в целые.

    Встречается двоично-десятичное кодирование чисел, когда в одном байте записываются в двоичной форме две десятичные цифры числа.
    В языке BASIC A%
    \указывает целый тип числа )2 байта).
    В языке BASIC A!
    \указывает действительный тип.
    одинарной точности (4 байта).
    A#
    \указывает действительный тип.
    двойной точности (8 байт).
    Имена и кодирование мы прошли.

    Основные операции с действительными числами это:

    сложение a и b

    вычитание из a и b

    умножение a на b

    деление a на b

    возведение a в степень b.

    BASIC PASCAL Как получить

    a+b a+b

    a-b a-b

    a*b a*b

    a/b a/b

    a^b | exp(b*ln(a))
    Кроме операций, имеются функции:

    возведение x в квадрат sqr(x)

    квадратный корень из x sqr(x) sqrt(x)

    экспонента от x exp(x) exp(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 - frac(x) | =x-[x]

    взятие модуля x abs(x) abs(x)
    Связь с данными других типов.

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

    При округлении и взятии целой части результат будет целого типа.

    BASIC PASCAL Как получить

    [x] - int(x) trunc(x)

    round(x) | =[x+0.5]


    данные логического типа

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

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

    BASIC PASCAL C

    не выделен, но <им.пер.>:boolean; не выделен, но

    "истина"=-1 "истина"=true "истина"= 1

    "ложь"= 0 "ложь"=false "ложь"= 0

    целого типа целого типа
    Основные операции. (Образование сложных условий.)
    При работе с логическими данными используются операции:
    унарная – отрицание. Как выполняются логические операции нетрудно разобраться с помощью таблиц истинности. В этих таблицах 1 соответствует истине, 0 обозначает ложь.

    отрицание │ A │not A│

    ─┼───┼─────┼

    │ 0 │ 1 │

    │ 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 - эквивалентность

    имеются только в бейсике.
    Специалисты по математической логике знают, как любую логическую формулу представить в виде набора операций, состоящих из конъюнкций (логическое «И»), дизъюнкций (логическое «ИЛИ») и отрицаний (логическое «НЕ»).
    таблицы истинности бинарных операций

    A │ B │and│ or│xor│eqv│imp

    ──┼───┼───┼───┼───┼───┼───

    0 │ 0 │ 0 │ 0 │ 0 │ 1 │ 1

    0 │ 1 │ 0 │ 1 │ 1 │ 0 │ 1

    1 │ 0 │ 0 │ 1 │ 1 │ 0 │ 0

    1 │ 1 │ 1 │ 1 │ 0 │ 1 │ 1
    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).


    знаковый тип данных


    Базовый тип данных – знак.
    Для работы с текстами, например с текстами программ, компьютер должен уметь рисовать буквы. Сталкиваемся с графической информацией. Экран делится на знакоместа, размер каждого обычно 8х8 точек-пиксел. Стандартно получается 25 или 50 строк по 80 знаков в каждой. Знакоместу соответствует 2 байта. Соответственно, видеопамять экрана занимает 4000 (8000)байт.

    В одном байте хранится код – номер одной из возможных картинок. Таких картинок может быть 256 штук. 8х8 черно-белых точек занимают 8 байт. Всего знакогенератор занимает 2048 байт.

    Второй байт определяет цвет текста и фона знака.

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

    Какой номер-код кокой картинке-букве соответствует определяется специальной таблицей ASCII-кодов (американский стандартный код представления информации).

    Ниже представлено, как изображение буквы А хранится в 8 байтах памяти.



    0

    0

    1

    0

    0

    0

    0

    0

    =32

    0

    1

    0

    1

    0

    0

    0

    0

    =80

    1

    0

    0

    0

    1

    0

    0

    0

    =144

    1

    0

    0

    0

    1

    0

    0

    0

    =144

    1

    1

    1

    1

    1

    0

    0

    0

    =248

    1

    0

    0

    0

    1

    0

    0

    0

    =144

    1

    0

    0

    0

    1

    0

    0

    0

    =144

    0

    0

    0

    0

    0

    0

    0

    0

    =0

    8 байтов определяют, как выглядит буква А.
    (0 - точка закрашена в цвет фона, 1 – точка закрашена в цвет изображения.)
    Способы представления (хранения).

    BASIC отдельно не выделен строка из одного знака.

    PASCAL <им.пер.>:char;

    C char <им.пер.>;

    Выделяется в памяти 1 байт для хранения кода знака.
    Основные операции.

    Вывод изображения знака (на экран, на принтер).
    Связь с данными других типов.

    BASIC PASCAL

    Споставление знака коду chr$(x) chr(x)
    аргумент – число, результат – знак.

    Сопоставление кода знаку asc(x$) ord(x)
    аргумент – знак, результат – число.


    Строковый тип данных


    Строковый (литерный).
    К базовым, с некоторой натяжкой, можно отнести тип данных «строка».

    Способ хранения и набор операций со строками компьютеру известны, но, фактически, строка – это упорядоченный набор знаков. По умолчанию, для хранения строки выделено 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)


    перечислимый тип данных


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

    BASIC - отсутствует.

    PASCAL

    type <имя типа>=(<список элементов через запятую>);
    * Способ образования.

    Образуется перечислением всех элементов (задание списка констант).

    Элементы упорядочены порядком перечисления. (Элементы списка нумеруются, начиная с нуля.)
    PASCAL

    type <имя типа>=(<список элементов через запятую>);
    type

    sezon=(’зима’,’весна’,’лето’,’осень’);
    day=(’пн’,’вт’,’ср’,’чт’,’пт’,’сб’,’вс’);
    Основные операции.:

    PASCAL определение предыдущего и последующего элемента pred(x) и succ(x)
    Связь с данными других типов.

    Нахождение порядкового номера элемента ord(x)

    сравнение элементов внутри типа (получение логических данных) < , > , <= , >= , = , <> .
    Отметим, что в языке PASCAL Типы integer, char, boolean считаются перечислимыми и к ним можно применять все операции этого типа.
    ord(x) аргумент – элемент перечислимого типа, результат – его номер среди других элементов.


    ограниченный тип данных


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

    BASIC - отсутствует.

    PASCAL type <имя типа>=<константа>..<константа>;
    * Способ образования.

    Образуется как часть элементов ранее известного перечислимого типа путем указания начального и конечного элементов. Элементы упорядочены порядком перечисления.
    PASCAL type <имя типа>=<константа>..<константа>;
    Type
    god=1987..2005;

    cufra=’0’..’9’;

    bukva=’a’..’z’;
    Основные операции и связь с данными других типов.

    те же, что и у перечислимого типа.
    Отметим, что в языке PASCAL, к типам, из которых можно образовывать ограниченный тип добавляется real, однако для ограниченного действительного типа по-прежнему недопустимы функции pred(x), succ(x), ord(x) .


    Заключение


    На этом занятии рассмотрены базовые типы данных, понятие типа данных.
    По окончании нашего урока, вы должны знать ответы на вопросы:

    Что понимают под типом данных?
    Что определяет тип данных?
    Какие типы данных относят к базовым?
    Как хранятся и как обрабатываются:
    целые, действительные числа,
    логические данные и данные «знак»?
    Что называют перечислимым типом?
    Что называют ограниченным типом?
    написать администратору сайта