Скачиваний:
71
Добавлен:
04.05.2017
Размер:
1.87 Mб
Скачать

Государственное образовательное учреждение высшего профессионального образования

Южно-Российский государственный технический университет (нпи)

Кафедра автоматики и телемеханики

                1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторным работам по курсу

«ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ»

(часть 2)

Новочеркасск 2015 г.

              1. ЛАБОРАТОРНАЯ РАБОТА №1

              2. Знакомство со средой программирования Dev-C++

Цель работы: приобретение основных навыков работы с интегрированной средой разработки приложений Dev-C++.

Программа работы:

  1. Ознакомиться со средой программирования Dev-C++.

  2. Получить навыки написания, создания, сохранения, компиляции, отладки и выполнения программы ввода/вывода на языке Си.

  3. Знакомство с программами на языке С++.

Методические указания

Язык Си, созданный Денисом Ритчи в начале 70-х годов в Bell Laboratory американской корпорации AT&T, является одним из универсальных языков программирования. Язык Си считается языком системного программирования, хотя он удобен и для написания прикладных программ. Среди преимуществ языка Си следует отметить переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность программ, а также возможность получить программный код, сравнимый по скорости выполнения с программами, написанными на языке ассемблера. Последнее связано с тем, что хотя Си является языком высокого уровня, имеющим полный набор конструкций структурного программирования, он также обладает набором низкоуровневых средств, обеспечивающих доступ к аппаратным средствам компьютера.

Широкое распространение Cи на различных типах компьютеров (называемых аппаратными платформами) привело ко многим вариациям языка.  C++ известен как расширение языка Cи. Был разработан Бьерном Строустропом в начале 80-х годов в Bell Laboratories.   Несмотря на то, что С++ произошёл от Си, в дальнейшем эти языки развивались независимо. С++ – это гибридный язык, который предоставляет возможность программировать и в стиле Си, в объектно-ориентированном стиле, и в обоих стилях сразу.

Как правило, чтобы выполнить программу на Си/С++ необходимо пройти через 6 этапов: редактирование, препроцессорную (то есть предварительную) обработку, компиляцию, компоновку, загрузку и выполнение.

 Первый этап представляет создание и редактирование файла с исходным текстом программы. Файл исходного текста программы на языке Си обычно имеет расширение «*.с», на языке С++ – «*.cpp». Это обычный текстовый файл, в который записывают текст программы в любом текстовом редакторе, например, в Блокноте.  

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

 

Третий этап – это компиляция: перевод исходного текста программы в машинные коды и создание так называемого объектного файла с асширением «*.o» (несмотря на то, что в этом файле уже записан машинный код, объектный файл еще нельзя запускать на компьютере, потому что в нем не хватает стандартных функций (например, для ввода и вывода данных)). 

Четвертый этап - компоновка. Компоновщик подключает стандартные функции, хранящиеся в библиотеках (в Dev C++ они имеют расширение «*.a»). В результате получается один файл с расширением *.exe, который и представляет собой готовую программу.

Рисунок 1. Этапы создания программы

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

 Шестой этап - это выполнение. Каждый из названных выше этапов может заканчиваться ошибкой или неудачей из-за ошибки. Тогда программист должен вернуться к редактированию и исправлению исходного текста программы, предварительно его хорошо проанализировав. Затем снова пройти через все этапы работы с исходным текстом программы до получения работающего без ошибок загрузочного модуля.

Для изучения языка Си воспользуемся интегрированной средой Dev-C++, работающей под управлением операционной системы Windows. Это полноценное Windows-приложение с удобным интерфейсом, обладающее всеми необходимыми функциями для разработки небольших проектов. Среда поддерживает шаблоны кода, всплывающие подсказки при наборе функций и методов классов, а также позволяет аналогичным образом просматривать значения переменных в процессе отладки (в качестве отладчика используется внешний GNU Debugger, также известный как GDB).

