Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / 1 / 01.pdf
Скачиваний:
17
Добавлен:
21.08.2019
Размер:
1.32 Mб
Скачать

Лабораторная работа 2.1 Знакомство с интегрированной средой Code::Blocks

1. Цель

Получение первичных навыков работы в интегрированной среде Code::Blocks

2. Задачи

Разработка, отладка и выполнение простых программ на языке C++.

3.Состав рабочего места

2.1.Оборудование: IBM-совместимый персональный компьютер.

2.2.Программное обеспечение: операционная система Linux, интегрированная среда

Code::Blocks.

4.Краткие теоретические сведения

Представлены в пункте 5 по мере необходимости.

5. Порядок выполнения работы

1.Запустить интегрированную среду Code::Blocks

Это можно сделать, используя ярлык на Рабочем столе или Главное меню. Окно программы имеет вид, показанный на рис. 1.

Рисунок 1 – Стартовое окно интегрированной среды Code::Blocks

2. Создать новый проект

Для создания нового проекта следует выбрать команду Файл ► Создать ► Проект (в случае выполнения лабораторной работы в нерусифицированной версии среды команда имеет вид File ► New ► Project).

Интегрированная среда Code::Blocks позволяет создавать различные типы приложений, в том числе – с использованием различных языков программирования, поэтому в открывшемся диалоговом окне отображён список всех возможных категорий создаваемых проектов.

Диалог с полным списком показан на рис. 2.

Рисунок 2 – Диалоговое окно выбора вновь создаваемого проекта

Для упрощения поиска нужной категории следует выбрать категорию «Консоль» (Console). Также можно сменить вид отображения, установив радиокнопку «Список». На рис. 3. показан диалог со списком типов консольных приложений.

Рисунок 3 – Диалоговое окно выбора типа консольного приложения

После выбора типа приложения становится активной кнопка «Перейти», на которую следует нажать. На рис. 4 показан вид окна с сообщением о начале работы мастера консольных приложений. Флажок «Больше не показывать эту страницу» на компьютерах общего пользования желательно не устанавливать.

Рисунок 4 – Мастер консольных приложений

После нажатия на кнопку «Далее» (Next) мастер попросит выбрать язык программирования; следует выбрать C++, как показано на рис. 5, а затем нажать кнопку «Далее».

Рисунок 5 – Выбор языка программирования

В открывшемся диалоговом окне следует заполнить текстовые поля с названием проекта, и указать путь к каталогу. При заполнении поля «Название проекта» автоматически заполняется и поле «Имя файла проекта», файл проекта имеет расширение .cbp и соответствует названию проекта. На рис. 6 показано диалоговое окно с незаполненными полями.

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

Рисунок 6 – Очередной этап работы мастера (выбор имени проекта и каталога)

Для хранения проектов, выполняемых в ходе лабораторных работ, рекомендуется создать именную папку на жёстком диске в каталоге user, откуда по окончании занятия перемещать работу на съёмный носитель, но допустима и работа непосредственно со съёмным носителем. В приведённом примере (рис. 7) имя проекта First; каталог vt, в котором будет сохранён вновь создаваемый проект, находится в папке user.

Рисунок 7 – Выбор каталога для вновь создаваемого проекта

После нажатия на кнопку «Открыть» поле каталога будет заполнено. В нижнем поле отобразится полный путь к файлу проекта (рис. 8).

Рисунок 8 – Заполненный диалог выбора каталога

Прежде, чем нажать кнопку «Далее», рекомендуется убедиться, что проект создаётся в требуемой папке, и Вы знаете, где она находится.

На последнем этапе работы мастера следует выбрать компилятор для создаваемого проекта и указать используемые конфигурации (рис. 9).

Рисунок 9 – Выбор компилятора

Следует выбрать компилятор GNU GCC Compiler, установить флажок для окончательной сборки (Release). Флажок для отладочной сборки устанавливать не надо.

