Поиск расстояний

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 31.05.2016
Размер файла 151,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра «Теоретическая механика»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по дисциплине «Информатика»

по теме «Поиск расстояний»

Выполнил: ст. группы №10309114

Лукьянчик А.Ю.

Проверил: Пронкевич С.А.

Минск 2015

Оглавление

вычисление расстояние интеграл

Введение

1. Цели и задачи работы

2. Методы нахождения неизвестных расстояний

3. Практическая часть

4. Тестирование. Контрольные примеры вычисления определенного интеграла

Заключение

Список используемых источников

Приложение

Введение

Си++ (англ. C++) -- компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования.

Название «Си++» происходит от Си, в котором унарный оператор ++ обозначает инкремент переменной.

В 1990-х годах язык стал одним из наиболее широко применяемых языков программирования общего назначения.

При создании С++ стремились сохранить совместимость с языком Си. Большинство программ на Си будут исправно работать и с компилятором С++. С++ имеет синтаксис, основанный на синтаксисе Си.

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку Си под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка С++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году -- нынешняя версия этого стандарта -- ISO/IEC 14882:2003.

Страуструп начал работать над «Си с классами» в 1979 году. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Симула (Simula) имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.

После многих лет работы совместный комитет ANSI-ISO стандартизировал С++ в 1998 году (ISO/IEC 14882:1998 -- Язык программирования С++). В течение нескольких лет после официального выхода стандарта комитет обрабатывал сообщения об ошибках и в итоге выпустил исправленную версию стандарта С++ в 2003 году. В настоящее время вышла новая версия стандарта под кодовым названием C++.

Никто не обладает правами на язык С++, он является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно. Согласно рейтингам голландской компании TIOBE[1], которая специализируется на исследовании качества программного обеспечения, в мае 2015 года в тройку самых популярных языков программирования вошли Java, Objective-C и C++. Таким образом, мы видим, что наибольшее количество квалифицированных программистов по всему миру изучают эти языки.

1. Цели и задачи работы

Цель работы: Создать класс, реализующий поиск расстояний между станциями. На некоторой железнодорожной ветке расположено N станций, которые последовательно пронумерованы числами от 1 до N. Известны расстояния между некоторыми станциями. Требуется точно выяснить длины всех перегонов между соседними станциями или указать, что это сделать невозможно (т.е. приведенная информация является противоречивой или ее недостаточно). Написать программу, демонстрирующую работу класса. Данные для работы считываются из текстового файла. Результат работы программы также записывается в текстовый файл.

Железнодорожный перегон - участок железнодорожной линии, который соединяет смежные раздельные пункты.

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

Класс - это механизм для создания объектов, определяющий их общее поведение. Можно сказать, что это определение или описание, в то время как объект - это реализация этого определения. Если провести аналогию, то фигура будет являться классом, а треугольник -- объектом.

Конструктор - это специальная функция-член, которая инициализирует экземпляр класса. Для вызова конструктора используется имя класса вместе с параметрами, заключенными в фигурные или круглые скобки. Конструктор выполняет свою работу в следующем порядке.

1. Вызывает конструкторы базовых классов и членов в порядке объявления.

2. Если класс является производным от виртуальных базовых классов, конструктор инициализирует указатели виртуальных базовых классов объекта.

3. Если класс имеет или наследует виртуальные функции, конструктор инициализирует указатели виртуальных функций объекта. Указатели виртуальных функций указывают на таблицу виртуальных функций класса, чтобы обеспечить правильную привязку вызовов виртуальных функций к коду.

4. Выполняет весь код в теле функции.

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

Инкапсуляция - это механизм, который объединяет данные и код, который манипулирует этими данными, а также защищающий и то, и другое от внешнего воздействия или неправильного использования. При использовании инкапсуляции любой класс рассматривается как «черный ящик» - пользователь класса видит только объявленные свойства и методы класса, но не видит реализацию. Доступ к этим скрытым данным принято предоставлять с помощью определенных методов. Принцип инкапсуляции при правильном использовании позволяет уменьшить число связей между классами, что позволяет поддерживать независимую реализацию классов.

