Язык прораммирования С++
Язык прораммирования С++
Лекция 1. Структура программы 1. Простейшая программа на языке С++ Программа на языке С++, как и на уже знакомом вам Паскале, содержит две основные части: объявление данных, с которыми будут производиться некоторые действия (вычисления, вывод на экран и т.п.); операторную часть, которая задает последовательность действий, выполняемых с этими данными. Объявление переменной содержит описание ее типа и имя переменной. Приведем примеры объявления. Cтрока объявления int R; состоит из имени переменной R и служебного слова int, которое указывает, что в переменной R можно хранить целые числа. В строке float S; тип данных задается служебным словом float, который указывает, что в переменной с именем S могут храниться вещественные числа - то есть числа, которые могут содержать как целую, так и дробную часть. При записи вещественных чисел на Си целую и дробную часть можно разделять точкой (например, 1.25 - это одна целая двадцать пять сотых), а можно, как и в Паскале, использовать экспоненциальную форму записи. Операторная часть программы обязательно содержит так называемую «главную функцию»: void main(void) { } Функция начинается с заголовка void main(void), вид которого пока можно просто запомнить. Между фигурными скобками находятся операторы программы, каждый из которых обязательно заканчивается точкой с запятой. Оператор задает действия, которые надо выполнить с одной или несколькими переменными. Объявления переменных могут размещаться как до главной функции, так и внутри нее, после фигурной скобки. Рассмотрим пример первой программы на языке С++: int R1; int R2; int Sum; void main(void) { R1=5; R2=230; Sum=3*R1+R2; } Можно считать, что при запуске программы ее работа начинается с выполнения первого из этих операторов - оператора присваивания R1=5; При его выполнении в переменную R1 записывается число 5. Это число будет храниться в R1 до тех пор, пока какой-нибудь другой оператор не запишет туда другое число. Операторы выполняются один за другим в порядке их записи: второй оператор занесет число 230 в R2; при выполнении оператора Sum=3*R1+R2; вычислится арифметическое выражение 3*5+230 и полученное значение 245 запишется в переменную Sum. При записи арифметических выражений используются общепринятые обозначения операций: + сложение,- вычитание, * умножение и / деление как целых, так и вещественных чисел. Рассмотрение первого примера закончим следующими замечаниями. 1. Язык С++ создан в результате развития языка С. Эти языки настолько близки, что рассмотренная выше программа выглядит одинаково на обоих языках. Для перехода от языка С++ к С достаточно изменить в исходном файле расширение СPP на C. Приведенный пример скомпилируется без ошибок тем же компилятором, но как программа на C. В дальнейшем мы будем считать, что изучаем язык C++, но будем указывать, какие из изучаемых элементов и синтаксических правил различны для С и С++. 2. Имя переменной - это последовательность букв и цифр, начинающаяся с буквы. Таким образом, Ab32 - это допустимое имя языка, а 1А - недопустимое, т.к. начинается не с буквы. В С и С++ прописная и строчная буквы считаются различными, поэтому Ab32 и ab32 это разные имена двух разных переменных. 3. Несколько переменных одинакового типа можно объявить одной строкой, перечислив их через запятую, например, int R1,R2;. При объявлении переменных им можно сразу присваивать начальные значения: int R1=10,R=21;. Если значения не присвоены, и переменные, как в данном примере, объявлены вне главной функции, в них в начале работы программы хранятся нули. Если переменная объявляется без инициализации внутри функции, в ней может оказаться любое значение. 4. Как и в языке Паскаль, вещественные и целочисленные переменные имеют различное представление в памяти машины, но данные вещественных и целых типов совместимы по присваиванию. Это означает, что применение в программе оператора R1=2.51; не будет считаться ошибкой. Если в программе объявлена вещественная переменная float V, то можно выполнить присваивание R1=V1. Замечание. Компилятор Visual С++, разработанный фирмой Microsoft, выводит в таких ситуациях предупреждение warning C4244: '=': conversion from 'float' to 'int', possible loss of data Компилятор BC.exe фирмы Borland не выводит даже предупредительных сообщений. Если оператор присваивания R1=V1 записывает в целочисленную переменную вещественное число, то компилятор автоматически организует вызов функции преобразования представления числа, которая получает целое число отбрасыванием дробной части вещественного. Таким образом, значение V1 равное 3.1, преобразуется в 3. Из 3.9 также будет получено число 3. 2. Вывод данных на экран Рассмотренная выше первая программа производит вычисления, но не предусматривает задания человеком исходных данных с клавиатуры и вывода результатов на экран дисплея. Для ввода исходных данных в программе можно использовать оператор вызова функции форматного ввода scanf(), а для вывода - оператор вызова функции форматного вывода printf(). В следующем примере при запуске программы на экран выводится приглашение «Ведите два числа», в ответ на которое человек должен набрать на клавиатуре два целых числа, разделив их пробелом или нажатием клавиши Enter. Программа вычисляет сумму и произведение этих чисел и выводит их на экран: #include <stdio.h> int Sum, Mul, R1,R2; void main(void) { printf("Введите два числа "); scanf(“ %d %d”, &R1,&R2); Sum=R1+R2; Mul=R1*R2; printf(“Сумма равна %d Произведение равно %d”, Sum,Mul); } Рассмотрим пример более подробно. Оператор printf("Введите два числа "); выводит на экран заключенную в кавычки строку текста. Эта строка задает формат вывода данных. Кроме обычного текста в строке формата могут присутствовать записанные после знака % латинские буквы d, f, i, s и другие. В последнем операторе программы printf(“Сумма равна %d Произведение равно %d”, Sum,Mul); знаками % в строке отмечаются те места, где программа вставит в строку значения переменных, причем записанная после процента буква d указывает, что это будут целые числа. В этом же операторе после строки формата перечислены через запятую выводимые переменные. На месте первого процента будет выведено значение из переменной Sum, а на месте второго - из переменной Mul. Кстати, то же самое средствами языка С++ можно записать компактнее с использованием операции вывода в поток: cout<<“Сумма равна=”<< Sum <<”Произведение равно=”<<Mul; Если в программе объявлена вещественная переменная, пусть float fVar=3.5;, то при выводе значения fVar на экран в строке формата после процента указывают букву f: printf(“ %f”,fVar);. При вводе данных, как и при выводе, указывают строку формата и имена переменных, в которые занесутся введенные с клавиатуры значения. В операторе Scanf (“ %d %d”, &R1,&R2); из строки формата “ %d %d” видно, что далее будут указаны имена двух переменных целого типа. Следует только заметить, что перед именами переменных нужно записывать значки & - операции получения адреса. Замечание. Если в программе используются вызовы функций ввода-вывода (таких, как scanf() или printf()) то для их правильной обработки компилятором в программу надо включить строку #include <stdio.h>. Для использованием операции ввода и вывода в поток необходимо вставить в программу следующую строку: #include <iostream.h> В интегрированной среде Си есть подкаталог include, в котором находятся текстовые файлы с расширением h. Они называются заголовочными файлами, среди них находится и файл stdio.h. Перед компиляцией исходный текст программы на языке Си просматривается специальной программой, которая называется препроцессором. Встретив строку #include <stdio.h> препроцессор находит на диске файл stdio.h и включает его целиком в нашу программу вместо этой строки. А уже после этого файл обрабатывается компилятором и переводится в машинные коды. Если просмотреть содержимое файла stdio.h, в нем можно найти строки int _Cdecl printf(const char _FAR *__format,...); int _Cdecl scanf (const char _FAR *__format,...);, ради которых stdio.h был включен в исходный текст программы. Это так называемые прототипы функций, которые нужны компилятору, чтобы правильно сформировать вызовы функций printf() и scanf(). Кроме них stdio.h содержит константы, описания типов данных, прототипы других функций, применяемых при стандартном вводе или выводе данных. (Потому он так и называется - сокращение от standard input output). 3. Стандартные функции При составлении выражений в языке Си используется много разнообразных стандартных функций. Как мы помним, функция - это записанная отдельно от основного текста часть программы, которая вызывается оператором вызова функции - записывается имя функции, после которого в скобках записываются фактические параметры (значения аргументов функции). Так, если в программе объявлены переменные float Res,V1=9; то в арифметических выражениях можно использовать вызов функций вычисления синуса sin(V1), косинуса cos(V1) квадратного корня sqrt(V1) и пр. При выполнении оператора Res = 2*sqrt(V1); вычисляется квадратный корень изV1 - вещественное число 3, умножится на два и результат запишется в переменную Res. То есть, при вызове функции вычисляется ее значение (принято говорить, что функция возвращает вычисленное значение в ответ на вызов) и это значение используется в выражении как обычная переменная. При составлении программы можно использовать вызовы: log(V1) - вычисления натурального логарифма, log10(V1) - вычисления десятичного логарифма, exp(V1) - вычисления показательной функции с основанием e, asin(V1), atan(V1) - вычисления арксинуса и арктангенса. При использовании прямых и обратных тригонометрических функций угол задается и получается в радианах. Функция может иметь несколько параметров. Например, функция atan2(y,x), которой передается два вещественных аргумента, вычисляет арктангенс угла, лежащего в прямоугольном треугольнике с катетами x,y против стороны y, причем второй аргумент x может быть равным нулю (при этом арктангенс будет равен р/2). Прототипы математических функций находятся в заголовочном файле math.h. Если программа использует вызовы стандартных математических функций, то для их правильной обработки компилятором в программу надо включить строку #include <math.h>. Вспомним, что по умолчанию компилятор преобразует вещественное число в целое отбрасыванием дробной части Если программисту необходим другой способ округления, он должен включить в свою программу заголовочный файл с прототипами математических функций и вызвать функцию округления вещественного числа с недостатком R1=floor(V1); или с избытком r=ceil(S);. Для округления до ближайшего целого нет стандартной функции, но можно выполнить оператор R1=floor(V1+0.5); Как и в Паскале, можно узнать, сколько байтов требуется для хранения переменной, применив к ней операцию sizeof(). Объявим переменные int A,B; float C; Операторы A=sizeof(int); A=sizeof(B); дадут одинаковый результат - размер переменной типа int. Оператор A=sizeof(C); запишет в A число 4 - размер переменно типа float. 4. Реализация функций в тексте программы Последовательность команд, реализующая вычисление стандартной функции не формируется компилятором. Эти функции хранятся в отдельном файле - системной библиотеке функций языка Си. Если в библиотеке нет необходимой функции, программист может реализовать ее самостоятельно. Любая функция, как и главная функция main() состоит из заголовка и заключенного в фигурные скобки тела функции. Пусть, например, нам необходима функция area (l,w) вычисления площади прямоугольного участка по его длине l и ширине w. Эта функция может быть реализована следующим образом float area(int x, int y) {float s; s= x*y; return s; } Заголовок состоит из имени функции, после которого следует заключенный в скобки список формальных параметров (в данном случае это целочисленные параметры int x и int y). Перед именем функции указывается тип возвращаемого функцией значения. В данном примере слово float указывает, что функция вычислит площадь в виде вещественного, а не целого числа. В фигурных скобках, как и в главной функции, находятся объявления переменных и операторы, реализующие вычисление функции. Вычисления должны обязательно заканчиваться оператором return, возвращающим вычисленное значение. В данном примере оператор возвращает значение, помещенное в переменную s. Но вместо переменной можно также записывать выражение, например, приведенную выше функцию можно было реализовать так: float area(int x, int y) {return x*y; } В функции main мы использовали обозначение void и вместо возвращаемого значения и вместо списка параметров - это тоже тип данных, не знаю, как его лучше называть, то ли пустой, то ли неопределенный это пустые, не имеющие значения данные. Неизвестно даже, сколько байтов нужно для их хранения - поэтому и объявить переменную типа void нельзя. Этот тип указывают как раз там, где обычно ожидают какого-нибудь значения, а его нет. То есть, заголовок void main(void), указывает, что функция main не получает параметров и не возвращает значения. (На Паскале такая конструкция называлась бы процедурой без параметров). Поместим вызов нашей функции в главную программу: void main(void) {float A,B; int b,R; b = 4; A = area(5,b); B = area(20,30); } При выполнении программы сначала оператором b=4; в переменную b занесется число четыре. Следующий оператор вызовет вычисление функции area (5,b); для того, чтобы записать ее значение 25 в переменную A. Выполнение операции вызова функции area(5,b) заключается в следующем: - программа перестает выполнять операторы главной функции main() и переходит к выполнению функции area(), при этом ей передаются указанные при вызове значения параметров - в параметр x запишется число 5, а в параметр y значение переменной b - число четыре; - выполняется первый оператор, записанный в теле функции area(), то есть строка s= x*y;. При этом функция вычислит произведение 5*4 и запишет его в переменную s. - у нас очень короткая функция, но в общем случае операторы функции выполняются до тех пор, пока не встретится оператор выхода из функции return; - в этом операторе после слова return помещается выражение, определяющее значение функции. Выполнение оператора заключается в вычислении выражения и возврате в то место, откуда функция вызывалась, но уже с результатом - значением функции. Как видим, из описания самой функции нельзя увидеть, чему равны параметры x и y. Они потому и называются формальными, что получают фактические значения только во время выполнения программы - в момент вызова функции. Так, при следующем вызове B=area(20,30); формальные параметры x и y получат значения 20 и 10. Как мы помним из предыдущих глав, процедуры и функции тем и хороши, что позволяют проделывать одни и те же действия, но с разными исходными данными. Замечание. Когда компилятор переводит строки языка С++ в машинные коды, он, как и мы, просматривает программу сверху вниз. Поэтому, к моменту вызова функции area() он уже обработал описание функции и знает, что функция должна получать в качестве параметров два целых числа и возвращать вещественный результат. Поэтому если вставить в программу операторы R=area(20,30,70); B=area(2.5,10); компилятор распознает в них ошибки программиста. В первом операторе то, что указан лишний параметр, а также вещественный результат пытаются записать в целочисленную переменную, а во втором то, что функции передается вещественный параметр. Если мы запишем функцию area() после главной, то во время обработки оператора A=area(5,b); у компилятора еще не будет информации для проверки правильности вызова. Так что же, мы не можем поместить функцию вычисления площади после главной функции? Можем, но заголовок функции area() придется написать еще раз, как показано ниже: float area(int x, int y); void main(void) { float A,B; int b,R b=4; A=area(5,b); B=area(20,30); } float area(int x, int y){ float s; s= x*y; return s; } В первой строке программы записан заголовок float area(int x, int y);. Точка с запятой в конце заголовка говорит о том, что ниже не будет тела функции. Это только предописание, или прототип функции, позволяющий проверить правильность ее вызова. Сама функция описана после главной программы. Прототипы написанных в программе нестандартных функций тоже можно поместить в заголовочный файл, например, myproto.h. Он обычно имеет расширение h и называется (от слова header) заголовочным файлом. В исходный текст программы помещают строку #include “myproto.h”. Напомним, что перед компиляцией программы ее исходный текст подвергается предварительной обработке - прекомпиляции. Прекомпилятор (он же препроцессор) просматривает текст файла, находит строчки, которые начинаются со слова #include (чтобы их легче находить, в строке перед этим словом нельзя писать ничего, кроме пробелов) и заменяет строчку текстом из указанного в ней заголовочного файла. Файл stdio.h препроцессор должен искать в подкаталоге include среды разработки, а файл myproto.h обычно находится в текущем каталоге - там же, где исходный текст программы. Чтобы указать, где следует искать заголовочный файл, имя stdio.h пишется в угловых скобках, а имя myproto.h в кавычках. Кроме вставки в текст содержимого включаемых файлов, препроцессор совершает и другие действия. Пусть в тексте программы несколько раз встречается число 32.5, но мы хотим писать его символическое обозначение, например, ABC. Для этого достаточно вставить в текст строку #define ABC 32.5 Препроцессор просмотрит весь следующий за ней текст и везде, где встретится имя ABC заменит его на 32.5. Рассмотрим в качестве примера следующую задачу: Ввести с клавиатуры радиус круга и вывести на экран его площадь. Вычисление площади оформить в виде функции. Для решения задачи создадим заголовочный файл round.h следующего содержания: #define Pi 3.141592653 float Round(int); Тогда текст программы будет иметь следующий вид: #include <stdio.h> #include “round.h” int r; float S; void main(void) { printf("Введите радиус "); scanf("%d",&r); S=Round(r); printf("Радиус %d \n площадь %g \n", r, S); } float Round(int p) { return Pi*p*p; } Строка #include “round.h” включит в текст этой программы прототип функции и константу Pi. Замечания 1. В настоящее время различные фирмы предлагают разные версии компиляторов для языка C++. Для проверки приводимых примеров в среде MS DOS мы будем использовать компилятор фирмы Borland а для среды Windows - Visual С++ фирмы Microsoft. Создатели языков высокого уровня стремятся к тому, чтобы написанная на данном языке программа одинаково выполнялась под управлением разных операционных систем и на компьютерах с различной архитектурой. Но идеально переносимого (мобильного) текста программ обычно не получается. Например, при использовании компилятора Borland C++ объявлять константу Pi нет необходимости. В файле math.h значения ?,?/2,1/? и прочие определены следующим образом: #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 #define M_PI_4 0.785398163397448309616 #define M_1_PI 0.318309886183790671538 #define M_2_PI 0.636619772367581343076 #define M_1_SQRTPI 0.564189583547756286948 #define M_2_SQRTPI 1.12837916709551257390. Правда, имена выбраны таким образом, что не каждый найдет эти константы. Но в файле math.h, который использует Visual C++, таких констант нет. В разных версиях могут отличаться не только содержимое, но и состав заголовочных файлов. Например, файл mem.h есть в Borland C++, и отсутствует в Visual C++. Но прототипы функций, описанные в mem.h, можно найти в файле memory.h среды Visual C++. 2. В языке Паскаль можно было вставить описание одной функции внутрь другой. В Си все функции равноправны, вложенные функции недопустимы. 3. В Паскале и многих других языках предусмотрена возможность создания функций и процедур. В языке Си есть только функции. Аналогом процедуры языка Паскаль в Си является функция, не возвращающая никакого значения. Допустим, нам очень часто приходится выводить на экран предложение: ВВЕДИТЕ ЧИСЛО и мы хотим оформить его в виде функции, вызов которой должен иметь вид In();. Следует отметить, что язык Си рассматривает круглые скобки как операцию вызова функции. Поэтому даже при отсутствии параметров оператор вызова функции записывается с круглыми скобками. Реализация такой функции будет иметь вид: void In(void) {printf(“ВВЕДИТЕ ЧИСЛО”); return; } Словом void, означающее пустой, не имеющий никакого значения тип данных, здесь указано, что функция In не получает параметров и не возвращает значения. Строчку return в этой функции можно было не писать - функция завершится, когда вычислительный процесс дойдет до закрывающей фигурной скобки. Лекция 2. Технология разработки программ 1. Создание программ для выполнения в среде MS DOS Рассмотрим минимальные сведения о среде разработки фирмы Borland, необходимые для построения программы и ее отладки. Пусть на компьютере уже установлено необходимое программное обеспечение в каталоге BC. Обычно активизация среды разработки выполняется запуском находящейся в подкаталоге Bin этого каталога программы BC.exe. При этом на экран выводится главное окно среды, показанное на рис. 1. Рис. 1 - Главное окно интегрированной среды Borland C Верхняя строка окна занята основным меню, выбор в нем каждого из пунктов File, Edit, Search и др. приводит к появлению подменю, пункты которого позволяют вызывать выполнение группы близких по назначению операций. На рисунке отображена ситуация, когда вызвано подменю ведения программных проектов. (Далее, для указания выбранной операции будем указывать пункт основного меню и пункт подменю, разделяя их знаком /. Например, Project/Open project - создать новый проект или открыть существующий. Большие программные системы обычно состоят из нескольких файлов - исходных модулей. Каждый исходный модуль компилируется отдельно, а потом полученные объектные модули объединяются компоновщиком в один исполняемый модуль. Для того, чтобы объединить несколько файлов в единую программу, в среде Borland С++ создается проект - отдельный файл с расширением PRJ. Чтобы открыть существующий проект или создать новый следует выбрать пункт меню Project, а в нем подпункт Open Project. Проект содержит список файлов, которые надо объединить в одну программу, и другую информацию, например, список окон, открываемых при вызове проекта. Если открыть проект Max_Arr.prj, откроются сразу два окна, показанные на рис. 1. В меню есть пункты Project/Add Item и Project/Delete Item при помощи которых можно добавить или удалить файл из проекта. (Замечание - я давно не работал в DOS, открыл подменю проект, а пункты в нем серые, неактивные, я не могу добавить в проект еще один файл. Чтобы пользоваться этими пунктами, должно быть открыто показанное в нижней части рисунка окно проекта со списком входящих в него файлов. Если на экране этого окна нет, оно открывается выбором в меню пункта Windows/Project). Для создания проекта разделим рассмотренную выше программу на три файла: в заголовочный файл iRound.h поместим определение числа р и предописание функции вычисления площади круга: #define Pi 3.141592653 double Round(int); В файл fRound.cpp выделим исходный текст функции вычисления площади: #include "iRound.h" double S; double Round(int p) { return Pi*p*p; } Главна функция будет находиться в файле mRound.cpp: #include <stdio.h> #include "Round.h" int r; double S; void main(void) {printf("Введите радиус "); scanf("%d",&r); S=Round(r); printf("Радиус %d \n площадь %g \n", r, S); getchar(); getchar(); } Для создания проекта, включающего файлы mRound.cpp и fRound.cpp необходимо выполнить следующую последовательность действий: подготовить показанные выше файлы с исходными модулями проекта. Для этого можно использовать любой текстовый редактор, но удобно пользоваться редактором среды разработки (Пунктом File/New создать пустой файл и ввести текст файла, пользуясь при необходимости копирования блоков текста других операций редактирования возможностями подменю Edit); выбором пункта Project/Open Project создать новый проект (для этого в открывшемся диалоговом окне следует ввести имя нового проекта); при помощи пункта Project/Add Item включить в проект модули fRound.cpp и mRound.cpp (заголовочный файл включать необязательно, препроцессор будет искать его в текущем каталоге даже при отсутствии в списке модулейпроекта); используя пункт Compile/Make получить исполняемый модуль программы. Вместо обращения к пунктам меню можно использовать быстрый вызов функций среды разработки при помощи “горячих клавиш”. Если проект открыт, то по нажатию клавиши F9 модули проекта файлы скомпилируются (на диск запишутся результаты компиляции - объектные файлы mRound.obj и fRound.obj). Далее эти файлы скомпонуются в один exe-файл (исполняемый модуль). выбором пункта Run/Run программа запускается на выполнение. Если исполняемый модуль надо скомпоновать и сразу же выполнить, нажимают сочетание клавиш Ctrl/F9. Использование проекта значительно облегчает разработку больших многомодульных программных систем. В частности, если после выполнения полного цикла разработки программы от подготовки исходных модулей до запуска готовой программы, один из исходных модулей. корректируется (выявлены ошибки или изменились требования к реализованным в нем функциям), будет обеспечена минимизация затрат ресурсов компьютера на обновление программы. Интегрированная среда разработки сравнивает даты создания исходных и объектных модулей. При создании исполняемого модуля заново компилируются только те файлы проекта, у которых дата создания исходного модуля позже даты создания объектного объектного. Кроме того, в проект можно включать подготовленные отдельно объектные модулю (без включения исходных). Отдельные модули проекта могут быть написаны на языке ассемблера (при этом в составе среды должен быть tasm.exe и необходимо правильно настроить пункты меню Transfert). 2. Создание программ для выполнения в среде Windows Начинающему программисту сложно сочетать освоение нового языка и технологии разработки приложений для операционной системы Windows. В связи с тем, что Windows - система многозадачная и многооконная, она использует свои процедуры ввода-вывода вместо стандартных, определенных синтаксисом языка программирования, будь это Паскаль, С++, Бейсик и пр. Применение используемых в ней средств построения меню, диалоговых окон и других элементов человеко-машинного интерфейса требует, чтобы разработчик уже имел определенную квалификацию. Чтобы изучать основы программирования лучше создавать консольные приложения Windows. Консольное приложение, это программа, осуществляющая вывод в текстовое окно, аналогичное экрану дисплея при работе с MS DOS, работа которой возможна без применения специфических средств взаимодействия с операционной системой. Покажем последовательность действий для создания консольного приложения в среде Visual С++ версии 6. При запуске среды разработки на экран выводится главное окно среды (рис 2) с пунктами меню, позволяющими, выполнять основные действия по разработке приложения: читать, редактировать и записывать на диск текстовые файлы; создавать проекты из нескольких исходных модулей; компилировать файлы проекта и создавать исполняемый модуль; выполнять программы в автоматическом и отладочном режимах. Рис. 2 - Окно среды Visual C++
Пункты меню, которые выполняются наиболее часто, дублируются пиктограммами. Обозначения пиктограмм верхнего ряда стандартны для офисных и других приложений фирмы Microsoft. Во втором ряду показаны пиктограммы, щелчком на которых можно выполнить следующие действия (перечисляем слева направо): компиляцию исходного текста и получение объектного модуля; компоновку исполняемого модуля из объектных; прерывание и отмену выполняемой операции (компиляции, компоновки или отладки программы); выполнение исполняемого модуля в автоматическом режиме - восклицательный знак; выполнение исполняемого модуля в отладочном режиме (с остановкой на контрольных точках); установку контрольных точек - значок в виде ладони. Программист может перемещать панели инструментов с пиктограммами по экрану, изменять по своему вкусу состав пиктограмм, вынесенных на панель инструментов. Эти операции выполняются выбором пункта Customize подменю Tools. При выборе пункта меню File появляется показанное на этом же рисунке подменю, содержащее пункты New, Open, Close, Open WorkSpaсe и др. Для создание нового проекта и новой рабочей области (подкаталога с файлами проекта) необходимо выбрать пункт New, при этом появится диалоговое окно New. Как видно из рис 2, в этом окне можно выбрать одну из нескольких вкладок. В частности, для создания и включения в проект новых файлов, надо выбрать вкладку Files. На рисунке показана ситуация, когда пользователь создает новую рабочую область и проект. Имя Console0 нового проекта и подкаталога для его размещения записано в поле Project Name, путь к создаваемому подкаталогу задан в поле Location. В основном поле вкладки цветом выделен тип создаваемого проекта. Выделена строкаWin32 Console Application, при выборе которой создается проект приложения, работающего в текстовом окне, аналогичном экрану MS DOS, и использующему для вывода на экран и ввода с клавиатуры стандартные операторы языка С++. (Для создания оконного приложения следовало выбрать пункт Win32 Application, а один из двух последних пунктов выбирается при создании библиотек). После нажатия не поместившейся на рисунке кнопки OK и ответа на два дополнительных вопроса будет создан пустой проект, в который надо включить файлы с исходными текстами программ на языке С++. После этого можно заново выбрать пункты меню File/New но в появившемся окне New уже выбрать вкладку File. Из множества предложенных вариантов, часть из которых показана на рис. 3 нам потребуется указывать заголовочные файлы C/C++ Header File или файлы с исходным текстом С++ Source File. В данном случае выбран исходный модуль и задано его имя main. По нажатию кнопки OK модуль будет не только создан, но и (как показывает флажок Add Project) включен в состав проекта.
Рис. 3 - Типы файлов
После создания пустого файла выбранного типа, в левом поле окна среды разработки (см. рис. 4), отображающем состав проекта, появится имя включенного в проект файла main.cpp, а в правом поле можно набирать и редактировать исходный текст модуля.
Рис. 4 - Отображение состава проекта На рис 1.4 показано то состояние окна, когда пользователь уже набрал программу вывода на экран 25 строк текста и даже выполнил компиляцию модуля. Поэтому в нижнем поле мы видим сообщение о том, что в результате компиляции ошибок не обнаружено. Далее можно выполнить компоновку исполняемого модуля или, щелчком по пиктограмме с восклицательным знаком, одновременно компоновку и пуск программы. На рисунке 4 показана ситуация, когда пользователь навел на восклицательный знак курсор мыши, пиктограмма выделилась в виде рельефной кнопки и под ней появилась подсказка Execute Program, объясняющая назначение кнопки. Если щелчком по этой кнопке запустить выполнение программы в автоматическом режиме, мы получим результат ее работы в консольном окне, показанный на рис 5. Это текстовое окно, имитирующее работу программы с символьным дисплеем в среде MS DOS.
Рис. 5 - Вид консольного окна Следует заметить, что при выводе на экран строки текста, например, операторами char s=”Пример текста”; printf (s); мы увидим непонятные символы. Причина в том, что для полноты имитации текстового режима оператор printf(s) использует принятую в MS DOS кодовую страницу CP866. Это можно проверить, вызвав стандартную функцию Res = GetConsoleOutputCP() (о кодовых страницах см. лекции по Паскалю). Но поскольку компилятор при кодировании строки применяет страницу 1251 русифицированной ОС Windows, на экран невозможно вывести русский текст. Чтобы вывести русские буквы абвгд, строку придется закодировать так:
Страницы: 1, 2
|