После нажатия на кнопку «Завершить» (Finish), будет создан новый проект, и в окне интегрированной среды на панели «Диспетчер» во вкладке «Проекты» отобразится имя вновь созданного проекта (рис. 10).

Рисунок 10 – Диспетчер проекта

После выполнения двойного щелчка по папке «Исходные файлы», в рабочей области появится заготовка для написания исходного кода (main.cpp) . Заготовка представляет собой текст простейшей программы, позволяющей вывести на консоль традиционный текст «Hello world!». Для удобства восприятия различные элементы кода подсвечены соответствующим цветом (менять который можно, но не рекомендуется делать это на компьютерах общего пользования).

На рис. 11 показан вид окна интегрированной среды с программой.

Рисунок 11 – Интегрированная среда с программой

Строка 1 является директивой препроцессора, позволяющей подключить библиотеку ввода/вывода <iostream>. При отсутствии этой директивы не будут транслироваться строки, содержащие объекты cin (используется для ввода с клавиатуры), cout (вывод в консоль) и ряд других, в том числе, манипулятор endl (освобождает буфер и переводит курсор вывода в начало новой сроки).

Директивы препоцессора записываются в самом начале программы.

В строке 3 даётся команда использовать пространство имён std. Наличие этой команды не является обязательным, но, поскольку объекты cin, cout, endl и ряд других определены именно в этом пространстве, то программа не будет транслироваться до тех пор, пока перед именем каждого объекта из этого пространства не будет указан префикс std:: (например строка 7 должна в этом случае выглядеть std::cout << "Hello world!" << std::endl;).

Строка 5 – заголовок главной функции main(), это – точка входа в программу. Именно отсюда начинается выполнение программы.

Функция main() в каждой программе должна быть, и должна быть единственной.

Перед именем функции указан тип возвращаемого значения. По требованиям стандарта функция main() должна возвращать тип int (целое), поэтому в строке 8 записан оператор возврата return.

Традиционно, если программа успешно выполнена, возвращают ноль (return 0), являющийся целым числом. Другие целые числа служат кодами ошибок. Операционная система обрабатывает ситуацию в соответствии с полученным значением. Учебные программы системой не обрабатываются, но желательно придерживаться традиции.

Вряде источников функция main() имеет тип void (не возвращает значения), но данный способ описания является устаревшим, не соответствующим стандарту и не дожжен использоваться в работах.

Открывающая фигурная скобка в строке 6 и закрывающая в строке 9 содержат тело функции main() – набор операторов. В данном случае, операторов два: вывод в консоль и возврат целочисленного значения.

Оператор – инструкция выполнить элементарное действие, однозначно трактуемая транслятором и выполняемая процессором. Программа может быть переведена вся сразу в машинные коды (компиляция), а затем выполнена процессором, а может переводиться и выполняться построчно (интерпретация).

Вязыке C++ признаком конца оператора является точка с запятой.

Строки 2 и 4 пусты, они служат для визуального отделения частей программы друг от друга, улучшая восприятие. Для тех же целей фигурные скобки помещены на отдельные строки 6 и 9, а текст внутри скобок смещён вправо на одну и ту же величину. Пробелы, знаки абзаца и табуляции в тексте программы компилятором языка C++ не воспринимаются, но позволяют сделать код более понятным. Существует несколько стилей форматирования текстов программ, различные фирмы по разработке программного обеспечения придерживаются своего определённого стиля.

При выполнении лабораторных работ обязательно:

форматировать код;

сдвигать вложенные операторы, располагая операторы одного уровня вложенности на одинаковом уровне от левого края;

открывающие и закрывающие фигурные скобки, составляющие пару (блок, составной оператор) должны располагаться на отдельной строке на одном уровне от левого края;

придерживаться правила «Один оператор – одна строка» (исключение может составлять пара «приглашение и ввод»);

длина строки не должна превышать ширину экрана;

комментировать код, в том числе – правильно подобранными именами переменных и функций.