Текстовыми называются файлы, состоящие из любых символов. Они организуются по строкам, каждая из которых заканчивается символом «конца строки». Конец самого файла обозначается символом «конца файла». При записи информации в текстовый файл, просмотреть который можно с помощью любого текстового редактора, все данные преобразуются к символьному типу и хранятся в символьном виде. Для работы с текстовыми файлами C++ используется стандартная библиотека Visual Studio, по названием <fstream>.

2. Методы нахождения неизвестных расстояний

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

Теория графов -- раздел дискретной математики, изучающий свойства графов. В общем смысле граф представляется как множество вершин (узлов), соединённых рёбрами. В строгом определении графом называется такая пара множеств.

G = (V, E),

где V есть подмножество любого счётного множества, а E -- подмножество V * V.

Теория графов находит применение, например, в геоинформационных системах (ГИС). Существующие или вновь проектируемые дома, сооружения, кварталы и т. п. рассматриваются как вершины, а соединяющие их дороги, инженерные сети, линии электропередачи и т. п. -- как рёбра. Применение различных вычислений, производимых на таком графе, позволяет, например, найти кратчайший объездной путь или ближайший продуктовый магазин, спланировать оптимальный маршрут.

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

При изображении графов на рисунках чаще всего используется следующая система обозначений: вершины графа изображаются точками или, при конкретизации смысла вершины, прямоугольниками, овалами и др., где внутри фигуры раскрывается смысл вершины (графы блок-схем алгоритмов). Если между вершинами существует ребро, то соответствующие точки (фигуры) соединяются линией или дугой. В случае ориентированного графа дуги заменяют стрелками, или явно указывают направленность ребра. Иногда рядом с ребром размещают поясняющие надписи, раскрывающие смысл ребра, например, в графах переходов конечных автоматов. Различают планарные и непланарные графы. Планарный граф -- это граф, который можно изобразить на рисунке (плоскости) без пересечения рёбер (простейшие -- треугольник или пара связанных вершин), иначе граф непланарный. В том случае, если граф не содержит циклов (содержащих, по крайней мере, один путь однократного обхода рёбер и вершин с возвратом в исходную вершину), его принято называть «деревом». Важные виды деревьев в теории графов -- бинарные деревья, где каждая вершина имеет одно входящее ребро и ровно два выходящих, или является конечной -- не имеющей выходящих рёбер и содержит одну корневую вершину, в которую нет входящего ребра.

Не следует путать изображение графа с собственно графом (абстрактной структурой), поскольку одному графу можно сопоставить не одно графическое представление. Изображение призвано лишь показать, какие пары вершин соединены рёбрами, а какие -- нет. Часто на практике бывает трудно ответить на вопрос, являются ли два изображения моделями одного и того же графа или нет (другими словами, изоморфны ли соответствующие изображениям графы). В зависимости от задачи, одни изображения могут давать более наглядную картину, чем другие.

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

3. Практическая часть

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

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

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

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

типа:

3 4 1500

1 3 3000

4 2 1200

И т.д.

Первым числовым значением в строке является номер начальной станции перегона. Вторым числовым значением в строке является номер конечной станции перегона. Третьим числовым значением мы задаем известное расстояние между номером начальной станции перегона и номером конечной станции перегона.

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

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

Наилучшей конечной формой выдачи значений вычисленных расстояний между перегонами, является следующая форма:

1-2: 600 м.

2-3: 1000 м.

3-4: Недостаточно данных

4-5: 1300 м.

И т.д.

Строки 1, 2, 4 отображают вычисленное значение расстояний между перегонами 600, 1000, 1300 м соответственно. А в 3 строке текстового файла содержащего конечные значения расстояний, отображается невозможность, из-за нехватки данных, вычисления расстояний между перегонами.

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

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

Все расчеты и анализ исходных данных происходят в функции SaveData(Indata). Числовые значение в данный модуль попадают через вызов функции SaveData(Indata), в данном случае мы передаем числовой массив который считали в втором модуле. Данная функция разделена на 4 части:

