straustrup2 (852740), страница 72

Файл №852740 straustrup2 (Бьерн Страуструп. Язык программирования С++) 72 страницаstraustrup2 (852740) страница 722021-10-05СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Строка форматирования состоит из объектов двух типов: простые символы,которые просто копируются в выходной поток, и спецификации преобразований, каждая из которыхпреобразует и печатает очередной параметр. Каждая спецификация преобразования начинается ссимвола %, напримерprintf("there were %d members present.",no_of_members);Здесь %d указывает, что no_of_members следует считать целым и печатать как соответствующуюпоследовательность десятичных цифр.

Если no_of_members==127, то будет напечатаноthere were 127 members present.Набор спецификаций преобразований достаточно большой и обеспечивает большую гибкость печати.За символом % может следовать:-необязательный знак минус,преобразованного значения;задающийвыравниваниевлевовуказанномполедляdнеобязательная строка цифр, задающая ширину поля; если в преобразованном значении меньшесимволов, чем ширина строки, то оно дополнится до ширины поля пробелами слева (или справа,если дана спецификация выравнивания влево); если строка ширины поля начинается с нуля, тодополнение будет проводится нулями, а не пробелами;.необязательный символ точка служит для отделения ширины поля от последующей строки цифр;dнеобязательная строка цифр, задающая точность, которая определяет число цифр последесятичной точки для значений в спецификациях e или f, или же задает максимальное числопечатаемых символов строки;*для задания ширины поля или точности может использоваться * вместо строки цифр.

В этомслучае должен быть параметр целого типа, который содержит значение ширины поля илиточности;hнеобязательный символ h указывает, что последующая спецификация d, o, x или u относится кпараметру типа короткое целое;lнеобязательный символ l указывает, что последующая спецификация d, o, x или u относится кпараметру типа длинное целое;%обозначает, что нужно напечатать сам символ %; параметр не нужен;cсимвол, указывающий тип требуемого преобразования.

Символы преобразования и их смыслследующие:d Целый параметр выдается в десятичной записи;o Целый параметр выдается в восьмеричной записи;x Целый параметр выдается в шестнадцатеричной записи;fВещественный или с двойной точностью параметр выдается в десятичной записи вида []ddd.ddd, где число цифр после точки равно спецификации точности для параметра. Еслиточность не задана, печатается шесть цифр; если явно задана точность 0, точка и цифры посленее не печатаются;e Вещественный или с двойной точностью параметр выдается в десятичной записи вида []d.ddde+dd; здесь одна цифра перед точкой, а число цифр после точки равно спецификацииточности для параметра; если она не задана печатается шесть цифр;g Вещественный или с двойной точностью параметр печатается по той спецификации d, f или e,которая дает большую точность при меньшей ширине поля;280Бьерн Страуструп.Язык программирования С++c Символьный параметр печатается.

Нулевые символы игнорируются;s Параметр считается строкой (символьный указатель), и печатаются символы из строки донулевого символа или до достижения числа символов, равного спецификации точности; но,если точность равна 0 или не указана, печатаются все символы до нулевого;p Параметр считается указателем и его вид на печати зависит от реализации;u Беззнаковый целый параметр печатается в десятичной записи.Несуществующее поле или поле с шириной, меньшей реальной, приведет к усечению поля.

Дополнениепробелами происходит, если только спецификация ширины поля больше реальной ширины. Нижеприведен более сложный пример:char* src_file_name;int line;char* line_format = "\n#line %d \"%s\"\n";main(){line = 13;src_file_name = "C++/main.c";printf("int a;\n");printf(line_format,line,src_file_name);printf("int b;\n");}в котором печатаетсяint a;#line 13 "C++/main.c"int b;Использование printf() ненадежно в том смысле, что нет никакого контроля типов.

Так, ниже приведенизвестный способ получения неожиданного результата - печати мусорного значения или чего похуже:char x;// ...printf("bad input char: %s",x);Однако, эти функции обеспечивают большую гибкость и знакомы программирующим на С.Как обычно, getchar() позволяет знакомым способом читать символы из входного потока:int i;:while ((i=getchar())!=EOF) { // символьный ввод C// используем i}Обратите внимание: чтобы было законным сравнение с величиной EOF типа int при проверке на конецфайла, результат getchar() надо помещать в переменную типа int, а не char.За подробностями о вводе-выводе на С отсылаем к вашему руководству по С или книге Кернигана иРитчи "Язык программирования С".10.7 Упражнения1.(*1.5) Читая файл вещественных чисел, составлять из пар прочитанных чисел комплексные числа,записать комплексные числа.2.(*1.5) Определить тип name_and_address (тип_и_адрес). Определить для него << и >>.

