Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » И.Г. Головин, И.А. Волкова - Языки и методы программирования

И.Г. Головин, И.А. Волкова - Языки и методы программирования, страница 11

PDF-файл И.Г. Головин, И.А. Волкова - Языки и методы программирования, страница 11 Языки программирования (54061): Книга - 7 семестрИ.Г. Головин, И.А. Волкова - Языки и методы программирования: Языки программирования - PDF, страница 11 (54061) - СтудИзба2019-09-19СтудИзба

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

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

Просмотр PDF-файла онлайн

Текст 11 страницы из PDF

Кроме типа c h a r в языке C++ появилсятип wchar t специально для представления символов из UNICODE.Этот тип является целым беззнаковым двухбайтовым типом.Логические типы данныхЛогический тип данных, обозначаемый в языках C++ и C# Javaключевым словом b o o l (b o o le a n в Java), состоит их двух значений:t r u e (истина) и f a l s e (ложь).Набор операций состоит из логического И — «&&», логическогоИли — « | | » и отрицания Не — «!» с обычным математическимсмыслом.Интересной особенностью вычисления логических операций &&и | | является их «ленивость». Ленивость исполнения логическихопераций состоит в том, что они вычисляются слева направо, и еслизначение левого операнда определяет значение всего выражения (дляоперации && это f a l s e , а для операции | | это tr u e ) , то правыеоперанды вычисляться не должны.В языках C# и Java логический тип не может приводиться к целым(да и другим) типам данных (ни явно, ни тем более неявно).49В языке C++ ситуация более сложная.

Дело в том, что логическийтип был включен в язык не сразу, а сначала C++ унаследовал правилаязыка С. В этом языке логические операции были (перечисленныеранее), а отдельного логического типа не было. Логические операциивозвращали целое значение 1 в качестве «истины» и 0 — в качестве«лжи». Если в каком-то месте от выражения произвольного типа тре­бовалось логическое значение, то это выражение (при необходимо­сти) приводилось к целому типу и вычислялось. При этом ненулевоезначение соответствовало «истине», а нулевое — «лжи».

Поэтому наязыке С (и C++) вполне можно записать следующие фрагменты:w h ile (n-m){i f (n > m)n -= m;e lsem -= n;}В языках C# и Java в этом месте компилятор выдаст ошибку,а правильный фрагмент программы имеет видw h ile (n-m != 0) ...То же, конечно, можно записать и на языке C/C++.Таким образом, тип b o o l в языке C++ неявно приводится к цело­му типу (tr u e — в 1, f a l s e — в 0), и наоборот, что, конечно, снижаетего ценность (по сравнению с логическим типом в C# и Java).Порядковые типы данныхПорядковые типы данных подразделяются на перечислимые типыи типы диапазона.Перечислимый тип задается прямым перечислением константзначений.

Каждое значение задается своим именем.Впервые перечислимые типы появились в языке Паскаль и сразустали популярными как среди разработчиков языков программирова­ния, так и среди программистов. Дело в том, что использование пере­числимых типов делает программу более понятной, поскольку всезначения имеют имена, которые характеризуют смысл значения.С точки зрения реализации каждое значение перечислимого типаотображается в целое число, соответствующее его порядковому номе­ру в определении типа. Этот номер называется ординалом значения.По умолчанию нумерация ординалов начинается с нуля, однако не­которые языки позволяют придать свои значения ординалам.Перечислимые типы реализованы в языках C++, C# и Java (на­чиная с 2005 г.). Однако в реализации этих типов есть различия.50Начнем с языка C++.

Представим себе задачу моделирования све­тофора. В н ей ,важную роль имеет цвет светофора, который удобнопредставить перечислимым типом:enum TrafficColors {RED, YELLOW, GREEN};Пусть у нас есть класс TrafficLights, представляющий собойсветофор, и переменная light 1 этого класса. Тогда следующий вы­зов не нуждается в дополнительных комментариях:lightl.SetSignal(RED);Очевидно, что это переключение светофора в красный цвет.Цвета нумеруются у нас от 0 до 2 (RED=0, YELL0W=1, GREEN=2).Иногда конкретный номер цвета не важен, но мы можем расширитьзадачу, потребовав, чтобы числовые значения констант перечисли­мого типа соответствовали значениям цветов в цветовой системеRGB-24 (в этой системе каждому цвету соответствует целое значе­ние, составленное из трех байтов — значение каждого байта естьинтенсивность красного, зеленого и синего цветов в диапазоне отОдо 255).Тогда объявление нашего типа изменится (используется шестнад­цатеричная форма целых констант — каждая пара цифр соответствуетбайту со значением 255 или 0):enum TrafficColors {RED = OxFFOOOO,YELLOW = OxFFFFOO,GREEN = OxOOFFOO};Теперь значения цветов можно использовать в функциях рисова­ния, требующих указания значения цвета, например:brush.SetBrushColor(YELLOW);Здесь мы предполагаем, что функция SetBrushColor имеет одинпараметр целого типа, означающий цвет в системе RGB-24.Таким образом, значения перечислимого типа неявно преобразу­ются в значения типа int.

