diff --git a/Jordan_Gauss/Jordan_Gauss.sln b/Jordan_Gauss/Jordan_Gauss.sln new file mode 100644 index 0000000..a2e1373 --- /dev/null +++ b/Jordan_Gauss/Jordan_Gauss.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32804.467 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Jordan_Gauss", "Jordan_Gauss\Jordan_Gauss.vcxproj", "{708C8740-9A13-4196-B3A6-54D86BF16D22}" +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 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Debug|x64.ActiveCfg = Debug|x64 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Debug|x64.Build.0 = Debug|x64 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Debug|x86.ActiveCfg = Debug|Win32 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Debug|x86.Build.0 = Debug|Win32 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Release|x64.ActiveCfg = Release|x64 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Release|x64.Build.0 = Release|x64 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Release|x86.ActiveCfg = Release|Win32 + {708C8740-9A13-4196-B3A6-54D86BF16D22}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {253A591D-9280-4E6D-8BA5-F848CDED7A9A} + EndGlobalSection +EndGlobal diff --git a/Jordan_Gauss/Jordan_Gauss/Jordan_Gauss.cpp b/Jordan_Gauss/Jordan_Gauss/Jordan_Gauss.cpp new file mode 100644 index 0000000..cc014f6 --- /dev/null +++ b/Jordan_Gauss/Jordan_Gauss/Jordan_Gauss.cpp @@ -0,0 +1,29 @@ +#include +#include +#include "Matrix.h" +#include "Solver.h" +#include "Vector.h" + +using namespace std; + +int main() +{ + setlocale(LC_ALL, "Russian"); + size_t n; + cout << "Введите размерность вектора и квадратной матрицы: "; + cin >> n; + + int a; + cout << "Выберите тип данных:\n 1. float\n 2. double\n"; + cin >> a; + + switch (a) { + case 1: { + solver(n); + break; } + case 2: { + solver(n); + break; } + } + return 0; +} \ No newline at end of file diff --git a/Jordan_Gauss/Jordan_Gauss/Matrix.h b/Jordan_Gauss/Jordan_Gauss/Matrix.h new file mode 100644 index 0000000..ba8ba2d --- /dev/null +++ b/Jordan_Gauss/Jordan_Gauss/Matrix.h @@ -0,0 +1,90 @@ +#pragma once +#include +#include "Vector.h" + +using namespace std; + +template +class Matrix { + T** mas; + size_t size; +public: + Matrix(size_t size) + { + this->size = size; + mas = new T * [size]; + + for (int i = 0; i < size; i++) + mas[i] = new T[size + 1]; + } + + Matrix(const Matrix& m) + { + size = m.size; + mas = new T * [size]; + + for (int i = 0; i < size; i++) + mas[i] = new T[size + 1]; + + for (int i = 0; i < size; i++) + for (int j = 0; j < size + 1; j++) + mas[i][j] = m.mas[i][j]; + } + + + void Set_Matrix() + { + for (int i = 0; i < size; i++) + for (int j = 0; j < size; j++) + cin >> mas[i][j]; + } + + T Get_Matrix(int i, int j) + { + return mas[i][j]; + } + + void extended_matrix(Vector b) //создание расширенной матрицы + { + for (int i = 0; i < size; i++) + mas[i][size] = b.Get_Vector(i); + } + + void new_value_matrix(int i, int j, T new_val) //присвоить новое значение + { + mas[i][j] = new_val; + } + + void swap_elem(int i1, int i2) + { + T w; + for (int j = 0; j < size + 1; j++) + { + w = mas[i1][j]; + mas[i1][j] = mas[i2][j]; + mas[i2][j] = w; + } + } + + void print_matrix() + { + for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) + { + cout << mas[i][j] << " "; + } + cout << "|" << mas[i][size] << "\n"; + } + cout << "\n"; + } + + ~Matrix() + { + if (size > 0) { + for (int i = 0; i < size; i++) + delete[] mas[i]; + delete[] mas; + size = 0; + } + } +}; diff --git a/Jordan_Gauss/Jordan_Gauss/Solver.h b/Jordan_Gauss/Jordan_Gauss/Solver.h new file mode 100644 index 0000000..915f665 --- /dev/null +++ b/Jordan_Gauss/Jordan_Gauss/Solver.h @@ -0,0 +1,115 @@ +#pragma once +#include +#include "Vector.h" +#include "Matrix.h" + +using namespace std; + +bool check_null(float x) +{ + float eps = 10e-6f; + if (abs(x) < eps) return true; + return false; +} +bool check_null(double x) +{ + double eps = 10e-16; + if (abs(x) < eps) return true; + return false; +} + +template +void print_res(int size, Matrix A) +{ + T* res = new T[size]; + for (int i = 0; i < size; i++) + res[i] = 0; + + bool flag = true; + + for (int i = 0; i < size; i++) + { + if (A.Get_Matrix(i, i) == 1) + { + for (int j = 0; j < size; j++) + if (j != i) + res[i] -= A.Get_Matrix(i, j); + res[i] += A.Get_Matrix(i, size); + if (check_null(res[i])) res[i] = 0; + } + else + if (check_null(A.Get_Matrix(i, i))) + { + if (check_null(A.Get_Matrix(i, size))) //если переменная xi является свободной, присваиваем значение 1 + { + res[i] = 1; + cout << "Свободной переменной является x" << i + 1 << endl; + } + else + { + cout << "Нет решения, так как матрица несовместна\n"; + flag = false; + break; + } + } + } + if (flag) + { + for (int i = 0; i < size; i++) + cout << "x" << i + 1 << " = " << res[i] << endl; + } + +} + +template +void solver(size_t size) +{ + Matrix A(size); + cout << "Введите матрицу построчно: \n"; + A.Set_Matrix(); + + Vector b(size); + cout << "Введите вектор: \n"; + b.Set_Vector(); + + A.extended_matrix(b); + + int max_index; + for (int k = 0; k < size; k++) + { + max_index = k; + for (int i = k + 1; i < size; i++) + { + if (abs(A.Get_Matrix(max_index, k)) > abs(A.Get_Matrix(i, k))) + max_index = k; + else max_index = i; + } + + if (check_null(A.Get_Matrix(max_index, k))) //если макс элемент равен нулю, то переходим на следующий столбец + break; + + T del; + for (int i = 0; i < size; i++) + { + del = A.Get_Matrix(i, k) / A.Get_Matrix(max_index, k); + for (int j = 0; j < size + 1; j++) + { + if (i != max_index) + { + if (check_null(A.Get_Matrix(i, j) - A.Get_Matrix(max_index, j) * del)) + A.new_value_matrix(i, j, 0); + else A.new_value_matrix(i, j, A.Get_Matrix(i, j) - A.Get_Matrix(max_index, j) * del); + if (j == k) + A.new_value_matrix(i, j, 0); + } + } + del = A.Get_Matrix(max_index, k); + for (int j = 0; j < size + 1; j++) + A.new_value_matrix(max_index, j, A.Get_Matrix(max_index, j) / del); + } + if (max_index != k) + A.swap_elem(max_index, k); + A.print_matrix(); + } + print_res(size, A); +} diff --git a/Jordan_Gauss/Jordan_Gauss/Vector.h b/Jordan_Gauss/Jordan_Gauss/Vector.h new file mode 100644 index 0000000..4c4782a --- /dev/null +++ b/Jordan_Gauss/Jordan_Gauss/Vector.h @@ -0,0 +1,44 @@ +#pragma once +#include + +using namespace std; + +template +class Vector { + size_t size; + T* mas; +public: + Vector(size_t size) + { + this->size = size; + mas = new T[size]; + for (int i = 0; i < size; i++) + mas[i] = 0; + } + + Vector(const Vector& v) + { + size = v.size; + mas = new T[size]; + for (int i = 0; i < size; i++) + mas[i] = v.mas[i]; + } + + void Set_Vector() + { + for (int i = 0; i < size; i++) + cin >> mas[i]; + cout << "\n"; + } + + T Get_Vector(const int ind) + { + return mas[ind]; + } + + ~Vector() + { + delete[]mas; + size = 0; + } +}; diff --git a/math.fun/Teilor.fun.cpp b/math.fun/Teilor.fun.cpp new file mode 100644 index 0000000..5f2c655 --- /dev/null +++ b/math.fun/Teilor.fun.cpp @@ -0,0 +1,170 @@ +#include "stdio.h" +#include "math.h" +#include "locale.h" + + +float sin_pr(float x, float fel, int ind) { + fel *= (-1) * x * x / (2 * ind * (2 * ind + 1)); + return fel; +} + +float cos_pr(float x, float fel, int ind) { + fel *= (-1) * x * x / (2 * ind * (2 * ind - 1)); + return fel; +} + +float log_pr(float x, float fel, int ind) { + fel *= (-1) * x * ind / (ind + 1); + return fel; +} + +float exp_pr(float x, float fel, int ind) { + fel *= x / ind; + return fel; +} + +//обратная сумма +float sin_ob(float x, float fel, int ind) { + fel = -fel * (2 * ind) * (2 * ind + 1) / (x * x); + return fel; +} + +float cos_ob(float x, float fel, int ind) { + fel = -fel * (2 * ind) * (2 * ind - 1) / (x * x); + return fel; +} + +float log_ob(float x, float fel, int ind) { + if (ind == 0) return 0; + if (ind == 1) return 0; + fel = -fel * ind / (x * (ind - 1)); + return fel; +} + +float exp_ob(float x, float fel, int ind) { + fel = fel * ind / x; + return fel; +} + + +float summ(float suma, float(*fun)(float, float, int), float x, float fel) { + suma += fel; + for (int i = 1; i < 100; i++) { + fel = fun(x, fel, i); + suma += fel; } + return suma; +} + + +float summ_ob(float suma, float(*fun)(float, float, int), float x, float fel, float n) { + suma += fel; + for (int i = n; i > -1; i--) { + fel = fun(x, fel, i); + suma += fel;} + return suma; +} + +int main() { + + setlocale(LC_ALL, "Russian"); + float x; + + int a; + int j; + + float minuss; //эпсилон + float sinp = 0, cosp = 0, lnp = 0, expp = 0; //прямой счёт + float sino = 0, coso = 0, lno = 0, expo = 0; //обратный счёт + float sin_can = 0, cos_can = 0, ln_can = 0, exp_can = 0; //канон + float fel; //первый элемент + float lel; //последний элемент + + float eps = pow(10, -15); + + printf("Введите значение х: "); + scanf_s("%f", &x); + printf("\n"); + + printf("Выберите функцию:\n 1. sin(x)\n 2. cos(x)\n 3. ln(1+x)\n 4. e^x\n"); + scanf_s("%i", &a); + printf("\n"); + + switch (a) { + case 1: //sinx + fel = x; + sinp = summ(sinp, sin_pr, x, fel); + sin_can = sin(x); + printf("sin(x) = %.9f\n", sinp); + // + lel = 1; + for (j = 1; j < 101; j++) { + if (fabsf(fel) - eps < 0) break; + fel = sin_pr(x, fel, j); + } + sino = summ_ob(sino, sin_ob, x, fel, j-1); + printf("Обратный sin(x) = %.9f\n", sino); + // + printf("Канонический sin(x) = %.9lf\n\n", sin_can); + printf("Абсолютная погрешность прямой суммы: %.9f\n", fabsf(sin_can - sinp)); + printf("Абсолютная погрешность обратной суммы: %.9f\n", fabsf(sin_can - sino)); + break; + case 2: //cosx + fel = 1; + cosp = summ(cosp, cos_pr, x, fel); + cos_can = cos(x); + printf("cos(x) = %.9f\n", cosp); + // + lel = 1; + for (j = 1; j < 100; j++) { + if (fabsf(fel) - eps < 0) break; + fel = cos_pr(x, fel, j); + } + coso = summ_ob(coso, cos_ob, x, fel, j-1); + printf("Обратный cos(x) = %.9f\n", coso); + // + printf("Канонический cos(x) = %.9f\n\n", cos_can); + printf("Абсолютная погрешность прямой суммы: %.9f\n", fabsf(cos_can - cosp)); + printf("Абсолютная погрешность обратной суммы: %.9f\n", fabsf(cos_can - coso)); + break; + case 3: //ln(1+x) + if ((x > -1) && (x <= 1)) { + fel = x; + lnp = summ(lnp, log_pr, x, fel); + ln_can = log(1 + x); + printf("ln(x+1) = %.9f\n", lnp); + // + lel = 1; + for (j = 1; j < 101; j++) { + if (fabsf(fel) - eps < 0) break; + fel = log_pr(x, fel, j); + } + lno = summ_ob(lno, log_ob, x, fel, j); + printf("Обратная ln(1+x): %.9f\n", lno); + // + printf("Канонический ln(x+1) = %.9f\n\n", ln_can); + printf("Абсолютная погрешность прямой суммы: %.9f\n", fabsf(ln_can - lnp)); + printf("Абсолютная погрешность обратной суммы: %.9f\n", fabsf(ln_can - lno)); + } + else + printf("Недопустимые значения для ln(1+x)\n\n"); + break; + case 4: //exp^x + fel = 1; + expp = summ(expp, exp_pr, x, fel); + exp_can = exp(x); + printf("exp^x = %.9f\n", expp); + // + for (j = 1; j < 101; j++) { + if (fabsf(fel) - eps < 0) break; + fel = exp_pr(x, fel, j);; + } + expo = summ_ob(expo, exp_ob, x, fel, j-1); + printf("Обратная exp^x: %.9f\n", expo); + // + printf("Каноническая exp^x = %.9f\n\n", exp_can); + printf("Абсолютная погрешность прямой суммы: %.9f\n", fabsf(exp_can - expp)); + printf("Абсолютная погрешность обратной суммы: %.9f\n", fabsf(exp_can - expo)); + break; + } + return 0; +} diff --git "a/math.fun/\320\236\321\202\321\207\321\221\321\202 \320\277\320\276 2 \320\273\321\200.docx" "b/math.fun/\320\236\321\202\321\207\321\221\321\202 \320\277\320\276 2 \320\273\321\200.docx" new file mode 100644 index 0000000..aded65f Binary files /dev/null and "b/math.fun/\320\236\321\202\321\207\321\221\321\202 \320\277\320\276 2 \320\273\321\200.docx" differ diff --git a/sort/soort.cpp b/sort/soort.cpp new file mode 100644 index 0000000..2fc9ee0 --- /dev/null +++ b/sort/soort.cpp @@ -0,0 +1,220 @@ +#include "stdio.h" +#include "malloc.h" +#include "stdlib.h" +#include "locale.h" +#include "time.h" + +//функция, которая меняет элементы местами +void swap(double* a, double* b) +{ + double tmp = *a; + *a = *b; + *b = tmp; +} + +//сортировка выбором +void select(double* arr, int N) +{ + for (int i = 0; i < N - 1; i++) + { + int minind = i; + for (int j = i + 1; j < N; j++) + if (arr[minind] > arr[j]) + minind = j; + swap(&arr[minind], &arr[i]); + } +} + +//сортировка пузырьком +void bubble(double* arr, int N) +{ + int flag = 0; + for (int i = 0; i < N; i++) + { + flag = 0; + for (int j = 0; j < N - i - 1; j++) + { + if (arr[j] > arr[j + 1]) + { + swap(&arr[j], &arr[j + 1]); + flag = 1; + } + } + if (flag == 0) + return; + } +} + +//сортировка Шелла +void shell_sort(double* arr, int N) +{ + for (int i = N / 2; i > 0; i /= 2) + for (int j = i; j < N; ++j) + for (int k = j - i; k >= 0 && arr[k] > arr[k + i]; k -= i) + swap(&arr[k], &arr[k + i]); +} + +//сортировка слиянием +void merge(double* arr, int left, int right) +{ + int l, r, m; + double* a; + a = (double*)malloc((right - left) * sizeof(double)); + m = (left + right) / 2; + l = left; + r = m + 1; + for (int i = left; i <= right; i++) + { + if ((l <= m) && ((r > right) || (arr[l] < arr[r]))) + { + a[i - left] = arr[l]; + l++; + } + else + { + a[i - left] = arr[r]; + r++; + } + } + for (int j = left; j <= right; j++) + arr[j] = a[j - left]; + +} + +void mergesort(double* arr, int l, int r) +{ + if (l < r) + { + mergesort(arr, l, (l + r) / 2); + mergesort(arr, (l + r) / 2 + 1, r); + merge(arr, l, r); + } +} + +//ПРОВЕРКА СОРТИРОВКИ МАССИВА +int compare(const void* a, const void* b) { + const double* ac, * bc; + ac = (const double*)a; + bc = (const double*)b; + + if ((*ac - *bc) < 0) return -1; + else + { + if ((*ac - *bc) > 0) return 1; + else return 0; + } +} + +void correct_sort(double* arr, int N, double* arr1) { + qsort(arr1, N, sizeof(double), compare); + for (int i = 0; i < N; i++) { + if (arr[i] == arr1[i]) printf(" Массив отсортирован верно\n"); + else printf(" Ошибка в сортировке\n "); + break; + } +} + + +//главное меню +int main() +{ + setlocale(LC_ALL, "Russian"); + + double* arr; + double* arr1; + + int N, a; + clock_t start, finish; + + printf(" Введите количество элементов массива: "); + scanf_s("%d", &N); + + arr = (double*)malloc(N * sizeof(double*)); + arr1 = (double*)malloc(N * sizeof(double*)); + + for (int i = 0; i < N; i++) + { + arr[i] = rand() + ((double)rand() / ((double)RAND_MAX)); + arr1[i] = arr[i]; + //printf("%lf ", arr[i]); + + } + + printf("\n Выберите вид сортировки:\n 1. Cортировка выбором\n 2. Cортировка пузырьком\n 3. Cортировка Шелла\n 4. Сортировка слиянием\n Введите номер сортировки: "); + scanf_s("%d", &a); + + switch (a) + { + case 1: //выбор + + start = clock(); + select(arr, N); + finish = clock(); + + //for (int i = 0; i < N; i++) + //printf("%lf ", arr[i]); + //printf("\n"); + + printf("\n Время работы сортировки: "); + printf("%f ", (finish - start) / (double)(CLOCKS_PER_SEC)); + printf("сек.\n"); + printf("\n"); + correct_sort(arr, N, arr1); + + break; + + case 2: //пузырь + + start = clock(); + bubble(arr, N); + finish = clock(); + + //for (int i = 0; i < N; i++) + //printf("%lf ", arr[i]); + //printf("\n"); + + printf("\n Время работы сортировки: "); + printf("%f ", (finish - start) / (double)(CLOCKS_PER_SEC)); + printf("сек.\n"); + printf("\n"); + correct_sort(arr, N, arr1); + + break; + + case 3: //Шелл + + start = clock(); + shell_sort(arr, N); + finish = clock(); + + //for (int i = 0; i < N; i++) + //printf("%lf ", arr[i]); + //printf("\n"); + + printf("\n Время работы сортировки: "); + printf("%f ", (finish - start) / (double)(CLOCKS_PER_SEC)); + printf("сек.\n"); + printf("\n"); + correct_sort(arr, N, arr1); + + break; + + case 4: //слияние + + start = clock(); + mergesort(arr, 0, N - 1); + finish = clock(); + + //for (int i = 0; i < N; i++) + //printf("%lf ", arr[i]); + //printf("\n"); + + printf("\n Время работы сортировки: "); + printf("%f ", (finish - start) / (double)(CLOCKS_PER_SEC)); + printf("сек.\n"); + printf("\n"); + correct_sort(arr, N, arr1); + + break; + } +} diff --git "a/sort/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" "b/sort/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" new file mode 100644 index 0000000..827007a Binary files /dev/null and "b/sort/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" differ diff --git "a/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" "b/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" new file mode 100644 index 0000000..827007a Binary files /dev/null and "b/\320\276\321\202\321\207\321\221\321\202 \320\277\320\276 \320\273\321\200 1.odt" differ