«Языки программирования. Основы объектно-ориентированного программирования»


Конспект урока на тему «Языки программирования.Основы объектно-ориентированного программирования»
Цель урока:
рассмотреть этапы развития языков программирования
ввести основные понятия ООП
познакомить с интегрированной средой программирования VB
План урока:
Теоретическая основа урока
Языки программирования. Компиляторы и интерпретаторы. Каждый процессор имеет свою систему команд. Компьютер способен понять только последовательность команд, понятных процессору, - машинный код. Первоначально программы для компьютеров писались с использованием машинного кода. Программирование в машинном коде – трудоемкий процесс, в ходе которого трудно избежать ошибок. Упростить этот процесс можно, если автоматизировать работу, поручив часть ее самому компьютеру. Поэтому сегодня для записи программ используются языки программирования. Язык программирования - это формальный язык для записи алгоритмов в виде, допускающем их автоматическую подготовку к выполнению на компьютере. Для преобразования программы в машинный код служит специальное программное средство – транслятор.Трансляторы делятся на две группы  по их работе – компиляторы интерпретаторы. Интерпретатор преобразует команды исходного текста программы в машинные команды и немедленно их выполняет. Можно сказать, что программа выполняется по стокам исходного текста. При этом происходит проверка правильности написания строк программы с точки зрения правил языка. При обнаружении ошибок специальный отладчик сообщает об ошибке, исполнение программы останавливается. Такой режим очень удобен для программиста, потому что результаты труда сразу же видны в деле. Однако интерпретация программ – довольно медленный процесс. Он заметно усложняется, если программа состоит из нескольких модулей. Кроме того, для запуска созданной программы на конкретном компьютере необходимо, чтобы на нем была установлена программа-интерпретатор.
Компилятор просматривает текст программы (иногда несколько раз – такие компиляторы называют многопроходными) и создает последовательность данных, которая называется объектным кодом. Объектный код еще не является полным аналогом программы. Необходимо дополнительный этап, который называется редактированием связей (или компоновкой). На этом этапе происходит объединение объектного кода программы и объектного кода подпрограмм, взятых из внешних библиотек. Результатом этого этапа является так называемый исполнимый код – он представляет собой набор машинных команд, реализующих алгоритм, записанный в программе. Исполнимый код может запускаться  автономно на любом компьютере подходящей платформы. Код, прошедший компиляцию, работает в десятки раз быстрее, чем его эквивалентная программа в режиме интерпретации Операцию компоновки кода выполняет отдельная программа, которая называется редактором связей или компоновщиком. В современных системах программирования компоновщик часто объединяют с компилятором, так что для программиста оба этапа сливаются в один. Двухступенчатый процесс облегчает создание больших и сложных программ.
И компиляторы, и интерпретаторы имеют свои достоинства. Граница между ними постепенно стираются. Некоторые системы разработки программ содержат в своем составе, как компилятор, так и интерпретатор для поддерживаемого языка программирования. В некоторых случаях используются смешанные технологии.
Уровни языков
Язык программирования содержит три основных компонента: алфавит, синтаксис и семантику. Эти компоненты определяют правила записи программ. Алфавит языка – это набор символов, которые можно применять в инструкциях языка программирования. Другие символы допустимы только в особых случаях, например в строковых константах. Синтаксис языка определяет правила построения операторов. Семантика – это смысловое содержание операторов языка программирования. Семантические правила определяют действия, описываемые различными операторами, и, в итоге сущность всего алгоритма.
Языки программирования можно разделить на две группы – языки высокого уровня и языки низкого уровня (машинные).К языкам низкого уровня относится язык Ассемблер, в котором программа пишется на уровне машинных кодов. Инструкция языка ассемблера описывает ровно одну машинную команду. И наоборот: каждой команде в системе команд процессора соответствует  инструкция языка (мнемоника). По сравнению с машинным кодом язык ассемблер имеет ряд преимуществ, облегчающих труд программист:
Символические мнемоники запоминаются легче, чем шестнадцатеричные коды команд.
Для регистров и областей памяти также можно использовать символические имена.
Нет необходимости работать с физическими адресами памяти.
Числовые константы и строки представляются в программе в привычном виде.
Программировать на языке ассемблера намного проще, чем в машинном коде, но все рано сложно. Поэтому были созданы другие языки программирования, в которых каждая инструкция (оператор) языка преобразуется в группу машинных. Эти языки ориентируются не на систему команд процессора, а на способ мышления, присущий человеку. Языки удобные для людей, называют языками высокого уровня. Достоинства языков высокого уровня:
Машинная независимость.
Использование естественных обозначений.
Эффективное представление этапов обработки данных средствами языка.
Готовые библиотеки стандартных подпрограмм для выполнения часто встречающихся действий.
Все языки программирования высокого уровня делятся на процедурные, логические и объектно-ориентированные. Несмотря на различия между языками, все они позволяют написать программу любого назначения.Каждый язык программирования имеет свое название. История этих названий восходит к моменту создания языков. Правила программ в некоторых языках неоднократно менялись, но названия языков остались без изменения.
Поколения языков1 этап.Операционное программирование. (ЭВМ 1-го поколения с 1945-1959 год).  ЭВМ того времени понимали только цифровые команды, и программы состояли из множества строк, состоящих из цифр, интерпретируемых центральным процессором. Например, команда 05 825 631 трактовалась как сложение двух чисел (код 05), записанных в ячейки с номерами 825 и 631. Производительность труда программистов того времени была очень невелика, так как вручную было необходимо распределить все переменные программы в оперативной памяти.2 этап.Мало отличается от первого. Он связан с ЭВМ 2-го поколения. Появились языки программирования типа Ассемблер и автокод. Теперь команда сложения записывалась с использованием служебных слов – ADD (сложить) PR1, ZET, где ADD – код команды, PR1, ZET – имена ячеек. Перевод программы (трансляция), записанных таким образом в цифровое представление, а только такое понимает ЭВМ, осуществляется с помощью специальных программ, называемых ассемблерами. Технология работы программиста: программа собирается из мелких деталей, отдельных операций и имеет достаточно простую структуру, решаемые задачи в основном расчетные.3 этап.Развиваются языки программирования высокого уровня. В них реализуются новые идеи: подпрограммы и раздельная компиляция (Фортран 2); блочная структура и типы данных (Алгол 60); описание данных и работа с файлами (Кобол); обработка списков и указателей (Лисп). В следующих версиях языков продолжается развитие: PL/1 (Фортран+Алгол+Кобол), Алгол 68 (приемник Алгол 60), Паскаль (развитие Алгол 60), Simula (классы абстрактные данные). Возможности языков программирования обеспечивают поддержку нисходящей технологии конструирования программ. Суть нисходящего конструирования программ – разбиение большой задачи на подзадачи, которые могут рассматриваться отдельно.
Основные правила применения данной технологии:
формализованное  и  строгое описание программистом входов функций и выходов всех модулей программы и системы;
согласованная разработка структур данных и алгоритмов;
ограничение на размер модулей;
Восходящая технология конструирования программ – решение складывается «из отдельных кирпичиков», из известных решений подзадач. Таким образом, данной технологией оговаривается определенный принцип декомпозиции и иерархическая структура программы. Важнейшей составляющей этой технологии является структурное программирование (языки программирования Паскаль, Модула –2). Пионером структурного программирования был Э. Дейкстра, который в 1965 году предположил, что оператор GOTO может быть исключен из языков программирования. Характерные черты структурного стиля программирования:
простота и ясность (программа легко читается и анализируется);
использование только базовых конструкций;
отсутствие сетевых структур в программе;
отсутствие многоцелевых функциональных блоков;
отсутствие неоправданно сложных арифметических и логических конструкций;
расположение в строке программы не более одного оператора языка программирования;
содержательность имен переменных.
При этом процесс нисходящей разработки программы может продолжаться до тех пор, пока не будет, достигнут уровень «атомарных» блоков, т.е. базовых конструкций.К нисходящей технологии следует отнести и то, что называется модульным программированием. Достаточно независимые фрагменты задачи оформляются как модули. Создаются библиотеки модулей, определяется механизм включения модулей в разрабатываемую программу. Модуль должен иметь строго определенный интерфейс и скрытую часть,  одну точку входа и одну точку выхода.Структурная технология предоставила в распоряжение разработчиков строгие, формализованные методы описания программ и принимаемых технических решений. При этом использовалась наглядная графическая техника (схемы, диаграммы). Программы имели последовательную структуру, идеи Э. Дейкстры были реализованы в полной мере, что определило новый этап в развитии технологии программирования.4 этап.Связан с применением объектно-ориентированных языков 4-го поколения. В основе объектно-ориентированного программирования (ООП) лежит идея объединения в одной структуре данных и действий, которые производятся с этими данными. (В терминологии ООП такие действия называются методами). При таком подходе организация данных и программная реализация действий над ними оказываются гораздо сильнее связаны, чем при традиционном структурном программировании.ООП базируется на трех основных понятиях:
Инкапсуляция – комбинирование данных с процедурами и функциями, которые манипулируют этими данными. В результате получается новый тип данных – объект.
Наследование – это возможность использования уже определенных объектов для построения иерархии объектов производных от них. Каждый из «наследников» наследует описание данных «прародителя» и доступ к методам их обработки.
Полиморфизм – это возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектам иерархии наследования, причем каждый объект иерархии может «заказывать» особенность реализации этого действия над «самим собой».
ООП может заметно упростить написание сложных программ, придать им гибкость. Одним из его главных преимуществ можно назвать возможность расширять область их применения, не переделывая программу, а лишь добавляя в нее новые уровни иерархии.Первым языком с элементами ООП был язык Симула-67. В Турбо-Паскале, начиная с версии 5.5, появились средства ООП. Итогом развития Турбо-Паскаля в этом направлении стало создание фирмой Borland системы программирования Delphi (Делфи). Использование этой системы, в частности, даёт возможность легко и быстро программировать сложный графический интерфейс.5 этап.ЭВМ будущего 5-го поколения называют машинами «искусственного интеллекта». Прототипы языков для этих машин были созданы много раньше их физического появления. Это языки Лисп и Пролог. Эти языки относятся к языкам логического программирования.  Язык Пролог разработан в 70-ых годах во Франции. Его появление связано с первыми работами в области создания искусственного интеллекта (экспертных систем, программ-переводчиков, интеллектуальных игр и пр.). Базируется на логической модели знаний. Основы  ООПСистемы ООП дают возможность визуализировать процесс создания графического интерфейса разрабатываемого приложения, то есть позволяют создать объекты и задавать значения их свойств с помощью диалоговых окон системы программирования.  Взаимодействия объектов между собой и их изменения описываются с помощью программного кода. Создание программного кода базируется на исполнении алгоритмических структур различных типов.   Основной единицей в ООП является объект,который объединяет в   себе как описывающие его данные, так и средства обработки этих данных, т.е. программные объекты обладают свойствами, могут,  использовать методы и реагирует на события.
Классы объектов
Классы объектов являются шаблонами, определяющими наборы свойств, методы и событий. По этим шаблонам создаются объекты. Каждый из классов обладает специфическим набором свойств, методов и событий.
Экземпляры классов
Объект, созданный по "шаблону" класса объектов, является экземпляром класса и наследует весь набор свойств, методов и событий данного класса. Каждый экземпляр класса имеет уникальное для данного класса имя. Экземпляры обладают одинаковым набором свойств, но значения свойств у них могут отличаться.
Свойства объектов
Семейство объектов представляет собой объект, содержащий несколько объектов, экземпляров одного класса.
Объекты
СвойстваКаждый объект обладает набором свойств. Значение свойств можно изменить в программном коде.
 
 
 
Объект. Свойство = Значение свойства МетодыДля того чтобы объект выполнил какую-либо операцию, необходимо применить метод, которым он обладает. Методы имеют аргументы, которые позволяют задать параметры выполняемых действий.
 
