Записи по ЯП

2019-09-19СтудИзба

Описание файла

Документ из архива "Записи по ЯП", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Записи по ЯП"

Текст из документа "Записи по ЯП"

Простые типы данных

Под простыми типами данных мы имеем в виду языковые конструкции, встроенные в язык, то есть типы

данных изначально поддерживаемые в языке.

Классификация простых типов данных

- числовые

- целочисленные

- вещественные

- плавающие

- фиксированные

Не во всех языках есть такое усложнение класса чисел, например, в таких скриптовых языках как

JavaScript и ActionScript есть тип Number, обьекты класса Number могут принимать как

целочисленные значения, так и вещественные.

- логические

- символьные

-порядковые

-перечисления

-диапазоны

-ссылки и указатели

И еще иногда вводят функциональные тип(функции и процедуры)

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

Перед разработчиком языка при создание целочисленного типа всегда возникают как минимум три

проблемы:

1. Фиксация представления – то есть фиксировать ли размеры типов данных, и набор

значений.

2. Беззнаковые целые числа – нужно ли выделять беззнаковый целый тип

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

Наиболее известные языки программирования с фиксацией представления типов данных – Java, C#.

Другое дело с языком С. Именно в языке С

решили ввести диапазон чисел, который должен быть покрывать диапазоны, вмещаемые в 1 - 8 байт:

-char

-short int

- int

- long int

- long long

Правда здесь отдельно ничего не ясно про каждый тип(кроме char – 1 байт), например short int на различных

платформах может занимать как 1 байт, так и 2 байта. Но зато ясно, что количество байт отводимых под char,

меньше либо равно количеству байт, отводимых под short int, количество байт отводимых под short int,

меньше либо равно количеству байт, отводимых под int, и т.п. Такая системы была унаследована в языка С++.

Рассмотрим беззнаковые целые числа.

Так в Модуле-2 существовали два типа INTEGER и CARDINAL. И приведение одного в другой

допускалось только явное(существовал специальный оператор для такого присваивания):

I:INTEGER; J:CARDINAL; I := INTEGER(J);

Но в современном мире языков программирования многие языки такими ограничениями не обладают.

Например, язык С++.

Так, к примеру в Обероне существует лишь один беззнаковый тип

byte(0..255), и Java, позаимствовавшая типы данных именно с Оберона была вынуждена включить

дополнительно включить в базовые арифметические операции беззнаковый сдвиг(>>>). То есть базисный

набор операции над целыми числами расширен по сравнению с базисным набором операций в С.

Существовали и другие решения данной проблемы. Так в С# решили допускать только расширяющиеся

преобразования(так как они безопасные). Обратные преобразования допускались только явно. Про

приведение типов в АДА смотреть ниже.

Подходы к реализации числовых типов данных.

1. Фиксирование базиса. То есть мы заранее говорим, что вот такие типы данных, как integer,byte …

являются целочисленными. Все остальные уже не целочисленные. В некоторым языках фиксируется

даже размер каждой переменной данного типа, то есть integer в Java занимает, например, строго 2

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

машина. Еще один пример такого языка С#. Программы на таких языках являются мобильными, то

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

не фиксированы ни представление чисел, ни семантика числовых операций.

2. Обобщенные числовые типы. Ада создавалось отчасти и для того, чтобы код на ней был

кроссплатформенным. Поэтому фиксирование базиса в такой ситуации было затруднено. Перед

создателями Ады ставились следующие задачи: Эффективность, Надежность, Читабельность. В

следствие этого создатели Ады придумали новую концепцию. Они ввели обобщенные числовые типы

данных. То есть типы являющиеся базой для всех других типов( все другие наследовались от них).

Объекты разных типов были несовместимы ни по какому множеству операций, но были совместимы

объекты подтипов. То есть разные подтипы совместимы между собой и со своим предком. Например:

Type Length is new integer;

Type Width is new integer;

Length и Width – новые целочисленные типы данных, при этом их нельзя ни присваивать друг

другу, ни сравнивать. Однако можно делать преобразования явным. В С или Паскале мы бы таким

способом ввели бы понятие эквивалентности.

Еще один пример:

Type Length in new integer range 0..MAXN.

Думаю в комментариях не нуждается - диапазон Length ограничен 0..MAXN.

В чем плюс обобщенных типов, так то что все ошибки обнаруживались на этапе компиляции.

Если требовались неявные преобразования вводились под – типы.

Sybtype t1 is t2 range 0..N.

И тогда преобразования из T1 в T2 допускались. При этом компилятор сам выбирает

оптимальное представление для таких чисел. То есть представление таких типов данных зависело не

от архитектуры, а от диапазона чисел. Теперь компилятор транслирую присваивание таких типов

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

по проверке допустимости такого присваивания(квазистатический контроль). В случае ошибки

выхода за границу в Ада возбуждается range error.

Вещественные типы данных.

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

двоичная система счисления (иногда двоично-шестнадцатеричная), следовательно, предварительно

десятичное число должно быть переведено в двоичную систему, а затем представлено в нормализованном

