Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование на языке С++. Ч.1. Учебник
.pdf
2. Среды разработки С++ инаписаниепервой программы
21
применяется для идентификации имен и устранения неоднозначности в разных частях текста программы.
Замечание. Использование директивы
using namespace
может
быть нежелательным в больших проектах, с большим исходным кодом [18
].
Вернемся к коду выполнения запущенной программы.
Его, естественно, можно узнать после ее завершения, как было
показано ранее. Но его можно узнать и другим способом. Для
*.bat
этого создаем командный файл (его расширение
). Он будет запускать программу и выводить этот код. Исполнимый
файл созданного ранее проекта находится в каталоге:
ais49\source\repos\ConsoleApplication3\bin\Debug
.
C:\Users\
Созданный командный файл может иметь такое содержи-
мое:
ConsoleApplication6.exe
echo Exit Code %errorlevel%
Первая строка запускает исполнимый файл приложения,
а вторая – выводит код его завершения. Но созданный batфайл должен находиться в том же каталоге, что и
plication6.exe
(рис. 2.14).
ConsoleAp-
Рис. 2.14. Вывод кода завершения программы в командном
файле Windows
В тексте программы была такая инструкция
return 1
Более полную информацию о командных (пакетных) файлах можно найти, например, в [19, 20].
.

22
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Приведем еще один вариант программы «Hello, world!».
Выводимую в ней строку зададим вне программы, как параметр, задаваемый при обращении к программе, то есть как
main()
аргумент функции
В шаблоне Консольное приложение C++ в функции
.
main()
аргументов не задано. Там содержится такое описание:
int main()
Изменим текст программы следующим образом:
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << “\n1: “ << *argv << “ “ << argc;
2
std::cout << “\n
std::cout << “\n
: “ << argv;
3
: “ << argv[0];
std::cout << “\n4: “ << argv[1] << “\n»; // std::endl;
system(«pause»);
return 0;
}
Теперь у функции
main()
задано два аргумента. Первый
(целочисленный) определяет количество полученных параметров (аргументов). Вторым является массив строк. Первым
его элементом является полный адрес имени программы – исполнимого файла. Заметим, что в последнем операторе вы-
endl
вода использовано
, что обеспечивает переход на новую
строку при последующем выводе.
Обратиться к первой строке можно так:
argv[0]
. Следующие элементы этого массива содержат наборы символов,
задаваемых при ее вызове. К ним обращаемся так –
argv[2], . .
.
argv[1],
При запуске такой программы получим следующий результат (рис. 2.15), после которого выведется сообщение об
ошибке (рис. 2.16).
Остановить отладку программы после ошибки можно комбинацией клавиш <Shift+F5> или командой «Отладка → Остановить отладку».

2. Среды разработки С++ инаписаниепервой программы
Рис. 2.15. Запуск программы с заданными аргументами
функции
Рис. 2.16. Сообщение об ошибке: не заданы аргументы
main()
23
Зададим значения аргументов функции
main()
. Для этого
в обозревателе решений нужно нажать правую кнопку и выбрать «Свойства» (если Обозреватель решений не отображается на экране, включите его с помощью меню «Вид»). Затем
выбрать «Свойства конфигурации → Отладка». На правой
панели будет строка «Аргументы команды», куда ввести передаваемый аргумент (рис. 2.17).
Запустив программу, получим результат (рис. 2.18).
1:
На что следует обратить внимание. После
выводится
полное имя исполнимой программы с указанием каталога,
в котором расположен файл, и количество аргументов
2:
После
И после
выводится первый аргумент (
3:
то, что задается в строке вызова программы – пер-
вый (до первого разделителя) набор символов (
Hello
и
World
Если задать слова
с пробелом, то выведется толь-
ко первое из них, а второе разместится в
argv[0]
) – имя файла.
argv[2]
Hello_World.!
.
main()
).
.

24
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
Рис. 2.17. Задаем аргумент командной строки в среде
выполнения Visual Studio
Рис. 2.18. Вывод при задании значения в аргументах
функции
main()
Записать строку определения функции можно и другими
способами, например:
int main(void)
int main(int argc, char** argv)
void main()
int main(int argc, char* argv[], char* envp[])
Первая строка определяет, что аргументов у функции
main()
нет. Вторая аналогична приведенной ранее в примерах

2. Среды разработки С++ инаписаниепервой программы
25
с получением аргументов. Третья строка определяет ситуацию, в которой функция не возвращает значения. Но в после
запуска программы все равно выводится сообщение о коде 0
как результат завершения процесса. Интересна четвертая
строка. Ее третий аргумент – переменные окружения среды
Windows. В командной строке вывести их список можно ко-
set
мандой
. Таких переменных около 40, среди них есть, на-
пример, такие:
OS=Windows_NT
Path – список каталогов, содержащих
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 126 Stepping 5,
GenuineIntel
SystemDrive=C:
SystemRoot=C:\WINDOWS
Еще обратим внимание на сообщение ниже окна исходного текста программы (рис. 2.19). Это сообщение означает,
что в коде нет синтаксических ошибок.
Рис. 2.19. Сообщение – проблемы не найдены
Приведем измененный текст программы «Hello World!».
using
Заметим, что здесь использована директива
, о которой
было рассказано ранее.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
cout << "Hello, world" << endl;
system("pause");
return 0;
}