1. Анализ исходных данных.

Здесь известные значения расстояний меж станций записываются в конечный массив хранящий в себе значения расстояний между станциями упорядоченных по возрастанию. Так же параллельно записываются номера данных интервалов в другой массив, для следующих шагов обработки, а именно упорядочивания значений расстояний меж станциями по возрастанию в массиве «Data». Данный цикл в случае неизвестного значения неизвестного расстояний между станцией, заполоняет ячейки массива Data числовым значением 0.

2. Вычисление неизвестных расстояний между суммой известных расстояний.

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

3. Первый цикл вычисления неизвестных расстояний.

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

4. Второй цикл вычисления неизвестных расстояний.

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

4. Тестирование. Контрольные примеры вычисления определенного интеграла

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

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

Все практически неисчисляемое множество возможных ошибок обычно подразделяют на три группы:

- синтаксические ошибки;

- ошибки времени выполнения программы;

- смысловые (логические) ошибки.

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

Намного больше неприятностей доставляют ошибки времени выполнения. Они дают о себе знать прекращением выполнения программы. Чаще всего ошибка времени выполнения является симптомом смысловой ошибки.

Смысловые (логические) ошибки - самые сложные и трудноуловимые. Они проявляются в том, что программа ведет себя не совсем так, как хотелось бы.

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

Отладка программы является итеративным процессом обнаружения и исправления ошибок, который обычно требует последовательного выполнения четырех этапов:

-выявление ошибки;

-локализация ошибки в тексте программы;

-установление причины ошибки;

-исправление ошибки;

-проверка на наличие вторичных ошибок.

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

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

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

При исправлении ошибки самое главное - не внести в программу новых ошибок.

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

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

В процессе отладки можно выделить два основных этапа:

-проверка корректности работы программы;

-обработка и анализ результатов испытаний.

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

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

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

В качестве первого примера возьмем исходные значение расстояний между станциями позволяющие вычислить все перегоны железной дороги.

Входными значениями в программе, будут являться следующий расстояния между станциями:

Количество станций: 6

1 2 5

1 3 15

1 5 65

1 6 75

4 6 25

Где первое число строке - начальная станция интервала, второе - конечная станция интервала, а третье число расстояние между начальной и конечной станцией.

Результатом выполнения программы будут данные, выведенные в консоли (Рисунок 1), и запись в выходном файле (Рисунок 2).

Рисунок 1. Вывод вычисленных расстояний в консоль.

Рисунок 2. Вывод значений в текстовый файл.

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

Количество станций: 5

1 2 15

1 3 25

1 4 35

Результатом выполнения программы будут данные, выведенные в консоли (Рисунок 3), и запись в выходном файле (Рисунок 4).

Рисунок 3. Вывод вычисленных расстояний в консоль.

Рисунок 4. Вывод значений в текстовый файл.

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

Заключение

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

Из-за того что код программы представляет из себя максимально понятный и простой алгоритм обработки данных, ее может модифицировать любой человек имеющий познания в области языка программирования C++. Это делает программу более гибкий инструментом, позволяющим использовать ее для более широкого спектра целей и условий.

Для работы в программе потребуется любой компьютер поддерживающий Windows 7 и выше, и все девайсы необходимые для работы с компьютером, такие как: мышь, клавиатура, монитор и так далее.

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

Список используемых источников

1. Орлов, С.А. Технология разработки программ / С. А. Орлов. - СПб. : Питер, 2004. - 420с.

2. Лафоре Р. Объектно-ориентированное программирование в C++. - СПб: Питер, 2004. - 923с.

3. Гамма, Э., Хелм, Р., Джонсон, Р. , Влиссидесс, Д. Приемы объектно-ориентированного программирования. Паттерны проектирования. - Спб: Питер, 2010. - 366 с.

4. Годунова Е.К. Введение в теорию графов. Индивидуальные задания. - МПГУ, 2012. - 44 с.

Приложение 1

Программная документация: файл листинг программы

#include <iostream>

#include <fstream>

using namespace std;

class train