3.Запустить проект на выполнение

Программу можно запустить на выполнение различными способами: нажать на кнопку с зелёным треугольником на панели инструментов «Компиляция» (рис. 12а), либо выбрать пункт меню Сборка Выполнить (рис. 12б, Build ► Run для нерусифицированной среды), либо использовать комбинацию клавиш Ctrl+F10.

а) панель компиляция

б) меню «Сборка»

Рисунок 12 – Интегрированная среда с программой

При попытке запустить программу возможно следующее сообщение (рис 13), необходимо согласиться.

Рисунок 13 – Сообщение о том, что проект не был собран

В процессе сборки происходит компиляция проекта, в нашем случае он состоит из одного файла, в общем случае – может состоять из нескольких. Библиотеки, указанные в директивах, включаются в текст исходного кода. Если код не содержал ошибок, то всё собирается в единый исполняемый файл, который и может быть запущен на выполнение. На рис. 14 показаны сообщения в журнале сборки, расположенном в нижней части окна среды.

Рисунок 14 – Журнал сборки, проект успешно собран Теперь после запуска программы на выполнение появится консольное окно (рис. 15).

Рисунок 15 – Результат выполнения программы

4.Внести изменения в проект

Если внести изменения в программу, например, добавить вывод фразы на кириллице, а затем запустить на выполнение, то изменений в результатах работы не произойдёт (см. рис. 15). Проект необходимо пересобрать заново (рис 16):

Рисунок 16 – Меню «Сборка»

Это можно сделать как командой «Сборка» либо комбинацией Ctrl + F9, так и командой «Пересобрать». В последнем случае пересобран будет весь проект, а не текущий файл с исходным кодом, поэтому будет выведено соответствующее сообщение (рис. 17).

Рисунок 17 – Сообщение о перестроении проекта На рис. 18 показан вид консольного окна на фоне пересобранного проекта.

Рисунок 18 – Результат работы пересобранного проекта

5.Создать программу для вычисления площади треугольника по формуле Герона

Изменить текст программы так, чтобы с клавиатуры запрашивались три вещественных числа

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

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

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

Примерный вид такой программы показан на рис. 19. Если заменить только тело функции main(), программа транслироваться не будет.

Рисунок 19 – Текст программы вычисления площади треугольника по формуле Герона

В окне сообщений будет выведена причина неудачной сборки: не объявлена функция sqrt(), вычисляющая квадратный корень. В окне с исходным текстом программы строка 11, в которой обнаружена ошибка, помечена красным прямоугольником. Однако реальная ошибка состоит в том, что функция sqrt() определена в математической библиотеке <cmath>, но библиотека не подключена. После внесения соответствующих изменений программа успешно транслируется (рис. 20).

Рисунок 20 – Консоль на фоне исправленной программы

Данные можно вводить через пробел, а можно после каждого числа нажимать клавишу ввода

(рис. 21).

Рисунок 21 – Консоль с выполненной программой

6.Запустить программу на выполнение, ввести различные наборы допустимых данных

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

Таблица 1 – Тестовые данные для программы, вычисляющей площадь треугольника

№ п\п

Входные данные

Ожидаемый

Полученный

Тест пройден успешно

 

a

b

c

результат

результат

(+) или провален (–)

1.

3

4

5

6

6

+

2.

0.5

0.4

0.3

0.06

0.06

+

3.

40

50

30

600

600

+

4.

1

1

1.4142

0.5

 

 

5.

2

2

2

1,73205

 

 

6.

1

2

3

0

0

 

Следует отметить, что вычисление полупериметра несколько иным способом (вместо вещественного числа 0.5 записано выражение 1/2, совпадающие с точки зрения математики), приведёт к тому, что для любых данных будет выводиться одно и то же значение

– ноль (рис. 22).

Рисунок 22 – Консоль с выполненной программой, содержащей логические ошибки

