Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Добавление новых файлов в проект в среде разработки Visual Studio 2008

Поиск

Для добавления новых файлов в проект новых файлов в проект необходимо вызвать контекстное меню над именем проекта в «Проводнике решений» (Solution Explorer) (см. рисунок 13.1) и далее выбрать раскрывающийся пункт «Добавить» (Add). В нем нас на текущий момент будут интересовать два подпункта “New Item …” (Новый объект) и “Exiting Item …” (Существующий объект). Первый создает новый файл, одного из предложенных типов, а второй добавляет к проекту уже существующий. Диалоговое окно с вариантами доступных для создания файлов представлено на рисунке 13.2.

Результат добавления файлов в проект представлен на рисунке 13.3. Теперь достаточно воспользоваться директивой #include для использования функций, констант и типов данных, располагающихся в новых файлах.

Рисунок 13.1 – Добавление нового файла в проект

 

 

Рисунок 13.2 – Диалоговое окно выбора типа добавляемого файла

 

Рисунок 13.3 – Результат добавления новых файлов в проект

 

Пример работы с многофайловыми проектами

Разберем работу с многофайловыми проектами на примере задачи из предыдущей лабораторной работы.

 

Пример: Нахождение расстояния между точками

Задание. Написать программу, которая находит расстояние между двумя точками. Координаты могут задаваться как в декартовой, так и в полярной системе координат. Предусмотреть функции перевода из декартовой системы в полярную и обратно.

 

Алгоритм решения:

- Задать или ввести с клавиатуры координаты точек.

- Для пары точек определить расстояние по одной из формул:

o для декартовой системы:

o для полярной системы:

- Вывести результаты на экран.

 

Определение требуемых типов данных.

 

Для удобства хранения информации о координате точки в одной из систем координат удобно воспользоваться структурами, хранящими пары координат одной и той же точки. Для простоты назовем их cartesian для декартовой, и polar для полярной системы координат.

 

Разбиение на подзадачи.

 

В результате описанного алгоритма и задания определяем спецификации нужных нам функций. Для удобства использования воспользуемся перегрузкой:

1. double len(cartesian a, cartesian b) – принимает две координаты в декартовой системе и возвращает длину.

2. double len(polar a, polar b) – принимает две координаты в полярной системе и возвращает длину.

3. double len(cartesian a, polar b) – принимает первую координату в декартовой системе, а вторую в полярной, и возвращает длину.

 

4. double len(polar a, cartesian b) – принимает первую координату в полярной системе, а вторую в декартовой, и возвращает длину.

5. polar cartesian_to_polar(cartesian x) – переводит координаты точки из в декартовой системы в полярную.

6. cartesian polar_to_cartesian(polar x) – переводит координаты точки из в полярной системы в декартову.

 

Разбиение на модули.

Исходя из логики работы программы, а также, возможного дальнейшего применения полученных результатов естественным будет разбить ее на два файла: PRG-Lab13.cpp – содержащий точку входа в программу, а также основные вызовы функции и взаимодействие с пользователем; points.cpp – содержащий реализации вышеперечисленных функций; а также points.h – содержащий интерфейсы данных функций и типы данных, и служащий для подключения возможностей работы с точками в различных системах координат.

 

Файл points.h

 

// points.h: Содержит определения основных типов и прототипы функций.

//

#ifndef POINTS_H

#define POINTS_H

 

//Объявления типов

//Точка в декартовой системе координат

struct cartesian{

double x, y;

};

 

//Точка в полярной системе координат

struct polar{

double r, pi;

};

 

//Прототипы функций

double len(polar a, polar b);

double len(cartesian a, cartesian b);

double len(cartesian a, polar b);

double len(polar a, cartesian b);

 

polar cartesian_to_polar(cartesian x);

cartesian polar_to_cartesian(polar x);

#endif

 

Файл points.cpp

 

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

 

// points.cpp: Содержит определения функций

//

#include "points.h"

#include <math.h>

double len(polar a, polar b)

{

return sqrt(pow(a.r, 2) + pow(b.r, 2) - 2*a.r*b.r*cos(a.pi - b.pi));

}

double len(cartesian a, cartesian b)

{

return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));

}

double len(cartesian a, polar b)

{

cartesian c;

c = polar_to_cartesian(b);

return len(a, c);

}

double len(polar a, cartesian b)

{

return len(b, a);

}

polar cartesian_to_polar(cartesian x)

{

polar y;

y.r = sqrt(pow(x.x, 2) + pow(x.x, 2));

if (y.r == 0)

y.pi = 0;

else

y.pi = asin(x.y/y.r);

return y;

}

cartesian polar_to_cartesian(polar x)

{

cartesian y;

y.x = x.r*cos(x.pi);

y.y = x.r*sin(x.pi);

return y;

}

 

Файл PRG-Lab13.cpp

 

// PRG-Lab13.cpp: Основной файл проекта, содержит точку входа в программу

//

#include <iostream>

#include "points.h"

using namespace std;

void main(int argc, char* argv[])

{

setlocale(LC_ALL, "Russian");

const double PI = 3.14159;

cartesian a = {3, 0},

b = {1, 1};

polar c = {1.41, PI/4},

d = {3.1, 0.95};

//вызовы перегруженных функций

//для точек в различных системах координат

//декартова - декартова

cout << len(a, b) << endl;

//полярная - полярная

cout << len(c, d) << endl;

//декартова - полярная

cout << len(a, d) << endl;

//полярная - декартова

cout << len(c, b) << endl;

}

 

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

Препроцессор

Препроцессор языка С — это небольшой текстовый редактор. Ему передается текст программы, написанной на языке С, он просматривает текст и первым делом удаляет из него все комментарии, оставляя на месте каждого комментария пробел. Затем он ищет предназначенные ему директивы и выполняет их.

Каждая директива препроцессору записывается на отдельной строке. Перед директивой в этой строке могут быть только пробельные символы. Директива начинается со знака номера #. Вот этот знак и отыскивает препроцессор, чтобы выполнить указания директивы.



Поделиться:


Последнее изменение этой страницы: 2016-12-11; просмотров: 272; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.157.241 (0.009 с.)