Реализованные функции:

  • Встроенный редактор текстов

  • Встроенный отладчик (GDB)

  • Менеджер проектов

  • Браузер классов

  • Автодополнение кода

  • Подсистема управления компиляцией и редактированием связей и многое другое.

К п.1. Запустите Dev-C++, ознакомтесь с основным окном данного приложения, представленного на рисунке 2.

Рисунок 2. Интерфейс Dev-C++

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

Верхняя строка окна - главное меню, позволяющее обратиться к следующим подсистемам: меню файловой системы (File(Файл)), меню редактирования (Edit(Правка)), меню поиска и замещения (Search(Поиск)), меню управления видом рабочего документа в окне (View(Вид)), меню управления проектом (Project(Проект)), меню управления компиляцией и исполнением программ (Execute(Выполнить)), меню встроенного отладчика программ (Debug(Отладка)), меню опций (Tools(Сервис)), меню интеграции с системами контроля версий (CVS), меню управления окнами (Window(Окно)), меню помощи (Help(Справка)). Переход к главному меню осуществляется с помощью клавиши F10.

К п.2. Основные этапы создания программ в интегрированной среде Dev-C++:

1. Запустите приложение Dev-C++

2. Выполните команду меню Tools/Environment Options (Сервис/Параметры среды), в появившемся диалоговом окне Environment Options (Параметры Среды) выберите вкладку File & Directory (Файлы и Каталоги) и укажите вашу рабочую папку в поле ввода Users Default Directory (Каталог пользователя): (эта папка будет использоваться по умолчанию при загрузке и сохранении файлов проекта).

3. Выполните команду меню File/New/Project… (Файл/Создать/Проект…) в появившемся окне, в закладке Basic выберите Console Application, параметры проекта (project options) выберите С-project. Открыть ранее созданный файл можно командой меню File/Open project or File (Файл/Открыть файл или проект) или комбинацией клавиш Ctrl-O

4. Сохраните проект выполнив команду меню File/Save as (Файл/Сохранить проект как). (Примечание: имена созданных вами файлов следует задавать буквами английского языка)

5. После создания проекта для его последующей пошаговой отладки (пункт 10, 11) необходимо «разрешить» компилятору и компоновщику генерирование отладочной информации. Осуществляется это командами Project/Project options (Проект/Параметры проекта), вкладка Compiler (Компилятор) во вкладке слева выбрать Linker (Компоновщик), справа – Generate debugging information (Генерировать отладочную информацию) – напротив поставить "Yes".

Примечание: в случае, если вы забыли выполнить вышеупомянутые действия и проект уже был скомпилирован, то отладочная информация в него добавляется только после полной пересборки проекта командой Execute/Rebuild All (Выполнить/Перестроить всё).

6. В редактор текста приложения Dev-C++ введите программный код:

// Program input/output Cи

#include <stdio.h>

int main()