Написатьпрограмму копирования объектов потока name_and_address.3.(*2) Разработать несколько функций для запроса и чтения данных разных типов. Предложения:целое, вещественное число, имя файла, почтовый адрес, дата, личная информация, и т.п.Попытайтесь сделать их устойчивыми к ошибкам.281Бьерн Страуструп.Язык программирования С++4.(*1.5) Напишите программу, которая печатает: (1) строчные буквы, (2) все буквы, (3) все буквы ицифры, (4) все символы, входящие в идентификатор в вашей версии С++, (5) все знаки пунктуации,(6) целые значения всех управляющих символов, (7) все обобщенные пробелы, (8) целые значениявсех обобщенных пробелов, и, наконец, (9) все изображаемые символы.5.(*4) Реализуйте стандартную библиотеку ввода-вывода С (<stdio.h>) с помощью стандартнойбиблиотеки ввода-вывода С++ (<iostream.h>).6.(*4) Реализуйте стандартную библиотеку ввода-вывода С++ (<iostream.h>) с помощью стандартнойбиблиотеки ввода-вывода С (<stdio.h>).7.(*4) Реализуйте библиотеки С и С++ так, чтобы их можно было использовать одновременно.8.(*2) Реализуйте класс, для которого операция [] перегружена так, чтобы обеспечить произвольноечтение символов из файла.9.(*3) Повторите упражнение 8, но добейтесь, чтобы операция [] была применима для чтения и длязаписи.

Подсказка: пусть [] возвращает объект "дескриптор типа", для которого присваиваниеозначает: присвоить через дескриптор файлу, а неявное приведение к типу char означает чтениефайла по дескриптору.10. (*2) Повторите упражнение 9, позволяя операции [] индексировать объекты произвольных типов, ане только символы.11. (*3.5) Продумайте и реализуйте операцию форматного ввода.

Используйте для задания форматастроку спецификаций как в printf(). Должна быть возможность попыток применения несколькихспецификаций для одного ввода, чтобы найти требуемый формат. Класс форматного ввода долженбыть производным класса istream.12. (*4) Придумайте (и реализуйте) лучшие форматы ввода.13. (**2) Определите для вывода манипулятор based с двумя параметрами: система счисления и целоезначение, и печатайте целое в представлении, определяемом системой счисления. Например,based(2,9) напечатает 1001.14. (**2) Напишите "миниатюрную" систему ввода-вывода, которая реализует классы istream, ostream,ifstream, ofstream и предоставляет функции, такие как operator<<() и operator>>() для целых, иоперации, такие как open() и close() для файлов.

Используйте исключительные ситуации, а непеременные состояния, для сообщения об ошибках.15. (**2) Напишите манипулятор, который включает и отключает эхо символа.282Бьерн Страуструп.Язык программирования С++ГЛАВА 11. ПРОЕКТИРОВАНИЕ И РАЗВИТИЕ"Серебряной пули не существует."- Ф. БруксВ этой главе обсуждаются подходы к разработке программного обеспечения.

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

Обычно анализ всей задачи, проектирование программы в целом, документация, тестирование,сопровождение и управление всем этим затмевает задачу написания и отладки отдельных частейпрограммы. Конечно, можно все эти виды деятельности обозначить как "программирование" и затемвполне обоснованно утверждать: "Я не проектирую, я только программирую". Но как бы не называлисьотдельные виды деятельности, бывает иногда важно сосредоточиться на них по отдельности, так же какиногда бывает важно рассмотреть весь процесс в целом.

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

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

Непреминем напомнить, что "доказательство по аналогии" является мошенничеством, и аналогии служатздесь только в качестве примера. Понятия проектирования, формулируемые с помощью определенныхконструкций С++, и поясняемые примерами, мы будем обсуждать в главах 12 и 13. Предложенные вэтой главе рекомендации, отражаются как в самом языке С++, так и в решении конкретныхпрограммных задач по всей книге.Снова напомним, что в силу чрезвычайного разнообразия областей применения, программистов исреды, в которой развивается программная система, нельзя ожидать, что каждый вывод, сделанныйздесь, будет прямо применим для вашей задачи. Эти выводы применимы во многих самых разныхслучаях, но их нельзя считать универсальными законами.

Смотрите на них со здоровой долейскептицизма.Язык С++ можно просто использовать как лучший вариант С. Однако, поступая так, мы не используемнаиболее мощные возможности С++ и определенные приемы программирования на нем, так чтореализуем лишь малую долю потенциальных достоинств С++. В этой главе излагается такой подход кпроектированию, который позволяет полностью использовать возможности абстрактных данных исредства объектного программирования С++.

Такой подход обычно называют объектноориентированным проектированием. В главе 12 обсуждаются основные приемы программирования наС++, там же содержится предостережение от сомнительных идей, что есть только один "правильный"способ использования С++, и что для получения максимального выигрыша следует всякое средство283Бьерн Страуструп.Язык программирования С++С++ применять в любой программе ($$12.1).Укажем некоторые основные принципы, рассматриваемые в этой главе:-из всех вопросов, связанных с процессом развития программного обеспечения, самый важный четко сознавать, что собственно вы пытаетесь создать.-Успешный процесс развития программного обеспечения - это длительный процесс.-Системы, которые мы создаем, стремятся к пределу сложности по отношению как к самимсоздателям, так и используемым средствам.-Эксперимент является необходимой частью проекта для разработки всех нетривиальныхпрограммных систем.-Проектирование и программирование - это итеративные процессы.-Различные стадии проекта программного обеспечения, такиепрограммирование и тестирование - невозможно строго разделить.-Проектирование и программирование нельзя рассматривать в отрыве от вопросов управленияэтими видами деятельности.как:проектирование,Недооценить любой из этих принципов очень легко, но обычно накладно.

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

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

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

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