Книги в продаже (аннотация + содержание + отрывок)

Т. Павловская, Ю. Щупак
C/C++. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ. ПРАКТИКУМ.
Цена: 84 р.

Источник: Издательский дом 'ПИТЕР'
Разделы: Adobe Photoshop (графический растровый редактор)
Подробнее: Информация от издателя (открывается в новом окне)
Заказ: Оформление покупки (открывается в новом окне)
      Язык С++ является в настоящее время одним из самых распространенных языков программирования, но одновременно и одним из самых трудных для изучения. Книга «С++ :учебный курс» поможет быстро, эффективно и с наименьшими затратами освоить все основные приемы создания приложений на С++, Для изучения всех возможностей языка требуются объемные руководства и справочники, но эта книга даст вам «стартовый толчок», поможет понять структуру языка, принципы объектно-ориентированного программирования, методику проектирования и создания приложений. Учебный материал, с
      одержащийся в 26-ти уроках, основан на практических примерах и сопровождается исходным кодом программ. Для его освоения не требуется никакой предварительной подготовки. Книга может быть использована в качестве учебного пособия для студентов, изучающих язык С++.
     
     
     
     
      СОДЕРЖАНИЕ
     
     
      Часть 0. Подготовка к работе
      Урок 0. Установка программного обеспечения
      Составление программ на С++
      Создание и выполнение программы
      Зачем нужно компоновать программу вместе с другими?
      Почему С++?
      Turbo C++ и Visual C++
      Windows 3.1 или Windows 95?
      Нужен ли вам компакт-диск?
      Действительно ли нужно писать программы?
      Зачем книге специальное программное обеспечение?
      Файлы и каталоги
      Каталоги
      Инсталляция и использование программного обеспечения
      Инсталляция компилятора
      Инсталляция программного обеспечения книги
      Запуск программ
      Файлы проекта
      Различные компиляторы
      Borland Turbo C++ 4.5
      Borland C++ 4
      Borland C++ 5
      Microsoft Visual C++ 1.5
      Microsoft Visual C++ 4
      Microsoft Visual C++ 5
      Звуковые файлы
      Что нового мы узнали?
      Часть I. Ваши первые программы
      Урок 1. Разработка и модификация программ
      Первая программа
      Отправка сообщений
      Инструкции
      Класс athlete
      Аргументы
      Оформление программ на С++
      Понятие последовательности
      Последовательные шаги
      Инструкции Сэлу
      Самостоятельная практика
      Что нового мы узнали?
      Урок 2. Вывод информации на экран
      Объекты типа Clock
      Сообщения объектам типа Clock
      Использование объектов типа Clock
      С чего начинается создание программы?
      Добавление инструкций к комментариям
      Объекты типа Box
      Первый этап великого похода
      Объекты типа Robot
      Возможности робота
      Перемещение робота
      Разметка трассы
      Повороты
      Диалог с роботом
      Лабиринт
      Что нового мы узнали?
      Урок 3. Решение проблем
      Локализация проблемы
      Пишите все что угодно
      Дробление проблемы
      Пользуйтесь готовыми решениями
      Сообщения об ошибках
      Правила и соглашения
      Идентификаторы
      Ключевые слова
      Типы и классы
      Объявления
      Сообщения
      Комментарии
      Самостоятельная практика
      Поиск ошибки
      Написание программ
      Поиск ошибок
      Правильные идентификаторы
      Рисование
      Поиск идентификаторов
      Что нового мы узнали?
      Часть II. Функции и выражения
      Урок 4. Функции
      Понятие функции
      Создание функции
      Аргументы функций
      Аргументы и параметры
      Значения и ссылки
      Обучение объекта
      Заголовочные файлы
      Директивы
      Самостоятельная практика
      Область видимости
      Примеры области видимости
      Что нового мы узнали?
      Урок 5. Числа
      Числа и числовые переменные
      Общие правила для числовых переменных
      Арифметические операторы в простых выражениях
      Инкремент и декремент
      Самостоятельная практика
      Операторы отношения
      Ввод значений
      Функция ввода ask()
      Имитация входного потока объектом Cin
      Вывод значений
      Имитация выходного потока объектом Cout
      Что нового мы узнали?
      Урок 6. Решение проблем с помощью функций
      Возвращаемые значения функций
      Типы возвращаемых значений
      Встраиваемые функции
      Второй этап великого похода
      Использование функций
      Правила и соглашения
      Исключение лишних заголовочных файлов
      Целые числа и числа с плавающей точкой
      Выражения
      Самостоятельная практика
      Что нового мы узнали?
      Часть III. Циклы
      Урок 7. Повторяющиеся вычисления
      Простые циклы
      Цикл while
      Самостоятельная практика
      Цикл do...while
      Цикл for
      Условия в циклах
      Проверка вводимых значений
      Контроль времени
      Функция yesno()
      Вложенные циклы
      Циклы и робот Tracer
      Исследование комнаты
      Самостоятельная практика
      Что нового мы узнали?
      Урок 8. Разработка базовых циклов
      Повторение с изменением
      Пример рисования квадратов разного размера
      Преимущества циклов
      Организация циклов
      Самостоятельная практика
      Первый этап создания циклов
      Общие положения
      Пример разработки цикла
      Правила и соглашения
      Составные инструкции
      Вложенные инструкции
      Область видимости
      Простые условия
      Самостоятельная практика
      Что нового мы узнали?
      Урок 9. Разработка базовых приложений
      Создание торгового терминала
      Программное обеспечение для нескольких транзакций
      Полный листинг программы
      Описание процесса разработки приложений
      Пользовательский интерфейс
      Исправления и модификации
      Самостоятельная практика
      Что нового мы узнали?
      Часть IV. Условия
      Урок 10. Условные инструкции
      Инструкция if
      Первый пример лабиринта
      Самостоятельная практика
      Первый пример магазина
      Инструкция if...else
      Самостоятельная практика
      Второй пример лабиринта
      Самостоятельная практика
      Третий пример лабиринта
      Второй пример магазина
      Задание условий
      Условные выражения
      Составные выражения
      Логические операторы
      Вложенные условия
      Выход из циклов
      Инструкция break
      Инструкция continue
      Второй этап создания циклов
      Выбор варианта
      Пример телефонной станции
      Что нового мы узнали?
      Урок 11. Рекурсивные функции
      Рекурсивные алгоритмы
      Создание рекурсивных функций
      Совершенствование алгоритма
      Третий этап великого похода
      Что нового мы узнали?
      Урок 12. Создание небольшого проекта
      Организация пользовательского интерфейса
      Общее описание движений робота
      Выбор вспомогательных функций
      Контроль ошибок
      Завершение проекта
      Самостоятельная практика
      Что нового мы узнали?
      Часть V. Числа
      Урок 13. Операции с числовыми выражениями
      Обработка чисел
      Идентификация числовых типов данных
      Выражения
      Возвращаемые значения функций
      Библиотека math.h
      Что нового мы узнали?
      Урок 14. Работа с графикой
      Графика
      Размещение точек на экране
      Изображение экранных объектов
      Самостоятельная практика
      Перемещение экранных объектов
      Самостоятельная практика
      Смена системы координат
      Смена начала отсчета
      Смена масштаба
      Смена ориентации
      Самостоятельная практика
      Отказ от новых функций
      Самостоятельная практика
      Полярные координаты
      Что нового мы узнали?
      Урок 15. Создание анимаций
      Построение графиков математических функций
      Перемещение точки
      Функции в качестве аргументов
      Самостоятельная практика
      Создание анимации
      Иллюзия движения
      Самостоятельная практика
      Имитация пушечного ядра
      Вычисление координат ядра
      Моделирующий цикл
      Самостоятельная практика
      Одновременная обработка нескольких экранных объектов
      Построение гимнаста
      Класс Stage
      Проект планетной системы
      Объекты для проекта планетной системы
      Моделирующий цикл
      Самостоятельная практика
      Что нового мы узнали?
      Часть VI. Классы
      Урок 16. Создание и модификация классов
      Создание классов
      Составляющие класса объектов
      Объявление класса объектов
      Открытые, закрытые и защищенные члены класса
      Конструкторы
      Использование объектов
      Создание нового класса объектов
      Создание вагона с помощью конструктора
      Создание вагона с помощью класса Stage
      Доступ к членам класса
      Открытый доступ к координатам
      Конструктор с параметрами
      Использование функции-члена
      Самостоятельная практика
      Что нового мы узнали?
      Урок 17. Производные классы
      Получение классов из существующих классов
      Создание производных классов
      Классы и объекты в реальном мире
      Специализация экранных объектов
      Наследование характеристик базовых классов
      Несколько производных классов
      Подмена унаследованной функции
      Самостоятельная практика
      Что нового мы узнали?
      Урок 18. Усложнение приложений
      Совершенствование торгового терминала
      Выбор программного и пользовательского интерфейса
      Интерфейс конечного пользователя
      Объявление и определение класса
      Программный код проекта
      Проект имитации нескольких спутников
      Разработка класса satellite
      Реализация класса
      Новая программа проекта планетной системы
      Что нового мы узнали?
      Часть VII. Массивы и структуры
      Урок 19. Массивы
      Работа с массивами
      Варианты использования массивов
      Число элементов массива
      Самостоятельная практика
      Числовые массивы
      Использование массивов
      Самостоятельная практика
      Самостоятельная практика
      Пример обработки числового массива
      Поиск максимального элемента массива
      Сортировка массивов
      Обмен значениями
      Рекурсивная сортировка
      Что нового мы узнали?
      Урок 20. Символьные массивы
      Текст в программах на С++
      Тип char
      Самостоятельная практика
      Использование символьных массивов
      Строковые функции
      Преобразование символов в числа, и наоборот
      Самостоятельная практика
      Структуры
      Структуры и массивы
      Поиск в символьном массиве
      Самостоятельная практика
      Что нового мы узнали?
      Урок 21. Разработка приложений
      Проект торгового терминала
      Реализация новых возможностей
      Проект спутниковой системы
      Расширение возможностей модели с помощью массивов
      Самостоятельная практика
      Что нового мы узнали?
      Часть VIII. Ввод и вывод данных
      Урок 22. Заголовочный файл franca.h
      Реальное программирование на С++
      Проекты
      Потоки ввода/вывода С++
      Заголовочный файл iostream.h
      Потоковый вывод
      Потоковый ввод
      Ввод/вывод массивов
      Форматирование
      Точность значений с плавающей точкой
      Выравнивание полей
      Манипуляторы ввода/вывода
      Выравнивание значений
      Коды символов
      Функции ask(), askwords() и yesno()
      Самостоятельная практика
      Что нового мы узнали?
      Урок 23. Файлы
      Использование файлов
      Обработка файлов
      Директивы препроцессора
      Самостоятельная практика
      Класс textfile для обработки файлов
      Объявление класса
      Данные-члены
      Функции-члены
      Конструкторы
      Деструктор
      Ввод с клавиатуры и вывод на экран
      Считывание и запись
      Поиск записи в файле
      Самостоятельная практика
      Базовые операции с файлами
      Обновление данных в файле
      Соответствие данных в файлах
      Класс payfile
      Самостоятельная практика
      Что нового мы узнали?
      Урок 24. Создание реального торгового терминала
      Возвращение к проекту торгового терминала
      Реализация новых возможностей
      Поиск записей
      Что нового мы узнали?
      Часть IX. Проблемы и решения
      Урок 25. Создание объектно-ориентированного приложения
      Объектно-ориентированный менталитет
      Переделка, доработка и многократное использование программ
      Проект электронной игрушки
      Предполагаемая реализация
      Объектно-ориентированная реализация
      Что нового мы узнали?
      Урок 26. Дополнительные возможности
      Дополнительные возможности С++
      Указатели
      Комбинированные операторы
      Перегрузка операторов
      Шаблоны
      Дружественные функции и классы
      Множественное наследование
      Выделение памяти
      Логические операторы
      Возможности программирования
      Инженерные принципы в программировании
      Что нового мы узнали?
      Алфавитный указатель
     
     
     
     
      ОТРЫВОК
     
     
     
      Урок 21. Разработка приложений
      В русле дальнейшего развития навыков создания приложений мы модифицируем два созданных ранее приложения — проект торгового терминала (созданного впервые на уроке 9) и проект спутниковой системы (созданного на уроке 18). Изменения будут следующими:
      В проекте торгового терминала появятся массивы и обработка текста.
      В проекте спутниковой системы массивы помогут нам обрабатывать группу спутников.
      Проект торгового терминала
      Тот, кто покупал продукты в большом магазине, мог заметить, что кассир обычно не знает их цену. Он либо видит цену на наклеенном на упаковке ярлыке, либо, как это делается в современных супермаркетах, считывает штрих-код с помощью специального устройства. Как в последнем случае работает торговый терминал?
      В памяти компьютера содержится список всех предназначенных для продажи товаров. В этот список входит код, стоимость и иногда краткое описание товара. По введенному кассиром коду компьютер находит в этом списке нужный товар. Не напоминает ли это вам операцию поиска в массиве структур? Конечно, это она!
      В нашей новой версии торгового терминала каждая покупка будет начинаться с ввода с клавиатуры (заменяющей нам считывающее устройство) штрих-кода товара. Затем мы найдем соответствующую ему позицию и выведем на экран цену и краткое описание товара.
      При этом торговый терминал конечного пользователя должен, по возможности, остаться прежним.
      Реализация новых возможностей
      В памяти компьютера должна храниться следующая информация о каждом продукте:
      Код
      Описание
      Цена
      Поскольку товаров много, можно объявить массив структур:
      struct product
      {
      int code;
      char description[20];
      float price;
      };
      product list[20];
      Используйте этот массив для хранения информации по всем интересующим вас пунктам. Поскольку оперативная память компьютера не может сохранять информацию при выключенном питании, вам придется заполнять массив при каждом запуске программы. Этот массив можно представить себе в виде каталога (списка) атрибутов товара, который проверяется при каждой покупке.
      Для поиска в каталоге информации о товарах можно объявить класс catalog. С помощью этого класса мы будем находить информацию по коду товара. При наличии такого каталога оставшаяся часть операций будет не слишком отличаться от работы старого терминала. Но действительно ли нам нужно создавать новый класс? Ведь многое можно унаследовать из старого!
      Класс catalog
      Класс catalog должен выполнять все операции, необходимые для работы с каталогом товаров. Хотя эта частная реализация решения всего одной задачи, с которой нам пришлось столкнуться, позже вы поймете, насколько полезен этот фрагмент кода. Вот возможное объявление:
      struct product
      {
      int code;
      char description[20];
      float price;
      };
      class catalog
      {
      protected:
      product list[20];
      int listsize;
      public:
      catalog();
      virtual product find(int part_number);
      }
      Данными-членами этого класса являются массив структур и целое значение, обозначающее число элементов массива (число товаров). Каждый элемент массива — это структура, в которой хранятся атрибуты каждого товара.
      Что же касается функций-членов, то это конструктор и функция find(). Конструктор будет автоматически запрашивать ввод элементов массива, чтобы вы не могли использовать пустой массив. Функция find() будет выполнять поиск заданного товара по его коду.
      ПРИМЕЧАНИЕ
      В производных классах функцию find(), возможно, потребуется заменять другими одноименными функциями. Поэтому она должна быть объявлена виртуальной функцией.
      Программный код конструктора:
      catalog::catalog()
      {
      listsize=0;
      for(listsize=0; yesno("Another item?")&&(listsize<20); listsize++);
      {
      list[listsize].code=ask("Enter product code:");
      strcpy(list[listsize].description, "Product decription");
      askwords(list[listsize].description, 20, "Description:");
      list[listsize].price=ask("Enter the price:");
      }
      }
      Функция find() очень похожа на ту, с которой мы имели дело при поиске в массиве:
      product catalog::find(int part_number)
      {
      for(int item=0; item      {
      if(part_number==list[item.code) return list[item];
      }
      product nonexistent;
      nonexistent.code=0;
      return nonexistent;
      }
      Если запрошенный код не совпадет ни с одним из представленных в списке, будет возвращена структура с нулевым кодом, и это будет свидетельствовать о том, что данный пункт в списке не найден. С другой стороны, если совпадающий код будет найден в позиции item, то возвращаемая структура будет представлять собой элемент массива с индексом item.
      ПРИМЕЧАНИЕ
      Код класса catalog находится в заголовочном файле c7catalo.h на прилагаемой дискете.
      Новый класс saleterm
      Новый класс saleterm является производным от старого класса terminal. Унаследовав все необходимые атрибуты старого класса, он просто обеспечивает его дополнительными возможностями. Класс может быть объявлен следующим образом:
      class saleterm:public terminal
      {
      protected:
      catalog parts;
      product sale;
      Box Part_Number, Part_Description;
      void items();
      public:
      saleterm();
      };
      Создавая производный от класса terminal класс, вы наследуете все, что он содержал. Необходимо только объявить новые элементы. Новый терминал состоит из каталога, структуры для описания одного продукта (того, который в данный момент продается), пары новых информационных рамок для отображения кода продукта (Part_Number) и описания продукта (Part_Description).
      Функция items() тоже наследуется. Однако, поскольку теперь вместо цены терминал запрашивает код, нам нельзя использовать ту же самую функцию. Необходимо создать новую, предназначенную для обработки кодов.
      Функцию-член operate() можно оставить, унаследовав ее от класса terminal, поскольку она начинает действовать уже после того, как получено значение цены.
      Конструкторы
      Интересный случай возникает, когда с помощью конструкторов создается объект производного класса. (Внимание — это для вас ново!) Сначала вызывается конструктор базового класса, а затем производного. При этом, когда вызывается объект производного класса, соответствующий объект базового уже существует. Этот новый конструктор лишь добавляет объекту атрибуты, характерные для производного класса.
      В данном примере конструктор нужен только для того, чтобы разместить две дополнительные информационные рамки и присвоить им метки.
      Ниже представлен программный код конструктора:
      saleterm::saleterm()
      {
      Part_Number.place(450, 300);
      Part_Description.place(450, 340);
      Part_Number.label("Part_Number:");
      Part_Description.label("Description:");
      }
      Код новой функции items():
      void saleterm::items()
      {
      int somecode;
      for(;;)
      {
      do
      {
      somecode=ask("Enter part number:");
      sale=part.find(somecode);
      if(sale.code==0) yesno("Wrong part number, please check");
      }
      while (sale.code==0);
      Part_Number.say(sale.code);
      Part_Description.say(sale.description);
      saletotal=saletotal+sale.price;
      Price.say(sale.price);
      Cur_Total.say(saletotal);
      if(!yesno("Another item?");
      }
      saletotal=saletotal*(1+tax);
      Saletotal.say(saletotal);
      }
      Полный код этого проекта, который можно найти в файлах c7term.h и c7term.cpp на прилагаемой дискете, представлен ниже:
      #ifndef C7TERM_H //c7term.h
      #define C7TERM_H
      #include "franca.h"
      #include "c6term.h"
      #include "c7catalo.h"
      #include
      class saleterm:public terminal
      {
      protected:
      catalog parts;
      product sale;
      Box Part_Number, Part_Discription;
      void items();
      public:
      saleterm();
      };
      saleterm::saleterm()
      {
      Part_Number.place(450, 300);
      Part_Description.place(450, 340);
      Part_Number.label("Part_Number:");
      Part_Description.label("Description:");
      }
      void saleterm::items()
      {
      int somecode;
      for(;;)
      {
      do
      {
      somecode=ask("Enter part number:");
      sale=part.find(somecode);
      if(sale.code==0) yesno("Wrong part number, please check");
      }
      while (sale.code==0);
      Part_Number.say(sale.code);
      Part_Description.say(sale.description);
      saletotal=saletotal+sale.price;
      Price.say(sale.price);
      Cur_Total.say(saletotal);
      if(!yesno("Another item?");
      }
      saletotal=saletotal*(1+tax);
      Saletotal.say(saletotal);
      }
      #endif
      // Конец кода заголовочного файла
      #include "franca.h" // c7term.cpp
      #include "c7term.h"
      #include
      void mainprog()
      {
      saleterm cashregister;
      cashregister.operate();
      }
      ПРИМЕЧАНИЕ
      Можете ли вы так сохранить информацию о продукте, чтобы не вводить ее заново при каждом запуске программы? Иначе программное обеспечение для вашего терминала вряд ли удастся продать, не так ли? Как мы узнаем на следующем уроке, эту информацию можно сохранить на дисковом файле.
      Проект спутниковой системы
      Массивы позволяют легко обрабатывать большие количества объектов. Так, если вы решите имитировать вращение электронов вокруг неподвижного ядра методами предложенными на уроке 18, то есть без использования массивов, то получите очень сложную программу с множеством циклов. Каждый электрон в такой программе будет обрабатываться индивидуально.
      Поскольку массивы позволяют обращаться сразу ко всем объектам по одному имени (например, electron[n]), для их обработки достаточно написать один цикл. Такая программа не только экономит ресурсы, но не меняется при изменении числа элементов массива.
      В качестве примера имитации атома с двумя электронами на первой орбите и восемью на второй мы используем класс satellite и массив electron, состоящий из 10 объектов типа satellite. Как и раньше, само ядро тоже можно считать спутником (объектом типа satellite).
      Расширение возможностей модели с помощью массивов
      Чтобы модель внутреннего космоса была интересней, можно заставить ядро тоже вращаться по орбите. В приведенном ниже примере (программа c7atom.cpp) в качестве центра ядра используется спутник ether.
      Объявления и инициализация приведены ниже:
      const float pi2=2*3.14159;
      Box clock("Time:");
      Clock timer, sidereal;
      satellite electron[10];
      satellite nucleus, ether;
      nucleus.resize(40);
      ether.place(320, 200);
      nucleus.center(ether);
      nucleus.dist(80);
      nucleus.speed(pi2/800.);
      nucleus.move();
      Инициализация электронов
      Нужно инициализировать также каждый электрон.
      Инициализация электронов на первой орбите:
      for (int i=0; i<2; i++)
      {
      electron[i].center(nucleus);
      electron[i].dist(80);
      electron[i].speed(pi2/300.);
      electron[i].resize(12);
      electron[i].color(5, 5);
      electron[i].angle(i*pi2/2.+pi2/4.);
      electron[i].move();
      }
      Инициализация электронов на второй орбите:
      for (int i=0; i<10; i++)
      {
      electron[i].center(nucleus);
      electron[i].dist(120);
      electron[i].speed(pi2/600.);
      electron[i].resize(12);
      electron[i].color(5, 5);
      electron[i].angle(i*pi2/8.);
      electron[i].move();
      }
      После того как все объекты будут инициализированы, начинается собственно моделирование:
      nucleus.show();
      for(; sidereal.time()<20.;)
      {
      nucleus.erase();
      nucleus.move();
      nucleus.show();
      for(int i=0; i<10; i++);
      {
      electron[i].erase();
      electron[i].center(nucleus);
      electron[i].move();
      electron[i].show();
      }
      clock.say(sidereal.time()*10);
      timer.watch(.033);
      timer.reset();
      }
      В данном случае ядро было представлено в виде отдельного спутника, но представлять его именно так не обязательно. Как уже говорилось, ядро можно считать одним из спутников, то есть нужно добавить в массив еще один электрон electron[10].
      Самостоятельная практика
      В представленной ниже программе c7pool.cpp реализован класс pool, который имитирует шар, катающийся по бильярдному столу и сталкивающийся с его стенками.
      · Получите производный класс, который должен имитировать бильярдный стол с шестью лузами (в виде черных кружков). Когда шар попадает в лузу (достигает черного кружка), вы должны получать очко. Чтобы контролировать попадание шара в лузу, проверяйте координаты (x, y) шара. Если шар будет находиться от центра лузы на расстоянии меньшим, чем ее радиус, шар будет считаться попавшим в лузу. В этой программе радиус лузы 15, а радиус шара 10 пикселей.
      · Ниже приведен код программы c7pool.cpp:
      #include "franca.h"
      #include "math.h"
      #include
      const int ballradius=10. poolradius=15;
      const int poolx=400, pooly=200;
      class pool:public Stage
      {
      protected:
      Square table;
      Circle ball;
      float xb, yb; // Координаты шара
      float incx, incy; // Смещение
      float speed;
      public:
      pool();
      void shoot(float angle);
      };
      pool::pool()
      {
      float angle;
      speed=1.5;
      table.resize(poolx, pooly);
      table.place(320, 240);
      table.color(2);
      ball.color(0, 0);
      ball.resize(ballradius*2);
      table.show();
      insert(table);
      insert(ball);
      xb=rand()%(poolx-ballradius)+320-poolx/2.+ballradius;
      yb=rand()%(pooly-ballradius)+240-pooly/2.+ballradius;
      ball.place(xb,yb);
      ball.show();
      }
      void pool::shoot(float angle)
      {
      angle=3.14159*angle/180.;
      incx=cos(angle)*speed;
      incy=sin(angle)*speed;
      Clock cuckoo, timer;
      for(;cuckoo, time()<30;)
      {
      if((xb<=(320- poolx/2.+ballradius))||
      (xb>=(320+poolx/2.-ballradius))) incx=-incx;
      if((yb<=(240- pooly/2.+ballradius))||
      (yb>=(240.+pooly/2.-ballradius))) incy=-incy;
      xb=xb+incx;
      yb=yb+incy;
      ball.place(xb, yb);
      table.show();
      ball.show();
      timer.watch(.033);
      timer.reset();
      }
      }
      void mainprog()
      {
      pool billiard;
      float angle;
      for(;yesno("Take a shot?");)
      {
      angle=ask("input the angle:");
      billiard.shoot(angle);
      }
      }
     

C/C++. Структурное программирование. Практикум. / Т. Павловская, Ю. Щупак - СПб: Питер, 2003. - 240 с.

Экономика и управление | Право/a> | Бухгалтерский учет и налоги |