Объект. Метод арг 1: = зн, арг 2: = знач. СобытияСобытие представляет собой действие, распознаваемое объектом. Событие может создаваться пользователем или быть результатом взаимодействия других программных объектов. В качестве реакции на событие вызывается определенная процедура.

ВЗГЛЯД НА ОПЕРАТОРЫ ПРОГРАММЫ
В уроке 1 вы создали на C++ программу FIRST.CPP, которая содержала следующие операторы:
#include <iostream.h>
void main(void)
{    cout << "Учимся программировать на языке С++!"; }
В данном случае программа содержит три оператора. Фигурные скобки (называемыегруппирующими символами) группируют связанные операторы:
#include <iostream.h>
void main (void)
{    cout << "Учимся программировать << "на языке С++!"; }
В следующем разделе каждый из операторов программы описывается более подробно.
ПРЕДСТАВЛЕНИЕ ОБ ОПЕРАТОРЕ #include
Каждая программа, представленная в уроке 1, начинается со следующего оператора # include:
#include <iostream.h>
При создании программ на C++ вы получаете преимущества от использования операторов и определений, которые обеспечивает вам компилятор. При компиляции программы оператор # include заставляет компилятор включить содержимое заданного файла в начало вашей программы. В данном случае компилятор включит содержимое файла iostream.h.
Файлы с расширением h, которые вы включаете в начало (или заголовок) вашей программы, называются заголовочными файлами. Если вы посмотрите на каталог, содержащий файлы вашего компилятора, то найдете подкаталог с именем INCLUDE, в котором находятся разные заголовочные файлы. Каждый заголовочный файл содержит определения, предоставляемые компилятором для различных операций. Например, существует заголовочный файл, который содержит определения для математических операций, другой заголовочный файл описывает файловые операции и т. д.
Заголовочные файлы представляют собой файлы в формате ASCII, следовательно, вы можете вывести их содержимое на экран или принтер. В данный момент не беспокойтесь о содержимом заголовочных файлов. Просто поймите, что оператор # include позволяет вам использовать эти файлы. Все программы на C++, созданные вами в процессе изучения этой книги, содержат операторы # include, которые вы должны применять в ваших программах.
Заголовочные файлы C++
Каждая создаваемая вами программа на C++ начинается с одного или нескольких операторов #include. Эти операторы указывают компилятору включить содержимое заданного файла (заголовочного файла) в вашу программу, как если бы программа содержала операторы, которые находятся во включаемом файле. Заголовочные файлы содержат определения, используемые компилятором для операций различных типов. Существуют заголовочные файлы, которые определяют операции В/В (ввода/вывода) C++, системные функции (например, функции, возвращающие текущие дату и время) и многое другое.
Заголовочные файлы, подобно программам на C++, представляют собой файлы в формате ASCII, содержимое которых вы можете просмотреть или напечатать. Чтобы лучше понять содержимое заголовочных файлов, найдите время для того, чтобы напечатать заголовочный файл IOSTREAM.H, содержимое которого вы будете использовать в каждой создаваемой вами программе на C++. Обычно заголовочный файл IOSTREAM.H расположен в подкаталоге с именем INCLUDE, который находится в каталоге, содержащем файлы компилятора C++. Используйте текстовый редактор, чтобы просмотреть и напечатать содержимое заголовочных файлов.
Замечание: Никогда не изменяйте содержимое заголовочных файлов. Это может привести к ошибкам компиляции в каждой создаваемой вами программе.
ЧТО ТАКОЕ void main(void)
При создании программы на C++ ваш исходный файл будет содержать множество операторов. Как вы поймете в процессе изучения, порядок, в котором операторы появляются в программе, не обязательно должен совпадать с порядком, в котором операторы будут выполняться при запуске программы. Каждая программа на C++ имеет один вход, с которого начинается выполнение программы, — главную программу. В программах на C++ операторvoid main(void) указывает стартовую точку вашей программы.
По мере того как ваши программы становятся больше и сложнее, вы будете делить их на несколько небольших легко управляемых частей. При этом оператор void main(void)указывает начальные (или главные) операторы программы — часть программы, которая выполняется первой.
Представление о главной программе
Исходные файлы C++ могут содержать очень много операторов. При запуске программы оператор void main(void) определяет главную программу, содержащую первый выполняемый оператор. Ваши программы на C++ должны всегда включать один и только один оператор с именем main.
При рассмотрении больших программ на C++ ищите main, чтобы определить операторы, с которых начинается выполнение программы.
Использование void
Как только ваша программа становится более сложной, вы должны разделить ее на небольшие более легко управляемые части, называемые функциями. Функция представляет собой простой набор операторов внутри программы, выполняющих определенную задачу. Например, при создании программы платежных документов, вы могли бы создать функцию с именем salary, вычисляющую оклад служащих. Аналогичным образом, если вы пишете математическую программу, вы могли бы создать функции с именами square_root или cube,которые возвращают результат определенных математических операций. Если ваша программа использует функцию, функция выполняет свою задачу и затем возвращает свой результат программе.
Каждая функция в вашей программе имеет уникальное имя. А каждая программа имеет по крайней мере одну функцию. Каждая программа из урока 1 имела только одну функцию с именем main. Урок 9 предоставляет более подробный обзор функций. В данный момент просто имейте в виду, что функция состоит из нескольких связанных по смыслу операторов, выполняющих определенную задачу.
При исследовании различных программ на C++ вы будете постоянно сталкиваться со словомvoid. Программы используют слово void для указания того, что функция не возвращает значения или не имеет значений, передаваемых в нее. Например, если вы используете среду MS-DOS или UNIX, программа может завершить свое выполнение с возвратом операционной системе значения статуса, которое может быть проверено командным файлом. Командные файлы MS-DOS проверяют выходной статус программы, используя команду IF ERRORLEVEL. Например, предположим, что программа с именем PAYROLL. EXE завершается с одним из следующих выходных значений статуса в зависимости от результата обработки:
Значение статуса Смысл
0 Успех
1 Файл не найден
2 В принтере нет бумаги
 
 
Внутри командного файла MS-DOS вы можете проверить результат работы программы, используя команду IF ERRORLEVEL:
PAYROLL
IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 GOTO SUCCESSFUL IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO NO_FILE IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO NO_PAPER REM Далее идут другие команды
Большинство простых программ на C++, которые будут созданы вами в процессе изучения этой книги, не возвращают выходное значение статуса операционной системе. Поэтому вы должны размещать слово void перед main, как показано ниже:
void main (void) //— -------> Программа не возвращает значение
В следующих уроках вы узнаете, что ваши программы могут использовать информацию (например, имя файла), которую пользователь указывает в командной строке при запуске программы. Если программа не использует информацию командной строки, вы должны разместить слово void внутри круглых скобок после main, как показано ниже:
void main ( void ) //----------------------> Программа не использует аргументы командной строки
По мере усложнения ваши программы могут возвращать значения в операционную систему или использовать параметры командной строки. Однако в настоящий момент просто используйте void в операторе с main, как показано в этой программе.
ПРЕДСТАВЛЕНИЕ О ГРУППИРУЮЩИХ ОПЕРАТОРАХ { }
По мере усложнения в ваших программах будет один набор операторов, которые компьютер должен выполнить определенное число раз, и другой набор операторов, которые компьютер должен выполнить, если выполняется определенное условие. В первом случае компьютер может выполнить один и тот же набор операторов 100 раз, чтобы добавить для 100 студентов тестовые очки. Во втором случае компьютер может вывести на экран одно сообщение, если все студенты прошли тест, и другое сообщение, если один или несколько студентов потерпели неудачу. Внутри своих программ на C++ вы будете использовать правую и левую фигурные скобки {}, чтобы сгруппировать связанные операторы. В простых программах, представленных в нескольких первых уроках книги, эти символы группируют операторы, которые соответствуют операторам вашей главной программы.
ИСПОЛЬЗОВАНИЕ cout ДЛЯ ОТОБРАЖЕНИЯ ВЫВОДА НА ЭКРАН
Все программы на C++, созданные вами в уроке 1, выводили сообщения на экран. Чтобы вывести сообщение, программы использовали cout и двойной знак "меньше" (<<), как показано ниже:
cout << "Привет, C++!";
Слово cout представляет собой выходной поток, который C++ назначает на стандартное устройство вывода операционной системы. По умолчанию операционная система назначает стандартное устройство вывода на экран дисплея. Чтобы вывести сообщение на экран, вы просто используете двойной символ "меньше" (называемый оператором вставки) с выходным потоком cout. Из урока 3 вы узнаете, что можно использовать оператор вставки для передачи символов, чисел и других знаков на экран.
Представление о выходном потоке cout
Вы уже знаете, что программы на C++ используют выходной поток cout для вывода сообщений на экран. При использовании cout для вывода сообщений представляйте cout в виде потока символов, которые операционная система отображает на экране. Другими словами, порядок, в котором ваша программа посылает символы в cout, определяет порядок символов, которые будут появляться на экране. Например, для следующих операторов программы:
cout << "Это сообщение появляется первым,"; cout << " а за ним следует настоящее сообщение.";
Операционная система выводит поток символов следующим образом:
Это сообщение появляется первым, а за ним следует настоящее сообщение.
Оператор вставки (<<) называется так, потому что позволяет вашей программе вставлять символы в выходной поток.
Вы уже знаете, что выходной поток cout по умолчанию соответствует вашему экрану. Другими словами, когда ваши программы посылают вывод в cout, вывод появляется на экране. Однако, используя операторы переназначения вывода операционной системы, вы можете послать вывод программы на принтер или в файл. Например, следующая команда предписывает MS-DOS направить вывод программы FIRST.EXE на принтер, а не на экран:
С:> FIRST > PRN <ENTER>
Как вы узнаете из Урока 3, с помощью cout в C++ можно выводить символы, целые числа, например 1001, и числа с плавающей точкой, например 3.12345. Из Урока 8 вы узнаете, что в C++ существует также входной поток с именем cin, который ваши программы могут использовать для чтения информации, вводимой с клавиатуры.
ЧТО ВЫ ДОЛЖНЫ ЗНАТЬ
В этом уроке обсуждались некоторые общие вопросы, с которыми вы столкнетесь в программах на C++. Из Урока 3 вы узнаете, как использовать cout для вывода символов, целых чисел и значений с плавающей точкой. Вы также узнаете, как форматировать вывод. До изучения урока 3 убедитесь, что вы освоили следующие основные концепции:
Большинство программ на C++ начинаются с оператора # include, который предписывает компилятору включить содержимое заданного заголовочного файла в программу.
Заголовочные файлы содержат определения, предоставляемые компилятором, которые ваши программы могут использовать.
Исходный файл может состоять из множества операторов; оператор void main(void) указывает начало главной программы, которая содержит первый выполняемый оператор программы.
По мере того как ваша программа становится более сложной, вы будете группировать связанные операторы в небольшие легко управляемые части, называемые функциями. Группируйте операторы программы с помощью правой и левой фигурных скобок {}.
Большинство программ на C++ используют выходной поток cout для вывода информации на экран; однако, используя операторы переназначения В/В операционной системы, вы можете перенаправить вывод cout в файл, устройство (например, принтер) или даже сделать его входом другой программы

ИСПОЛЬЗОВАНИЕ cout ДЛЯ ВЫВОДА ЧИСЕЛ
До сих пор созданные вами программы использовали сом/ для вывода символьных строк(букв и чисел, взятых в кавычки). Теперь вы узнаете, что сом/ можно также использовать для вывода чисел. Следующая программа 1001.СРР выводит число 1001 на ваш экран:
#include <iostream.h>
void main(void)
{    cout << 1001; }
Откомпилируйте и запустите эту программу. На вашем экране будет отображено число 1001, как показано ниже:
С:> 1001 <ENTER>
1001
Далее отредактируйте программу и измените оператор cout , чтобы вывести число 2002, как показано ниже:
cout << 2002;
Кроме отображения целых чисел (чисел без десятичной точки), сом/также позволяет вашим программам отображать числа с плавающей точкой, например 1.2345. Следующая программа FLOATING.CPP использует сом/для вывода числа 0.12345 на экран:
#include <iostream.h>
void main(void)
{    cout << 0.12345; }
Как и ранее, откомпилируйте и запустите эту программу. На вашем экране появится следующий вывод:
С:> FLOATING <ENTER>
0.12345
ВЫВОД НЕСКОЛЬКИХ ЗНАЧЕНИЙ ОДНОВРЕМЕННО
Как вы уже знаете, двойной знак "меньше" является операцией вставки (эта операция вставляет символы в выходной поток для отображения). С помощью cout вы можете использовать несколько операций вставки в пределах одного оператора. Например, следующая программа 1001ТОО.СРР использует эту операцию четыре раза для отображения числа 1001 на вашем экране:
#include <iostream.h>
void main(void)
(    cout << 1 << 0 << 0 << 1; }
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующее:
С:> 1001TOO <ENTER>
1001
Каждый раз, когда в C++ встречается операция вставки, число или символы просто добавляются к тем, что находятся в настоящее время в выходном потоке. Следующая программа SHOW1001.CPP с помощью cout выводит символьную строку и число:
#include <iostream.h>
void main(void)
{    cout << "Мое любимое число равно " << 1001; }
Обратите внимание, что пробел, следующий за словом равно (внутри кавычек), служит для отделения числа 1001 от этого слова. Без пробела число сливается со следующим словом (равно 1001). Подобным образом следующая программа 1001MID.CPP отображает число 1001 в середине символьной строки:
#include <iostream.h>
void main(void)
{    cout << "Число " << 1001 << " мне очень нравится"; }
Как и ранее, обратите внимание на расстановку пробелов до и после числа 1001.
Наконец, следующая программа MIXMATCH.CPP комбинирует строки, символы, целые числа и числа с плавающей точкой внутри одного и того же выходного потока:
#include <iostream.h>
void main(void)
{    cout << "B " << 20 << " лет мой оклад был " << 493.34 << endl; }
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
С:> MIXMATCH <ENTER>
В 20 лет мой оклад был 493.34
 
ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ СИМВОЛОВ ВЫВОДА
Все программы, созданные вами до сих пор, отображали свой вывод в виде одной строки. Однако большинство программ, которые вы создадите в дальнейшем, будут отображать несколько строк вывода. Например, предположим, что вы пишете программу, которая будет выводить адреса на экран. Вероятно, вы захотите, чтобы адреса появлялись в виде нескольких строк.
Если необходимо переместить курсор в начало следующей строки, можно поместить символ новой строки ( ) в выходной поток. В C++ вам предоставляется два разных способа генерации новой строки. Во-первых, вы можете поместить символы внутри символьной строки. Например, следующая программа TWOLINES.CPP отображает свой вывод в виде двух строк, используя символ новой строки:
#include <iostream.h>
void main(void) {    cout << "Это строка один Это строка два"; }
Когда вы откомпилируете и запустите эту программу, символ новой строки обеспечит вывод двух строк, как показано ниже:
С:> TWOLINES <ENTER>
Это строка один
Это строка два
Если вы не выводите символьную строку, можете поместить символ новой строки внутри одинарных кавычек. Например, следующая программа NEWLINES.CPP выводит числа 1, 0, 0 и 1, каждое на своей собственной строке:
#include <iostream.h>
void main(void) {    cout << 1 << " " << 0 << " " << 0 << " " << 1; }
В дополнение к использованию символа новой строки для продвижения курсора в начало следующей строки ваши программы могут использовать символ endl (конец строки). Следующая программа ENDL.CPP иллюстрирует использование endl для продвижения курсора в начало новой строки:
#include <iostream.h>
void main(void)
{    cout << "А теперь..." << endl     << "Учимся программировать на языке C++"; }
Как и ранее, когда вы откомпилируете и запустите эту программу, на экране будет отображен вывод программы в виде двух строк:
C:> ENDL <ENTER>
А теперь
Учимся программировать на языке C++
Наконец, следующая программа ADDRESS.CPP выводит адрес издательства "Jamsa Press" в несколько строк:
#include <iostream.h>
void main(void)
{    cout << "Jamsa Press" << endl;    cout << "2975 South Rainbow, Suite I" << endl;    cout << "Las Vegas, NV 89102" << endl; }
Другие специальные символы
В дополнение к символу новой строки, позволяющему вашим программам продвигать курсор в начало новой строки, вы можете использовать специальные символы, перечисленные в табл. 3.1.
Таблица 3.1. Специальные символы для использования с cout.
Символ Назначение
а Сигнальный (или звонок) символ
Ь Символ возврата
V Символ перевода страницы
Символ новой строки
г Возврат каретки (не перевод строки)
Символ горизонтальной табуляции
v Символ вертикальной табуляции
Символ обратный слеш
? Знак вопроса
" Одинарные кавычки
" Двойные кавычки
Нулевой символ
00 Восьмеричное значение, например 07
xhhhh Шестнадцатеричное значение, например xFFFF
Замечание: При использовании специальных символов, перечисленных в табл. 3.1, вам следует располагать их внутри одинарных кавычек, если вы используете данные символы сами по себе, например " ", или внутри двойных кавычек, если вы используете их внутри строки, например "Привem Mup!".
Следующая программа SPECIAL.CPP использует специальные символы сигнала (а) и табуляции ( ) для выдачи звука на встроенный динамик компьютера и затем выводит словаЗвонок Звонок Звонок, разделенные табуляцией:
#include <iostream.h>
void main(void)
{    cout << "3вонокa Звонокa Звонокa"; }
ВЫВОД ВОСЬМЕРИЧНЫХ И ШЕСТНАДЦАТЕРИЧНЫХ ЗНАЧЕНИЙ
Программы, представленные в этом уроке до сих пор, выводили числа в десятичном виде. В зависимости от назначения ваших программ вам, возможно, потребуется выводить числа в восьмеричном или шестнадцатеричном виде. Для этого можно разместить модификаторыdec, oct и hex внутри выходного потока. Следующая программа ОСТНЕХ.СРР использует эти модификаторы для вывода значений в десятичном, восьмеричном и шестнадцатеричном виде:
#include <iostream.h>
void main(void)
{    cout << "Восьмеричный: " << oct << 10 << " " << 20 << endl;    cout << "Шестнадцатеричный: " << hex << 10 << " " << 20 << endl;    cout << "Десятичный: " << dec << 10 << " " << 20 << endl; }
Когда вы откомпилируете и запустите эту программу, на экране появится следующий результат:
С:> OCTEX <ENTER>
Восьмеричный: 12 24
Шестнадцатеричный: а 14
Десятичный: 10 20
Примечание: Когда вы используете один из модификаторов для выбора восьмеричного, шестнадцатеричного или десятичного вывода, ваш выбор будет оставаться в силе до тех пор, пока программа не закончится или пока вы не используете другой модификатор.
ВЫВОД НА СТАНДАРТНОЕ УСТРОЙСТВО ОШИБОК
Как вы уже знаете, используя cout, вы можете перенаправить вывод программы на устройство или файл с помощью операторов переназначения вывода операционной системы. Однако, если ваши программы сталкиваются с ошибкой, вы, вероятно, не захотите, чтобы сообщение об ошибке было перенаправлено с экрана. Перенаправление сообщений об ошибках в файл может скрыть от пользователя факт появления ошибки.
Если вашей программе нужно вывести сообщение об ошибке, вы должны использовать выходной поток cerr. C++ связывает cerr со стандартным устройством ошибок операционной системы. Следующая программа CERR.CPP использует выходной поток cerrдля вывода на экран сообщения "Это сообщение появляется всегда ":
#include <iostream.h>
void main(void)
{     cerr << "Это сообщение появляется всегда"; }
Откомпилируйте и запустите эту программу. Далее попытайтесь перенаправить вывод программы в файл, используя оператор переназначения вывода:
С:> CERR > FILENAME.EXT <ENTER>
Так как операционная система не позволит вашим программам перенаправить вывод, записываемый на стандартное устройство ошибок, сообщение появится на вашем экране.
УПРАВЛЕНИЕ ШИРИНОЙ ВЫВОДА
Несколько предыдущих программ выводили числа на экран. Чтобы гарантировать правильное отображение этих чисел (с правильной расстановкой пробелов), программы включали пробелы до и после чисел. При выводе на cout или cerr ваши программы могут указать ширину вывода каждого числа, используя модификатор setw (установка ширины). С помощью setw программы указывают минимальное количество символов, занимаемое числом. Например, следующая программа SETW.CPP использует модификатор setw для выбора ширины 3, 4, 5 и 6 для числа 1001. Чтобы использовать модификатор setw, ваша программа должна включать заголовочный файл iomanip.h:
#include <iostream.h>
#include <iomanip.h>
void main (void)
{    cout << "Мое любимое число равно" << setw(3) << 1001 << endl;    cout << "Мое любимое число равно" << setw(4) << 1001 << endl;    cout << "Мое любимое число равно" << setw(5) << 1001 << endl;    cout << "Мое любимое число равно" << setw(6) << 1001 << endl; }
Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод:
С:> SETW <ENTER>
Мое любимое число равно1001
Мое любимое число равно1001
Мое любимое число равно 1001
Мое любимое число равно 1001
Если вы указываете ширину с помощью setw, вы указываете минимальное количество символьных позиций, занимаемых числом. В предыдущей программе модификатор setw(3)указывал минимум три символа. Однако, так как число 1001 потребовало больше трех символов, cout использовал реально требуемое количество, которое в данном случае равнялось четырем. Следует отметить, что при использовании setw для выбора ширины, указанная ширина действительна для вывода только одного числа. Если вам необходимо указать ширину для нескольких чисел, вы должны использовать setw несколько раз.
Замечание: Предыдущая программа использует заголовочный файл IOMANIP.H. Вам, возможно, понадобится сейчас напечатать и исследовать содержимое этого файла. Как и в случае с заголовочным файлом IOSTREAM.H вы найдете данный файл внутри подкаталога INCLUDE, который находится в каталоге с файлами вашего компилятора.
ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ
Из этого урока вы узнали несколько способов использования cout для отображения вывода на экран. Все программы, которые вы создадите в процессе изучения оставшейся части книги, будут использовать cout для отображения вывода. Из урока 4 вы узнаете, как использовать переменные внутри своих программ для хранения значений, которые могут изменяться в процессе выполнения программы. Однако до изучения урока 4 убедитесь, что вы освоили следующие основные концепции:
Выходной поток cout позволяет вам выводить символы и числа.
Используя специальные символы внутри выходного потока, ваша программа может указать новую строку, табуляцию и другие специальные возможности.
Для продвижения курсора в начало следующей строки программы могут создать новую строку, используя символ или модификатор endl.
Модификаторы dec, oct и hex позволяют программам выводить значения в десятичном, восьмеричном и шестнадцатеричном виде.
Используя выходной поток cerr, программы могут записать сообщения в стандартное устройство ошибок операционной системы.
С помощью модификатора setw ваши программы могут управлять шириной вывода чисел.

ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ В ПРОГРАММАХ
Ваши программы используют переменные для хранения информации. В зависимости от типа хранимого значения, например, целое число, буква алфавита или число с плавающей точкой,тип вашей переменной будет разным.
Тип переменной указывает тип значения, хранимого в переменной, а также набор операций (таких как сложение, умножение и другие), которые программа может выполнять над значением переменной. Большинство программ на C+ + будут использовать типы переменных, перечисленные в табл. 4.1.
Таблица 4.1. Типы переменных C++.
Тип Хранимые значения
char Значения в диапазоне от -128 до 127. Обычно используется для хранения букв алфавита
int Значения в диапазоне от -32768 до 32767
unsigned Значения в диапазоне от 0 до 65535
long Значения в диапазоне от -2147483648 до 2147483647
float Значения в диапазоне от -3.4 x 10-38 до 3.4 x 1038
double Значения в диапазоне от 1.7х 10-308 до 1.7х 10308
Прежде чем вы сможете использовать переменную, ваша программа должна ее объявить.Другими словами, вам следует представить переменную компилятору C++. Чтобы объявить переменную в программе, вам следует указать тип переменной и ее имя, по которому программа будет обращаться к данной переменной. Указывайте тип и имя переменной после открывающей фигурной скобки главной программы, как показано ниже:
тип_переменной имя_переменной;
Как правило, тип переменной будет одним из типов, перечисленных в табл. 4.1. Выбираемое вами имя переменной должно нести смысловую нагрузку, которая описывает (для всех, кто читает вашу программу) использование переменной. Например, ваша программа могла бы использовать переменные, такие как employee_name, employee_age и т. д. Обратите внимание на точку с запятой, которая следует за именем переменной. В C++ объявление переменной считается оператором. Поэтому вы должны поставить после объявления точку с запятой.
Фрагмент следующей программы объявляет три переменные, используя типы int, float иlong:
#include <iostream.h>
void main(void)
{    int test_score;    float salary;    long distance_to_mars; }
Важно обратить внимание, что данная программа ничего не выполняет, а только объявляет переменные. Как видите, объявление каждой переменной заканчивается точкой с запятой. Если вы объявляете несколько переменных одного и того же типа, можно разделять их имена запятой. Следующий оператор, например, объявляет три переменных с плавающей точкой:
float salary, income_tax, retirement_fund;
Изучение переменных
Переменная представляет собой имя ячейки в памяти компьютера. Во время выполнения ваши программы хранят информацию в переменных. При создании программ вы должны объявлять переменные, сообщая компилятору C++ имя и тип переменной. Например, следующий оператор объявляет переменную с именем age типа int:
int age;
Смысловые имена переменных
Каждая создаваемая вами переменная должна иметь уникальное имя. Чтобы сделать свои программы более легкими для чтения и понимания, следует использовать смысловые имена переменных. Например, следующий оператор объявляет три переменных с именами х, y и z:
int х, у, z;
Предположим, что эти переменные хранят возраст, тестовые очки и оценку студента, тогда следующие имена переменных более понятны по смыслу для других программистов, читающих ваш исходный код:
int student_age, test_score, grade;
При выборе имен переменных можно использовать комбинацию букв, цифр и подчеркивания (_). Первый символ в имени переменной должен быть буквой или подчеркиванием. Нельзя начинать имя переменной с цифры. Кроме того, в C++ буквы нижнего и верхнего регистров считаются разными. Сначала для имен своих переменных используйте только буквы нижнего регистра. Как только вы освоитесь в C++, можете комбинировать буквы верхнего и нижнего регистров для получения смысловых имен, как показано ниже:
float MonthlySalary, IncomeTax;
Слова, которые нельзя использовать для имен переменных
При создании имен переменных необходимо знать, что в C++ слова, перечисленные в табл. 4.2, резервируются в качестве ключевых слов, имеющих специальное значение для компилятора. Вы не имеете права использовать ключевые слова C++ в качестве имен переменных.
Таблица 4.2. Ключевые слова C++.
asm auto break case catch char class const
default delete do double else enum extern float
friend goto if inline int long new operator
protected public register return short signed sizeof static
switch template this throw try typedef union unsigned
void volatile while continue for private struct virtual
Почему ваши программы используют переменные
По мере усложнения ваши программы могут выполнять самые разнообразные операции. Например, программа платежей обрабатывает информацию о каждом служащем. В такой программе вы могли бы использовать переменные с именами employee_name, employee_id, employee_salary и т. д. После запуска программа занесет информацию о первом служащем в эти переменные. После расчета оклада первого служащего программа повторит весь процесс для следующего служащего. Чтобы рассчитать оклад второго служащего, программа занесет информацию о втором служащем (его или ее имя, номер и оклад) в перечисленные выше переменные, а затем выполнит свою обработку. Другими словами, в процессе выполнения программа присваивает переменной разные значения, которые, в свою очередь, изменяют или варьируют значение переменной.
ПРИСВАИВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ
Как вы уже знаете, переменные хранят значения во время выполнения программы. После объявления переменной вы используете оператор присваивания C++ (знак равно), чтобы присвоить значение переменной. Следующие операторы присваивают значения нескольким разным переменным. Обратите внимание на использование точки с запятой в конце каждого оператора:
age = 32; salary = 25000.75; distance_to_the_moon = 238857;
Замечание: Значения, присваиваемые переменным, не должны содержать запятые (например, 25,000.75 и 238,857) *. Если вы включаете запятые, компилятор C++ будет генерировать и выводить сообщения о синтаксических ошибках.
Фрагмент следующей программы сначала объявляет переменные, а затем использует оператор присваивания, чтобы присвоить переменным значения:
* Американская запись чисел предполагает отделение каждых трех разрядов целой части числа запятой. - Прим. ред.
#include <iostream.h>
void main(void)
{    int age ;    float salary;    long distance_to_the_moon;
   age = 32;    salary = 25000.75;    distance_to_the_moon = 238857; }
Присваивание значения при объявлении
При объявлении переменной часто удобно присваивать ей начальное значение. Чтобы упростить такую процедуру, C++ позволяет присваивать значение во время объявления переменной, как показано ниже:
int age = 32; float salary = 25000.75; long distance_to_the_moon = 238857;
Многие программы, представленные в этой книге, присваивают значения переменным при объявлении.
Присваивание значений переменным
При выполнении программы переменные хранят информацию. Для записи значения в переменную программы должны использовать оператор присваивания C++ (знак равно). Следующая строка использует оператор присваивания для записи значения 4 в переменную lesson:
lesson = 4;
Для упрощения этого процесса в C++ можно также присвоить значение переменной при ее объявлении:
int lesson = 4;
ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЯ ПЕРЕМЕННОЙ
После присвоения значения переменной ваши программы могут использовать это значение, просто обращаясь к ее имени. Следующая программа SHOWVARS.CPP присваивает значения трем переменным и затем выводит значение каждой переменной, используя cout:
#include <iostream.h>
void main (void)
{    int age = 32,    float salary = 25000.75;    long distance_to_the_moon = 238857;    cout << "Служащему " << age << " года (лет)" << endl;    cout << "Оклад служащего составляет $" << salary << endl;    cout << "От земли до луны " << distance_to_the_moon << " миль" << endl; }
Замечание: Последний оператор cout не помещается на одной строке. В этом случае программа просто переносит слова на следующую строку. Вы можете сделать такой перенос, поскольку C++ использует точку с запятой для указания конца оператора. Если вам необходимо перенести строку, постарайтесь не делать этого в середине символьной строки (внутри двойных кавычек), используйте дополнительный отступ для перенесенной части строки, как показано выше.
Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод:
С:> SHOWVARS <ENTER>
Служащему 32 года (лет)
Оклад служащего составляет $25000.75
От земли до луны 238857 миль
Как видите, для использования значения переменной вы просто обращаетесь к имени переменной в вашей программе.
ПРЕВЫШЕНИЕ ДИАПАЗОНА ЗНАЧЕНИЙ ПЕРЕМЕННОЙ
Как вы уже знаете, тип переменной определяет набор значений, которые переменная может хранить. Например, переменная типа int может хранить значения в диапазоне от -32768 до 32767. Если вы присваиваете переменной значение, которое находится вне этого диапазона, возникает ошибка переполнения. Например, следующая программа OVERFLOW.CPP иллюстрирует, как превышение диапазона значений переменной приводит к ошибке. Как видите, программа присваивает значения, которые находятся вне диапазона для переменной каждого типа:
#include <iostream.h>
void main(void)
{    int positive = 40000;    long big_positive = 4000000000;    char little_positive = 210;    cout << "сейчас positive содержит " << positive << endl;    cout << "сейчас big_positive содержит " << big_positive << endl;    cout << "сейчас little_poaitive содержит " << little_positive << endl; }
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
сейчас positive содержит -25536
сейчас big_positive содержит -294967296
сейчас little_positive содержит Т
Как видите, программа присваивает переменным типа int, long и char значения, которые находятся вне диапазона хранения каждого типа, поэтому возникает ошибка переполнения. При работе с переменными вам необходимо помнить диапазон значений, которые может хранить переменная каждого типа. Ошибки переполнения плохо уловимы, и поэтому их трудно определить и исправить. Обратите внимание на значение, которое программа выводит для переменной little_positive. Поскольку это переменная типа char, выходной потокcout пытается вывести ее значение в символьном виде. В этом случае выведенное значение соответствует второй половине таблицы ASCII со значением 210.
ПРЕДСТАВЛЕНИЕ О ТОЧНОСТИ
В предыдущем разделе вы узнали, что ошибки переполнения возникают при присваивании переменной значения, которое находится вне диапазона значений для переменной данного типа. Подобно этому вам также необходимо знать, что компьютеры не могут обеспечить неограниченную точность при хранении чисел. Например, при работе с числами с плавающей точкой (числа с десятичной точкой) компьютер не всегда может представить число с требуемой точностью. Поэтому возможны ошибки округления, которые тяжело обнаружить.
Следующая программа PRECISE. CPP присваивает значение чуть меньше 0.5 переменнымтипа float и double. К сожалению, поскольку компьютер обладает ограниченной способностью в представлении чисел, переменные реально содержат не присваиваемые им значения, а число 0.5:
#include <iostream.h>
void main(void)
{    float f_not_half = 0.49999990;    double d_not_half = 0.49999990;    cout << "Значение типа float 0.49999990 равно " << f_not_half << endl;    cout << "Значение типа double 0.49999990 равно " << d_not_half << endl; }
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
Значение типа float 0.49999990 равно 0.5
Значение типа double 0.49999990 равно 0.5
Как видите, значения, присваиваемые программой переменным, и значения, которые переменные содержат в действительности, не идентичны. Такие ошибки округления происходят потому, что компьютер должен представлять числа, используя фиксированное количество единиц и нулей. В большинстве случаев компьютер может точно представлять числа. Однако иногда, как показано в этой программе, компьютер представляет числа приближенно, а не точно. При программировании вам необходимо всегда помнить о точности. В зависимости от значений, с которыми работают ваши программы, могут возникать трудно обнаруживаемые ошибки округления.
ИСПОЛЬЗОВАНИЕ КОММЕНТАРИЕВ ДЛЯ УЛУЧШЕНИЯ ЧТЕНИЯ ВАШИХ ПРОГРАММ
По мере усложнения ваших программ количество содержащихся в них операторов может сделать программы слишком трудными для понимания. Поскольку другим программистам может потребоваться понять и, возможно, изменить ваши программы, вам следует делать программы более удобочитаемыми. Способы улучшения удобочитаемости программ включают:
Использование понятных по смыслу имен переменных, описывающих их применение.
Использование подходящих отступов и выравнивания (см. урок 7).
Использование пустых строк для разделения несвязанных операторов.
Использование комментариев, которые объясняют работу программы.
При создании программ вы можете поместить в исходном файле замечания, которые объясняют работу программы. Такие замечания (называемые комментариями) не только помогают другим программистам понять вашу программу, но могут напомнить, почему программа содержит определенные операторы, если вы ее посмотрите через несколько месяцев. Для размещения комментария в своих программах на C++ просто поставьте два знака прямого слеша (//), как показано ниже:
// Это комментарий
Когда компилятор C++ встречает двойной слеш, он игнорирует весь оставшийся на этой строке текст. По крайней мере размещайте в начале каждой программы комментарии, которые указывают, кто написал программу, когда и почему:
// Программа: BUDGET.CPP // Программист: Kris Jamsa // дата создания: 1-10-96 // // Цель: Ежемесячная информация о бюджете.
При выполнении вашей программой различных процессов вам следует поместить до или после определенных операторов комментарии, которые объясняют их назначение. Например, рассмотрим следующий оператор присваивания:
distance_to_the_moon = 238857; // Расстояние в милях
Комментарий справа от оператора присваивания обеспечивает дополнительную информацию всем, кто читает программу. У начинающих программистов часто возникают проблемы, связанные с тем, что и когда комментировать. Как правило, вы включаете немного комментариев в ваши программы. Поэтому убедитесь, что они полезны. Следующие комментарии не дают дополнительной информации программистам, читающим код:
аде =32; // Присвоить 32 переменной age salary = 25000.75; // Присвоить 25000.75 переменной salary
Цель использования комментариев заключается в том, чтобы объяснить работу программы.
Добавление комментариев в ваши программы
При создании программ включайте комментарии, которые объясняют работу программы. Если другим программистам понадобится изменить вашу программу, они смогут воспользоваться комментариями, чтобы понять поведение программы. Обычно в программах на C++ комментарий начинается с двойного слеша:
// Это комментарий C++
Когда компилятор C++ встречает двойной слеш, он игнорирует весь текст (оставшийся в текущей строке), который следует за слешем. Хорошие программы должны быть легки для чтения и понимания. Комментарии улучшают удобочитаемость вашей программы.
Замечание: В дополнение к использованию комментариев для улучшения удобочитаемости своей программы вам следует использовать пустые строки для разделения несвязанных операторов. Когда компилятор C++ встречает пустую строку, он просто пропускает ее.
ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ
Из этого урока вы узнали, что программы во время выполнения хранят информацию в переменных. Говоря кратко, переменная представляет собой имя, которое ваша программа назначает ячейке памяти, в которой программа хранит информацию. Прежде чем ваша программа сможет использовать переменную, вы должны объявить ее тип и имя. Из урока 5 вы узнаете, как выполнять простые операции, например, сложение и вычитание переменных. Однако до изучения урока 5 убедитесь, что вы освоили следующие основные концепции:
Для использования переменной в вашей программе вы должны объявить ее тип и имя.
Имена переменных должны быть уникальны и понятны по смыслу другим программистам, читающим ваш исходный текст. Имя переменной должно соответствовать ее назначению.
Имена переменных должны начинаться с буквы или символа подчеркивания.
В C++ буквы верхнего и нижнего регистров считаются разными.
Тип переменной определяет тип значения, которое переменная может содержать. Общими типами переменных являются char, int, float и long.
Комментарии повышают удобочитаемость вашей программы, поясняя ее работу. В программах на C++ комментарии начинаются с двойного слеша (//).

Лабораторная работа по C++ - Условный оператор
Лабораторная работа по C++ - Условный оператор
  Здравствуйте, это моя первая статья, и в ней я расскажу, и покажу на примере решения лабораторной работы по С++ для студентов первого курса.   Тема лабораторной работы: Условный оператор Начнем с первой задачи:Условие: Ввести три числа. Выбрать и напечатать наибольшее из них.  Остановимся на алгоритме решения задачи.  Начнем с подключения нужных нам библиотек. Это stdio.h и conio.h. Они нам нужны для таких функций как: printf() и scanf(), это библиотека stdio.h, а в библиотеке conio.h описана функцияgetch(), которая нужна нам для реализации "задержки" до нажатия Enter.  Дальше у нас идет объявление главной функции. void main() . Здесь немного подробнее. void - тип возвращаемого значения функции, в нашем случае, функция main не возвращает никакого значения. Далее объявляем переменные х1, х2, и х3, которые будут хранить значения трех чисел которые введет пользователь. Они у нас целого типа (int). Выводим приглашение ввести числа, и считываем их в наши переменные. Далее сравниваем, если первое число больше второго, и в то же время больше третьего. Тогда выводим его как максимальное. И вот такие операции проделаем с каждым из трех чисел. Далее напишем команду getch() , которая позволит нам сделать "задержку" до нажатия клавиши Enter.Код:
#include <stdio.h>
#include <conio.h>
void main()
{
int x1, x2, x3;
printf("Введите 3 числа \n");
scanf("%d %d %d", &x1, &x2, &x3);
if ((x1>x2)&&(x1>x3))
printf("наибольшее число %d", x1);
if ((x2>x1)&&(x2>x3))
printf("наибольшее число %d", x2);
if ((x3>x2)&&(x3>x1))
printf("наибольшее число %d", x3);
getch();
}
Описание:Раздел подключения нужных нам библиотек:
#include <stdio.h>
#include <conio.h>
Объявление переменных:
int x1, x2, x3;
Нахождение максимального числа спомощью условных операторов:
if ((x1>x2)&&(x1>x3))
printf("наибольшее число %d", x1);
if ((x2>x1)&&(x2>x3))
printf("наибольшее число %d", x2);
if ((x3>x2)&&(x3>x1))
printf("наибольшее число %d", x3);
Ну и наконец - "задержка"
getch();
На этом у меня всё, надеюсь, что это моя не последняя статья.

Лабораторная работа № 15.
Основы работы в С++ Builder
Время выполнения
6 часов
Цель работы
Научиться использовать управляющие элементы Label, Edit, Button, CheckBox, RadioGroup, ComboBox.
Задачи лабораторной работы
После выполнения работы студент должен уметь:
вводить и редактировать текст;
получать справку от Builder;
запускать на выполнение программу;
искать и исправлять синтаксические и семантические ошибки;
написать текст программы на языке C++Builder; 
применять правила использования в структуре программы основных управляющих элементов Label, Edit, Button, CheckBox, RadioGroup, ComboBox.
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система семейства Windows и С++Builder v.6.0.
Общие теоретические сведения
Изучение управляющих элементов Label, Edit и Button
Изучать наиболее часто используемых управляющих элементов Label, Edit и Button легче, написав программу, например, для расчета суммы вклада в банке с учетом процентной ставки. Для создания формы используются компоненты: Label – для подписей; Edit – для ввода и вывода; Button – для инициирования вычислений. Рекомендуемая компоновка формы программы представлена на рисунке 1.

Рисунок 1. Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
    1. Запустить C++ Builder. При запуске автоматически создается новый проект. Окно C++Builder показано на рисунке 2. Для создания нового проекта, в случае если он не создался автоматически или вы его закрыли, выполнить команду меню File / New /Application.

Рисунок 2. Интерфейс среды программирования C++Builder
Сохранить проект, выполнив команду меню File / Save Project As. При этом, будет сохранено несколько файлов проекта.
На панели компонентов выбрать вкладку Standard, выбрать компонент Label  и щелкнуть левой кнопкой мыши по форме. На этой же вкладке выбрать компонент Edit  и Button . Расположить четыре объекта Label, четыре объекта Edit, один объект Button на форму как показано на рисунке 1.
Изменить подпись формы. Для этого выбрать форму (щелкнуть по заголовку формы) и в окне свойств объекта во вкладке Properties изменить значение свойства Caption (рис. 3). Вместо подписи Form1 ввести «Вклад».

Рисунок 3. Свойство формы Caption (подпись)
    4. Изменить подписи объектов Label1 - Label4 в соответствии с рисунком 1. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке Properties изменить значение свойства Caption.
    5. Убрать текст из объектов Edit1 – Edit4 (например, в поле Edit1 написано «Edit1»). Для этого выбрать каждый объект Edit и в окне свойств объекта во вкладке Properties очистить значение свойства Text.
    6. Поскольку объект Edit4 мы будем использовать для вывода результата (то есть заполняться он будет по нажатию на кнопку, а не вручную), нужно изменить его свойство ReadOnly  на значение true   (что позволит сделать объект Edit4 только для чтения).
    7. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и в окне свойств объекта во вкладке Properties изменить значение свойства Caption на «Вычислить».
Объекты Edit1 – Edit3 предназначены для ввода числовых данных, необходимых для расчета суммы вклада. Для того чтобы пользователь не смог ввести буквы или другие символы, которые могу вызвать ошибку при расчетах, необходимо сделать обработчик нажатий клавиш на клавиатуре. Для этого необходимо выбрать объект Edit1 и в окне свойств объекта открыть вкладку Events («События»). В появившемся списке найти событие OnKeyPress («по нажатию клавиши») и сделать двойной щелчок левой кнопкой мыши по пустому полю. В появившейся заготовке функции написать код обработки нажатия клавиш:

Этим действием все клавиши будут отфильтрованы на клавиатуре кроме цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Нажатие ненужных клавиш будет игнорироваться.
Для объектов Edit2 и Edit3 на обработку события OnKeyPress следует подключить уже созданную функцию Edit1KeyPress. Для этого необходимо выбрать  эту функцию в выпадающем списке  события OnKeyPress.

    8. Общая сумма вклада на один год рассчитывается по формуле:
ОбщСумма=Сумма*Ставка/100
Общая сумма вклада на n-лет рассчитывается по формуле:
, если ОбщСумма0=Сумма
Для реализации расчета в программе необходимо добавить обработчик нажатия кнопки Button1. Для этого дважды щелкнуть по объекту Button1 и в появившейся заготовке функции написать программный код расчета суммы вклада. По тексту программного кода даны комментарии, пошагово описывающие последовательность действий, а для возможности использования функции округления ceil необходимо подключить модуль math.h (в начале кода программы):


Сохраняется проект нажатием кнопки  на панели инструментов. Далее проводится отладка и тестирование программы.

Лабораторная работа № 26.
Линейные алгоритмы в C++
Время выполнения
2 часа
Цель работы
Научиться работать в интегрированной среде программирования (ИСП) и приобрести навыки  составления линейных алгоритмов.
Задачи лабораторной работы
После выполнения работы студент должен уметь:
Вводить и редактировать текст (манипуляция с символами, строками, блоками как в пределах одного окна, так и между ними);
Получать справку от ИСП;
Компилировать и запускать на выполнение программу;
Искать и исправлять синтаксические и семантические ошибки;
Выполнять трассировку (пошаговую отладку) программы;
Инициировать и изменять значения переменных;
Написать текст программы по схеме алгоритма, и, наоборот, по тексту программы составить схему её алгоритма;
Написать текст программы на языке программирования C++; 
Применять в структуре программы типы данных, арифметические операции, математические функции, функции ввода и вывода, оператор присваивания – и правила их использования;
Проводить тестирование программы, используя известные ему приложения (например, Excel или MathCAD).
Перечень обеспечивающих средств
Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система семейства Windows и язык программирования С++.
Общие теоретические сведения
Интегрированная среда программирования Borland С++ 
Интегрированная среда программирования (ИСП) для Borland C++ (BC) и для Turbo Pascal (TP) очень схожи, поэтому здесь описаны команды для среды BC. Окно ИСП состоит из 4-х основных частей: главного меню, окна редактирования, окна сообщений и строки состояния, в каждую из которых можно войти с помощью «мыши».

Рисунок 1. Интерфейс интегрированной среды программирования Borland C++
«Главное меню» доступно клавишей F10 или путем нажатия комбинаций клавиш ALT и первой буквы соответствующего элемента меню. 
Таблица 1. Меню File, команды работы с файлами
 New  открыть новое окно редактирования
 Open...F3  открыть существующий файл с диска
 Save   F2  сохранить программу под старым именем
 Save as...  сохранить программу под новым именем
 Save all  сохранить все файлы из всех окон
 Change dir...  сменить каталог
 Print печать программы 
 Print setup...  установка параметров печати
 Dos shell  временный выход в MS DOS
 Exit   Alt+X  выход из ИПС
Таблица 2. Меню Edit, команды редактирования
 Undo   Alt+BksSp  отменить последнее действие
 Redo  повторить последнее действие
 Cut      Shift+Del  вырезать выделенный фрагмент
 Copy    Ctrl+Ins  копировать выделенный фрагмент в буфер обмена
 Paste    Shift+Ins  вставить содержимое буфера обмена
 Clear    Ctrl+Del  удалить выделенный фрагмент
 Show clipboard  показать окно буфера обмена
 Search  команды поиска
 Find...  найти фрагмент, указанный в окне
 Replace...  найти фрагмент и заменить его на указанный в окне
 Search again  повторить поиск
 Go to  line number  перейти к указанному номеру строки
 Show last compiler error  показать последнюю ошибку компиляции
 Find error...  найти ошибку
 Find procedure...  найти процедуру, заданную в окне
 Previous browser  покачать информацию предыдущего окна
 Objects  показать в окне «дерево» объектных файлов
 Units  показать в окне «дерево» модулей
 Global  показать все глобальные переменные
 Symbol...  задать идентификатор для выдачи номеров строк с ним
Таблица 3. Меню Run, команды запуска расчета
 Run    Ctrl+F9  запуск программы на исполнение
 Step over    F8  пошаговое выполнение процедур
 Trace into    F7  пошаговое выполнение операторов
 Go to  cursor    F4  выполнение фрагмента до курсора
 Program reset    Ctrl+F2  завершение сеанса отладки
 Parameters...  настройка параметров
Таблица 4. Меню Compile, компиляция программы
 Compile    Alt+F9  компиляция файла
 Make        F9  перекомпиляция только измененных модулей
 Build  перекомпиляция всех модулей
 Target...Real  выбор режима-приложения
 Primary file...  указание главного файла для команд Make и Build
 Clear primary  отмена указания главного файла
 Information...  информация о скомпилированном файле
Таблица 5. Меню Debug, команды отладки
 Breakpoints  управление точками прерывания
 Call stack    Ctrl+F3  показ имен процедур до работающей процедуры
 Register  информация о регистрах процессора
 Watch  информация о значениях переменных и выражений
 Output  отображение результатов без графики
 User screen    Alt+F5  просмотр результатов программы
 Evaluate modify...Ctrl+F4  просмотр и изменение значений переменных
 Add watch...    Ctrl+F7  просмотр конкретных значений переменных
 Add breakpoint...  установка условных и безусловных точек прерывания
Таблица 6. Меню Tools, команды работы с сообщениями ИПС и утилитами отладки
 Messages  переход в окно сообщений
 Go to  next    Alt +F8  переход к следующему элементу окна
 Go to  previous    Alt+F7  переход к предыдущему элементу окна
 Grip    Shift+F2  вызов программы Grip
 Turbo Assembler  Shift+F3  вызов программы Assembler
 Turbo Debugger Shift+F4  вызов программы Debugger
 Turbo Profiler    Shift+F5  вызов программы Profiler
Таблица 7. Меню Options, команды установки параметров интегрированной среды
 Compiler  параметры, определяющие работу компилятора
 Memory Sizes  размеры стека, размер памяти
 Linker  параметры компоновщика
 Directories  задает каталоги, для помещения и извлекания файлов
 Browser  опции, связанные с просмотром
 Tools  местоположение программных компонентов меню
 Environment  параметры работы с мышью, редактором и т.п.
 Open  открывает файл конфигурации
 Save  сохраняет файл конфигурации
 Save as…  сохраняет файл конфигурации с запросом имени
Таблица 8. Меню Window, команды управления окнами
 Tile  показать все открытые окна редактирования
 Cascade  показать в каскадном виде все открытые окна редактирования
 Close all  закрыть все открытые окна
 Refresh display  восстановление изображения ИПС после сбоев
 Save Move    Ctrl+F5  изменение размеров окна
 Zoom     F5  раскрытие окна до полного размера экрана
 Next       F6  переход в следующее окно
 Previous  Shift+F6  переход в предыдущее окно
 Close    Alt+F3  закрытие окна
 List    Alt+0  перечисление всех окон с момента работы ИПС
Таблица 9. Меню Help, вызов справочной информации
 Contents  вывод оглавления справки
 Index    Shift+Fl  вывод алфавитного перечня терминов 
 Topic search    Ctrl+Fl  вывод справки о термине, указанным курсором
 Previous topic  Alt+Fl  переход к предыдущей справке
 Using help  вывод инструкции по работе со справочной информацией
 Filet...  добавление и удаление информационных файлов
 Compiler directives  вывод списка всех директив компилятора
 Procedures and functions  вывод алфавитного перечня процедур и функций
 Reserved words  вывод зарезервированных слов
 Standards units  вывод стандартных модулей
 Error messages  вывод о сообщениях ошибок
 About ...  служебная информация
Для входа в «Окно редактирования» нажать комбинацию клавиш <Alt> и <цифра>, где <цифра> - номер окна.  С окнами можно:
создавать новое – <Alt>+<F>+<N> (или File/New),
закрывать текущее  – <Alt>+<F3>.
Таблица 10. «Горячие» клавиши
 <Insert>  переключение режима вставки/замены символов
 <Delete>  удаление символа, находящегося над курсором
 <Backspace>  удаление символа, находящегося слева от курсора
 <End>  перемещение курсора в конец текущей строки
 <Home>  перемещение курсора и начало текущей строки
 <Enter>  для перехода на новую строку и разрезания текущей строки на две
<Page Up>   «прочитывание» текста на один экран вперед
 <Page Down>  «прочитывание» текста на один экран назад
 <Сарs Lock>  переключение режима прописные/строчные буквы
 <Shift>  временное переключение режима прописные/строчные буквы
 <Ctrl> + <y>  позволяет удалить текущую строку
 <Ctrl> + <К> + <С> (или <Ctrl> + <Insert>)  копирование
 <Ctrl> + <К> + <V>(или <Shift> + <Insert>)  перемещение
 <Ctrl> + <К> + <Y>(или <Ctrl>+<Delete>)  удаление
 <Ctrl> + <К> + <H>  отмена выделения блока
 <F2> (или <Alt> + <F2>)  сохранение в файле на диске
 <F3> (для существующего)  считывание из файла на диске
 <Tab>  перемещение указателя в открывшемся окне
 <Alt>+<F9>  проверка программы на ошибки (компиляция)
 <Ctrl>+<F1>  справка по ошибке
 <Ctrl> + <F9>  создание файла с расширением «.ехе»
 <Alt> + <F5>  просмотр результатов отчетов
Для обнаружения алгоритмических ошибок можно воспользоваться следующими  операциями, условно состоящими из нескольких шагов:
Установить индикацию (или просмотреть значения переменных) в процессе выполнения программы – <Ctrl>+<F7>. В открывшемся окне ввести имя переменной;
Провести трассировку (т. е. построчно выполнить) – нажимать на <F7> (или <F8> – для исключения функций); 
Изменить (если требуется) значения переменной в процессе трассировки программы – <Ctrl>+<F4>. Набрать в окне “Expression” имя интересующей переменной, после чего в окне “Result” высветится ее значение. Если в окне “New Value” ввести новое значение, то дальнейшие вычисления будут выполняться уже с ним. 
Во всех операциях указатель можно передвигать с помощью клавиши <Tab>. 
Для входа в «Окно сообщений» можно воспользоваться командой главного меню Tools/Messages. Переход к следующему элементу сообщения <Alt> + <F8>. Переход к предыдущему элементу сообщения  <Alt> + <F7>.
«Строка состояния» содержит пояснения о назначении пунктов выпадающего меню (см. выше).
С учетом представленной ИСП, может быть рекомендован следующий план работы при создании и отладки новой программы.
Открыть новое окно редактирования для ввода новой программы (File/New).
Набрать текст новой программы.
Записать текст программы на диск  (File/Save или <F2>).
Запустить программу на выполнение (Run/Run или <CTRL>+<F9>).
Посмотреть результаты выполнения программы (<ALT>+<F5>).
Сохранить отлаженную программу на диске (<F2>).
Основы языка С++
Приступая к составлению программ, следует помнить, что:
    1) Программа должна оформляться в соответствии со структурой языка программирования С++ (табл. 11);
    2) Программа должна иметь начало и конец, обозначенные операторным  блоком { … }; 
    3) Каждая переменная программы должна быть объявлена в начале программы с указанием её типа. Переменная может быть инициализирована некоторым значением. В имени переменной могут использоваться цифры и буквы латинского алфавита. Базовые типы данных даны в табл. 12;
    4) Все арифметические выражения состоят из операндов, которые должны расписываться в одну строчку. Если в формуле имеется дробь, то числитель и знаменатель указывается в круглых скобках. Основные операции, применяемые в выражениях, представлены табл. 13. 
