Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Исходя из логики работы программы, а также, возможного дальнейшего применения полученных результатов естественным будет разбить ее на два файла: 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;

}

 

 

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

Контрольные вопросы

1. В чем отличие многофайлового проекта?

2. Как добавить новый файл в проект?

3. Что такое модуль?

4. Для чего нужно разбиение на модули?

5. Для чего применяются заголовочные файлы?

6. Что размещается в заголовочных файлах, а что выносится в тело модуля?






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.