Обратное, однако, неверно. Попытка при­своить переменной перечислимого типа какое-либо целое значениерассматривается компилятором как ошибка:TrafficColors cl = 127; // ошибка! ! !Если мы хотим придать переменной новое числовое значение, тодолжны записать явное преобразование:TrafficColors cl = (TrafficColors)-1;// теперь формально правильно51Однако ясно, что такое преобразование не всегда приводит к ожи­даемым результатам (какой реальный цвет будет у переменной c l? ),поэтому и требуется выписывать явное преобразование.Однако у реализации перечислимых типов в языке C++ есть ряднедостатков.

Первый недостаток состоит в том, что константы пере­числимого типа имеют ту же область действия, что и имя перечис­лимого типа (так называемый неявный импорт имен). Это можетприводить к конфликту имен. Например, если мы одновременнопытаемся моделировать семафор, то появляется еще одно перечис­ление:enum SemaColors {RED, GREEN};Это приводит к конфликту. Для учебных программ это не страш­но (имена в своих программах поменять легко).

Однако в условияхиндустриального программирования, когда широко используютсябиблиотеки сторонних производителей (например, одна библиотекамоделирует светофор, другая — семафор), такие конфликты достав­ляют немало хлопот программистам.Вторым недостатком является фиксированное представлениеперечислимых типов в языке C++, поскольку они всегда реализуютсякак целые (на базе основного целого типа in t ) .

Иногда это неудоб­но и приводит к напрасной трате памяти (ведь хватило бы и болеекороткого типа).В языке C# эти недостатки преодолены. Заметим, что приведен­ные ранее объявления типов TrafficColors и SemaColors явля­ются вполне корректными в языке C# (надо только убрать концевыеточки с запятой). Однако имена перечислимых констант локализо­ваны в типе и могут использоваться за пределами объявления типатолько в видеимя типа.имя_константыНапример:lightl.SetSignal (TrafficColors .RED) ;Кроме того, значения перечислимого типа могут храниться какзначения любого целочисленного типа (такой тип называется базо­вым для перечисления).

По умолчанию базовым является основнойцелый тип i n t , но базовый тип легко поменять:enum SemaColors : byte{Red, Green}В отличие от языка C++ значения перечислимых типов в C# долж­ны преобразовываться в базовый тип только явно:52brush .SetBrushColor (TrafficColors .YELLOW) ;// в C# - ошибка — SetBrushColor требует целый типbrush .SetBrushColor ( (int) TrafficColors .YELLOW) ;// теперь правильно!В языке Java перечислимые типы появились относительно недавно(с 2005 г.) и реализованы они наиболее «экзотично»: на самом делеперечислимые типы в Java — это классы. Не вдаваясь в тонкости(о них можно прочитать, например, в [35]), заметим, что объявлениеи использование перечислений здесь внешне похожи на С#:enum TrafficColors{Red, Yellow, Blue}TrafficColors cl = TrafficColors .Yellow;Неявные преобразования в целый тип и обратно также запрещены,но можно использовать методы перечислимого класса ordinal (),возвращающий порядковый номер константы, и values () , воз­вращающий массив констант значений перечислимого типа (индексв массиве — это номер константы в типе):int colorNumber = TrafficColors Red.ordinal () ;// colorNumber получает значение 0TrafficColors с =TrafficColors .values [colorNumber+1 ] ;// с получает значение TrafficColors.

YellowНапоследок заметим, что во всех рассмотренных языках к пере­числимым типам применимы операции сравнения (сравниваютсяординалы значений).Скажем несколько слов о диапазонных типах. Они появилисьв языке Паскаль и позволяли ограничить значения какого-либо цело­го или перечислимого типа.Например:type Index = 0..N; // диапазон целого типаtype DaysOfWeek = (Mon, Tue, Wed, Thu, Fri, Sat,Sun) ;// перечислимый тип — дни неделиtype WorkDays = Mon..Fri;// диапазон типа DaysOfWeekWeekendDays = Sat..Sun;// другой диапазон DaysOfWeekЧаще всего диапазонные типы используются в качестве типа ин­декса в массивах.

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