СОДЕРЖАНИЕ ВВЕДЕНИЕ…………………………………………………………………………. СРЕДА РАЗРАБОТКИ ПРИЛОЖЕНИЙ MICROSOFT VISUAL C++.......................................... 1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ.............................................................................................. 1.1 ИСТОРИЯ ЯЗЫКА С++................................................................................. 1.2 ВОЗНИКНОВЕНИЕ ЯЗЫКА C++ И ЕГО КРАТКИЙ ОБЗОР................................. 1.3 ОСНОВНЫЕ ЭТАПЫ РАЗВИТИЯ С++........................................................... 1.4 Компиляторы и среды разработки ………………..………………….. 1.5 ЭФФЕКТИВНОСТЬ И СТРУКТУРА…………………………………………. 1.6 ПОСТАНОВКА ЗАДАЧИ…………………………………………………… 2 ЭЛЕМЕНТЫ УПРАВЛЕНИЯ В MICROSOFT VISUAL C++............................................... 2.1ОПИСАНИЕ ПРОГРАММЫ…………………………………………………. 2.2ПРАВИЛА ИГРЫ..…………………………………………………………... 2.3 БЛОК-СХЕМА ПРОГРАММЫ ……………………………………………... 2.4 ДЕМОНСТРАЦИЯ РАБОТЫ ПРОГРАММЫ ………………………………… ЗАКЛЮЧЕНИЕ.……………………………………………………………………… СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ………………………………………….. ЛИСТИНГ ПРОГРАММЫ……………………………………………………………... 2 ВВЕДЕНИЕ Язык программирования С++ царит в компьютерном мире. Есть масса причин для узучения этого языка – это продвижение по служебной лестнице, предназначен для разработки высокопроизводительного программного обеспечения и получение высокооплачиваемой работы. С другой стороны, изучение С++ может превратиться в настоящую каторгу, так как на самом деле это язык с множеством мудреных правил. Обилие инструментов для разработки программ на языке С++ с первого взгляда могут перепутать начинающегося разработчика. Однако в данном курсовом проекте сделан упор не на сложность, а на разработке программно-модульной структуры, которая должна в соответствии с вариантом задании выполнять общие действия, а именно создавать файл, читать данный файл, выводить данные на дисплей и обрабатывать данные в соответствии с вариантом задания. Программа должна не только правильно решать задачу, но и иметь современный интерфейс, быть высоконадежной, дружественной по отношению к пользователю. Только такие программы могут выдерживать конкуренцию на мировом рынке программных продуктов. Я хочу подчеркнуть, что С++ лишь стартовая площадка. С++ - это большой по объему средств и не самый простой язык программировая. Необходимым условием успешного программировая на С++ является не только ключевых слов, операторов и синтаксиса, определяющего возможности языка, но и библиотек классов и функций, которые существенно помогают в разработке программ. И хотя некоторые элементы библиотек рассматриваются в книгах, все же большинство из них не нашло здесь своего отражения. Чтобы стать первоклассным программистом на C++, необходимо в совершенстве изучить и С++-библиотеки. Знания, полученные при изучении, позволят вам освоить не только библиотеки, но и все остальные аспекты C++. Для составления работающих программ достаточно иметь интуитивные представления об алгоритмах и устройстве компьютера. Часто бывает достаточно ознакомиться с несколькими работающими программами или даже с фрагментами таких программ, чтобы, в буквальном смысле используя образцы, 3 успешно описывать собственные алгоритмы. Однако грамотная речь невозможна без знания языка, а профессиональное программирование требует глубоких знаний в области языков программирования. В ней на основе базовых языковых конструкций и элементарных понятий описываются всё более сложные элементы языка и связанные с ними концепции: - алфавит и идентификаторы - элементарные типы, объявления и пределения - операции, выражения и операторы - функции и их характеристики - производные типы и средства их построения - функции-члены, конструкторы и операторные функции - механизмы наследования, инкапсуляции и полиморфизма - шаблоны - потоки ввода-вывода - средства обработки исключительных ситуаций. 1. СРЕДА РАЗРАБОТКИ ПРИЛОЖЕНИЙ MICROSOFT VISUAL C++ (MSVC) - ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ ПРИЛОЖЕНИЙ НА ЯЗЫКЕ C++, РАЗРАБОТАННАЯ ФИРМОЙ MICROSOFT И ПОСТАВЛЯЕМАЯ ЛИБО КАК ЧАСТЬ КОМПЛЕКТА MICROSOFT VISUAL STUDIO, ЛИБО ОТДЕЛЬНО В ВИДЕ БЕСПЛАТНОГО ФУНКЦИОНАЛЬНО ОГРАНИЧЕННОГО КОМПЛЕКТА VISUAL C++ EXPRESS EDITION. 4 1.1 ОСНОВЫ ЯЗЫКА С++ ЯЗЫК C++ ПРЕДСТАВЛЯЕТ КОМПЬЮТЕРУ, ЧТО НЕОБХОДИМО СОБОЙ НАБОР КОМАНД, КОТОРЫЕ ГОВОРЯТ СДЕЛАТЬ. ЭТОТ НАБОР КОМАНД, ОБЫЧНО НАЗЫВАЕТСЯ ИСХОДНЫЙ КОД ИЛИ ПРОСТО КОД. КОМАНДАМИ ЯВЛЯЮТСЯ ИЛИ «ФУНКЦИИ» ИЛИ «КЛЮЧЕВЫЕ СЛОВА». КЛЮЧЕВЫЕ СЛОВА(ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА С/С++) ЯВЛЯЮТСЯ ОСНОВНЫМИ СТРОИТЕЛЬНЫМИ БЛОКАМИ ЯЗЫКА. ФУНКЦИИ ЯВЛЯЮТСЯ СЛОЖНЫМИ СТРОИТЕЛЬНЫМИ БЛОКАМИ, ТАК КАК ЗАПИСАНЫ ОНИ В ТЕРМИНАХ БОЛЕЕ ПРОСТЫХ ФУНКЦИЙ — ВЫ ЭТО УВИДИТЕ В НАШЕЙ САМОЙ ПЕРВОЙ ПРОГРАММЕ, КОТОРАЯ ПОКАЗАНА НИЖЕ. ТАКАЯ СТРУКТУРА ФУНКЦИЙ НАПОМИНАЕТ СОДЕРЖАНИЕ КНИГИ. СОДЕРЖАНИЕ МОЖЕТ ПОКАЗЫВАТЬ ГЛАВЫ КНИГИ, КАЖДАЯ ГЛАВА В КНИГЕ МОЖЕТ ИМЕТЬ СВОЁ СОБСТВЕННОЕ СОДЕРЖАНИЕ, СОСТОЯЩЕЕ ИЗ ПУНКТОВ, КАЖДЫЙ ПУНКТ МОЖЕТ ИМЕТЬ СВОИ ПОДПУНКТЫ. ХОТЯ C++ ПРЕДОСТАВЛЯЕТ МНОГО ОБЩИХ ФУНКЦИЙ И ЗАРЕЗЕРВИРОВАННЫХ СЛОВ, КОТОРЫЕ ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ, ВСЕ-ТАКИ ВОЗНИКАЕТ ПОТРЕБНОСТЬ В НАПИСАНИИ СВОИХ СОБСТВЕННЫХ ФУНКЦИЙ. Поскольку С++ является надмножеством С, то большинство программ на языке С являются также программами и на языке С++. (Имеется несколько небольших различий между С и С++, благодаря которым некоторые типы программ на языке С не будут компилироваться компилятором языка С++. Можно писать программы на С++, которые выглядят в точности как программы на языке С, но в таком случае не будут использоваться преимущества, предоставляемые С++-программистам. Кроме того, большинство программистов, пишущих на языке С++, используют стиль и некоторые особенности написания программ, которые присущи только С++. Поскольку важно использовать весь потенциал С++, то в этом разделе мы обсудим некоторые из таких особенностей, прежде чем перейти к собственно С++. Начнем с примера. Рассмотрим программу на языке С++: #include <iostream.h> #include <stdio.h> int main() { int i ; char str [80] ; cout << "I like Borland C++.\n"; // однострочный комментарий /* также можно использовать С-комментарии */ printf ("You can use printf(), but, most С++ programs don' t. \n"); // ввод числа с помощью >> 5 cout << "Enter a number: "; cin >> i; // вывод числа с помощью cout << "Your number is " << i << "\n"; // чтение строки cout << "Enter a string: "; cin >>str; // вывод cout << str; return 0; } << Как можно видеть, эта программа выглядит совершенно отлично от обычной программы на языке С. Заголовочный файл iostream.h определен С++ и предназначен для поддержки операций ввода/вывода. Включение заголовочного файла stdio.h обусловлено использованием функции printf(). Если используются операции ввода/вывода собственно языка С++, то необходимости в этом файле нет. Одной из особенностей, на которую стоит обратить внимание, служит объявление функции main() int main() вместо int main(void) которое используют программы на языке С. Причина этого заключается в том, что в языке С++ пустой список параметров эквивалентен спецификатору void. Это означает, что оба типа объявления функции равноправны в рамках языка С++. В С++ использование зарезервированного слова void для обозначения пустого списка параметров является допустимым, но рассматривается как излишество. Поскольку оно не является необходимым, далее в наших программах мы не будем использовать слово void для обозначения пустого списка параметров. Следующая строка кода содержит несколько особенностей языка С++: cout << "I Оператор cout << "I like Borland like Borland C++.\n"; // однострочный комментарий C++.\n"; выводит на экран «I like Borland С++.», после чего следует переход на следующую строку и возврат каретки. В С++ роль оператора << значительно расширена. Он продолжает выполнять роль оператора побитового сдвига влево, но используется также как оператор вывода данных в случае, если записан в 6 указанной в примере форме. Слово cout представляет собой идентификатор, соответствующий экрану. Так же как и С, язык С++ поддерживает перенаправление ввода/ вывода, но, чтобы избежать дискуссий на эту тему, мы можем принять, что cout ссылается на экран. Можно использовать cout и оператор << для вывода данных любого встроенного типа, а также для вывода строк символов. Важно отметить, что можно продолжать пользоваться функцией printf() (что проиллюстрировано в записанной выше программе) или любой другой функцией ввода/вывода языка С, но большинство программистов находят, что использование cout<< более соответствуют духу С++. В общем случае программы на языке С++ могут использовать любые функции, поддерживаемые Borland С++, включая и те, что определены языком С. Однако, в тех случаях, когда С++ предлагает альтернативный подход, ему следует отдавать предпочтение перед использованием функций языка С, хотя и нет правил, предписывающих это. В предыдущей строке кода комментарии С++ следовали за выражением для вывода данных. В С++ комментарии определяются двумя способами. Комментарии языка С сохраняют свое значе ние и в С++. Однако в С++ можно также определить комментарии размером в одну строку, используя //. Когда комментарии начинаются с //, все, что следует за этими знаками, игнорируется компилятором до конца строки. Обычно при включении многострочных комментариев используют нотацию С, а однострочных — С++. Далее программа выводит запрос-подсказку пользователю, чтобы он ввел число. Число читается с клавиатуры, используя следующую инструкцию: cin >> i; В С++ оператор >> сохраняет свое значение сдвига вправо, но если он используется как показано выше, то служит оператором ввода числа с клавиатуры и записи его в переменную i. Идентификатор cin ссылается на клавиатуру. В общем случае можно использовать cin >> для загрузки переменных любого базового типа или строки. Хотя в программе это и не проиллюстрировано, можно свободно использовать любую функцию С для ввода данных, например, функцию scanf(), вместо cin >>. Однако, как и в случае с cout, подавляющее большинство программистов находят использование cin >> в большей мере соответствующим духу С++. Рассмотрим другую интересную строку программы: cout << "Your number is " << i << "\n"; Этот код выводит на экран следующую фразу (предполагается, что значением i служит 100): 7 Your number is 100 после которой идет перевод каретки и переход на новую строку. В общем случае можно выполнять столько операций вывода <<, сколько надо. Остальная часть программы демонстрирует, как можно прочитать и вывести строку, используя cin >> и cout <<. При вводе строки cin >> прекращает чтение, как только встречает специальный символ. Это аналогично тому, что делает стандартная функция scanf() при вводе строки. `1.0.1 ГЛАВНОЕ ОКНО C++ РИСУНОК 1.1 – ГЛАВНОЕ ОКНО С++ 8 1.0.2 ОКНО СОЗДАНИЯ ПРОЕКТА C++ РИСУНОК 1.1.2 – ОКНО СОЗДАНИЯ С++ 9 1.1 ИСТОРИЯ C++ С++ В НАСТОЯЩЕЕ ВРЕМЯ СЧИТАЕТСЯ ГОСПОДСТВУЮЩИМ ЯЗЫКОМ, ИСПОЛЬЗУЕМЫМ ДЛЯ РАЗРА­БОТКИ КОММЕРЧЕСКИХ ПРОГРАММНЫХ ПРОДУКТОВ. В ПОСЛЕДНИЕ ГОДЫ ЭТО ГОСПОДСТВО СЛЕГКА ПО­КОЛЕБАЛОСЬ ВСЛЕДСТВИЕ АНАЛОГИЧНЫХ ПРЕТЕНЗИЙ СО СТОРОНЫ ТАКОГО ЯЗЫКА ПРОГРАММИРОВА­НИЯ, КАК JAVA, НО МАЯТНИК ОБЩЕСТВЕННОГО МНЕНИЯ КАЧНУЛСЯ В ДРУГУЮ СТОРОНУ, И МНОГИЕ ПРОГРАММИСТЫ, КОТОРЫЕ БРОСИЛИ С++ РАДИ JАVА, В ПОСЛЕДНЕЕ ВРЕМЯ ПОСПЕШИЛИ ВЕРНУТЬСЯ К СВОЕЙ ПРЕЖНЕЙ ПРИВЯЗАННОСТИ. В ЛЮБОМ СЛУЧАЕ ЭТИ ДВА ЯЗЫКА НАСТОЛЬКО ПОХОЖИ, ЧТО, ИЗУЧИВ ОДИН ИЗ НИХ, ВЫ АВТОМАТИЧЕСКИ ОСВАИВАЕТЕ 90% ДРУГОГО. С# — ЭТО НОВЫЙ ЯЗЫК, РАЗРАБОТАННЫЙ МIСГОSОFT ДЛЯ СЕТЕВОЙ ПЛАТФОРМЫ. ПО СУЩЕ­СТВУ С# ЯВЛЯЕТСЯ РАЗНОВИДНОСТЬЮ С++, И НЕСМОТРЯ НА РЯД ПРИНЦИПИАЛЬНЫХ ОТЛИЧИЙ, ЯЗЫКИ С# И С++ СОВПАДАЮТ ПРИМЕРНО НА 90%. ВЕРОЯТНО, ПРОЙДЕТ НЕМАЛО ВРЕМЕНИ, ПРЕЖДЕ ЧЕМ ЯЗЫК С# СОСТАВИТ СЕРЬЕЗНУЮ КОНКУРЕНЦИЮ ЯЗЫКУ С++; НО ДАЖЕ ЕСЛИ ЭТО И ПРОИЗОЙДЕТ, ТО ЗНАНИЕ ЯЗЫКА С++ ОКАЖЕТСЯ СУЩЕСТВЕННЫМ ПРЕИМУЩЕСТВОМ. С# — ЭТО НОВЫЙ ЯЗЫК, РАЗРАБОТАННЫЙ МIСГОSОFT ДЛЯ СЕТЕВОЙ ПЛАТФОРМЫ. ПО СУЩЕ­СТВУ С# ЯВЛЯЕТСЯ РАЗНОВИДНОСТЬЮ С++, И НЕСМОТРЯ НА РЯД ПРИНЦИПИАЛЬНЫХ ОТЛИЧИЙ, ЯЗЫКИ С# И С++ СОВПАДАЮТ ПРИМЕРНО НА 90%. ВЕРОЯТНО, ПРОЙДЕТ НЕМАЛО ВРЕМЕНИ, ПРЕЖДЕ ЧЕМ ЯЗЫК С# СОСТАВИТ СЕРЬЕЗНУЮ КОНКУРЕНЦИЮ ЯЗЫКУ С++; НО ДАЖЕ ЕСЛИ ЭТО И ПРОИЗОЙДЕТ, ТО ЗНАНИЕ ЯЗЫКА С++ ОКАЖЕТСЯ СУЩЕСТВЕННЫМ ПРЕИМУЩЕСТВОМ. С++ ЯВЛЯЕТСЯ ЯЗЫКОМ ПРОГРАММИРОВАНИЯ ОБЩЕГО НАЗНАЧЕНИЯ. ЕСТЕСТВЕННАЯ ДЛЯ НЕГО ОБЛАСТЬ ПРИМЕНЕНИЯ - СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ, ПОНИМАЕМОЕ В ШИРОКОМ СМЫСЛЕ ЭТОГО СЛОВА. КРОМЕ ТОГО, С++ УСПЕШНО ИСПОЛЬЗУЕТСЯ ВО МНОГИХ ОБЛАСТЯХ ПРИЛОЖЕНИЯ, ДАЛЕКО ВЫХОДЯЩИХ ЗА УКАЗАННЫЕ РАМКИ. РЕАЛИЗАЦИИ С++ ТЕПЕРЬ ЕСТЬ НА ВСЕХ МАШИНАХ, НАЧИНАЯ С САМЫХ СКРОМНЫХ МИКРОКОМПЬЮТЕРОВ - ДО САМЫХ БОЛЬШИХ СУПЕР-ЭВМ, И ПРАКТИЧЕСКИ ДЛЯ ВСЕХ ОПЕРАЦИОННЫХ СИСТЕМ. 10 1.2 ВОЗНИКНОВЕНИЕ ЯЗЫКА C++ Язык программирования С++ был создан в начале 1980-х годов, его создатель сотрудник фирмы “Bell Laboratories – Бьёрн Страуструп” Он придумал ряд усовершенствований к языку программирования C, для собственных нужд. Т. е. изначально не планировалось создания языка программирования С++. Ранние версии языка С++, известные под именем «Cи с классами», начали появляться с 1980 года. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры фирмы Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами, тем самым зародил предпосылки нового, основанного на синтаксисе С, языка программирования. Синтаксис C++ был основан на синтаксисе C, так как Бьёрн Страуструп стремился сохранить совместимость с языком C. В 1983 году произошло переименование языка из «Си с классами» в «язык программирования С++» В него были добавлены новые возможности: виртуальные функции, перегрузка функций и операторов, ссылки, константы и многое другое. Его первый коммерческий выпуск состоялся в октябре 1985 года. Язык программирования С++ является свободным, то есть никто не обладает на него правами. ЯЗЫК ОБЩЕГО НАЗНАЧЕНИЯ И ЗАДУМАН ДЛЯ ТОГО, ЧТОБЫ НАСТОЯЩИЕ ПРОГРАММИСТЫ ПОЛУЧИЛИ УДОВОЛЬСТВИЕ ОТ САМОГО ПРОЦЕССА ПРОГРАММИРОВАНИЯ. ЗА ИСКЛЮЧЕНИЕМ ВТОРОСТЕПЕННЫХ ДЕТАЛЕЙ ОН СОДЕРЖИТ ЯЗЫК С КАК ПОДМНОЖЕСТВО. ЯЗЫК С РАСШИРЯЕТСЯ ВВЕДЕНИЕМ ГИБКИХ И ЭФФЕКТИВНЫХ СРЕДСТВ, ПРЕДНАЗНАЧЕННЫХ ДЛЯ ПОСТРОЕНИЯ НОВЫХ ТИПОВ. ПРОГРАММИСТ СТРУКТУРИРУЕТ СВОЮ ЗАДАЧУ, ОПРЕДЕЛИВ НОВЫЕ ТИПЫ, КОТОРЫЕ ТОЧНО СООТВЕТСТВУЮТ ПОНЯТИЯМ ПРЕДМЕТНОЙ ОБЛАСТИ ЗАДАЧИ. ТАКОЙ МЕТОД ПОСТРОЕНИЯ ПРОГРАММЫ ОБЫЧНО НАЗЫВАЮТ АБСТРАКЦИЕЙ ДАННЫХ. ИНФОРМАЦИЯ О ТИПАХ СОДЕРЖИТСЯ В НЕКОТОРЫХ ОБЪЕКТАХ ТИПОВ, ОПРЕДЕЛЕННЫХ ПОЛЬЗОВАТЕЛЕМ. С ТАКИМИ ОБЪЕКТАМИ МОЖНО РАБОТАТЬ C++ - 11 ОСНОВНЫЕ ЭТАПЫ РАЗВИТИЯ В 1979-80 годах Бьерн Страуструп разработал расширение к языку Си - "Си с классами". В 1983 язык был переименован в С++. 1.3 В 1985 году была выпущена первая коммерческая версия языка С++, а также первое издание книги "Языка программирования C++", которая представляла первое описание этого языка при отсутствии официального стандарта. В 1989 была выпущена новая версия языка C++ 2.0, которая включала ряд новых возможностей. После этого язык развивался относительно медленно вплоть до 2011 года. Но при этом в 1998 году была предпринята первая попытка по стандартизации языка организацией ISO (International Organiztion for Standartization). Первый стандарт получил название ISO/IEC 14882:1998 или сокращенно С++98. В дальнейшем в 2003 была издана новая версия стандарта C++03. В 2011 году был издан новый стандарт C++11, который содержал множество добавлений и обогащал язык С++ большим числом новых функциональных возможностей. После этого в 2014 году было выпущено небольшое добавление к стандарту, известное также как C++14. И еще один ключевой релиз языка намечен на 2017. 12 Компиляторы и среды разработки Для разработки программ на С++ необходим компилятор - он транслирует исходный код на языке С++ в исполняемый файл, который затем можно запускать. Но в настоящий момент есть очень много различных компиляторов. Они могут отличаться по различным аспектам, в частности, по реализации стандартов. Базовый список компиляторов для С++ можно посмотреть в википедии. Рекомендуется для разработки выбирать те компиляторы, которые развиваются и реализуют все последние стандарты. Так, на протяжении всего руководства преимущественно будет использоваться свободно распространяемый компилятор g++, разработанный в рамках проекта GNU. 1.4 Также для создания программ можно использовать интегрированные среды разработки IDE, такие как Visual Studio, Netbeans, Eclipse, Qt и т.д. 13 1.5 ЭФФЕКТИВНОСТЬ И СТРУКТУРА С++ был развит из языка программирования C и за очень немногими исключениями сохраняет C как подмножество. Базовый язык, C подмножество С++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы С++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах. В С++ используются те же последовательности вызова и возврата из функций, что и в C. В тех случаях, когда даже этот довольно эффективный механизм является слишком дорогим, С++ функция может быть подставлена inline, удовлетворяя, таким образом, соглашению о записи функций без дополнительных расходов времени выполнения. Одним из первоначальных предназначений C было применение его вместо программирования на ассемблере в самых насущных задачах системного программирования. Когда проектировался С++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Различие между C и С++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. C выразителен и снисходителен. С++ еще более выразителен, но чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Заметьте, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти. Особое внимание, уделенное при разработке С++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки C. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. С++ был разработан так, чтобы дать возможность 14 разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, размер каждой из которых намного ниже указанных пределов. Естественно, сложность написания и поддержки программы зависит от сложности разработки, а не просто от числа строк текста программы, так что точные цифры, с помощью которых были выражены предыдущие соображения, не следует воспринимать слишком серьезно. Не каждая часть программы, однако, может быть хорошо структурирована, независима от аппаратного обеспечения, легко читаема и т.п. С++ обладает возможностями, предназначенными для того, чтобы непосредственно и эффективно работать с аппаратными средствами, не заботясь о безопасности или простоте понимания. Он также имеет возможности, позволяющие скрывать такие программы за элегантными и надежными интерфейсами. В этой книге особый акцент делается на методах создания универсальных средств, полезных типов, библиотек и т.д. Эти средства пригодятся как тем программистам, которые пишут небольшие программы, так и тем, которые пишут большие. Кроме того, поскольку все нетривиальные программы состоят из большого числа полунезависимых частей, методы написания таких частей пригодятся и системным, и прикладным программистам. У кого-то может появиться подозрение, что спецификация программы с помощью более подробной системы типов приведет к увеличению исходных текстов программы. В С++ это не так. С++ программа, описывающая типы параметров функций, использующая классы и т.д., обычно немного короче эквивалентной C программы, в которой эти средства не используются. 1.6 Постановка задачи Задача: Разработать программу, которая поможет «убить время». Задание Создать программу, которая будет генерировать случайные числа от 1 до 10, которые с каждым перезапуском программы будут меняться. Задача пользователя - угадать число за отведённые 5 попыток. 15 2 ЭЛЕМЕНТЫ УПРАВЛЕНИЯ В MICROSOFT VISUAL C++ Главным элементом программы в среде Windows является окно. Окно может содержать элементы управления: кнопки, списки, окна редактирования и др. Эти элементы также являются окнами, но обладающими особым свойством: события, происходящие с этими элементами (и самим окном), приводят к приходу сообщений в процедуру окна. Системный класс Предназначение BUTTON Кнопка. COMBOBOX Комбинированное окно (окно со списком и поля выбора). EDIT Окно редактирования текста. LISTBOX Окно со списком SCROLLBAR Полоса прокрутки STATIC Статический элемент (текст) Создание элементов управления окна осуществляется функцией HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, // имя предопределенного класса _In_opt_ LPCTSTR lpWindowName, // текст _In_ DWORD dwStyle, // стиль _In_ int x, // координата x _In_ int y, // координата y _In_ int nWidth, // ширина _In_ int nHeight, // высота _In_opt_ HWND hWndParent, // дескриптор родительского окна _In_opt_ HMENU hMenu, // номер пункта меню _In_opt_ HINSTANCE hInstance, // дескриптор приложения _In_opt_ LPVOID lpParam ); // NULL Указанная функция возвращает дескриптор элемента управления окна, который может быть впоследствии использован для анализа элемента управления, с которым связано обрабатываемое событие. Дескриптор кнопки, например, передается в оконную функцию в качестве параметра lparam. Таблицу стилей элементов управления окна можно устанавливать в параметре dwStyle как и для создания родительского окна. При этом обязательно указывается, что создаваемое окно является дочерним — WS_CHILD. Кнопка Кнопка — маленькое прямоугольное дочернее окно, которое представляет 16 собой кнопку, по которой пользователь может щелкать мышью, чтобы включить или выключить ее. Кнопки управления могут использоваться самостоятельно или в группах, и они могут или быть подписаны или появляться без текста. Кнопки управления обычно изменяют свой вид, когда пользователь щелкает мышью по ним. Кнопка При нажатии кнопки операционная система генерирует сообщение WM_COMMAND с параметром lParam, соответствующим дескриптору кнопки. Обработка нажатия кнопки: LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam) { ... switch (Message) { case WM_COMMAND: if(lparam == (LPARAM)hBtn) { //обработка нажатия кнопки } break; ... } } Поле редактирования Поле редактирования — прямоугольное дочернее окно, внутри которого пользователь может напечатать с клавиатуры текст. Пользователь выбирает орган управления и дает ему фокус клавиатуры, щелкая по нему мышью или перемещая в него, каретку путем нажатия клавиши ТАБУЛЯЦИИ (TAB). Пользователь может вводить текст, когда окно редактирования текста отображает мигающую каретку. Поле редактирования Для считывания информации из поля редактирования используется функция int WINAPI GetWindowText( _In_ HWND hWnd, // дескриптор поля _Out_ LPTSTR lpString, // указатель на текстовую строку _In_ int nMaxCount ); // максимальное количество символов Возвращаемое значение – длина считанной текстовой строки. Для установки текста в поле редактирования используется функция BOOL WINAPI SetWindowText( _In_ HWND hWnd, // дескриптор поля _In_opt_ LPCTSTR lpString ); // указатель на текстовую строку В случае успешного завершения функция возвращает ненулевое значение. Статический текст Статический текст — текстовое поле, окно или прямоугольник, используемый 17 для надписей, не подлежащих редактированию. Для установки статического текста используется та же функция SetWindowText. BUTTON - КНОПКА -ЯВЛЯЕТСЯ ОСНОВНЫМ ЭЛЕМЕНТОМ УПРАВЛЕНИЯ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА,ПРЕДНАЗНАЧЕНА ДЛЯ ТОГО, ЧТОБЫ ПРИНИМАТЬ КОМАНДЫ ПОЛЬЗОВАТЕЛЯ И ВЫПОЛНЯТЬ КОД, КОГДА ЭЛЕМЕНТ ЩЕЛКАЮТ МЫШЬЮ. С ПОМОЩЬЮ СОБЫТИЙ BUTTON_CLICKИ BUTTON_MOUSEDOWN МОЖНО РЕАГИРОВАТЬ НА ЩЕЛЧКИ 0ПОЛЬЗОВАТЕЛЯ. CHECKBOX - КНОПКИ ОТЛОЖЕННОГО ДЕЙСТВИЯ - ИХ НАЖАТИЕ НЕ ДОЛЖНО ЗАПУСКАТЬ КАКОЕ-ЛИБО НЕМЕДЛЕННОЕ ДЕЙСТВИЕ. С ИХ ПОМОЩЬЮ ПОЛЬЗОВАТЕЛЬ ВВОДИТ ПАРАМЕТРЫ, КОТОРЫЕ СКАЖУТСЯ, КОГДА ДЕЙСТВИЕ БУДЕТ ЗАПУЩЕНО ИНЫМИ ЭЛЕМЕНТАМИ УПРАВЛЕНИЯ. ЭЛЕМЕНТ CHECKBOX МОЖЕТ ИМЕТЬ 3 СОСТОЯНИЯ — ПОМЕЧЕННОЕ, НЕПОМЕЧЕННОЕ И СМЕШАННОЕ. ЧАЩЕ ВСЕГО ЭТОТ ЭЛЕМЕНТ ПРИМЕНЯЕТСЯ ДЛЯ ОПРЕДЕЛЕНИЯ ЗНАЧЕНИЙ, КОТОРЫЕ МОГУТ ИМЕТЬ ТОЛЬКО ДВА СОСТОЯНИЯ. RADIOBUTTON - РАДИОКНОПКИ - ПО СВОИМ СВОЙСТВАМ НЕМНОГО ПОХОЖИ НА CHECKBOX. ИХ ГЛАВНОЕ РАЗЛИЧИЕ ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО ГРУППА CHECKBOXПОЗВОЛЯЕТ ВЫБРАТЬ ЛЮБУЮ КОМБИНАЦИЮ ПАРАМЕТРОВ, РАДИОКНОПКИ ЖЕ ДАЮТ ВОЗМОЖНОСТЬ ВЫБРАТЬ ТОЛЬКО ОДИН ПАРАМЕТР. БЛОК ГРУППИРОВКИ - ПОМОГАЕТ ВИЗУАЛЬНО ОБЪЕДИНИТЬ НЕСКОЛЬКО ЭЛЕМЕНТОВ УПРАВЛЕНИЯ В ОДНУ ГРУППУ. ЭТО БЫВАЕТ ОСОБЕННО ПОЛЕЗНО, КОГДА НАДО ПРИДАТЬ ВАШЕМУ ПРИЛОЖЕНИЮ БОЛЕЕ ПОНЯТНЫЙ ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС. GROUPBOX - LABEL– МЕТКА - ИСПОЛЬЗУЕТСЯ ЧТЕНИЯ, Т.Е КОММЕНТАРИИ. ДЛЯ ОТОБРАЖЕНИЯ ТЕКСТА ТОЛЬКО ДЛЯ TEXTBOX – ПОЛЕ ВВОДА -ИСПОЛЬЗУЮТ КАК ДЛЯ ОТОБРАЖЕНИЯ ТЕКСТА, ТАК И ДЛЯ ПРИНЯТИЯ ТЕКСТОВОГО ВВОДА. TEXTBOXБЫВАЕТ ОДНОСТРОЧНЫМ И МНОГОСТРОЧНЫМ, В ЗАВИСИМОСТИ ОТ ЗАДАННОГО ЗНАЧЕНИЯ СВОЙСТВА MULTILINE. ПОЛУЧИТЬ ДОСТУП К ВВЕДЕННОМУ ТЕКСТУ МОЖНО С ПОМОЩЬЮ СВОЙСТВА TEXT. MASKEDTEXTBOX- ПОЛЕ ВВОДА ПО ШАБЛОНУ -ДАЕТ ВОЗМОЖНОСТЬ УКАЗЫВАТЬ ФОРМАТ ДЛЯ ОТОБРАЖЕНИЯ ТЕКСТА ИЛИ ВВОДА ПОЛЬЗОВАТЕЛЯ. СВОЙСТВО MASKОПРЕДЕЛЯЕТ ФОРМАТИРОВАНИЕ ТЕКСТА. RICHTEXTBOX – РАСШИРЕННОЕ ПОЛЕ ВВОДА - ДАЕТ ВОЗМОЖНОСТЬ ПОЛЬЗОВАТЕЛЮ ВВОДИТЬ И ОБРАБАТЫАТЬ БОЛЬШИЕ ОБЪЕМЫ ИНФОРМАЦИИ (БОЛЕЕ 64 КБТ). КРОМЕ ТОГО, RICHTEXTBOX ПОЗВОЛЯЕТ РЕДАКТИРОВАТЬ ЦВЕТ ТЕКСТА, ШРИФТ, ДОБАВЛЯТЬ ИЗОБРАЖЕНИЯ. RICHTEXTBOX ВКЛЮЧАЕТ ВСЕ ВОЗМОЖНОСТИ ТЕКСТОВОГО РЕДАКТОРА MICROSOFT WORD. LISTBOX —ПРОЛИСТЫВАЕМЫЙ СПИСОК - ПОЗВОЛЯЕТ ВЫБИРАТЬ ОДИН ИЛИ НЕСКОЛЬКО ХРАНЯЩИХСЯ В СПИСКЕ ЭЛЕМЕНТОВ. КРОМЕ ТОГО, LISTBOX ИМЕЕТ ВОЗМОЖНОСТЬ 18 ОТОБРАЖАТЬ ДАННЫЕ В НЕСКОЛЬКИХ КОЛОНКАХ. ЭТО ПОЗВОЛЯЕТ ПРЕДСТАВЛЯТЬ ДАННЫЕ В БОЛЬШЕМ ОБЪЕМЕ И НЕ УТОМЛЯТЬ ПОЛЬЗОВАТЕЛЯ СКРОЛИРОВАНИЕМ. COMBOBOX - ВЫПАДАЮЩИЙ СПИСОК - УДОБЕН ТЕМ, ЧТО НЕ ЗАНИМАЕТ МНОГО ПРОСТРАНСТВА НА ФОРМЕ. ПОСТОЯННО НА ФОРМЕ ПРЕДСТАВЛЕНО ТОЛЬКО ОДНО ЗНАЧЕНИЕ ЭТОГО СПИСКА. ПРИ НЕОБХОДИМОСТИ ПОЛЬЗОВАТЕЛЬ МОЖЕТ РАСКРЫТЬ СПИСОК И ВЫБРАТЬ ДРУГОЕ ИНТЕРЕСУЮЩЕЕ ЕГО ЗНАЧЕНИЕ. TRACKBAR - БЕГУНОК - ТИПИЧНЫМ ПРИМЕРОМ ПРИМЕНЕНИЯ ЭЛЕМЕНТА TRACKBAR ЯВЛЯЕТСЯ РЕГУЛЯТОР УРОВНЯ ГРОМКОСТИ В ПАНЕЛИ WINDOWS. TRACKBAR МОЖЕТ ИСПОЛЬЗОВАТЬСЯ В РАЗЛИЧНЫХ РЕЖИМАХ: В ГОРИЗОНТАЛЬНОМ ИЛИ ВЕРТИКАЛЬНОМ ПОЛОЖЕНИИ, С ВКЛЮЧЕННЫМИ ЧЕРТОЧКАМИ ИЛИ БЕЗ. ИНДИКАТОР - ИСПОЛЬЗУЮТ ДЛЯ ОТОБРАЖЕНИЯ СТЕПЕНИ ЗАВЕРШЕННОСТИ ТОЙ ИЛИ ИНОЙ ЗАДАЧИ. PROGRESSBAR - ПОЛЕ ВВОДА ЧИСЛОВЫХ ЗНАЧЕНИЙ - ПОЗВОЛЯЕТ БЕЗ ПОМОЩИ КЛАВИАТУРЫ ВВОДИТЬ ЧИСЛЕННЫЕ ЗНАЧЕНИЯ В ПОЛЕ ВВОДА. ВООБЩЕ, ДАННЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ ИМЕЕТ ТРИ ВОЗМОЖНОСТИ ДЛЯ ВВОДА ДАННЫХ: ЩЕЛЧОК МЫШКОЙ НА УКАЗАТЕЛЕ ВВЕРХ-ВНИЗ, ИСПОЛЬЗОВАНИЕ КНОПОК ВВЕРХ-ВНИЗ НА КЛАВИАТУРЕ ИЛИ ВВОД ДАННЫХ В ПОЛЕ ВВОДА. NUMEICUPDOWN - TREEVIEW – ДЕРЕВО - ПРЕДНАЗНАЧЕН ДЛЯ ОТОБРАЖЕНИЯ ДАННЫХ В ВИДЕ ДЕРЕВА. Т. Е. ЭЛЕМЕНТЫ ПРЕДСТАВЛЕНИЯ НАЧИНАЮТСЯ С КОРНЯ ДЕРЕВА И ОТОБРАЖАЮТСЯ ВГЛУБЬ. ПРИМЕРОМ МОЖЕТ СЛУЖИТЬ ЛЕВАЯ СТОРОНА ПРОГРАММЫ ПРОВОДНИК, КОТОРАЯ ОТОБРАЖАЕТ ДЕРЕВО КАТАЛОГОВ. IMAGELIST - СПИСОК ИЗОБРАЖЕНИЙ - МОЖНО ОТНЕСТИ К СПИСКУ НЕВИДИМЫХ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ. IMAGELIST ЯВЛЯЕТСЯ ВСПОМОГАТЕЛЬНЫМ КОМПОНЕНТОМ, КОТОРЫЙ ХРАНИТ ИЗОБРАЖЕНИЯ, ОТОБРАЖАЕМЫЕ ДРУГИМИ ЭЛЕМЕНТАМИ УПРАВЛЕНИЯ. DATATIMEPICKER ПРЕДСТАВЛЯЕТ СОБОЙ УНИВЕРСАЛЬНЫЙ ВИЗУАЛЬНЫЙ КОМПОНЕНТ ДЛЯ ПРЕДСТАВЛЕНИЯ ИНФОРМАЦИИ О ВРЕМЕНИ. ОН СОДЕРЖИТ КОМПОНЕНТ КАЛЕНДАРЬ И ПОЗВОЛЯЕТ ЛЕГКО ИЗМЕНЯТЬ ВРЕМЯ В ПОЛЕ КОМПОНЕНТА. TIMER – ТАЙМЕР - РАБОТА С ТАЙМЕРОМ В WINDOWS FORMS ПРИЛОЖЕНИЯХ ОСНОВАНА НА МЕХАНИЗМЕ СОБЫТИЙ. ТАЙМЕР УСТАНАВЛИВАЕТСЯ НА ОПРЕДЕЛЕННУЮ ЧАСТОТУ, И ОПЕРАЦИОННАЯ СИСТЕМА БУДЕТ РАССЫЛАТЬ ПРИЛОЖЕНИЮ СОБЫТИЯ ОПОВЕЩЕНИЯ С УКАЗАННОЙ ЧАСТОТОЙ. КОМПОНЕНТ TIMER ПОЗВОЛЯЕТ ЛЕГКО И ПРОСТО РАБОТАТЬ СО ВРЕМЕНЕМ. 19 ОСНОВНЫЕ СВОЙСТВА ЭЛЕМЕНТОВ УПРАВЛЕНИЯ: СВОЙСТВО ОПИСАНИЕ ANCHOR ОПРЕДЕЛЯЕТ, BACKCOLOR УКАЗЫВАЕТ ЦВЕТ ФОНА ЭЛЕМЕНТА УПРАВЛЕНИЯ КАК ЭЛЕМЕНТ УПРАВЛЕНИЯ ПРИВЯЗАН К РОДИТЕЛЬСКОЙ ФОРМЕ ИЛИ КОНТЕЙНЕРНОМУ ЭЛЕМЕНТУ УПРАВЛЕНИЯ BACKGROUNDLMA ПРЕДСТАВЛЯЕТ ФОНОВОЕ ИЗОБРАЖЕНИЕ ЭЛЕМЕНТА GE УПРАВЛЕНИЯ CONTAINSFOCUS УКАЗЫВАЕТ, ИМЕЕТ ЛИ ЭЛЕМЕНТ УПРАВЛЕНИЯ ИЛИ ОДИН ИЗ ЕГО ДОЧЕРНИХ ЭЛЕМЕНТОВ ФОКУС CONTROLS ИЗВЛЕКАЕТ CURSOR ПРЕДСТАВЛЯЕТ DOCK ОПРЕДЕЛЯЕТ, ENABLED УКАЗЫВАЕТ, АКТИВЕН ЛИ ЭЛЕМЕНТ УПРАВЛЕНИЯ. НЕАКТИВНЫЙ ЭЛЕМЕНТ ИМЕЕТ СЕРЫЙ ЦВЕТ И ЕГО НЕЛЬЗЯ КОЛЛЕКЦИЮ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ, КОТОРУЮ СОДЕРЖИТ ДАННЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ. ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ КОНТЕЙНЕРОВ СОБОЙ КУРСОР, ИСПОЛЬЗУЕМЫЙ ПРИ НАВЕДЕНИИ МЫШИ НА ЭЛЕМЕНТ УПРАВЛЕНИЯ КАК ЭЛЕМЕНТ УПРАВЛЕНИЯ СТЫКУЕТСЯ С РОДИТЕЛЬСКОЙ ФОРМОЙ ИЛИ КОНТЕЙНЕРНЫМ ЭЛЕМЕНТОМ УПРАВЛЕНИЯ ВЫБРАТЬ ИЛИ ОТРЕДАКТИРОВАТЬ FONT ЗАДАЕТ FORECOLOR УКАЗЫВАЕТ ШРИФТ, ИСПОЛЬЗУЕМЫЙ УПРАВЛЕНИЯ ДЛЯ ОТОБРАЖЕНИЯ ТЕКСТА УПРАВЛЕНИЯ, ТЕКСТА HASCHILDREN ЭЛЕМЕНТОМ ЦВЕТ ПЕРЕДНЕГО ПЛАНА ЭЛЕМЕНТА ГЛАВНЫМ ОБРАЗОМ ДЛЯ ОТОБРАЖЕНИЯ ЗАДАЕТ ЗНАЧЕНИЕ, УКАЗЫВАЮЩЕЕ, ЕСТЬ ЛИ У ЭЛЕМЕНТА УПРАВЛЕНИЯ ДОЧЕРНИЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ HEIGHTLOCATION УКАЗЫВАЕТ ВЫСОТУ ЭЛЕМЕНТА УПРАВЛЕНИЯ В ПИКСЕЛАХ MAXIMUMSIZE УСТАНАВЛИВАЕТ МАКСИМАЛЬНЫЙ РАЗМЕР ЭЛЕМЕНТА УПРАВЛЕНИЯ MINIMUMSIZE УСТАНАВЛИВАЕТ МИНИМАЛЬНЫЙ РАЗМЕР ЭЛЕМЕНТА УПРАВЛЕНИЯ 20 NAME ПРЕДСТАВЛЯЕТ ИМЯ, ИСПОЛЬЗУЕМОЕ В КОДЕ ДЛЯ ССЫЛКИ НА ЭЛЕМЕНТ УПРАВЛЕНИЯ. ДАННОЕ СВОЙСТВО МОЖЕТ БЫТЬ ИЗМЕНЕНО ТОЛЬКО ВО ВРЕМЯ РАЗРАБОТКИ. ВО ВРЕМЯ ВЫПОЛНЕНИЯ СВОЙСТВО ИЗМЕНИТЬ НЕЛЬЗЯ PARENT ЗАДАЕТ SIZETABORDER УКАЗЫВАЕТ, TAG ПРЕДОСТАВЛЯЕТ TEXT ЗАДАЕТ ТЕКСТ, СВЯЗАННЫЙ С ЭЛЕМЕНТОМ УПРАВЛЕНИЯ. В ЗАВИСИМОСТИ ОТ ТИПА ЭЛЕМЕНТА УПРАВЛЕНИЯ И VISIBLE ЭЛЕМЕНТУ УПРАВЛЕНИЯ РОДИТЕЛЬСКУЮ ФОРМУ ИЛИ КОНТЕЙНЕРНЫЙ ЭЛЕМЕНТ УПРАВЛЕНИЯ. ЕСЛИ ЗАДАТЬ ЭТО СВОЙСТВО, ЭЛЕМЕНТ УПРАВЛЕНИЯ БУДЕТ ДОБАВЛЕН В НОВУЮ КОЛЛЕКЦИЮ РОДИТЕЛЬСКИХ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ В КАКОМ ПОРЯДКЕ БУДУТ ВЫБРАНЫ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ ПРИ ПЕРЕХОДЕ ОТ ОДНОГО ЭЛЕМЕНТА УПРАВЛЕНИЯ К ДРУГОМУ С ПОМОЩЬЮ КЛАВИШИ TAB ПРОГРАММИСТУ СОХРАНЯТЬ ЗНАЧЕНИЕ ИЛИ ОБЪЕКТ, ЭЛЕМЕНТОМ УПРАВЛЕНИЯ ВОЗМОЖНОСТЬ СВЯЗАННЫЙ С НАСТРОЕК ЕГО СВОЙСТВ ОТОБРАЖАТЬСЯ, ЛИБО НЕТ ТЕКСТ УКАЗЫВАЕТ, ЭЛЕМЕНТ ЯВЛЯЕТСЯ ЛИ МОЖЕТ ЛИБО УПРАВЛЕНИЯ ВИДИМЫМ WIDTHLOCATION ЗАДАЕТ ШИРИНУ ЭЛЕМЕНТА УПРАВЛЕНИЯ В ПИКСЕЛАХ 21 2.1 ОПИСАНИЕ ПРОГРАММЫ 2.2 СУТЬ ИГРЫ ВВОД ИСКЛЮЧИТЕЛЬНО ЦИФРАМИ ОТ 1 ДО 10, ДАЁТСЯ 5 ПОПЫТОК УГАДАТЬ ЧИСЛО, В СЛУЧАЕ ЕСЛИ ВЫ УГАДЫВАЕТЕ ЧИСЛО, ПРОГРАММА ВАС УВЕДОМИТ ОБ ЭТОМ И ВЫ СМОЖЕТЕ СЫГРАТЬ ЕЩЁ. НО ЕСЛИ ВЫ НЕ УГАДЫВАЕТЕ 5 РАЗ ПОДРЯД, ВАМ СООБЩАЮТ О ВАШЕЙ НЕУДАЧЕ И НАЗЫВАЮТ ЧИСЛО, ЗАГАДАННОЕ КОМПЬЮТЕРОМ. 2.3 БЛОК-СХЕМА ПРОГРАММЫ РИСУНОК 2.3.1 – БЛОК СХЕМА ПРОГРАММЫ 22 2.4 ДЕМОНСТРАЦИЯ РАБОТЫ ПРОГРАММЫ ДЛЯ НАЧАЛА РАБОТЫ С ПРОГРАММОЙ НУЖНО ЗАПУСТИТЬ ФАЙЛ ЧИСЛА.EXE. ПОЯВИТСЯ ОКНО ПРОГРАММЫ РИСУНОК 2.4.1 – НАЧАЛО ИГРЫ ВО ВРЕМЯ ИГРЫ (РИСУНОК 2.4.1) ВЫ ДОЛЖНЫ БУДЕТЕ УГАДАТЬ ЧИСЛО, ЗАГАДАННОЕ КОМПЬЮТЕРОМ 23 РИСУНОК 2.4.2 – НЕПРАВИЛЬНЫЙ ОТВЕТ ПРИ ОШИБКЕ ПРОГРАММА СООБЩАЕТ ВАМ, СКОЛЬКО ПОПЫТОК У ВАС ЕЩЁ ОСТАЛОСЬ (РИСУНОК 2.4.2) 24 РИСУНОК 2.4.3 – ВЫИГРЫШ ПРИ ПРАВИЛЬНОМ (РИСУНОК 2.4.3) ОТВЕТЕ ПРОГРАММА ВАС УВЕДОМИТ И ВЫ МОЖЕТЕ СЫГРАТЬ ЕЩЁ 25 РИСУНОК 2.4.4 – ПРОИГРЫШ КОГДА ВЫ ЗА 5 ПОПЫТОК НЕ УГАДАЛИ ЦИФРУ, ЗАГАДАННУЮ КОМПЬЮТЕРОМ ПРОГРАММА СООБЩАЕТ ВАМ, КАКУЮ ЖЕ ЦИФРУ ЗАГАДАЛ КОМПЬЮТЕР (РИСУНОК 2.4.4) 26 ЗАКЛЮЧЕНИЕ СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 1.Франка П. С++: учебный курс, Питер,2001-528 с. 2. Герберт Шилдт. Самоучитель С++, 3-е издание. Санкт-Петербург 1998-688 с. 3. И.Г. Семакин: Основы программирования: Учебник-Мастерство, 2002 г-432 с. 4. Бондарев В.М. Программирование на С++. 2-е изд. -Харьков: “Компания СМИТ”,2005.-284 с. Используемые сайты: 1. wikipedia.org 2. metanit.com 3. c-cpp.ru 27 ЛИСТИНГ ПРОГРАММЫ #INCLUDE<IOSTREAM> #INCLUDE<CTIME> USING NAMESPACE STD; INT MAIN() { COUT<<"KOMPUTER ZADUMAL CHISLO OT EGO ZA 5 POPITOK."; 1 DO 10."<<ENDL<< "VI DOLZHNI UGADAT COUT<<ENDL; SRAND(TIME(0)); INT A=1+RAND()%10; INT B=1+RAND()%10; FOR(INT I=1;I<=5;I++) { COUT<<"VVEDITE CHISLO I NAZHMITE <ENTER>"<<ENDL; CIN>>A; IF(A>10 || A<1) { COUT<<ENDL; COUT<<"OSHIBKA"; 28 COUT<<ENDL; I=I-1; } ELSE { IF(B==A) { COUT<<"VI UGADALI!"; RETURN 10; } ELSE { COUT<<"VI NE UGADALI!"<<ENDL; IF(I==1 || I==2 || I==3) { COUT<<"OSTALOS "<<5-I<<" POPITKI"<<ENDL; } IF(I==4) { COUT<<"OSTALOS ODNA POPITKA!!!"; } ELSE IF(I==5) { COUT<<"K SOZHALENIYU VI NE UGADALI. KOMPUTER ZADUMAL CHISLO "<<B<<ENDL; 29 } } } } COUT<<ENDL; } 30