Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр на ЯВУ - Lab13.doc
Скачиваний:
14
Добавлен:
17.02.2016
Размер:
232.45 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. doublelen(cartesiana,cartesianb) – принимает две координаты в декартовой системе и возвращает длину.

2. doublelen(polara,polarb) – принимает две координаты в полярной системе и возвращает длину.

3. doublelen(cartesiana,polarb) – принимает первую координату в декартовой системе, а вторую в полярной, и возвращает длину.

4. doublelen(polara,cartesianb) – принимает первую координату в полярной системе, а вторую в декартовой, и возвращает длину.

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

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 "stdafx.h"

#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 "stdafx.h"

#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;

}

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