{

printf("Enter your name, please \n");

char str[10];

int a,b,c;

scanf("%s", &str);

printf("%s, enter A=",str);

scanf("%d", &a);

printf("%s, enter B=",str);

scanf("%d", &b;

c=(a+b)*2;

printf("(A+B)*2 = %d \n",c);

system("PAUSE");

return 0;

}

7. Выполните команду меню Execute/Compile (Выполнить/Скомпилировать) или нажмите на комбинацию клавиш Ctrl+F9. Появится окно Compile Progress с протоколом компиляции. После успешной компиляции запускается компоновщик для получения exe. файла в вашей рабочей папке. При возникновении ошибок при компиляции первая строка, в которой возникла ошибка, выделяется цветом и открывается окно Compiler (Компилятор) с сообщениями об ошибках. Выделение в окне Compiler (Компилятор) строк с сообщениями об ошибках синхронно сопровождается высвечиванием строк с ошибками в тексте программы. При нажатии клавиши Enter активизируется окно редактора, и курсор устанавливается на строку с ошибкой. Самостоятельно выявите и исправьте синтаксическую ошибку, допущенную в тексте вышеприведенной программы.

8. Выполните команду меню Execute/Run (Выполнить/ Выполнить) (комбинация клавиш Ctrl+F10). Произведется запуск полученного .exe – файла на выполнение.

После запуска программы на выполнение открывается окно, в котором можно просмотреть вывод на экран, который осуществляет программа, ввести запрашиваемые данные, а также просмотреть результаты выполнения программы

9. Осуществите анализ результатов работы программы ввода/вывода (рисунок 3).

Рисунок 3. Результат работы программы

10. Пошаговое выполнение программы. Обычно программа выполняется безостановочно от начала до конца. Лучший способ отладки — это выполнить программу по строчкам, останавливаясь после выполнения каждой команды и проверяя значения переменных в памяти. Для этой цели служат специальные программы — отладчики. С оболочкой Dev-C++ поставляется отладчики GDB. Сначала нужно установить точки останова, то есть отметить строки, где нужно остановить программу. Для этого достаточно щелкнуть мышкой слева от нужной строчки программы. Повторный щелчок снимает точку останова в этом месте. Кроме того, с помощью комбинации клавиш Ctrl+F5 можно устанавливать и снимать точку останова в том месте, где стоит курсор.

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

Однако в этом режиме отладчик не позволяет входить внутрь вызываемых функций (по шагам выполняется только основная программа). Для входа функцию используют комбинацию Shift+F7.

При нажатии клавиш Ctrl+F7 отладчик запускает программу до следующей точки останова. Завершить отладку можно с помощью комбинации клавиш Ctrl+Shift+F2.

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

Если в режиме отладки выделить переменную, кликнуть правой кнопкой мыши и выбрать в раскрывшемся меню Add Watch (Добавить в наблюдаемые), то в тексте программы в окне Debug (Отладка), расположенном слева, будет отображаться ее значение.

Теперь поясним текст, приведенной выше программы ввода/вывода:

Первая строка:

// Program input/output Cи

Это комментарий. Также как и пустые строки, комментарии обозначенные «//» игнорируются, они служат для удобства чтения кода.

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

#include <stdio.h>

Подключение функций стандартного ввода и вывода, описание которых находится в файле stdio.h

Основная программа всегда называется именем main.Примечание: Си различает большие и маленькие буквы, а все стандартные операторы Си записываются маленькими буквами. Каждая программа на Си (как и на С++) должна содержать основную функцияmain(). Если эта функция возвращает значение, то перед ней указывается тип (понятие «тип» будет пояснено далее), если же функция ничего не возвращает, то вместо типа указываетсяvoid. Успешно завершенная программа возвращает 0, аварийно завершенная программа - значение отличное от 0 (разные значение указывают на вид ошибки). Минимальная программа будет содержать следующий код:

int main()

{

// Здесь код программы

return 0; // успешное завершение

}

Пустые скобки означают, что main не имеет аргументов. Фигурные скобки обозначают начало и конец основной программы

Для вывода информации на экран используется функция printf. В простейшем случае она принимает единственный аргумент – строку в кавычках, которую надо вывести на экран.

printf("Enter your name, please \n");

Производит вывод строки «Enter your name, please»; сочетание «\n» - это управляющая последовательность, которая не имеет графического изображения на экране дисплея и осуществляет переход курсора на начало новой строки.

В языке Си каждая числовая, текстовая или символьная величина имеет определенный способ хранения и записи своего значения в памяти компьютера (оперативной или долговременной). Такой способ или метод называется "типом" этого данного или этой величины. Существует пять базовых типов данных:

  • целые переменные – тип int (от английского integer – целый), занимают 4 байта в памяти;

  • вещественные переменные, которые могут иметь дробную часть (тип float – от английского floating point – плавающая точка), занимают 4 байта в памяти;

  • символы (тип char – от английского character – символ), занимают 1 байт в памяти

char str[10];

Объявление символьной переменной str с указанием максимальной длины строки (10)

int a,b,c;

Выделение памяти под три целые переменные а,b,c

Для ввода данных используют функцию scanf (рисунок 4)

Рисунок 4. Функция scanf

Формат ввода значений переменных задается при помощи спецификаторов преобразований. Так называют последовательность символов, начинающуюся с символа %. Наиболее часто используются следующие спецификаторы:

%d – десятичный тип данных (decimal);

Десятичный тип данных decimal дает начало большому количеству производных типов. Дробные части этого типа отделяются точкой (до 131072 разрядов перед десятичной точкой; до 16383 разрядов после десятичной точки).

%i – десятичное знаковое целое число (integer);

Непосредственным потомком типа decimal является integer. В отличие от своего родителя его диапазон значений ограничен целыми числами.

%u – для ввода чисел без учета знака (unsigned);

%f – для ввода дробных чисел в виде числа с плавающей точкой (переменная типа (foating point));

%e – числа с плавающей запятой в экспоненциальной форме записи (вида 1.1e+44);

%с – ввод одного символа (переменная типа char);

%s – ввод символьной строки (string).

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

Символ "&" (ампресенд) перед именем переменной необходим для указания адреса этой переменной величины, как того требует описание этой функции scanf.

scanf("%s", &str);

Первый аргумент "%s" показывает, что будет вводиться символьная строка. Второй аргумент функции - это адрес переменной str, в которую будет сохранена строка, введенная с клавиатуры.

scanf("%d", &a);

scanf("%d", &b);

По адресу переменных а и b последовательно записываются целые числа с учетом знака, введенные пользователем с клавиатуры.

printf("%s, enter A=",str);

printf("%s, enter B=",str);

В данных строках программы «%s» указывает формат (строка) и расположение в тексте (выводимом на экран) содержимого переменной str

c=(a+b)*2;

printf("(A+B)*2 = %d \n",c);

«%d» указывает формат (целое число со знаком) и расположение в тексте (выводимом на экран) содержимого переменной с, равной удвоенной сумме a+b

system("PAUSE");

Команда останавливает консольный вывод и ждет от пользователя нажатия клавиши.

Почти все программы, написанные на Си, если они не касаются каких-либо скрытых в операционной системе деталей являются «переносимыми» т.е. такими программами, которые можно пропускать без изменений на различных аппаратных средствах. Хотя Си соответствует возможностям многих ЭВМ, он не зависит от какой-либо конкретной архитектуры машины. Стандарт предоставляет возможность для явного описания переносимости с помощью набора констант, отражающих характеристики машины, на которой будет работать программа.

К.п.3 Рассмотрим пример программы ввода/вывода, написанной на языке С++.

  1. Выполните команду меню File/New/Project…( Файл/Создать/Проект…) в появившемся окне, в закладке Basic выберите Console Application, параметры проекта С++-project.

  2. Сохраните проект выполнив команду меню File/Save as (Файл/Сохранить проект как).

  3. В редактор текста приложения Dev-C++ введите программный код:

// Program input/output C++

#include <cstdlib>

#include <iostream>

// В программе каждая переменная, класс и т.п. принадлежат

// какому-то пространству имен. Следующая строка

// позволяет использовать имена из стандартной библиотеки.

using namespace std;

int main()

{

string str;

int a,b,c;

cout <<"Enter your name, please"<<endl;

cin>>str;

cout <<"Hello, "<<str <<", enter A=";

cin>>a;

cout <<str <<", enter B=";

cin>>b;

c=(a+b)*2;

cout <<"(A+B)*2 = "<<c<<endl;

system("PAUSE");

return 0;

}

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

Сравните размер exe. файлов программ на Си и С++, представьте в отчете соответствующие выводы.

Завершите работу с программой Dev-C++, выполнив команду меню File/Exit (Файл/Выход) или нажав комбинацию клавиш Alt+F4.