{

private:

int Str = 0, Station;

public:

//Модуль считывания кол-ва станций

void ReadStation()

{

cout << "Введите кол-во станций: "; cin >> Station;

Station = Station - 1;

}

//Модуль считывания начальных данных

void ReadIN()

{

ReadStation();

char *str = new char[1024];

ifstream INS("D:\\input.txt");

while (!INS.eof())

{

INS.getline(str, 1024, '\n');

Str++;

}

INS.close();

float**Indata = new float*[Str];

for (int i = 0; i < Str; i++)

Indata[i] = new float[3];

ifstream IN;

IN.open("D:\\input.txt");

for (int i = 0; i < Str; i++)

for (int j = 0; j < 3; j++)

IN >> Indata[i][j];

IN.close();

SaveData(Indata);

}

//Модуль обработки данных

void SaveData(float**Indata)

{

float*Data = new float[Station];

float*NumberData = new float[Station];

/*Первичная обработка*/

int Number = 0, Shet = 0, Bool = 0;

for (int i = 0; i < Str; i++)

{

if (Indata[i][0] + 1 == Indata[i][1])

{

Data[Number] = Indata[i][2];

NumberData[Number] = Indata[i][0];

}

else if (Indata[i][0] - 1 == Indata[i][1])

{

Data[Number] = Indata[i][2];

NumberData[Number] = Indata[i][1];

}

else

Number--;

Number++;

}

Number = 0;

float*TimeNumberData = new float[Station];

for (int i = 1; i < Station + 1; i++)

{

Bool = 0;

for (int j = 0; j < Station; j++)

{

if (i == NumberData[j])

Bool = 1;

}

if (Bool == 0)

{

TimeNumberData[Number] = i;

Number++;

}

}

for (int i = 0; i < Number; i++)

NumberData[Station - i - 1] = TimeNumberData[i];

Bool = Number;

delete TimeNumberData;

float*TimeData = new float[Station];

for (int i = 0; i < Station; i++)

{

Number = NumberData[i];

TimeData[Number - 1] = Data[i];

if (i >= Station - Bool)

TimeData[Number - 1] = 0;

}

for (int i = 0; i < Station; i++)

Data[i] = TimeData[i];

delete TimeData;

/*Вычисление интервалов*/

int Gap = 0, SecondGap = 0;

float AllLong;

for (int i = 0; i < Str; i++)

if ((Indata[i][0] == 1) && (Indata[i][1] == Station + 1))

AllLong = Indata[i][2];

for (int i = 0; i < Str; i++)

{

for (int j = 0; j < Str; j++)

{

Gap = Indata[i][1] - 1;

SecondGap = Indata[i][0] - 1;

if ((Indata[i][0] == Indata[j][0]) && (Indata[i][1] == Indata[j][1] - 1))

if (Data[Gap] == 0)

Data[Gap] = Indata[j][2] - Indata[i][2];

if ((Indata[i][0] == Indata[j][0] - 1) && (Indata[i][1] == Indata[j][1]))

if (Data[SecondGap] == 0)

Data[SecondGap] = Indata[i][2] - Indata[j][2];

if ((Indata[i][0] == 1)&&(Indata[j][1] == Station + 1)&&(Indata[i][1] == Indata[j][0] - 1))

if (Data[Gap] == 0)

Data[Gap] = AllLong - (Indata[j][2] + Indata[i][2]);

}

}

/*Вторичная обработка*/

//Подготовка

float**SecondData = new float *[Str];

for (int i = 0; i < Str; i++)

SecondData[i] = new float[3];

Number = 0;

for (int i = 0; i < Str; i++)

{

if (Indata[i][0] + 1 == Indata[i][1])

Number--;

else if (Indata[i][0] - 1 == Indata[i][1])

Number--;

else

{

SecondData[Number][0] = Indata[i][2];

SecondData[Number][1] = Indata[i][0];

if (Indata[i][0] < Indata[i][1])

SecondData[Number][2] = Indata[i][1] - Indata[i][0];

if (Indata[i][0] > Indata[i][1])

SecondData[Number][2] = Indata[i][0] - Indata[i][1];

}

Number++;

}

int Koll = 0, SecondBool = 0;

Koll = Number;

Number = 0;

Bool = 0;

float*TimeSecond = new float[Station];

float**SecondNumber = new float*[Station];

for (int i = 0; i < Station; i++)

SecondNumber[i] = new float[2];

for (int i = 0; i < Koll; i++)

{

for (int j = 0; j < SecondData[i][2]; j++)

TimeSecond[j] = SecondData[i][1] + j;

for (int j = 0; j < SecondData[i][2]; j++)

{

Shet = TimeSecond[j];

if (Data[Shet - 1] > 0)

Number++;

}

Number = SecondData[i][2] - Number;

if (Number == 1)

{

SecondNumber[Bool][0] = i;

Bool++;

}

else

{

SecondNumber[SecondBool][1] = i;

SecondBool++;

}

Number = 0;

}

//Первая стадия обработки

for (int i = 0; i < Bool; i++)

{

Number = SecondNumber[i][0];

for (int j = 0; j < SecondData[Number][2]; j++)

TimeSecond[j] = SecondData[Number][1] + j;

for (int j = 0; j < SecondData[Number][2]; j++)

{

Shet = TimeSecond[j];

if (Data[Shet - 1] > 0)

SecondData[Number][0] = SecondData[Number][0] - Data[Shet - 1];

else

Koll = Shet - 1;

}

Data[Koll] = SecondData[Number][0];

}

//Вторая стадия обработки

for (int i = 0; i < SecondBool; i++)

{

Number = SecondNumber[i][1];

for (int j = 0; j < SecondData[Number][2]; j++)

TimeSecond[j] = SecondData[Number][1] + j;

for (int j = 0; j < SecondData[Number][2]; j++)

{

Shet = TimeSecond[j];

if (Data[Shet - 1] > 0)

SecondData[Number][0] = SecondData[Number][0] - Data[Shet - 1];

else

Koll = Shet - 1;

}

Data[Koll] = SecondData[Number][0];

}

delete SecondData, SecondBool, TimeSecond, SecondNumber;

WriteOUT(Data);

}

//Модуль вывода данных

void WriteOUT(float*Data)

{

ofstream OUT;

OUT.open("D:\\OUT.txt", ios::out);

for (int i = 0; i < Station; i++)

{

if (Data[i] == 0)

{

OUT << i + 1 << "-" << i + 2 << ": Недостаточно данных" << endl;

cout << i + 1 << "-" << i + 2 << ": Недостаточно данных" << endl;

}

else

{

OUT << i + 1 << "-" << i + 2 << ": " << Data[i] <<" км."<< endl;

cout << i + 1 << "-" << i + 2 << ": " << Data[i] <<" км."<< endl;

}

}

cout << "Файл сохранен в D:\\OUT.txt" << endl;

OUT.close();

}

};

