Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C++

Г. Шилдт - Полный справочник по C++ (1109478), страница 142

Файл №1109478 Г. Шилдт - Полный справочник по C++ (Г. Шилдт - Полный справочник по C++) 142 страницаГ. Шилдт - Полный справочник по C++ (1109478) страница 1422019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 142)

Программа предлагает пользователю ввести строку, и, если слово солержится в словаре, на экран выводится список синонимов. Эта программа весьма проста, но следует заметить, что ее ясность и прозрачность являются результатол( применения класса ве.туре. (Определение класса веттуре содержится в заголовочном файле вти.и.) Часть )(. Приложения на языке С++ №1пс1иг)е "вст.й" №1пс1из)е <1овттеав> ив1пд павеврасе втб; ягттуре сйеваптив()[2) = ( "Ьоох", йуо1пве, Сове", "весте", "вегсйвпт, вйор, иагейопве", "рз.вто1", "дип, йапс)дип, 11геатв", "тип", "Зод, тгот, тасе", "Сй1п)г", "виве, соптевр1ате, ге№1ест", "соврите", "апа1уте, юотх опс, во1ззе" 1пт ва1п() ( дохтуре хз соис « >введите слово: с1п » хз 1пт 1," Еот(з.=сз Гйеваитпв[1)[0)!=""з з++) 11(тйеваптпв[1)[0)=.=х) сост « тйеваптив[г)[1)з гетптп 0; ) В следузошем примере с помошыо объектов класса вегтуре по заданному имени проверяется, сушествует ли выполняемый модуль программы.

Для этого достаточно ввести в комазшной строке имя файла без расширения. Затем программа повторно пытается найти выполняемый модуль, добавив к его имени расширение, и сообшает результат поиска. (Если файла нет, его невозможно открыть.) После проверки очередное расширение вычитается из имени файла, и вместо него подставляется новое. Ясность и простота этого примера, как и в предьщчпем случае, обеспечивается классом дохтуре. №1пс1пг)е "вгт.й" №1пс1иг)е <товстевв> №1пс1пс)е <твттевв> ив1пд павеврасе вез(з // Расширения выполняемых файлов. айат его[3)[4) = ( "БХЯ", "сон", "ВАт" )з 1пт ва1п(зпг агдс, сйат *атдзз[)) ( ВетТуре №павез з.пг 1з 11(атдс.'=2) ( сонг « "Командная строка: епаве1п"з гетитп 1з ) Глава 39. Интеграция новых классов: пользовательскни класс для работы со строками 749 тпаща = атди[1) тпаше = глаше + "."; // добавляем точку.

Тот(т=с; 1<3; 1++) ( глаше †. 1паще + яхт[1)/ // добавляем расширение. спит « "Проверка " « Кваше « 1твстааш т(йпаше); 1В(т) саит « "- Существуат1п"; т.с1ове()/ ) е1ве спит « "- Не существует1п"; Епаще = глаше — ахс[1); // Вычитаем расширение. ) таситп 0; ) Например, если программа называется хвехес, и существует файл тет.ехх, командная строка хвехес тевт выводит на экран следующие строки. Проверка ТЕЯТ.ЕХŠ— Существует Проверка ТЕБТ.СОМ - Не существует Проверка ТЕЯТ.ВАТ вЂ” Не существует Следует заметить, что в этой программе конструктор 1явставщ использует объект класса веттура. Это возможно, поскольку в этом случае автоматически вызывается функция преобразования в тип с)гат *.

Как видим, осторожное применение возможностей языка С++ вознаграждается полной совместимостью стандартных типов и типов, разработанных пользователем. Н Принципы создания и интеграции новых типов Как демонстрирует класс яеттура, создавать и интегрировать новые типы в среду программирования довольно просто. Для этого нужно выполнить следуюшие действия. 1. Перегрузить все подходящие операторы, включая операции ввода-вывода. 2. Определить все подходящие функции преобразования. 3. Предусмотреть конструкторы, позволяющие легко создавать обьекты в разнообразных ситуациях.

Одним из основных преимушеств языка С++ является его расширяемость. Не следует пренебрегать такой возможностью. Проблема Сушествует одна весьма интересная проблема. Попробуйте реализовать класс аеттура, используя стандартную библиотеку. Иначе говоря, для хранения символов следует применить не строку, а контейнер. Вместо указателей и функций примените для работы со строками итераторы и алгоритмы. Часть )/. Приложения иа языке С++ ссмотря на то по стандарт языка С++ довольно обширен, некоторыс темы в нем нс Н рассмотрены.

В ланной главе мы изучим одну из них: аятоксичгский околиз выразкений. Программы синтаксического анализа используются лля вычисления алгебраических выражений, например (1Π— 8)~3. Они довольно полезны и применяются во многих приложенияк В то же время синтаксические анализаторы окружены ореолом таинственности. По разным причинам процедуры, использующиеся в процессе синтаксического разбора, остаются достоянием избранных. Действительно многие достаточно умудренные опытом программисты пасуют перел процессом синтаксического анализа выражений. На самом леле синтаксический анализ выражений — весьма простая процедура.

Во многих отношениях она гораздо проще других задач, возникающих перед программистами, Ес простота является следствием строгих правил алгебры. В этой ~лаве мы рассмотрим программу рекурсивного нггсходяогего окализо (гесцгз)зе-дезссп1 рагзсг) и все вспомогательные процедуры, позволяющие вычислять арифметические выражения. Мы разработаем три версии программы синтаксического анализа выражений.

