From ac46ef341d451cf90a29f8b2178df7fa604e59c8 Mon Sep 17 00:00:00 2001 From: Anton Chernikov Date: Sat, 29 Sep 2018 13:14:22 +0300 Subject: [PATCH 1/3] Added task test1 --- sem1/test1/test1.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 sem1/test1/test1.cpp diff --git a/sem1/test1/test1.cpp b/sem1/test1/test1.cpp new file mode 100644 index 0000000..8a202a0 --- /dev/null +++ b/sem1/test1/test1.cpp @@ -0,0 +1,92 @@ +#include +using namespace std; + +void qSort(int, int, int n[]); +void display(int, int n[]); + +int main() +{ + cout << "Enter amount of Vasya's reports" << endl; + int lengthV = 0; + cin >> lengthV; + int *stackV = new int[lengthV] {}; + cout << "Enter complexity of Vasya's items in descending order" << endl; + for (int i = 0; i < lengthV; i++) + { + cin >> stackV[i]; + } + + cout << "Enter amount of Petya's reports" << endl; + int lengthP = 0; + cin >> lengthP; + int *stackP = new int[lengthP] {}; + cout << "Enter complexity of Petya's items in descending order" << endl; + for (int i = 0; i < lengthP; i++) + { + cin >> stackP[i]; + } + + int *stackJoint = new int[lengthV + lengthP] {}; + + for (int i = 0; i < lengthV; i++) + { + stackJoint[i] = stackV[i]; + } + for (int i = lengthV; i < lengthV + lengthP; i++) + { + stackJoint[i] = stackP[i - lengthV]; + } + + qSort(0, lengthV + lengthP - 1, stackJoint); + cout << "Result - "; + display(lengthV + lengthP, stackJoint); + + delete[] stackJoint; + delete[] stackV; + delete[] stackP; +} + +void qSort(int first, int last, int num[]) +{ + if (first < last) + { + int length = last - first + 1; + int select = first + length / 2; + bool isSorted = false; + while (!isSorted) + { + isSorted = true; + for (int i = 0; i < select - first; i++) + { + if (num[first + i] <= num[select]) + { + swap(num[first + i], num[select]); + select = first + i; + isSorted = false; + break; + } + } + for (int i = 0; i < last - select; i++) + { + if (num[last - i] > num[select]) + { + swap(num[last - i], num[select]); + select = last - i; + isSorted = false; + break; + } + } + } + qSort(first, select - 1, num); + qSort(select + 1, last, num); + } +} + +void display(int length, int num[]) +{ + for (int i = 0; i < length; i++) + { + cout << num[i] << " "; + } + cout << endl; +} From 351d9b3a16a0e74842038170ccb6f9398523d0bf Mon Sep 17 00:00:00 2001 From: Anton Chernikov Date: Sat, 29 Sep 2018 13:22:27 +0300 Subject: [PATCH 2/3] Added task test1 --- sem1/test1/test1.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sem1/test1/test1.cpp b/sem1/test1/test1.cpp index 8a202a0..976f5ce 100644 --- a/sem1/test1/test1.cpp +++ b/sem1/test1/test1.cpp @@ -1,6 +1,8 @@ #include using namespace std; +// difficulty log(n) + void qSort(int, int, int n[]); void display(int, int n[]); From f8d50e18f45371902fa20d052a60a350291da403 Mon Sep 17 00:00:00 2001 From: Anton Chernikov Date: Thu, 1 Nov 2018 21:25:24 +0300 Subject: [PATCH 3/3] Added new test1 --- sem1/test1/test1.cpp | 142 ++++++++++++++++++++++++------------------- 1 file changed, 80 insertions(+), 62 deletions(-) diff --git a/sem1/test1/test1.cpp b/sem1/test1/test1.cpp index 976f5ce..aebf876 100644 --- a/sem1/test1/test1.cpp +++ b/sem1/test1/test1.cpp @@ -1,94 +1,112 @@ #include using namespace std; -// difficulty log(n) - -void qSort(int, int, int n[]); -void display(int, int n[]); +int countSpases(char *str, int length); +void insertSpase(char *rStr, int rLength, int number); +void displayRStr(char *rStr, int rLength); int main() { - cout << "Enter amount of Vasya's reports" << endl; - int lengthV = 0; - cin >> lengthV; - int *stackV = new int[lengthV] {}; - cout << "Enter complexity of Vasya's items in descending order" << endl; - for (int i = 0; i < lengthV; i++) + cout << "Enter length of string" << endl; + int length = 0; + cin >> length; + + cout << "Enter string" << endl; + char *str = new char[length] {}; + for (int i = 0; i <= length; i++) { - cin >> stackV[i]; + char symbol = '\0'; + scanf("%c", &symbol); + if (i > 0) + { + str[i - 1] = symbol; + } } - cout << "Enter amount of Petya's reports" << endl; - int lengthP = 0; - cin >> lengthP; - int *stackP = new int[lengthP] {}; - cout << "Enter complexity of Petya's items in descending order" << endl; - for (int i = 0; i < lengthP; i++) + cout << "Enter length of required string" << endl; + int rLength = 0; + cin >> rLength; + + char *rStr = new char[rLength] {}; + for (int i = 0; i < length; i++) { - cin >> stackP[i]; + rStr[i] = str[i]; } - int *stackJoint = new int[lengthV + lengthP] {}; + int spases = countSpases(str, length); + int reserveSpases = rLength - length; + int barrier = length; - for (int i = 0; i < lengthV; i++) + while ((reserveSpases >= spases) && (spases != 0)) { - stackJoint[i] = stackV[i]; + for (int i = 0; i < barrier; i++) + { + if (rStr[i] == ' ') + { + insertSpase(rStr, rLength, i); + reserveSpases--; + barrier++; + int spasesBetwWords = 0; + for (int j = i; rStr[j] == ' '; j++) + { + spasesBetwWords++; + } + i += spasesBetwWords; + } + } } - for (int i = lengthV; i < lengthV + lengthP; i++) + + int counter = 1; + for (int i = 0; (i < rLength) && (reserveSpases > 0); i++) { - stackJoint[i] = stackP[i - lengthV]; + if ((rStr[i] == ' ') && (counter > 0)) + { + insertSpase(rStr, rLength, i); + reserveSpases--; + counter *= -1; + } } - qSort(0, lengthV + lengthP - 1, stackJoint); - cout << "Result - "; - display(lengthV + lengthP, stackJoint); + displayRStr(rStr, rLength); - delete[] stackJoint; - delete[] stackV; - delete[] stackP; + delete[] str; + delete[] rStr; } -void qSort(int first, int last, int num[]) +int countSpases(char *str, int length) { - if (first < last) + int result = 0; + for (int i = 0; i < length; i++) { - int length = last - first + 1; - int select = first + length / 2; - bool isSorted = false; - while (!isSorted) + if (str[i] == ' ') { - isSorted = true; - for (int i = 0; i < select - first; i++) - { - if (num[first + i] <= num[select]) - { - swap(num[first + i], num[select]); - select = first + i; - isSorted = false; - break; - } - } - for (int i = 0; i < last - select; i++) - { - if (num[last - i] > num[select]) - { - swap(num[last - i], num[select]); - select = last - i; - isSorted = false; - break; - } - } + result++; } - qSort(first, select - 1, num); - qSort(select + 1, last, num); } + return result; } -void display(int length, int num[]) +void insertSpase(char *rStr, int rLength, int number) { - for (int i = 0; i < length; i++) + int spasesBetwWords = 0; + for (int i = number; rStr[i] == ' '; i++) { - cout << num[i] << " "; + spasesBetwWords++; + } + int current = rStr[number + spasesBetwWords]; + rStr[number + spasesBetwWords] = rStr[number]; + for (int i = rLength - 1; i >= number + spasesBetwWords; i--) + { + rStr[i] = rStr[i - 1]; + } + rStr[number + spasesBetwWords + 1] = current; +} + +void displayRStr(char *rStr, int rLength) +{ + for (int i = 0; i < rLength; i++) + { + cout << rStr[i]; } - cout << endl; } +