Это связано с тем, что для различных по своей сути операций (обычное и целочисленное деление) используется один и тот же символ «/». Если оба операнда целые (что и наблюдается в данном случае), то операция рассматривается как целочисленное деление, результат которой – также целое число (в данном случае ноль). Если же хотя бы один операнд вещественный, операция рассматривается как вещественное деление. Допустима запись

«1.0/2», «1/2.0», «1./2», «1/2.», «1.0/2.0», «1./2.», а также «0.5» либо «.5».

Однако рекомендуется указывать и ноль, а также ставить пробелы между операторами и операндами для лучшего восприятия: «1.0 / 2», «1 / 2.0», «0.5».

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

Следует обратить внимание, что при наборе текста программы интегрированная среда предлагает варианты автозаполнения для ключевых слов. Выбрав нужный вариант из предложенного списка с помощью клавиш управления курсором, следует нажать клавишу ввода. Можно также выбрать, используя двойной щелчок мыши. Но можно и набирать посимвольно. Кроме того, открывающие скобки и кавычки при вводе сразу же получают соответствующую им пару.

На рис. 23 показан пример автозаполнения

Рисунок 23 – Автозаполнение

8.Протестировать программу на недопустимых данных

При вводе недопустимых данных аварийной остановки не происходит, отрицательное число под знаком корня рассматривается как особая величина «НЕ_ЧИСЛО», NaN. На рис. 24 показана консоль с результатом обработки недопустимых данных.

Рисунок 24 – Успешное завершение программы, обработавшей недопустимые данные

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

Рисунок 25 – Защита от некорректного ввода

Программа при компиляции автоматически сохраняется. Используя команду меню Файл, можно сохранить программу под новым именем, чтобы иметь два её различных варианта. Чтобы работать над новым проектом, необходимо закрыть старый, а затем создать новый проект так, как было указано в пункте 2.

Если нужно открыть имеющийся проект, это можно сделать, используя команду меню Файл ►Открыть либо комбинацией клавиш Ctrl + O. В открывшемся диалоговом окне указать путь к проекту и открыть файл проекта, имеющий расширение cbp (рис. 26).

Рисунок 26 – Открытие проекта

9.Закрыть проект, а затем открыть его заново

10.Сохранить проект с новым именем, изменить код программы так, чтобы данные можно было ввести любые, но после проверки на корректность программа либо выполняла вычисления и выводила результат, либо выводила соответствующее сообщение и завершала работу

11.Закрыть проект. Открывая проекты по очереди, убедиться в том, что имеются два различных проекта

В случае, когда оба операнда – целочисленные переменные, а нужно получить вещественное

частное, один из операндов надо явно преобразовать к вещественному типу:

int

a,

b;

cin

>>

a

>> b;

double

f

= double(a) / b;

В этом выражении значение переменной a будет рассматриваться как вещественное, поэтому в переменную f будет помещено вещественное число, дробная часть которого отлична от нуля (разумеется, при условии, что a не делится на b нацело).

int a, b, proc;

cout <<

"введите ** два ** числа:" << endl;

cin >> a >> b;

if (a >

b)

{

t = a;

int

a =

b;

b =

t;

}

double p = double(a) / b * 100; proc = p;

cout << a << " составляет " << p << " % от числа " << b << endl; cout << a << " составляет " << proc << " % от числа " << b << endl;

12.Создать новый проект, набрать текст программы следующего содержания:

#include <fstream> #include <iostream>

using namespace std;

int main()

{

int a, b;

cout << "введите два числа:" << endl; cin >> a >> b;

ofstream f("file.txt");

f << a << "\t" << b << endl; f.close();

ifsrteam g("file.txt"); g >> b >> a;

g.close();

cout << " a = " << a << ", b = " << b << endl; return 0;

}

13.Запустить проект на выполнение, убедиться в том, что в папке с проектом появился текстовый файл с именем "file.txt", и что происходит изменение значений переменных

В таблице 2 приведены необходимые разъяснения

Соседние файлы в папке 1