Первые две версии являются обычными, а третья — обобщенной. Ее можно применять к любым числовым типам. Однако перед тем как приступить к разработке синтаксического анализатора, необходимо сделать краткий обзор выражений и правил их грамматического разбора. Выражения Поскольку программа синтаксического разбора вычисляет алгебраические выражения, необходимо ясно представлять себе, из каких частей состоят выражения. Хотя в принципе выражения могут содержать самую разнообразную информацию, в рамках этой главы нас будут интересовать исключительно арифметические выражения. Для наших целей мы рассмотрим выражения, состоящие из следующих компонентов. ° Числа ° Операции ч —, /, ь, ", зги = ° Скобки ь Переменныс В нашем синтаксическом анализаторе символ " будет означать возведение в степень (а не логическую операцию исключающего "ИЛИ", как обычно).

Символ = обозначает оператор присваивания. Перечисленные выше компоненты объединяются в выражения в соответствии с правилами алгебры. Приведем некоторые примеры. 10 — в (100-5)*14!б а+Ь-с 1О"5 а=10 — Ь Установим следующие приоритеты опера~оров. + — (унврныв) высший / Ъ + низший Операторы, имеющие одинаковый приоритет, вычисляются слева направо. лг Часть Ч. Приложения на языке С++ В примсрах, рассмотрснных по холу изложения, все переменные обозна«а>атся одной буквой (иначс говоря, допускается использование лишь 2б псрсмснных, соответствующих буквам от л до в).

Стра шыс и прописные буквы нс различаются (буквы а и л считаются одинаковыми). В первой версии ан>шизатора всс чнсловыс псрсмснныс приводятся к типу >ЗоаЬ1е, хотя читатсли легко смогут модифицировать эту про>.рамму, настроив сс на обработку л>абого другого числового типа. Кроме того, для упрощения логики программы в цсс включены минимальные срсдства проверки ошибок. ~ Синтаксический анализ выражений: постановка задачи На псрвый взгляд, синтаксический анализ выражений кажется довольно простой задачсй. Однако, чтобы лучше понять ес, попробуйте-ка вычислить выраженно $ !0-2*3 Как известно, результат этого выражения равен 4. Несмотря на то что создать программу, вычисляющую это ирифмети«еское выражение, довольно легко.

возникает вопрос, как создать программу, вычисляю>цую правильный результат лриизнильниги выражения. В качсствс первого варианта можно написать следующую программу. а = первый операял >«Ы! с(ес>ь операнды) ор = оператор Ь = второй операнд а=аарЬ Эта программа получаст первый операнд, оператор и второй операнд, а затем выполняет первую операцию, получает следующий оператор и его операнды и тш. Олнако, если этот подход положить в основу вссй программы, то разультатом выражения )0 — 2*3 будет число 24 (т.с. 8«3), а нс 4, поскольку эта процедура игнорируст приоритет операторов. Нсльзя просто перебирать операторы и операнды слова направо, поскольку в соответствии с правилами алгебры умножение имеет более высокий приоритет, чем вычитание. Начинающие программисты часто полагают, что это ограничение легко прсолалсть, и иногда, правда, в очснь редких случаях, им эта удастся.

Однако, если учесть скобки, возведение в степень, псрсмснныс, унарныс операторы и тому подобное, задача становится намного сложнсс. Нссмотря на го что сушсствусг насколько способов создания программы, вычисляющей выражения, мы рассмотрим лишь наибалсс простой и понятный. Кстати, имснно поэтому он чаше всего примснястся. Этот метод называется рекурсивным нисходящим анализам. По мере чтения главы читатели поймут, почсму он получил такое название. (Иногда при разработке синтаксичсских анализаторов применяются другис методы, основанные на сложных таблицах, которые должны генерироваться другими программами.

Иногда такис программы называют >нибличными синтаксическими анализаторами (гаЫс-дп«сп раггсг).) Синтаксический анализ выражения Сущсствуст много способов си>паксичсского анализа и вычислсния выражений. В рамках рекурсивного нисходящего анализа выражения рассматриваются как ре- Глава 40. Синтаксический анализ выражений хурсивные опрукгпуры данных (тесцгйуе дага мгцс(огсз). Если бы выражения могли состоять лишь из операций +, —. *, У и скобок, то все выражения можно было бы определить по следующим правилам.

Характеристики

Тип файла
DJVU-файл
Размер
7,03 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

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