Операция % выполняется только с целыми числами, и результатом вычисления является целое число.
В языке С++ операции инкремента (++) и декремента (––) могут появляться перед или после своего операнда. Когда операция является префиксом своего операнда, то операнд инкрементируется или декрементируется и его новое значение является результатом вычисления выражения. Когда операция является постфиксом своего операнда, то непосредственным результатом выражения является значение операнда перед его инкрементированием или декрементированием. После этого результат используется в контексте, а операнд инкрементируется или декрементируется;
    5) Вычисления в выражениях выполняются в соответствии с приоритетом операций, распределенных по категориям (табл. 14);
    6) Каждый оператор должен заканчиваться символом « ; » - признаком окончания действия;
    7) Для ввода и вывода информации используются специальные функции (табл. 15). После вывода информации курсор устанавливается в этой же строке. Если есть необходимость переслать курсор на начало следующей строки, то используются в С++ – специальные управляющие символы «\n» и «endl»;
    8) В составе транслятора среды программирования имеются стандартные функции, применяемые при вычислениях. Основные, наиболее часто используемые функции представлены табл. 16. Необходимо обращать внимание на подключаемые библиотечные модули, содержащие стандартные функции. 
Таблица 11. Структура программы
 Назначение  Структура
 Директивы препроцессора  # include < Имя библиотеки> # define  Имя Макрос
 Раздел объявлений и соглашений   label    Номер метки;const    Имя константы = Значение константы;Имя типа переменной    Список имен переменных;
 Раздел описания процедур и функций  function Имя функции (входные и выходные данные){Тело функции}
 Основная программа  main ( ){ Тело программы }
Таблица 12. Типы данных и диапазон представления чисел
   Диапазон  Тип
 целые числа  0…255  uns char
 -128…127  char
 -32768…32767  int, short
 0…65535  uns short
 -2147483648…2147483647  long
 0…4294967295  uns long
 вещественные числа  3,4Е-38…3,4Е38  float
   
 1,7Е-308…1,7Е308  double
 3,4Е-4932…1,1Е4932  long double
   
Таблица 13. Операции
   Назначение  Операция
 аддитивные  арифметические  +,  –
 мультипликативные  *, /
 остаток от деления  %
 отношений  равно  == 
 не равно  !=
 больше  >
 меньше  <
 больше или равно  >=
 меньше или равно  <=
 логические  и  &&
 или  ||
 отрицание  !
 присваивания  простое  присваивание  =
 сложение с присваиванием  +=
 вычитание с присваиванием  –=
 умножение с присваиванием  *=
 деление с присваиванием  /=
 остаток от деления с присваиванием  %=
 унарный инкремент  ++
 унарный декремент  – –
Таблица 14. Приоритет выполнения операций
 Операция  Приоритет  Категория
 !,  ++,  – –  Первый  Унарные
 *,  /,  %,  &&  Второй  Мультипликативные
 +,  –, ||  Третий  Аддитивные
 ==, !=, <, >, <=, >=  Четвертый  Отношения
 =, *=, /=, %=, +=, –=  Низший  Простое и составное
Таблица 15. Функции  и процедуры ввода и вывода
   Спецификаторы форматов и управляющие символы  Функции
 Ввод  Библиотека: stdio.h %d, %i – целые %f – вещественные %с – символьные %s – строковые  scanf (“специф“, & идентификатор); например, scanf (“%d%f”, &a, &b); scanf (“%c”, &ch); scanf (“%s”, st);
 Библиотека: iostream.h  cin>>идентификатор; например, cin>>a;  cin>>b>>ch; cin>>st;
 Вывод  Библиотека: stdio.h %d, %i – целые %f – вещественные %с – символьные %s – строковые \n – перевод строки  printf (“текст специф“, идентиф); например, printf (“Значение а= %d\n”, a); printf (“а= %d\n и b= %f\n ”, a, b);  printf (“\n символ= %c \n ”, ch); printf (“ строка: %s \n ”, st);
 Библиотека: iostream.h \n и endl – перевод строки  cout<<текст<<идентификатор; например, cout<<”Значение a=”<<a<<”\n”;  cout<<” a=”<<a<<” b=”<<b<<endl; cout<<”символ: ”<<ch<<endl; cout<<”строка: ”<<st<<endl;
Таблица 16. Часто используемые стандартные функции
 Назначение  Функция
 абсолютное значение по модулю  abs (int x),  fabs (double x), labs ( longint x)
 тригонометрические функции (в радианах)  double cos (double x) double sin (double x) double atan (double x) double tan (double x)
 экспонента числа – expx  double exp (double x)
 вычисляет остаток от числа  double fmod (double x, double y)
 вычисляет целую часть от числа  struct div ( int x; int y)
 натуральный логарифм числа  double log (double x)
 десятичный логарифм  double log10 (double x)
 квадрат числа  double sqr (double x)
 квадратный корень числа  double sqrt (double x)
 вычисляет число x в степени y  double pow (double x, double y)
 возвращает случайное число в диапазоне 0…x;  int rand () 
 округляет число до целого   double floor (double x)
Составление линейных алгоритмов
Линейными называются алгоритмы, процесс пошагового выполнения которых можно изобразить прямой линией – сверху вниз. 
Пример. Дано двухзначное целое число b. Найти сумму его цифр.
Текстуальная форма алгоритма задачи:
    1) Ввести  число b с клавиатуры в ЭВМ;
    2) Для выделения первой цифры воспользуемся известным в математике способом деления числа b на 10, и возьмем целое число от этого деления;
    3) Для выделения второй цифры разделим число b на 10, и возьмем дробную часть от этого деления;
    4) Найдем сумму найденных цифр;
    5) Полученный результат выдать на экран дисплея.
Графическая форма представления алгоритма дана в виде схемы (рис. 2), использующей блоки для обозначения каждого действия и приведен текст программы.

 Рисунок 2. Схема алгоритма к примеру 1
#include <iostream.h>                                              
#include <math.h>
#include <stdlib.h>
       main ()
      { int b, x, y,  z;
         div_t  res;     // описание структуры функции div:
     // struct div_t ( int quit; int rem;) div (n, d);
                                   // где n    – числитель, d -  знаменатель,
                                    //       quit – целая часть от деления,.
            //       rem – дробная часть от деления.
        cout <<“ Введите целое число : “ ;  cin >> b >>endl ;
          res = div (b, 10) ;   // делим число b на 10, и расчленяем на 
         x = res.quit ;   //     целую часть и
         y = res.rem ;    //     дробную часть
          z = x + y ;
         cout <<“ Сумма цифр числа ”<< b << “ равна “ << z <<endl;
       }
HYPERLINK "http://informatics.ssga.ru/tasks/tasks-lab-21" Варианты заданий
Содержание отчета
Титульный лист по стандартной форме.
Постановку задачи.
Необходимые математические выкладки (и/или поясняющую картинку).
Алгоритм решения задачи (в виде блок-схемы или в текстуальной форме).
Тексты программы.
Тестовые наборы  (тест – это проверка работоспособности программы по контрольным значениям данных).
Результаты вычислений по каждому тесту.
Отчет для лабораторной работы составляется в одном и подлежит защите. Для защиты лабораторной работы студент должен подготовиться к ответу на контрольные вопросы.
Технология выполнения работы
Нарисовать картинку, поясняющую логику решения задачи и составить алгоритм. Написать программу, которая в задаче под пунктом использует целочисленную арифметику. 
Вопросы для защиты работы
В чем особенности формализованного языка?
Что понимают под вычислительным алгоритмом?
Какие требования предъявляются к алгоритмам?
В чём суть основных этапов подготовки и компьютерного решения задач?
Общие правила построения программ.
Как получают исполняемую программу?
Какие операции можно выполнять над величинами целого типа? Укажите приоритет их выполнения при расчете значения арифметического выражения.
Как определить остаток от деления одной величины целого типа на другую?
Как оформляется оператор вывода результатов на экран? Что можно указывать в качестве элементов списка вывода? Какой символ используется для разделения элементов списка вывода? Как должен быть оформлен оператор вывода, чтобы информация выводилась на экран с новой строки?
Как оформляется оператор ввода? Что можно указывать в качестве элементов списка ввода? Как работает оператор ввода (что происходит при его выполнении)?
Как оформляется оператор присваивания? Как он работает (что происходит при его выполнении)?
Как проверить, правильно ли работает программа, в Индивидуальные задания к лабораторной работе № 26
"Линейные алгоритмы"
Варианты заданий
Составить алгоритм, написать программу на псевдокоде и на языке программирования С++, отладить программу на ПК. Написать тест программы. Все результаты предъявить преподавателю. Подготовить ответы на контрольные вопросы.
 № варианта  Задачи
 1  Дано трехзначное число. Найти число, полученное при прочтении его цифр справа налево.
 2  Дано натуральное число n (n>9). Найти число единиц в нем.
 3  Дано трехзначное число. Найти сумму его крайних цифр.
 4  Дано четырехзначное число. Найти произведение и сумму второй и последней  цифр заданного числа.
 5  Даны два целых числа. Разделить каждое число на целое число d. Найти произведение их остатков от   деления. 
 6  Даны два целых числа. Переменой d присвоить результат деления первого  числа на второе число,  а переменой f присвоить результат деления второго числа на первое число. Найти произведение их остатков от деления.
 7  Дано четырехзначное число. Найти сумму и произведение его цифр.
 8  Дано натуральное число n (n>99). Найти число  десятков в нем.
 9  Даны два целых числа. Разделить каждое число на целое число d. Найти сумму их целой части от деления.
 10  Дано трехзначное число. Найти число, полученное при перестановке первой и последней цифр заданного числа.
 11  Дано четырехзначное число. Найти сумму и произведение второй и третьей цифр заданного числа.
 12  Дано трехзначное число. Найти число, полученное при перестановке первой и второй цифр заданного числа
которой проводятся какие-то вычисления?

Индивидуальные задания к лабораторной работе № 15
"Основы работы в C++ Builder"
Задание № 1
Написать программу расчета стоимость поездки на автомобиле, если известна цена бензина (руб./л), потребление бензина (литр на 100 км) и расстояние (км). Защитить программу.
Технология выполнения работы
Для создания формы использовать компоненты: Label – для подписей; Edit – для ввода и вывода; Button – для инициирования вычислений.
Рекомендуемая компоновка формы:

Поля «Цена бензина», «Потребление бензина» и «Расстояние» должно быть с проверкой вводимых данных для предотвращения ввода нечисловых данных.
Программа должна выдавать сообщение об ошибке, если не заполнено хотя бы одно поле из трех («Цена бензина», «Потребление бензина» и «Расстояние»).
Поле «Стоимость» должно быть только для чтения.
Для защиты программы задания № 1 необходимо:
иметь рабочий вариант программы;
знать основные свойства компонентов label, edit, button и уметь их использовать;
ориентироваться в программном коде и знать все операторы, используемые в программе.
Изучение управляющего элемента CheckBox
Изучать управляющий элемент CheckBox лучше, написав программу, например, расчета стоимости электронного заказа по меню. Список блюд выбирается с помощью компонента CheckBox. При выборе какого-либо блюда автоматически высчитывается стоимость заказа (при установлении флажка – счет увеличивается на стоимость блюда, при снятии – уменьшаться на соответствующее значение). При нажатии на кнопку «Заказать» появляется сообщение об успешном заказе с общим счетом заказа.
Для создания формы используются компоненты: Label – для подписей; CheckBox – для выбора; Edit – для вывода; Button – для инициирования вычислений. Рекомендуемая компоновка формы программы представлена на рисунке 1.

Рисунок 1. Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
    1. Запустить C++Builder. При запуске автоматически создается новый проект. 
    2. На панели компонентов выбрать вкладку Standard, выбрать компонент Label  и щелкнуть левой кнопкой мыши по форме. На этой же вкладке выбрать компонент CheckBox , Edit и Button . Расположить три объекта Label, семь объектов CheckBox, один объект Edit и один объект Button на форму как показано на рисунке 1.    3. Изменить подпись формы. Для этого выбрать форму (щелкнуть по заголовку формы) и в окне свойств объекта во вкладке Properties изменить значение свойства Caption. Вместо подписи Form1 ввести «Меню».

Рисунок 2. Свойство формы Caption (подпись)
    4. Изменить подписи объектов Label1 - Label3 в соответствии с рисунком 2. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке Properties изменить значение свойства Caption.
    5. Изменить подписи объектов CheckBox1 - CheckBox7. Название блюд можно придумать самим. Для изменения подписи объекта CheckBox выбрать каждый объект CheckBox и в окне свойств объекта во вкладке Properties изменить значение свойства Caption.
    6. Выбрать объект Edit1 и в окне свойств объекта во вкладке Properties присвоить свойству Text значение «0» (ноль).
    7. Поскольку объект Edit1 используется для вывода результата (то есть заполняться он будет по нажатию на кнопку, а не вручную), нужно изменить его свойство ReadOnly  на значение true  (то есть сделать объект Edit4 только для чтения).
    8. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и в окне свойств объекта во вкладке Properties изменить значение свойства Caption на «Заказать».
    9. Изначально ни одно блюдо не выбрано и общая стоимость заказа (счет) равна нулю. Для расчета общей стоимости заказа необходимо объявить глобальную переменную и задать ей значение 0 (ноль). Для этого нужно выделить форму и в окне свойств объекта во вкладке Events (События) дважды щелкнуть левой кнопкой мыши напротив события OnCreate. Перед заготовкой функции объявим переменную schet, а в теле функции приравняем переменную schet к нулю.
    10. Каждое блюдо из меню должно иметь свою стоимость. Допустим, цены на блюда будут следующие:
Фаршированная форель 369 руб.,
Телятина под соусом 349 руб.,
Крем-суп из шампиньонов 189 руб.,
Рулет со шпинатом 179 руб.,
Пицца гавайская 299 руб.,
Ванильный коктейль 149 руб.,
Напиток грейпфрут 199 руб.
Стоимость каждого блюда должна быть записана в массив price, который должен выглядеть следующим образом: 

Стоимость заказа должна состоять из стоимости выбранных блюд. Например, при выборе фаршированной форели (нулевой элемент в массиве) стоимость заказа должна увеличиться на 369 руб., то есть sсhet=schet+price[0];
Если отказываются от форели (то есть снимается галочка), то стоимость заказа должна уменьшится на 369 руб.,  то есть schet=schet-price[0]; Точно также должны обрабатываться остальные блюда.

    11. Для создания функции-обработчика нажатий для объекта CheckBox1 – необходимо дважды щелкнуть по нему левой кнопкой мыши. В появившейся заготовке функции необходимо написать программный код, который будет выполнятся при установке или снятию флажка в объекте CheckBox1.
Пример кода для объекта CheckBox1 (Фаршированная форель 369 руб.) приведен ниже:

Так же создаются и функции-обработчики для остальных пунктов меню (объектов CheckBox2 - CheckBox7).
    12. При нажатии на кнопку «Заказать» должно появиться сообщение о принятии заказа. В сообщении должна быть указана общая стоимость заказа.
Для обработки нажатия кнопки необходимо дважды щелкнуть левой кнопкой мыши на объекте Button1 и в появившейся заготовке функции написать программный код:

Сохраняется проект нажатием кнопки  на панели инструментов. Далее проводится отладка и тестирование программы.
Изучение управляющего элемента RadioGroup 
Изучать управляющий элемент RadioGroup лучше, написав программу, например, для расчета сопротивления резисторов, соединенных параллельно или последовательно. 
Для создания формы используются компоненты: Label – для подписей; Edit – для ввода и вывода; RadioGroup – для выбора одного из перечисленных вариантов; Button – для инициирования вычислений. Рекомендуемая компоновка формы программы представлена на рисунке 3.

Рисунок 3. Рекомендуемая компоновка формы
Для создания такой формы необходимо выполнить следующие действия.
    1. Запустить C++ Builder.  При запуске автоматически создается новый проект. Для создания нового проекта, в случае если он не создался автоматически или вы его закрыли, выполнить команду меню File / New /Application.
    2. Сохранить проект в свою рабочую папку, выполнив команду меню File / Save Project As. Будет сохранено несколько файлов проекта.
    3. На панели компонентов выбрать вкладку Standard, выбрать компонент Label  и щелкнуть левой кнопкой мыши по форме. На этой же вкладке выбрать компонент Edit ,  Button  и RadioGroup .  Расположить три объекта Label, три объекта Edit, один объект Button и один объект RadioGroup на форму как показано на рисунке 3. При создании объекта RadioGroup1, он не содержит ни одного варианта выбора и по умолчанию выглядит как показано на рисунке 4. 

 Рисунок 4. Внешний вид объекта RadioGroup1 без настроек
    
    4. Изменить подпись формы. Для этого выбрать форму (щелкнуть по заголовку формы) и в окне свойств объекта во вкладке Properties изменить значение свойства Caption. Вместо подписи Form1 ввести «Сопротивление» (рис. 5).

Рисунок 5. Свойство формы Caption (подпись)
    5. Изменить подписи объектов Label1- Label3 в соответствии с рисунком 3. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке Properties изменить значение свойства Caption.
    6. Убрать текст из объектов Edit1 – Edit3 (например, в поле Edit1 написано «Edit1»). Для этого выбрать каждый объект Edit и в окне свойств объекта во вкладке Properties очистить значение свойства Text.
    7. Поскольку объект Edit3 используется для вывода результата (то есть заполняться он будет по нажатию на кнопку, а     не вручную), нужно изменить его свойство ReadOnly  на значение true  (то есть сделать объект Edit4 только для чтения).
    8. Настроить объект RadioGroup1. Этот объект будет использоваться как переключатель способов соединения резисторов (параллельное и последовательное). Задать подпись объекта можно, изменив значение свойства Caption на «Соединение». Для того чтобы создать список вариантов для переключения необходимо найти в списке свойств объекта RadioGroup1 свойство Items и щелкнуть левой кнопкой мыши на кнопке с тремя точками (рисунок 6). В появившемся окне (рис. 7) перечислить возможные варианты подключения.

Рисунок 6. Список свойств объекта RadioGroup1

Рисунок 7. Окно редактора списка вариантов
Для программного выбора одного из вариантов в объекте RadioGroup используется свойство ItemIndex. Это же свойство позволяет отслеживать выбранный вариант. Так для выбора первого варианта (параллельного соединения) нужно задать значение свойства ItemIndex = 0 (рис. 6).
В результате проделанных операций объект RadioGroup1 будет содержать два пункта, первый будет выбран (рис. 8).

Рисунок 8. Настроенный объект RadioGroup
    9. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и в окне свойств объекта во вкладке Properties изменить значение свойства Caption на «Расчет».
    10. Объекты Edit1 и Edit2 предназначены для ввода числовых данных, необходимых для расчета сопротивления. Для того чтобы пользователь не смог ввести буквы или другие символы, которые могу вызвать ошибку при расчетах, необходимо сделать обработчик нажатий клавиш на клавиатуре. Для этого необходимо выбрать объект Edit1 и в окне свойств объекта открыть вкладку Events («События»). В появившемся списке найти событие OnKeyPress («по нажатию клавиши»)  и сделать двойной щелчок левой кнопкой мыши по пустому полю. В появившейся заготовке функции написать код обработки нажатия клавиш:

Этим самым все клавиши стали отфильтрованы на клавиатуре, кроме цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Теперь нажатие ненужных клавиш будет игнорироваться.
Для объектов Edit2 на обработку события OnKeyPress следует подключить уже созданную функцию Edit1KeyPress. Для этого необходимо выбрать  эту функцию в выпадающем списке  события OnKeyPress  

    11. Сопротивление для последовательного соединения вычисляется по формуле R=R1+R2; а для параллельного R=(R1*R2)/(R1+R2).
Для реализации расчета в программе необходимо добавить обработчик нажатия кнопки Button1. Для этого надо дважды щелкнуть по объекту Button1 и в появившейся заготовке функции написать программный код расчета общего сопротивления.

Далее проект сохраняется, проводится отладка и тестирование программы.
Задание № 2
Написать программу расчета значений тригонометрических функций для угла X. Защитить программу.
Технология выполнения работы
Рекомендуется следующая компоновка формы:

Угол может быть введен как в радианах (по умолчанию), так и в градусах. Для указания того, что введенный угол в градусах на форму поместить переключатель CheckBox.
Выбор тригонометрической функции должен осуществляться с помощью объекта RadioGroup.
По умолчанию программа должна выдавать результат, округленный до четвертого знака. Для возможности получения неокругленного результата использовать переключатель CheckBox.
Поле «Угол X=» сделать с проверкой вводимых данных для исключения ввода нечисловых данных.
Программа должна выдавать сообщение об ошибке, если поле «Угол X=» не заполнено.
Поле «Y=» должно быть только для чтения;
Для защиты программы задания № 2 необходимо:
Иметь рабочий вариант программы;
Знать основные свойства всех компонентов, вынесенных на форму,  и уметь их использовать;
Ориентироваться в программном коде и знать все операторы, используемые в программе.
Изучение управляющего элемента ComboBox 
Изучать управляющий элемент ComboBox проще, написав программу, например, для перевода единиц измерения длины.
Рекомендуемая компоновка формы программы представлена на рисунке 9.

 Рисунок 9. Рекомендуемая компоновка формы
Для создания формы использованы компоненты: Label – для подписей; Edit – для ввода и вывода; ComboBox – для выбора единиц измерения исходной и результирующей величины; Button – для инициирования вычислений.
Для создания такой формы необходимо выполнить следующие действия.
    1. Запустить C++ Builder. При запуске автоматически создается новый проект. Для создания нового проекта, в случае если он не создался автоматически или вы его закрыли, выполнить команду меню File / New /Application.
    2. Сохранить проект в свою рабочую папку, выполнив команду меню File / Save Project As. Будет сохранено несколько файлов проекта.
    3. На панели компонентов выбрать вкладку Standard, выбрать компонент Label  и щелкнуть левой кнопкой мыши по форме. На этой же вкладке выбрать компонент Edit ,  Button  и ComboBox .  Расположить три объекта Label, два объекта Edit, один объект Button и два объекта ComboBox на форму как показано на рисунке 9.
    4. Изменить подпись формы. Для этого выбрать форму (щелкнуть по заголовку формы) и в окне свойств объекта во вкладке Properties изменить значение свойства Caption (рис.10). Вместо подписи Form1 ввести «Конвертер».

Рисунок 10. Свойство формы Caption (подпись)
    5. Изменить подписи объектов Label1- Label3 в соответствии с рисунком 9. Для этого выбрать каждый объект Label и в окне свойств объекта во вкладке Properties изменить значение свойства Caption.
    6. Убрать текст из объектов Edit1 и Edit2. Для этого выбрать каждый объект Edit и в окне свойств объекта во вкладке Properties очистить значение свойства Text.
    7. Поскольку объект Edit2 будет использоваться для вывода результата (то есть заполняться он будет по нажатию на кнопку, а не вручную), нужно изменить его свойство ReadOnly  на значение true  (то есть сделать объект Edit4 только для чтения).
    8. Настроить объекты ComboBox1 и ComboBox2. Эти объекты представляют собой выпадающие списки и будут использоваться для выбора единиц измерения длины. Для заполнения списков необходимо в окне свойств объекта во вкладке Properties найти свойство Items и щелкнуть левой кнопкой мыши на кнопке с тремя точками (рисунок 11).

 Рисунок 11. Список свойств объекта ComboBox1
В появившемся окне (рис. 12) перечислить единицы измерения.

Рисунок 12. Окно редактора списка 
Для программного выбора варианта из списка в объекте ComboBox используется свойство ItemIndex. Это же свойство позволяет отслеживать выбранный вариант. Так для выбора первого варианта (единица измерения мм) нужно задать значение свойства ItemIndex = 0 (рис. 11).
Для задания стиля объекта используется свойство Style. По умолчанию значением свойства Style является csDropDown. При таком стиле пользователь может не только выбирать значения из списка, но и осуществлять ввод в окно объекта ComboBox. Поскольку программа будет работать только с заранее заданным набором единиц измерения необходимо запретить редактирование полей ComboBox1 и ComboBox2. Для этого нужно поменять значение свойства Style на csDropDownList. Объект ComboBox со значением свойства Style равным csDropDownList не допускает редактирования и, значит, пользователь просто не сможет указать неправильные данные.
    9. Изменить подпись кнопки Button1. Для этого выбрать объект Button1 и в окне свойств объекта во вкладке Properties изменить значение свойства Caption на «Расчет».
    10. Объект Edit1 предназначен для ввода числовых данных, предназначенных для перевода в другие единицы измерения. Для того чтобы пользователь не смог ввести буквы или другие символы, которые могу вызвать ошибку при расчетах, необходимо сделать обработчик нажатий клавиш на клавиатуре. Для этого необходимо выбрать объект Edit1 и в окне свойств объекта открыть вкладку Events («События») . В появившемся списке найти событие OnKeyPress («по нажатию клавиши»)  и сделать двойной щелчок левой кнопкой мыши по пустому полю. В появившейся заготовке функции написать код обработки нажатия клавиш:

Этим самым все клавиши стали отфильтрованы на клавиатуре кроме цифровых от 0 до 9, запятой и BackSpase (код клавиши 8). Теперь нажатие ненужных клавиш будет игнорироваться.
    11. Для перевода длины из одной единицы измерения в другую нужно перевести величину в базовую единицу измерения (например, метры), а потом уже в требуемую. Например, необходимо перевести 5 миль в ярды. Переводим мили в метры: 5миль=8045м, а затем из метров переводим в ярды: 8045м=8801,969365426696 ярдов.
Таблица соотношений единиц измерений длин с метрами
 1мм=0,001м  1км=1000м  1фут=0,305м
 1см=0,01м  1миля=1609м  1ярд=0,914м
Для реализации расчета в программе необходимо добавить обработчик нажатия кнопки Button1. Для этого дважды щелкнуть по объекту Button1 и в появившейся заготовке функции написать программный код перевода единиц измерения.

Не забыть сохранить проект нажатием кнопки  на панели инструментов, провести отладку и тестирование программы.
Задание № 3.
Написать программу расчета количества секунд между двумя моментами времени. Защитить программу.
Технология выполнения работы
Рекомендуется следующая компоновка формы:

Заполнить вручную списки объектов ComboBox (часы от 0 до 23, минуты и секунды от 0 до 59).
Поле «Прошло секунд» должно быть только для чтения.
Показать программу преподавателю.
Модифицировать программу. Реализовать программное заполнение списков часов, минут и секунд во время запуска программы. Чтобы списки ComboBox1- ComboBox6 заполнялись автоматически при запуске программы, необходимо использовать функцию-конструктор формы TForm1(TComponent*Owner). Заготовка этой функции вставляется в программный модуль автоматически при создании проекта. В заготовке функции необходимо написать программный код:
 

При выполнении выше указанного кода будет очищаться содержимое объектов ComboBox1-ComboBox6. Далее циклом заполниться объект ComboBox1. Поскольку объекты ComboBox1 и ComboBox4 имеют одинаковое содержимое (часы), то можно произвести копирование списка из объекта ComboBox1 в ComboBox4. После копирования циклом заполняется список объекта ComboBox2 (минуты). Поскольку минуты и секунды изменяются от 0 до 59, то можно произвести копирование списка объекта ComboBox2 в объекты ComboBox3, ComboBox5 и ComboBox6.
После того, как все объекты ComboBox заполнены необходимо программным путем выбрать первый элемент в списках этих объектов. Для этого используется свойство ItemIndex.
Для защиты программы задания № 3 необходимо:
иметь рабочий вариант программы;
знать основные свойства всех компонентов, вынесенных на форму,  и уметь их использовать;
ориентироваться в программном коде и знать все операторы, используемые в програ