Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Разбиение на модули.
Исходя из логики работы программы, а также, возможного дальнейшего применения полученных результатов естественным будет разбить ее на два файла: 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. Что размещается в заголовочных файлах, а что выносится в тело модуля?
|