формате с Р = 2 (для двоично-шестнадцатеричной системы Р = 16).

Независимо от используемых систем счисления существует два основных типа представления чисел в

компьютере, называемые представлениями с фиксированной и с плавающей запятой.

В типах данных, использующих представление чисел с фиксированной запятой, все разряды ячейки,

кроме знакового разряда, служат для изображения разрядов чисел. Причем каждому разряду ячейки

соответствует всегда один и тот же разряд числа, что и фиксирует место запятой перед определенным

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

чисел, которые могут быть представлены в таком типе. Чаще всего это бывает диапазон -1 < x < 1. Этот

случай соответствует соглашению: что при чтении чисел, записанных в машине, запятая ставится

непосредственно перед старшим цифровым разрядом.

Наибольшее по абсолютной величине число, которое может быть представлено в машине таким

образом, равно 1 – р-n, наименьшее – отличное от нуля – р-n. Для представления чисел, не укладывающихся в

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

участвующие в решении задачи, их произведениями на специально подобранные коэффициенты. Это

существенно усложняет решение поставленной задачи. Поэтому для представления вещественных чисел в

современных компьютерах формат данных с фиксированной запятой не применяется.

Описанные первой главе целые типы данных представляются в компьютере в формате с

фиксированной запятой. Положение запятой в них зафиксировано после правого разряда.

Чтобы избавиться от недостатков представления действительных чисел с фиксированной запятой, в

современных ЭВМ принят способ их представления с плавающей запятой. Этот способ представления

опирается на нормализованную (экспоненциальную) запись чисел:

+- M * Bp ( знак/ мантисса/порядок(B- основание системы счисления).

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

нормализованное представление, то есть 1/B < -M < 0. То есть в системе с основанием B все степени B

представимы точно.

Еще раз скажу, что при вещественных операциях точность страдает, так мантиссу можно выбрать так, что

погрешность будет порядка нескольких сотен(не мало да!)

Использование как в компьютере, так и в калькуляторе представления чисел с плавающей запятой

усложняет схему арифметического устройства.

При сложении и вычитании чисел сначала производится подготовительная операция, называемая

выравниванием порядков. Она состоит в том, что мантисса числа с меньшим порядком сдвигается в своей

ячейке вправо на количество разрядов, равное разности порядков данных чисел. После этой операции

одноименные разряды чисел оказываются расположенными в соответствующих (одних и тех же) разрядах

обеих ячеек, и теперь сложение или вычитание мантисс выполняется достаточно просто, так же как над

числами с фиксированной запятой.

При умножении двух чисел с плавающей запятой их порядки складываются, а мантиссы –

перемножаются (предварительное выравнивание не производится).

При делении из порядка делимого вычитается порядок делителя, а мантисса делимого делится на

мантиссу делителя.

После операций над порядками и мантиссами получается порядок и мантисса результата, но последняя

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

результата арифметических операций в машине требуется, чтобы он также; был нормализованным числом,

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

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

цифра попала в первый разряд после запятой. Одновременно порядок результата увеличивается или

уменьшается на число, равное величине сдвига.

Когда говорят о точности представления вещественных чисел, надо помнить следующее: десятичное

число, имеющее даже всего одну значащую цифру после запятой, вообще говоря, невозможно записать точно

в любом из вещественных типов. Объясняется это тем, что конечные десятичные дроби часто оказываются

бесконечными периодическими двоичными дробями. Так, 0,110 = 0,0(0011)2, а, значит, и в нормализованном

виде такое двоичное число будет иметь бесконечную мантиссу и не может быть представлено точно. При

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

Плавающие числа нужны для представления математических расчетов В других сферах часто требуется

несколько иное, например если мы работаем с рублями, то нам важна точность до второго порядка после

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

только плавающий тип, то при представлении таких чисел неудобно использовать операции с плавающей

точкой. Поэтому в некоторых языках ввели delta – типы.

Aда: type DATA is delta 1/4096 range –M..M

При этом вся дальнейшая работа по представлению ложится опять на компилятор(он сам лучше

подберет как хранить это число).

В других языках появляются еще разновидность delta – типов: С# - decimal, currency.

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

Логические, или булевские, данные предназначены для хранения логических значений "истина"(1) или

"ложь"(0). В большинстве языков базис операций над логическим типом сводится к операциям: or, not, and

• И (логическое умножение) (AND, &, *),

• ИЛИ (логическое сложение) (OR, |, +),

• Отрицание (NOT, ~, !)

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

используется минимальная адресуемая ячейка памяти (байт) или машинное слово, как эффективная единица

работы с регистрами и оперативной памятью.

Aда: type Boolean is (False, True); // представление типа Boolean

p : Boolean := True;

...

if p then

...

end if;

C#, C, Java, Algol: bool p;

Кстати С единственный язык с неявным преобразование int в bool

Delphi, Pascal: var p:boolean

Символьный тип данных.

Символьный тип (Сhar) — простой тип данных, предназначенный для хранения одного символа в

определённой кодировке. Может являться как однобайтовым (для стандартной таблицы символов), так и

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее