Лекция №1

Краткий курс в историю создания языка С++

Вначале программисты работали с ограниченным набором примитивных команд, которые состояли из длинных строк нулей и единиц. Вскоре был изобретен ассемблер, способный преобразовывать в машинные команды более понятные для человека инструкции (например ADD() – добавить или MOV() - перемемтить).

Со времением появились языки высокого уровня, как BASIC. Благодаря этим языкам появилась возможность программировать, используя логические конструкции из слов и предложений, например Let I = 100. Эти команды переводились на машинный язык интерпретаторами и компиляторами.

Интерпретатор превращает инструкции программы в команды машинного кода последовательно, по мере чтения текста программы. Компилятор же целиком переводит программный код в некоторую промежуточную форму – объектный файл. Этот этап называется компиляцией. Затем компилятор вызывает программу компановки, которая превращает объектный файл в исполняемый файл программы.

Несмотря на то что текст исходнохо файла (обычно с расширением .с, .срр, .схх) содержит код программы, программой он не является, он предназначен для чтения человеком, а не компьтером. Файл исходного кода не является исполняемым и не может быть запущен как программа.

Чтобы превратить исходный текст в программу, применяется компилятор. После завершения компиляции исходного кода создается объектный файл. Обычно этот файл имеет расширение .obj. Но и это еще не исполняемая программа. Для превращения ее в исполняемый файл необходимо запустить программу компановки.

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

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

Блок-схема — в программировании — графическое представление программы или алгоритма с использованием стандартных графических элементов (прямоугольников, ромбов, трапеций и др.), обозначающих команды, действия, данные и т. п.

Графическое представление

Описание

Начало или конец. Внутри фигуры пишут «начало» или «конец» соответственно.

Прямоугольником обозначается операция. Например, присваивание. Внутри блока пишут операции, которые выполняются на данном шаге алгоритма.

Ромбом обозначается оператор ветвления. Внутри ромба пишутся проверяемые условия. Например, «a < b»

Вызов подпрограммы. Внутри блока пишут имя вызываемой подпрограммы и передаваемые ей параметры.

Параллелограмм обозначает операции ввода-вывода данных

 
 

 

 


Цикл с известным числом итераций. Внутри обычно указывают счетчик цикла, начальное, конечное значение и шаг цикла. В последнем ГОСТе цикл заменен на другой блок.

Итак, вернемся к блок-схеме, которая демонстрирует цикл разработки программы.

 

 

Базовые средства языка

Лексема – минимальная единица языка, имеющая самостоятельный смысл. К лексемам относятся:

идентификаторы – это последовательность букв и чисел, начинающаяся с буквы (знак «_» считается буквой);

служебные или ключевые слова – обозначения стандартных видов (int, float, double); классы памяти (auto, static); слова операторов (if, else, for);

знаки операций – один или более символов, определяющий действие над операндами;

константы – это неизменяемые величины;

строки или строковые константы – это последовательность символов, заключенная в кавычки. Каждая строка заканчивается нулевим символом '\0'.

Символы – это основные неделимые знаки, с помощью которых пишутся все тексты на языке.

Алфавит языка включает в себя

1. Прописные и строчные лат-е буквы и знак подчеркивания

2. Арабские цифры от 0 до 9

3. 29 спец символов (+, -, *, %, ...)

4. Пробельные символы (пробел, символ табуляции, переход на новую строку)

5. Комментарии - //... или /*...*/

Комментарий с двойным слэшем говорит компилятору игнорировать все, что следует за этими символами до конца строки. Коментарий со слешом и звездочкой говорит компилятору игнорировать все, что следует за этими символами до того момента, пока не встретится символ завершения комментария – звездочка-слеш.

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

Символ Его значение
\a Звуковой сигнал
\b Возврат на шаг
\f Перевод страницы
\n Новая строка
\r Возврат коретки
\t Табуляция
\v Вертикальная табуляция
\’ Одинарная кавычка
\” Двойные кавычки
\? Вопросительный знак
\\ Наклонная черта
\000 Восмеричное число
\xhhh Шестнадцатеричное число

 

Структура программы

Любая программа на языке C++ состоит из 3-х основных блоков:

1. Блок подключаемых файлов.

2. Блок объявления объектов.

3. Основная функция программы.

 

Любая программа на C/C++ представляет собой функцию в пределах которой выполняются все необходимые действия. Такая функция имеет специальное имя _tmain.

Теперь, имея начальные данные, можем приступить к созданию первого приложения.

Структура программы

Проанализируем программу написанную ранее.

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

Команда include (подключить) – это инструкция препроцессора, которая указывает, что «далее следует имя файла, который необходимо найти и подключить именно здесь». Файл iostream используется объектом cout, который обслуживает процесс ввывода данных на экран. Препроцессор запускается перед компилятором и обрабатывает все строки, начинающиеся с символа (#), подготавливая код программы к компиляции.

Основной код программы начинается в строке 7 с вызова функции _tmain(). Каждая программа на языке С++ содержит функцию _tmain(). Функция – это блок программы, который выполняет одно или несколько действий. Обычно функции вызываются другими функциями или операторами, но функция _tmain() – особая: она вызывается автоматически при запуске программы.

В теле функции находится объект cout, который используется для вывода сообщений на экран. Компилятору необходимо узнать, что будет использован объект cout именно из стандартной библиотеки. Для этого используется спецификация пространства имен std. Поскольку есть вероятность приобрести аналогичные объкты с тем же именем, но от другого поставщика программных компонентов, С++ делит мир на пространство имен. Пространство имен – это способ сказать: « когда я говорю cout, я имею ввиду тот cout, который является частью именно стандартного пространства имен, а не какого-либо другого пространства». Чтобы компилятор понял о чем идет речь, перед словом cout поместим спецификацию std в сопровождении двух двоеточий.

Вот как используется объект cout: вводим слово cout, за которым ставим оператор вывода (<<). Все, что следует за этим оператором, будет выведено на экран. Если необходимо вывести на экран строку текста, заключаем ее в двойные кавычки.

Рассмотрим след пример.

Использованиен идентификатора std:: перед оператором cout становится надоедливым. С помощью идентификатора пространства имен этого можно избежать. Это можно сделать двумя способами.

Первый заключается в том, что в начале текста кода можно сообщить компилятору об использовании объекта cout только из стандартной библиотеки с помощью ключевого слова using:

using std::cout.

Тогда код программы приобретет след вид:

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

using std::cout

Заменяется на using namespace std.

Результат программы при этом остается неизменным.