From 55c639e9c46e85618df1581ff8c1bf62e99d5162 Mon Sep 17 00:00:00 2001 From: Artem-Volkov Date: Thu, 24 May 2018 10:11:42 +0300 Subject: [PATCH 1/7] graph --- .../generate_graph/generate_graph.vcxproj | 156 ++++++++++++++++ .../generate_graph.vcxproj.filters | 14 ++ .../build/lab3/graph_lib/graph_lib.vcxproj | 146 +++++++++++++++ .../lab3/graph_lib/graph_lib.vcxproj.filters | 41 ++++ VolkovAA/lab3/build/lab3/lab3.sln | 54 ++++++ VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj | 156 ++++++++++++++++ .../lab3/build/lab3/lab3/lab3.vcxproj.filters | 14 ++ VolkovAA/lab3/include/Deijkstra.h | 16 ++ VolkovAA/lab3/include/Graph.h | 47 +++++ VolkovAA/lab3/include/d-heap.h | 42 +++++ VolkovAA/lab3/include/priority_queue.h | 47 +++++ VolkovAA/lab3/samples/generate_g.cpp | 103 +++++++++++ VolkovAA/lab3/samples/main.cpp | 10 + VolkovAA/lab3/src/Dijkstra.cpp | 63 +++++++ VolkovAA/lab3/src/d-heap.cpp | 146 +++++++++++++++ VolkovAA/lab3/src/graph.cpp | 175 ++++++++++++++++++ VolkovAA/lab3/src/priority_queue_heap.cpp | 47 +++++ 17 files changed, 1277 insertions(+) create mode 100644 VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj create mode 100644 VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj.filters create mode 100644 VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj create mode 100644 VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj.filters create mode 100644 VolkovAA/lab3/build/lab3/lab3.sln create mode 100644 VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj create mode 100644 VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj.filters create mode 100644 VolkovAA/lab3/include/Deijkstra.h create mode 100644 VolkovAA/lab3/include/Graph.h create mode 100644 VolkovAA/lab3/include/d-heap.h create mode 100644 VolkovAA/lab3/include/priority_queue.h create mode 100644 VolkovAA/lab3/samples/generate_g.cpp create mode 100644 VolkovAA/lab3/samples/main.cpp create mode 100644 VolkovAA/lab3/src/Dijkstra.cpp create mode 100644 VolkovAA/lab3/src/d-heap.cpp create mode 100644 VolkovAA/lab3/src/graph.cpp create mode 100644 VolkovAA/lab3/src/priority_queue_heap.cpp diff --git a/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj b/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj new file mode 100644 index 000000000..2035d9ddb --- /dev/null +++ b/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323} + Win32Proj + generate_graph + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + graph_lib.lib;%(AdditionalDependencies) + ../Debug + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + true + true + graph_lib.lib;%(AdditionalDependencies) + ../Release + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj.filters b/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj.filters new file mode 100644 index 000000000..974ba5b96 --- /dev/null +++ b/VolkovAA/lab3/build/lab3/generate_graph/generate_graph.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj b/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj new file mode 100644 index 000000000..6954820c1 --- /dev/null +++ b/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8} + Win32Proj + graph_lib + 8.1 + + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + ../../../include + + + Windows + + + + + + + Level3 + Disabled + _DEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + ../../../include + + + Windows + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + true + true + + + + + + \ No newline at end of file diff --git a/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj.filters b/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj.filters new file mode 100644 index 000000000..205e1b71b --- /dev/null +++ b/VolkovAA/lab3/build/lab3/graph_lib/graph_lib.vcxproj.filters @@ -0,0 +1,41 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/VolkovAA/lab3/build/lab3/lab3.sln b/VolkovAA/lab3/build/lab3/lab3.sln new file mode 100644 index 000000000..7e8eb9fbe --- /dev/null +++ b/VolkovAA/lab3/build/lab3/lab3.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lab3", "lab3\lab3.vcxproj", "{3611F5EE-B3FD-4484-A7E2-3B2B91F25284}" + ProjectSection(ProjectDependencies) = postProject + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8} = {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graph_lib", "graph_lib\graph_lib.vcxproj", "{AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate_graph", "generate_graph\generate_graph.vcxproj", "{07D8BD44-E0DD-4B88-9BFF-83757A2BE323}" + ProjectSection(ProjectDependencies) = postProject + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8} = {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Debug|x64.ActiveCfg = Debug|x64 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Debug|x64.Build.0 = Debug|x64 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Debug|x86.ActiveCfg = Debug|Win32 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Debug|x86.Build.0 = Debug|Win32 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Release|x64.ActiveCfg = Release|x64 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Release|x64.Build.0 = Release|x64 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Release|x86.ActiveCfg = Release|Win32 + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284}.Release|x86.Build.0 = Release|Win32 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Debug|x64.ActiveCfg = Debug|x64 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Debug|x64.Build.0 = Debug|x64 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Debug|x86.ActiveCfg = Debug|Win32 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Debug|x86.Build.0 = Debug|Win32 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Release|x64.ActiveCfg = Release|x64 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Release|x64.Build.0 = Release|x64 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Release|x86.ActiveCfg = Release|Win32 + {AAC63DB2-CE7F-45B9-B5A0-1D0F57F595E8}.Release|x86.Build.0 = Release|Win32 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Debug|x64.ActiveCfg = Debug|x64 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Debug|x64.Build.0 = Debug|x64 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Debug|x86.ActiveCfg = Debug|Win32 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Debug|x86.Build.0 = Debug|Win32 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Release|x64.ActiveCfg = Release|x64 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Release|x64.Build.0 = Release|x64 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Release|x86.ActiveCfg = Release|Win32 + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj b/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj new file mode 100644 index 000000000..57958c95d --- /dev/null +++ b/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + {3611F5EE-B3FD-4484-A7E2-3B2B91F25284} + Win32Proj + lab3 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + graph_lib.lib;%(AdditionalDependencies) + ../Debug + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + true + true + graph_lib.lib;%(AdditionalDependencies) + ../Release + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj.filters b/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj.filters new file mode 100644 index 000000000..0e0bed61a --- /dev/null +++ b/VolkovAA/lab3/build/lab3/lab3/lab3.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/VolkovAA/lab3/include/Deijkstra.h b/VolkovAA/lab3/include/Deijkstra.h new file mode 100644 index 000000000..9d81862d7 --- /dev/null +++ b/VolkovAA/lab3/include/Deijkstra.h @@ -0,0 +1,16 @@ +#pragma once +#include "Graph.h" +#include "d-heap.h" +#include "priority_queue.h" +#include + +class DataFloat : public Data { +public: + DataFloat(int v, float dist); + int v; +}; + +class Dijkstra { +public: + static void dijkstra(Graph *&graph, int s, float *&distance, int *&up); +}; \ No newline at end of file diff --git a/VolkovAA/lab3/include/Graph.h b/VolkovAA/lab3/include/Graph.h new file mode 100644 index 000000000..d856f3fe7 --- /dev/null +++ b/VolkovAA/lab3/include/Graph.h @@ -0,0 +1,47 @@ +#pragma once +#include +#include +#include + +#define maxVerticesSize 1000 + +class Edge { +public: + int N; + int K; + float weight; + + Edge(int N, int K, float weight); +}; + +class Graph { +private: + int n; + int m; + int m_cur; + Edge** edges; + int* vertices; +public: + Graph(int n); + Graph(int n, int m); + ~Graph(); + + void generateGraph(float minRange, float maxRange); + void addEdge(int N, int K, float weight); + void delEdge(int N, int K); + + int getVerticesNum(); + int getEdgeSize(); + int getRealSize(); + Edge** getEdgeSet(); + Edge* getEdge(int j); + float getWeight(int N, int K); + + void printList(); + +private: + void generateVertices(int &N, int &K); + float generateWeight(float minRange, float maxRange); + void cleaner(); + int findEdge(int N, int K); +}; diff --git a/VolkovAA/lab3/include/d-heap.h b/VolkovAA/lab3/include/d-heap.h new file mode 100644 index 000000000..d3b36c82a --- /dev/null +++ b/VolkovAA/lab3/include/d-heap.h @@ -0,0 +1,42 @@ +#pragma once +#include +#include +#include "Graph.h" + +#define maxSize 1000 +typedef int dataType; + +class Data { +public: + float priorities; +}; + +class DAryHeap { +protected: + Data **keys; + int d; + int lastIdx; +public: + DAryHeap(int d); + DAryHeap(const DAryHeap &heap); + ~DAryHeap(); + + void add(Data *&key); + void addSet(Data **key, int num); + Data* erase(); + Data* erase(int i); + + void transposition(int i, int j); + void surfacing(int i); + void immersion(int i); + + void spudding(); + + int isFull(); + int isEmpty(); + +private: + int minChild(int i); +}; + + diff --git a/VolkovAA/lab3/include/priority_queue.h b/VolkovAA/lab3/include/priority_queue.h new file mode 100644 index 000000000..db16c5a2a --- /dev/null +++ b/VolkovAA/lab3/include/priority_queue.h @@ -0,0 +1,47 @@ +#pragma once + +#include "d-heap.h" + +enum QueueID { + HEAP = 0, +}; + +class PriorityQueue { +public: + PriorityQueue() {}; + + virtual void push(Data *&key) = 0; + virtual Data* pop() = 0; + virtual void refresh() = 0; + + virtual int isFull() = 0; + virtual int isEmpty() = 0; +}; + +class PriorityQueueHeap : public PriorityQueue { +protected: + DAryHeap *heap; +public: + PriorityQueueHeap(int d = 4); + PriorityQueueHeap(const PriorityQueueHeap &queue); + PriorityQueueHeap(Data **keys, int num, int d = 4); + ~PriorityQueueHeap(); + + virtual void push(Data *&key); + virtual Data* pop(); + virtual void refresh(); + + virtual int isFull(); + virtual int isEmpty(); +}; +class QueueFactory { +public: + static PriorityQueue* createQueue(QueueID qid) + { + PriorityQueue *queue; + + queue = new PriorityQueueHeap(); + + return queue; + } +}; \ No newline at end of file diff --git a/VolkovAA/lab3/samples/generate_g.cpp b/VolkovAA/lab3/samples/generate_g.cpp new file mode 100644 index 000000000..d0c013c7a --- /dev/null +++ b/VolkovAA/lab3/samples/generate_g.cpp @@ -0,0 +1,103 @@ +#include "Graph.h" +#include "Deijkstra.h" +#include +#include +#include +using namespace std; + +int main(int argc, char **argv) +{ + Graph *graph; + int n; + int m; + int s; + int fid; + if (argc == 7) { //ãðàô RAND + try { + n = atoi(argv[1]); + m = atoi(argv[2]); + int minRange = atoi(argv[3]); + int maxRange = atoi(argv[4]); + fid = atoi(argv[5]); + s = atoi(argv[6]); + graph = new Graph(n, m); + graph->generateGraph(minRange, maxRange); + } + catch (...) { + return -1; + } + } + else if (argc == 3) { //ãðàô çàäàí ìàòðèöåé + string filename(argv[1]); + ifstream input(filename); + if (!input) { + cout << "error!"; + return 2; + } + try { + input >> n; + input >> m; + input >> fid; + s = atoi(argv[2]); + graph = new Graph(n); + int N, K; + float weight; + while (!input.eof()) { + input >> N; + input >> K; + input >> weight; + graph->addEdge(N, K, weight); + } + } + catch (...) { + return -1; + } + input.close(); + } + else return 1; + + graph->printList(); + cout << endl; + + float *dist; + int *up; + try { + Dijkstra::dijkstra(graph, s, dist, up); + } + catch (...) { + return -2; + } + + remove("ways.txt"); + ofstream output("ways.txt"); + output.precision(2); + + output << n << ' ' << m << endl;//ïå÷àòàþ êîëè÷åñòâî âåðøèí + output << s << endl; //ïå÷àòàþ ñòàðòîâóþ âåðøèíó + + m = graph->getRealSize(); + Edge* edge; + for (int j = 0; j < m; j++) { + edge = graph->getEdge(j); + output << edge->N << ' ' << edge->K << ' ' << edge->weight << endl; + } + + for (int i = 0; i < n; i++) + if (dist[i] != FLT_MAX) + cout << dist[i] << ' '; + else + cout << "inf" << ' '; + + for (int i = 0; i < n; i++) { + output << endl; + output << i; + output << ' ' << dist[i]; + output << ' ' << up[i]; + } + + output.close(); + delete graph; + delete[]dist; + delete[]up; + return 0; +} \ No newline at end of file diff --git a/VolkovAA/lab3/samples/main.cpp b/VolkovAA/lab3/samples/main.cpp new file mode 100644 index 000000000..22bdced11 --- /dev/null +++ b/VolkovAA/lab3/samples/main.cpp @@ -0,0 +1,10 @@ +#include "priority_queue.h" +#include "Graph.h" + +int main() +{ + Graph graph(7, 10); + graph.generateGraph(-100, 100); + graph.printList(); + return 0; +} \ No newline at end of file diff --git a/VolkovAA/lab3/src/Dijkstra.cpp b/VolkovAA/lab3/src/Dijkstra.cpp new file mode 100644 index 000000000..7a57dfe29 --- /dev/null +++ b/VolkovAA/lab3/src/Dijkstra.cpp @@ -0,0 +1,63 @@ +#include "Deijkstra.h" + +DataFloat::DataFloat(int v, float dist) +{ + this->v = v; + priorities = dist; +} + +void Dijkstra::dijkstra(Graph *&graph, int s, float *&distance, int *&up) +{ + int n = graph->getVerticesNum(); + int m = graph->getRealSize(); + if ((s < 0) || (s >= n)) + throw "Dijkstra: Invalid start vertex!"; + + Data** dist = new Data*[n]; + up = new int[n]; + + PriorityQueue *queue = QueueFactory::createQueue(static_cast(0)); + + for (int i = 0; i < n; i++) { + up[i] = i; + dist[i] = new DataFloat(i, FLT_MAX); + if (i == s) + dist[s]->priorities = 0; + queue->push(dist[i]); + } + + Edge** edges = graph->getEdgeSet(); + while (!queue->isEmpty()) + { + int vConsidered = ((DataFloat*)queue->pop())->v; + float delta; + + for (int i = 0; i < m; i++) + { + int vIncident = -1; + if (edges[i]->K == vConsidered) + vIncident = edges[i]->N; + if (edges[i]->N == vConsidered) + vIncident = edges[i]->K; + if (vIncident == -1) continue; + + float way = dist[vConsidered]->priorities + graph->getWeight(vConsidered, vIncident); + delta = dist[vIncident]->priorities - way; + if (delta > 0) + { + dist[vIncident]->priorities = way; //ïîñêîëüêó â î÷åðåäè ëåæàò óêàçàòåëè íà îáúåêòû dist[i], + up[vIncident] = vConsidered; //òî çíà÷åíèÿ â î÷åðåäè àâòîìàòè÷åñêè èçìåíÿòñÿ. + queue->refresh(); + } + } + } + + distance = new float[n]; + for (int i = 0; i < n; i++) + distance[i] = dist[i]->priorities; + + for (int i = 0; i < n; i++) + delete dist[i]; + delete[]dist; + delete queue; +} \ No newline at end of file diff --git a/VolkovAA/lab3/src/d-heap.cpp b/VolkovAA/lab3/src/d-heap.cpp new file mode 100644 index 000000000..d96749fa2 --- /dev/null +++ b/VolkovAA/lab3/src/d-heap.cpp @@ -0,0 +1,146 @@ +#include "d-heap.h" + +DAryHeap::DAryHeap(int d) +{ + if (d <= 0) + throw "DAryHeap: Invalid d"; + this->d = d; + lastIdx = -1; + keys = new Data*[maxSize]; +} + +DAryHeap::DAryHeap(const DAryHeap &heap) +{ + this->d = heap.d; + keys = new Data*[maxSize]; + for (int i = 0; i <= heap.lastIdx; i++) + keys[i] = heap.keys[i]; + this->lastIdx = heap.lastIdx; +} + +DAryHeap::~DAryHeap() +{ + delete[] keys; +} + +void DAryHeap::add(Data *&key) +{ + if (isFull()) + throw "DAryHeap: No memory"; + lastIdx++; + keys[lastIdx] = key; + surfacing(lastIdx); +} + +void DAryHeap::addSet(Data **key, int num) +{ + if (lastIdx + num >= maxSize) + throw "DAryHeap: Too large set!"; + for (int i = lastIdx + 1; i < lastIdx + num + 1; i++) + { + keys[i] = key[i - lastIdx - 1]; + } + lastIdx += num; + spudding(); +} + +Data* DAryHeap::erase() +{ + if (isEmpty()) + throw "DAryHeap: No data!"; + Data* key = keys[lastIdx]; + lastIdx--; + return key; +} + +Data* DAryHeap::erase(int i) +{ + if (isEmpty()) + throw "DAryHeap: No data!"; + if ((i < 0) || (i > lastIdx)) + throw "DAryHeap: Invalid index"; + + Data* key = keys[i]; + if (i == lastIdx) + { + lastIdx--; + return key; + } + transposition(i, lastIdx); + lastIdx--; + immersion(i); + return key; +} + +void DAryHeap::transposition(int i, int j) +{ + if ((i < 0) || (j < 0) || (i > lastIdx) || (j > lastIdx)) + throw "DAryHeap: Invalid indexes"; + Data* tmp = keys[i]; + keys[i] = keys[j]; + keys[j] = tmp; +} + +void DAryHeap::surfacing(int i) +{ + if ((i < 0) || (i > lastIdx)) + throw "DAryHeap: Invalid index"; + + int p = (i - 1) / d; + while (i > 0) { + if (keys[p]->priorities < keys[i]->priorities) + break; + transposition(p, i); + i = p; + p = (i - 1) / d; + } +} + +void DAryHeap::immersion(int i) +{ + if ((i < 0) || (i > lastIdx)) + throw "DAryHeap: Invalid index"; + + int c = minChild(i); + while ((c != -1) && (keys[c]->priorities < keys[i]->priorities)) { + transposition(i, c); + i = c; + c = minChild(i); + } +} + +void DAryHeap::spudding() +{ + for (int i = lastIdx; i >= 0; i--) + immersion(i); +} + +int DAryHeap::isFull() +{ + return lastIdx >= maxSize - 1; +} + +int DAryHeap::isEmpty() +{ + return lastIdx == -1; +} + +int DAryHeap::minChild(int i) +{ + int f = i*d + 1; + if (f > lastIdx) + return -1; + + int l = std::min(i*d + d, lastIdx); + int c; + + Data* minKey = keys[f]; + c = f; + for (int k = f + 1; k <= l; k++) { + if (minKey->priorities > keys[k]->priorities) { + minKey = keys[k]; + c = k; + } + } + return c; +} \ No newline at end of file diff --git a/VolkovAA/lab3/src/graph.cpp b/VolkovAA/lab3/src/graph.cpp new file mode 100644 index 000000000..ee47f810a --- /dev/null +++ b/VolkovAA/lab3/src/graph.cpp @@ -0,0 +1,175 @@ +#include "Graph.h" + +Edge::Edge(int N, int K, float weight) +{ + this->N = N; + this->K = K; + this->weight = weight; +} + +Graph::Graph(int n) +{ + if ((n < 0) || (n > maxVerticesSize)) + throw "Graph: Invalid namber of vertices"; + else + this->n = n; + this->m = n*(n - 1) / 2; + m_cur = 0; + vertices = new int[n]; + edges = new Edge*[m]; +} + +Graph::Graph(int n, int m) +{ + if ((n < 0) || (n > maxVerticesSize)) + throw "Graph: Invalid namber of vertices"; + else + this->n = n; + + if ((m < 0) || (m > n*(n - 1) / 2)) + throw "Graph: Invalid namber of edges"; + else + this->m = m; + + m_cur = 0; + + vertices = new int[n]; + edges = new Edge*[m]; +} + +Graph::~Graph() +{ + cleaner(); + delete[] edges; + delete[]vertices; +} + +int Graph::findEdge(int N, int K) +{ + for (int j = 0; j < m_cur; j++) + if ((edges[j]->K == K) && + (edges[j]->N == N) || + (edges[j]->N == K) && + (edges[j]->K == N)) + return j; + return -1; +} + +void Graph::generateVertices(int &N, int &K) +{ + do { + N = rand() % n; + K = rand() % n; + } while ((N == K) || (findEdge(N, K) != -1)); +} + +float Graph::generateWeight(float minRange, float maxRange) +{ + double d = minRange; + double c = (double)(maxRange - minRange) / RAND_MAX; + double result = c * rand() + d; + return result; +} + +void Graph::cleaner() +{ + for (int i = 0; i < m_cur; i++) + delete edges[i]; +} + +void Graph::generateGraph(float minRange, float maxRange) +{ + int N; + int K; + float weight; + + if (minRange > maxRange) + throw "Graph: Invalid ranges"; + + if (m_cur) { + cleaner(); + m_cur = 0; + } + + srand(time(NULL)); + for (int i = 0; i < m; i++) { + generateVertices(N, K); + weight = generateWeight(minRange, maxRange); + edges[i] = new Edge(N, K, weight); + m_cur++; + } +} + +void Graph::addEdge(int N, int K, float weight) +{ + if (m_cur == m) + throw "Graph: Graph is full"; + if (N == K) + throw "Graph: Loops are disabled"; + if (findEdge(N, K) != -1) + throw "Graph: multiple edges arent allowed!"; + edges[m_cur] = new Edge(N, K, weight); + m_cur++; +} + +void Graph::delEdge(int N, int K) +{ + int j = findEdge(N, K); + if (j == -1) + throw "Graph: try delete non-existent edge"; + delete edges[j]; + edges[j] = edges[m_cur - 1]; + m_cur--; +} + +int Graph::getVerticesNum() +{ + return n; +} + +int Graph::getEdgeSize() +{ + return m; +} + +int Graph::getRealSize() +{ + return m_cur; +} + +Edge** Graph::getEdgeSet() +{ + if (m_cur == 0) + return 0; + return edges; +} + +Edge* Graph::getEdge(int j) +{ + return edges[j]; +} + +float Graph::getWeight(int N, int K) +{ + int j = findEdge(N, K); + if (j == -1) + throw "Graph: Invalid edge!"; + return edges[j]->weight; +} + +void Graph::printList() +{ + using namespace std; + for (int i = 0; i < n; i++) + { + cout << i << " : "; + for (int j = 0; j < m_cur; j++) + { + if (edges[j]->N == i) + cout << edges[j]->K << '(' << edges[j]->weight << ')' << ", "; + if (edges[j]->K == i) + cout << edges[j]->N << '(' << edges[j]->weight << ')' << ", "; + } + cout << endl; + } +} \ No newline at end of file diff --git a/VolkovAA/lab3/src/priority_queue_heap.cpp b/VolkovAA/lab3/src/priority_queue_heap.cpp new file mode 100644 index 000000000..eb4185e03 --- /dev/null +++ b/VolkovAA/lab3/src/priority_queue_heap.cpp @@ -0,0 +1,47 @@ +#include "priority_queue.h" + +PriorityQueueHeap::PriorityQueueHeap(int d) +{ + heap = new DAryHeap(d); +} + +PriorityQueueHeap::PriorityQueueHeap(const PriorityQueueHeap &queue) +{ + this->heap = new DAryHeap(*(queue.heap)); +} + +PriorityQueueHeap::PriorityQueueHeap(Data **keys, int num, int d) +{ + heap = new DAryHeap(d); + heap->addSet(keys, num); +} + +PriorityQueueHeap::~PriorityQueueHeap() +{ + delete heap; +} + +void PriorityQueueHeap::push(Data *&key) +{ + heap->add(key); +} + +Data* PriorityQueueHeap::pop() +{ + return heap->erase(0); +} + +void PriorityQueueHeap::refresh() +{ + heap->spudding(); +} + +int PriorityQueueHeap::isFull() +{ + return heap->isFull(); +} + +int PriorityQueueHeap::isEmpty() +{ + return heap->isEmpty(); +} From 947c4d841fa1a7ee120150c21ec3d65971fac462 Mon Sep 17 00:00:00 2001 From: Artem-Volkov Date: Wed, 30 May 2018 21:48:16 +0300 Subject: [PATCH 2/7] postfix --- VolkovAA/lab4/build/Lab4/lab4_postfix.sln | 41 ++++ .../Lab4/lab4_postfix/lab4_postfix.vcxproj | 154 +++++++++++++++ .../lab4_postfix/lab4_postfix.vcxproj.filters | 50 +++++ .../sample_postfix/sample_postfix.vcxproj | 162 +++++++++++++++ .../sample_postfix.vcxproj.filters | 14 ++ VolkovAA/lab4/include/fun.h | 27 +++ VolkovAA/lab4/include/list.h | 185 ++++++++++++++++++ VolkovAA/lab4/include/nods.h | 13 ++ VolkovAA/lab4/include/stack.h | 89 +++++++++ VolkovAA/lab4/include/val.h | 10 + VolkovAA/lab4/sample/Main.cpp | 51 +++++ VolkovAA/lab4/src/List.cpp | 1 + VolkovAA/lab4/src/Node.cpp | 1 + VolkovAA/lab4/src/Stack.cpp | 1 + VolkovAA/lab4/src/fun.cpp | 184 +++++++++++++++++ VolkovAA/lab4/src/val.cpp | 1 + 16 files changed, 984 insertions(+) create mode 100644 VolkovAA/lab4/build/Lab4/lab4_postfix.sln create mode 100644 VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj create mode 100644 VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj.filters create mode 100644 VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj create mode 100644 VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj.filters create mode 100644 VolkovAA/lab4/include/fun.h create mode 100644 VolkovAA/lab4/include/list.h create mode 100644 VolkovAA/lab4/include/nods.h create mode 100644 VolkovAA/lab4/include/stack.h create mode 100644 VolkovAA/lab4/include/val.h create mode 100644 VolkovAA/lab4/sample/Main.cpp create mode 100644 VolkovAA/lab4/src/List.cpp create mode 100644 VolkovAA/lab4/src/Node.cpp create mode 100644 VolkovAA/lab4/src/Stack.cpp create mode 100644 VolkovAA/lab4/src/fun.cpp create mode 100644 VolkovAA/lab4/src/val.cpp diff --git a/VolkovAA/lab4/build/Lab4/lab4_postfix.sln b/VolkovAA/lab4/build/Lab4/lab4_postfix.sln new file mode 100644 index 000000000..c406d130d --- /dev/null +++ b/VolkovAA/lab4/build/Lab4/lab4_postfix.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "postfix_lib", "lab4_postfix\lab4_postfix.vcxproj", "{7196E28F-DCEE-4542-B581-E4EA6CA7AE11}" + ProjectSection(ProjectDependencies) = postProject + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A} = {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample_postfix", "sample_postfix\sample_postfix.vcxproj", "{04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Debug|x64.ActiveCfg = Debug|x64 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Debug|x64.Build.0 = Debug|x64 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Debug|x86.ActiveCfg = Debug|Win32 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Debug|x86.Build.0 = Debug|Win32 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Release|x64.ActiveCfg = Release|x64 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Release|x64.Build.0 = Release|x64 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Release|x86.ActiveCfg = Release|Win32 + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11}.Release|x86.Build.0 = Release|Win32 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Debug|x64.ActiveCfg = Debug|x64 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Debug|x64.Build.0 = Debug|x64 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Debug|x86.ActiveCfg = Debug|Win32 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Debug|x86.Build.0 = Debug|Win32 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Release|x64.ActiveCfg = Release|x64 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Release|x64.Build.0 = Release|x64 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Release|x86.ActiveCfg = Release|Win32 + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj b/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj new file mode 100644 index 000000000..e0b7b13db --- /dev/null +++ b/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {7196E28F-DCEE-4542-B581-E4EA6CA7AE11} + Win32Proj + lab4_postfix + 8.1 + postfix_lib + + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + StaticLibrary + true + v140 + Unicode + + + StaticLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Windows + + + + + + + Level3 + Disabled + _DEBUG;_LIB;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Windows + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Windows + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Windows + true + true + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj.filters b/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj.filters new file mode 100644 index 000000000..b4eca98dc --- /dev/null +++ b/VolkovAA/lab4/build/Lab4/lab4_postfix/lab4_postfix.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj b/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj new file mode 100644 index 000000000..f4429400d --- /dev/null +++ b/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj @@ -0,0 +1,162 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {04E8ACA0-AA0A-4312-9B29-1BDC7F3B534A} + Win32Proj + sample_postfix + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Console + true + postfix_lib.lib;%(AdditionalDependencies) + ..\Debug + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Console + true + ..\Debug + postfix_lib.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Console + true + true + true + postfix_lib.lib;%(AdditionalDependencies) + ..\Release + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + C:\tmp\mp2-practice\VolkovAA\lab4\include + + + Console + true + true + true + ..\Release + postfix_lib.lib;%(AdditionalDependencies) + + + + + + + + + \ No newline at end of file diff --git a/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj.filters b/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj.filters new file mode 100644 index 000000000..4ae06ba2d --- /dev/null +++ b/VolkovAA/lab4/build/Lab4/sample_postfix/sample_postfix.vcxproj.filters @@ -0,0 +1,14 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + + + Source Files + + + \ No newline at end of file diff --git a/VolkovAA/lab4/include/fun.h b/VolkovAA/lab4/include/fun.h new file mode 100644 index 000000000..2d7eb7479 --- /dev/null +++ b/VolkovAA/lab4/include/fun.h @@ -0,0 +1,27 @@ +#ifndef FUNCTIONS_H +#define FUNCTIONS_H + +#include +#include + +#include "list.h" +#include "nods.h" +#include "Stack.h" +#include "val.h" + +using namespace std; + +class functions +{ +private: + static int Priority(char x); +public: + static NameValue* NVmas(string op); + static string postfix(string line); + static string operands(string line); + static float Result(string line, int sizeOfTotalExpression, NameValue* NV); + +}; + + +#endif \ No newline at end of file diff --git a/VolkovAA/lab4/include/list.h b/VolkovAA/lab4/include/list.h new file mode 100644 index 000000000..11e7c3ff6 --- /dev/null +++ b/VolkovAA/lab4/include/list.h @@ -0,0 +1,185 @@ +#ifndef LIST_H +#define LIST_H + +#include "nods.h" + +template +class List +{ +private: + Node *root; +public: + List(); + List(const List&); + ~List(); + + void Add(T); + void Remove(T); + void InsertBefore(T, T); + void InsertAfter(T, T); + void InsertEnd(T); + void print() const; + int Size() const; + T GetRoot()const; + Node *Search(T); +}; + +template +List::List() +{ + root = 0; +}; + +template +List::List(const List&L) +{ + L->pNext=this->root; + this->root = L; +}; + +template +List::~List() +{ + + while (root != 0) + { + Node* tmp = root; + root = root->pNext; + delete tmp; + } + delete root; +}; + +template +void List::Add(T key) +{ + Node * a = new Node; + a->key = key; + a->pNext = root; + root = a; +}; + +template +void List::Remove(T K) +{ + if (root == 0) + throw "List is empty"; + if (this->root->key == K) + { + Node*n = root; + root = root->pNext; + delete n; + return; + } + Node*tmp = root; + while (tmp -> pNext != 0 && tmp->pNext->key != K) + { + tmp = tmp->pNext; + } + if (tmp->pNext == 0) + throw "Key not found"; + Node*n = tmp->pNext; + tmp->pNext = n->pNext; +}; + +template +void List::InsertBefore(T K1, T K2) +{ + if (root == 0) throw "Is Empty"; + if (root->key == K1) + { + root = new Node; + root->key = K1; + + } +}; + +template +void List::InsertAfter(T K1, T K2) +{ + if (root == 0) throw "List is empty"; + while (root->pNext != 0 && root->key != K2) + { + root = root->pNext; + } + if (root->pNext == 0 && root->key != K2) + { + throw "Key not found"; + } + Node*a = new Node; + a->key = K1; + a->pNext = root -> pNext; + root->pNext = a; +}; + +template +void List::InsertEnd(T K) +{ + if (root == 0) + { + root = new Node; + root->key = K; + root->pNext = 0; + return; + } + while (root->pNext != 0) + { + root = root->pNext; + } + root->pNext = new Node; + root->pNext->key = K; + root->pNext -> pNext = 0; +}; + +template +int List::Size() const +{ + Node* a = root; + int i = 0; + while (a != 0) + { + i++; + a = a->pNext; + } + return i; +}; + +template +Node* List::Search(T K) +{ + Node* a = root; + while (a!= 0 && a->key!=K) + { + a = a->pNext; + } + if (a == 0) throw "Key not found"; + return a; +}; + +template +T List::GetRoot()const +{ + if (root!=0) + return root->key; + else + return '!'; + +} + +template +void List::print() const +{ + if (root == 0) + { + throw "Node is empty"; + } + Node* a = root; + while (a != 0) + { + cout << a->key << " "; + a = a->pNext; + } + cout << endl; +}; + +#endif \ No newline at end of file diff --git a/VolkovAA/lab4/include/nods.h b/VolkovAA/lab4/include/nods.h new file mode 100644 index 000000000..64eb3161c --- /dev/null +++ b/VolkovAA/lab4/include/nods.h @@ -0,0 +1,13 @@ +#ifndef NODS_H +#define NODS_H + +template +class Node +{ +public: + T key; + Node *pNext; + +}; + +#endif diff --git a/VolkovAA/lab4/include/stack.h b/VolkovAA/lab4/include/stack.h new file mode 100644 index 000000000..df7c9aaa3 --- /dev/null +++ b/VolkovAA/lab4/include/stack.h @@ -0,0 +1,89 @@ +#ifndef STACK_H +#define STACK_H +#include "list.h" + +template +class Stack +{ +private: + List* list; +public: + Stack(); + Stack(const Stack&); + ~Stack(); + + void Push(T); + T Pop(); + T Take() const; + bool IsEmpty() const; + bool IsFull() const; +}; + +template +Stack::Stack() +{ + list = new List; +}; + +template +Stack::Stack(const Stack&S) +{ + list = new List(S.list); +}; + +template +Stack::~Stack() +{ + delete list; +}; + +template +void Stack::Push(T key) +{ + if (IsFull()) throw "Is Full"; + list->Add(key); +}; + +template +T Stack::Take()const +{ + + return list->GetRoot(); +}; + +template +T Stack::Pop() +{ + if (IsEmpty()) throw "Is Empty"; + T key = list->GetRoot(); + try { + list->Remove(key); + } + catch (const char* ex) + { + cout << ex << endl; + } + return key; +}; + +template +bool Stack::IsEmpty() const +{ + return(list->Size() == 0); +}; +template +bool Stack::IsFull() const +{ + T key = -1; + try { + list -> Add(key); + list->Remove(key); + } + catch (const char* ex) + { + return true; + } + return false; +}; + +#endif \ No newline at end of file diff --git a/VolkovAA/lab4/include/val.h b/VolkovAA/lab4/include/val.h new file mode 100644 index 000000000..7002c2e76 --- /dev/null +++ b/VolkovAA/lab4/include/val.h @@ -0,0 +1,10 @@ +#ifndef NameVal_H +#define NameVal_H + +struct NameValue +{ + char Operand; + float Value; +}; + +#endif \ No newline at end of file diff --git a/VolkovAA/lab4/sample/Main.cpp b/VolkovAA/lab4/sample/Main.cpp new file mode 100644 index 000000000..fb6265a43 --- /dev/null +++ b/VolkovAA/lab4/sample/Main.cpp @@ -0,0 +1,51 @@ +#include +#include + +#include "list.h" +#include "nods.h" +#include "stack.h" +#include "val.h" +#include "fun.h" + +using namespace std; + +void main() +{ + cout <<"Enter an expression"<< endl; + string line; + cin >> line; + + string postfix; + try + { + postfix=functions::postfix(line); + } + catch( const char* ex) + { + cout< +#include + +#include "List.h" +#include "nods.h" +#include "stack.h" +#include "val.h" + +using namespace std; + +int functions::Priority(char sym) +{ + if ((sym == '*') || (sym == '/')) { + return 3; + } + if ((sym == '+') || (sym == '-')) { + return 2; + } + if (sym == ')') { + return 1; + } + if (sym == '(') { + return 0; + } + return -1; +} +string functions::postfix(string line) +{ + Stack S1; + Stack S2; + + for (int i = 0; i < (int)line.length(); i++) + { + if (((line[i] >= 'a') && (line[i] <= 'z')) || ((line[i] >= 'A') && (line[i] <= 'Z'))) + S1.Push(line[i]); + else if (line[i] == ')') + { + while ((!S2.IsEmpty()) && (S2.Take() != '(')) + { + S1.Push(S2.Pop()); + + } + if (!S2.IsEmpty() && (S2.Take() == '(')) + S2.Pop(); + else + throw "S2 is empty"; + } + else if (line[i] == '(') + S2.Push(line[i]); + else if ((line[i] == '+') || (line[i] == '-') || (line[i] == '/') || (line[i] == '*')) + { + if (Priority(S2.Take()) <= Priority(line[i]) || S2.Take() == '(') + S2.Push(line[i]); + else + { + while ((!S2.IsEmpty()) && (Priority(S2.Take()) >= Priority(line[i]))) + { + S1.Push(S2.Pop()); + } + S2.Push(line[i]); + } + } + } + while (!S2.IsEmpty()) + { + if((S2.Take()!=')')&&(S2.Take()!='(')) + S1.Push(S2.Pop()); + else + S2.Pop(); + } + + string postfix = ""; + while (!S1.IsEmpty()) + { + postfix = S1.Pop() + postfix; + } + return postfix; +} + +string functions::operands(string line) +{ + int n=0; + for(int i=0;i<(int)line.length();i++) + { + if(((line[i]>='A')&&(line[i]<='Z'))|| ((line[i] >= 'a') && (line[i] <= 'z'))) + n++; + } + char* arr=new char[n]; + int j=0; + for(int i=0;i<(int)line.length();i++) + { + if(((line[i]>='A')&&(line[i]<='Z'))|| ((line[i] >= 'a') && (line[i] <= 'z'))) + { + arr[j]=line[i]; + j++; + } + } + int k=1; + for( int i=1;i> NV[i].Value; + NV[i].Operand = op[i]; + cout << endl; + } + return NV; +} +float functions::Result(string line, int sizeOfTotalExpression, NameValue* NV) +{ + Stack S1; + + for (int i = 0; i < sizeOfTotalExpression; i++) + { + + int j = 0; + if (((line[i] >= 'A') && (line[i] <= 'Z')) || ((line[i] >= 'a') && (line[i] <= 'z'))) + { + while (NV[j].Operand != line[i]) + j++; + S1.Push(NV[j].Value); + } + float a, b; + if (line[i] == '+') + { + a = S1.Pop(); + b = S1.Pop(); + S1.Push(b + a); + } + if (line[i] == '-') + { + a = S1.Pop(); + b = S1.Pop(); + S1.Push(b - a); + } + if (line[i] == '*') + { + a = S1.Pop(); + b = S1.Pop(); + S1.Push(b * a); + } + if (line[i] == '/') + { + a = S1.Pop(); + b = S1.Pop(); + if(a!=0) + S1.Push(b / a); + else + throw "Error!\nYou can not divide by zero."; + } + + } + return S1.Pop(); +} \ No newline at end of file diff --git a/VolkovAA/lab4/src/val.cpp b/VolkovAA/lab4/src/val.cpp new file mode 100644 index 000000000..4c7ebfccd --- /dev/null +++ b/VolkovAA/lab4/src/val.cpp @@ -0,0 +1 @@ +#include "val.h" \ No newline at end of file From e80938c92675bc8c587eaf30ade5b26d7416eff0 Mon Sep 17 00:00:00 2001 From: Artem-Volkov <32214398+Artem-Volkov@users.noreply.github.com> Date: Sun, 3 Jun 2018 20:51:16 +0300 Subject: [PATCH 3/7] Delete generate_g.cpp --- VolkovAA/lab3/samples/generate_g.cpp | 103 --------------------------- 1 file changed, 103 deletions(-) delete mode 100644 VolkovAA/lab3/samples/generate_g.cpp diff --git a/VolkovAA/lab3/samples/generate_g.cpp b/VolkovAA/lab3/samples/generate_g.cpp deleted file mode 100644 index d0c013c7a..000000000 --- a/VolkovAA/lab3/samples/generate_g.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "Graph.h" -#include "Deijkstra.h" -#include -#include -#include -using namespace std; - -int main(int argc, char **argv) -{ - Graph *graph; - int n; - int m; - int s; - int fid; - if (argc == 7) { //ãðàô RAND - try { - n = atoi(argv[1]); - m = atoi(argv[2]); - int minRange = atoi(argv[3]); - int maxRange = atoi(argv[4]); - fid = atoi(argv[5]); - s = atoi(argv[6]); - graph = new Graph(n, m); - graph->generateGraph(minRange, maxRange); - } - catch (...) { - return -1; - } - } - else if (argc == 3) { //ãðàô çàäàí ìàòðèöåé - string filename(argv[1]); - ifstream input(filename); - if (!input) { - cout << "error!"; - return 2; - } - try { - input >> n; - input >> m; - input >> fid; - s = atoi(argv[2]); - graph = new Graph(n); - int N, K; - float weight; - while (!input.eof()) { - input >> N; - input >> K; - input >> weight; - graph->addEdge(N, K, weight); - } - } - catch (...) { - return -1; - } - input.close(); - } - else return 1; - - graph->printList(); - cout << endl; - - float *dist; - int *up; - try { - Dijkstra::dijkstra(graph, s, dist, up); - } - catch (...) { - return -2; - } - - remove("ways.txt"); - ofstream output("ways.txt"); - output.precision(2); - - output << n << ' ' << m << endl;//ïå÷àòàþ êîëè÷åñòâî âåðøèí - output << s << endl; //ïå÷àòàþ ñòàðòîâóþ âåðøèíó - - m = graph->getRealSize(); - Edge* edge; - for (int j = 0; j < m; j++) { - edge = graph->getEdge(j); - output << edge->N << ' ' << edge->K << ' ' << edge->weight << endl; - } - - for (int i = 0; i < n; i++) - if (dist[i] != FLT_MAX) - cout << dist[i] << ' '; - else - cout << "inf" << ' '; - - for (int i = 0; i < n; i++) { - output << endl; - output << i; - output << ' ' << dist[i]; - output << ' ' << up[i]; - } - - output.close(); - delete graph; - delete[]dist; - delete[]up; - return 0; -} \ No newline at end of file From 6ffdbd750d75df03d6548429916596542a4b1225 Mon Sep 17 00:00:00 2001 From: Artem-Volkov <32214398+Artem-Volkov@users.noreply.github.com> Date: Sun, 3 Jun 2018 20:51:37 +0300 Subject: [PATCH 4/7] Delete main.cpp --- VolkovAA/lab3/samples/main.cpp | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 VolkovAA/lab3/samples/main.cpp diff --git a/VolkovAA/lab3/samples/main.cpp b/VolkovAA/lab3/samples/main.cpp deleted file mode 100644 index 22bdced11..000000000 --- a/VolkovAA/lab3/samples/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "priority_queue.h" -#include "Graph.h" - -int main() -{ - Graph graph(7, 10); - graph.generateGraph(-100, 100); - graph.printList(); - return 0; -} \ No newline at end of file From 0c435da108e1cb32c8714ababf692310eaffcbc7 Mon Sep 17 00:00:00 2001 From: Artem-Volkov <32214398+Artem-Volkov@users.noreply.github.com> Date: Mon, 4 Jun 2018 11:28:48 +0300 Subject: [PATCH 5/7] Add files via upload --- VolkovAA/lab3/DOC/OtchyotLR2.docx | Bin 0 -> 13681 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 VolkovAA/lab3/DOC/OtchyotLR2.docx diff --git a/VolkovAA/lab3/DOC/OtchyotLR2.docx b/VolkovAA/lab3/DOC/OtchyotLR2.docx new file mode 100644 index 0000000000000000000000000000000000000000..7e47d8757e35f721ff107a3f08d31bd72536b883 GIT binary patch literal 13681 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�hm7Tln7d?{_2=+JHLpPPhCdN;S%MR%r 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 Date: Mon, 4 Jun 2018 11:29:24 +0300 Subject: [PATCH 6/7] Add files via upload --- VolkovAA/lab3/samples/generate_graph.vcxproj | 156 +++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 VolkovAA/lab3/samples/generate_graph.vcxproj diff --git a/VolkovAA/lab3/samples/generate_graph.vcxproj b/VolkovAA/lab3/samples/generate_graph.vcxproj new file mode 100644 index 000000000..cef8bf5eb --- /dev/null +++ b/VolkovAA/lab3/samples/generate_graph.vcxproj @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + {07D8BD44-E0DD-4B88-9BFF-83757A2BE323} + Win32Proj + generate_graph + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + graph_lib.lib;%(AdditionalDependencies) + ../Debug + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + ../../../include + + + Console + true + true + true + graph_lib.lib;%(AdditionalDependencies) + ../Release + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + \ No newline at end of file From 03d6a83c0041ecce6722bb78f5c3cb9488def691 Mon Sep 17 00:00:00 2001 From: Artem-Volkov <32214398+Artem-Volkov@users.noreply.github.com> Date: Mon, 4 Jun 2018 11:29:51 +0300 Subject: [PATCH 7/7] Add files via upload --- VolkovAA/lab4/DOC/OtchyotLR1.docx | Bin 0 -> 42633 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 VolkovAA/lab4/DOC/OtchyotLR1.docx diff --git a/VolkovAA/lab4/DOC/OtchyotLR1.docx b/VolkovAA/lab4/DOC/OtchyotLR1.docx new file mode 100644 index 0000000000000000000000000000000000000000..f3107b641c85ff9516f4cc090e8763e32ab6efc2 GIT binary patch literal 42633 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