26
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
OnlineGDB
Скомпилировать и отладить программу, написанную на
языке программирования С++ (как и на многих других языках), можно не устанавливая на компьютер дополнительные средства, а используя онлайн-компиляторы, например
([21]):
CodeCHEF (codechef.com/ide);
Оболочка C++ (cpp.sh);
OnlineGDB (onlinegdb.com);
С, С++, С++0x, С++11 (tutorialspoint.com);
Code, create and learn together (repl.it);
ideone.com (ideone.com);
codepad (codepad.org);
Compiler Explorer (gcc.godbolt.org);
SoloLearn (code.sololearn.com).
Они, как правило, обладают схожим функционалом, но
характеристики несколько отличаются [22].
Рассмотрим использование онлайн-компиляторов на примере OnlineGDB.com (https://www.onlinegdb.com/about). Перейдя по ссылке, выбираем IDE, и сразу появляется текст первой программы:
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
Это дань языку программирования С. После этого можно
начать отладку программ на одном из 28 языков программирования, в том числе на семи Си-подобных. (Так же среди услуг, предлагаемых эти сайтом, обучение программированию
на С и С++. )

2. Среды разработки С++ инаписаниепервой программы
27
Для начала отладки надо выбрать язык. При выборе в списке Language любого из 4 вариантов (С++, С++14, С++17,
С++20) появится панель управления онлайн компилятора
OnlineGDB (рис. 2.20) и текст первой программы – это вари-
ант уже знакомой нам «Hello World!».
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World";
return 0;
}
Рис. 2.20. Панель управления онлайн компилятора
OnlineGDB
При нажатии на кнопку Run в нижней части окна увидим результат (рис. 2.21).
Рис. 2.21. Результат работы первой программы в OnlineGDB
Если изменить текст программы, записав строку заголовка функции без указания типа возвращаемого значения:

28
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
main()
то результат останется таким же (но не для всех версий С++).
Если записать заголовок функции с ключевым словом
void
, оставив в тексте инструкцию
return
(явная ошибка), то
в нижней части окна появиться такое сообщение (рис. 2.22).
Рис. 2.22. Сообщение об ошибке: конфликт
Если из программы убрать инструкцию
void
и
return
, сообщение
return
об ошибке останется. То есть в этой среде разработки, как и
main()
в Dev C++, функция
обязательно должна возвращать
целочисленное значений кода завершения процесса.

Прежде чем обсуждать вопрос типов данных, поддерживаемых С++, опишем важное понятие.
Переменная является простейшей структурой данных. С
понятием переменная в программировании связаны три таких свойства: имя, тип и значение (рис. 3.1).
Рис. 3.1. Свойства переменной
Имя (идентификатор), используемое для обозначения
переменных (а также других объектов), может содержать латинские буквы (заглавные и строчные буквы в именах раз-
_
личаются), и цифры, а также знак подчеркивания (
этом начинаться должно с буквы (использование некоторых
других символов рамках данного учебника не рассматривается). Например,
в программе будут обозначать разные переменные).
В C++ переменные объявляются с определенным типом
данных. Тип данных определяет место для хранения переменной, расположение, в котором будет выделена память
для переменной во время выполнения программы, способ
представления значения переменной в памяти (и, соответственно, способ преобразования из внешнего представления,
т.е. записи в программе или во вводимых данных, во внутреннее), множество допустимых значений, а также набор
операций, которые можно выполнять с этими данными. Так,
значения переменных целых типов представляются в памя-
a4, alf,с_n, b, B
(последние два имени
), при

30
АЛГОРИТМИЗАЦИЯ ИПРОГРАММИРОВАНИЕ НАЯЗЫКЕ С++
ти как двоичные числа, полученные непосредственно переводом из десятичной системы счисления в двоичную. Целые
числа в памяти представляются точно, и при выполнении
операций с целыми числами никаких ошибок не возникает
(кроме некоторых случаев деления).
Вещественные числа в памяти представляются следующим образом. Сначала число приводится к нормализованному виду, когда целая часть числа равна 0, первая цифра
после запятой является значащей, а положение запятой в
числе определяется значением показателя степени 10. Например, число 0,086 в нормализованной форме имеет вид
–1
0.86⋅10
, число 123,45 –0.12345⋅103. При этом цифры, рас-
положенные в нормализованной записи после точки, называются мантиссой, а показатель степени 10 – это порядок.
В памяти отдельно представляется мантисса и отдельно порядок. При этом количество бит, предназначенных для мантиссы, определяет точность представления, а количество
бит, предназначенных для порядка, определяет диапазон
представляемых чисел. Если количество цифр в двоичном
представлении мантиссы превышает количество отведенных
под нее разрядов, то последние двоичные цифры теряются
и число оказывается представленным в памяти приближенно. Кроме того, при выполнении арифметических операций ошибки могут накапливаться. Таким образом, в общем
случае вещественные числа в памяти представляются приближенно, и их сравнение на точное равенство невозможно.
Обычно вещественные переменные используются для обозначения величин, полученных в результате измерений, которые всегда имеют некоторую погрешность, либо полученных в результате вычислений.
Следует отметить, что с расширением возможностей языков программирования, переменная уже не является просто
областью памяти и хранимым в ней значением. В C++, набрав
int.
имя типа переменной и точку, например
, получаем доступ к множеству свойств этого объекта (и не только). Используя терминологию объектно-ориентированного программиро-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