void main()

{

setlocale(LC_ALL, "rus");

float*Data = new float[3];

train ferst;

ferst.ReadIN();

system("pause");

}

Размещено на Allbest.ru

...

Подобные документы

  • Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.

    курсовая работа [832,6 K], добавлен 24.07.2012

  • Метод аналитического описания экспериментальных данных, основанный на использовании в качестве аппроксимирующих операторов ОДУ. Разработка итерационного МАЧ, в котором предложен критерий качества подстройки неизвестных параметров объектов управления.

    дипломная работа [953,3 K], добавлен 14.07.2012

  • Составление алгоритмов и программ для вычисления значений неизвестных: программирование формул; операторы ввода и вывода; условный оператор; цикл с предусловием и с постусловием, с заданным числом повторений; графические средства; тестирование программы.

    курсовая работа [1,5 M], добавлен 13.03.2011

  • Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.

    курсовая работа [21,0 K], добавлен 03.01.2010

  • Математическая основа параллельных вычислений. Свойства Parallel Computing Toolbox. Разработка параллельных приложений в Matlab. Примеры программирования параллельных задач. Вычисление определенного интеграла. Последовательное и параллельное перемножение.

    курсовая работа [1,1 M], добавлен 15.12.2010

  • Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.

    контрольная работа [831,0 K], добавлен 24.11.2013

  • Способы и методы нахождения значения определённого интеграла. Программные средства языка C. Программные средства языка Pascal (версия 7.0). Алгоритм программы вычисления определённого интеграла. Тестирование программы. Обработка результатов измерений.

    курсовая работа [2,5 M], добавлен 01.06.2010

  • Корректность определения кратчайших путей в графе и рёбра отрицательной длины. Анализ алгоритмов Дейкстры, Беллмана-Форда, Флойда-Уоршелла. Вычисление кратчайших расстояний между всеми парами вершин графа. Топологическая сортировка ориентированного графа.

    презентация [449,3 K], добавлен 19.10.2014

  • Разработка различных программ для вычисления X и Y по формуле, для вычисления интеграла, для вычисления таблицы значений функции и для вычисления элементов вектора. Составление блок-схемы программы. Ввод значений, описание переменных и условия расчета.

    контрольная работа [148,1 K], добавлен 08.11.2013

  • Теоретическое обоснование теории графов. Методы нахождения медиан графа. Задача оптимального размещения насосной станции для полива полей. Алгоритм Флойда, поиск суммарного расстояния до вершин. Функция нахождения индекса минимального значения в массиве.

    курсовая работа [336,8 K], добавлен 28.05.2016

  • Разработка программы нахождения значения определенного интеграла с помощью метода трапеций. Оценка абсолютной погрешности метода. Использование среды программирования Visual Studio Community 2015 для написания программы. Работа с графическим интерфейсом.

    курсовая работа [573,8 K], добавлен 17.03.2016

  • Создание программного модуля для вычисления интеграла по формулам трапеции и Симпсона, определяя шаг интегрирования по оценке остаточного члена. Для разработки используется табличный процессор Excel и язык программирования Visual Basic for Application.

    курсовая работа [159,7 K], добавлен 30.08.2010

  • Изучение системы обработки данных в программе Winplort. Просмотр профиля, поиск пиков, округление углов и расчет относительных интенсивностей при программной обработке рентгенограмм порошков. Расчет межплоскостных расстояний табличной рентгенограммы.

    реферат [127,0 K], добавлен 15.12.2015

  • Формулирование и создание программы по вычислению определенного интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона. Выбор Delphi как программного средства разработки программы. Создание алгоритма и листинг программы.

    курсовая работа [990,9 K], добавлен 15.06.2009

  • Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.

    курсовая работа [483,6 K], добавлен 25.06.2014

  • Требования к аппаратным ресурсам персонального компьютера. Расчет цены и прибыли на программное средство. Процедура нахождения значения интеграла методом Симпсона, трапеции, прямоугольников. Формы для ввода и вывода данных с доступным интерфейсом.

    дипломная работа [7,4 M], добавлен 11.06.2012

  • Средства индикации, сигнализации, подключения. Датчики и исполнительные органы. Краткая характеристика технических средств и технологии отладки аппаратной и программной сред контроллера. Распределение адресного пространства. Алгоритм работы устройства.

    курсовая работа [870,4 K], добавлен 16.01.2015

  • Постановка задачи и ее формализация. Поиск значений интерполяционного многочлена в точках x1 и x2. Поиск минимума функции F(x) на отрезке [a;b]. Проверка условий сходимости методов. Тестирование программных модулей. Детализированная схема алгоритма.

    курсовая работа [893,0 K], добавлен 04.02.2011

  • Построение графика функции. Поиск корней уравнения методом половинного деления. Определение минимума функции методом перебора и значения аргумента. Вычисление определенного интеграла на заданном отрезке с использованием метода правых прямоугольников.

    контрольная работа [316,1 K], добавлен 13.11.2014

  • Проверить условие сходимости и записать расчетные формулы для нахождения корня уравнения. Составить блок-схему алгоритма, программу решения задачи. Вычисления определенного интеграла методом Симпсона. Построить график функции Y=1/sqr(3sin(x)+2cos(x)).

    курсовая работа [29,6 K], добавлен 02.10.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.