From c30ffd14ad306d3b0694ebea7daaa0a84982cf23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Thu, 28 Nov 2024 19:52:11 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D0=B8=20=D0=B4=D0=B2=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D1=80=D0=BD=D1=8B=D0=B5=20=D0=BC=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/dv13.c | 62 +++++++++ 13_Maksimova/dv19.c | 71 ++++++++++ 13_Maksimova/lab1.c | 320 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 453 insertions(+) create mode 100644 13_Maksimova/dv13.c create mode 100644 13_Maksimova/dv19.c create mode 100644 13_Maksimova/lab1.c diff --git a/13_Maksimova/dv13.c b/13_Maksimova/dv13.c new file mode 100644 index 0000000..5c51e48 --- /dev/null +++ b/13_Maksimova/dv13.c @@ -0,0 +1,62 @@ +#include +#include + + +void mat(int m[100][100], int* a, int* b) { + setlocale(LC_ALL, "Rus"); + printf("Введите количество строк: "); + scanf_s("%d", a); + printf("Введите количество столбцов: "); + scanf_s("%d", b); + + printf("Введите элементы матрицы:\n"); + for (int i = 0; i < *a; i++) { + for (int j = 0; j < *b; j++) { + scanf_s("%d", &m[i][j]); + } + } +} + +void minrow(int m[100][100], int* a, int b) { + int minRow = 0; + int minel = m[0][0]; + + // Находим минимальный элемент и его строку + for (int i = 0; i < *a; i++) { + for (int j = 0; j < b; j++) { + if (m[i][j] < minel) { + minel = m[i][j]; + minRow = i; + } + } + } + + // Удаляем строку с минимальным элементом + for (int i = minRow; i < *a - 1; i++) { + for (int j = 0; j < b; j++) { + m[i][j] = m[i + 1][j]; + } + } + (*a)--; // Уменьшаем количество строк +} + +void vivod(int m[100][100], int a, int b) { + printf("Матрица после удаления:\n"); + for (int i = 0; i < a; i++) { + for (int j = 0; j < b; j++) { + printf("%d ", m[i][j]); + } + printf("\n"); + } +} + +int main() { + int m[100][100]; + int a, b; + + mat(m, &a, &b); + minrow(m, &a, b); + vivod(m, a, b); + + return 0; +} \ No newline at end of file diff --git a/13_Maksimova/dv19.c b/13_Maksimova/dv19.c new file mode 100644 index 0000000..5e87093 --- /dev/null +++ b/13_Maksimova/dv19.c @@ -0,0 +1,71 @@ +#include +#include + + + +void Grades(int grades[100][3], int* n) { + setlocale(LC_ALL, "Rus"); + printf("Введите количество студентов: "); + scanf_s("%d", n); + + printf("Введите оценки студентов (1 - неявка, 2 - неудовлетворительная, 3 - удовлетворительная, 4 - хорошая, 5 - отличная):\n"); + for (int i = 0; i < *n; i++) { + for (int j = 0; j < 3; j++) { + scanf_s("%d", &grades[i][j]); + } + } +} + +void Statistics(int grades[100][3], int n) { + int absence_count[3] = { 0 }; + int unsatisfactory_count[3] = { 0 }; + int satisfactory_count[3] = { 0 }; + int good_count[3] = { 0 }; + int excellent_count[3] = { 0 }; + + for (int j = 0; j < 3; j++) { + for (int i = 0; i < n; i++) { + switch (grades[i][j]) { + case 1: + absence_count[j]++; + break; + case 2: + unsatisfactory_count[j]++; + break; + case 3: + satisfactory_count[j]++; + break; + case 4: + good_count[j]++; + break; + case 5: + excellent_count[j]++; + break; + default: + printf("Некорректная оценка: %d\n", grades[i][j]); + break; + } + } + } + + // Вывод результатов + printf("\nРезультаты по экзаменам:\n"); + for (int j = 0; j < 3; j++) { + printf("Экзамен %d:\n", j + 1); + printf("Неявки: %d\n", absence_count[j]); + printf("Неудовлетворительных: %d\n", unsatisfactory_count[j]); + printf("Удовлетворительных: %d\n", satisfactory_count[j]); + printf("Хороших: %d\n", good_count[j]); + printf("Отличных: %d\n", excellent_count[j]); + } +} + +int main() { + int grades[100][3]; + int n; + + Grades(grades, &n); + Statistics(grades, n); + + return 0; +} \ No newline at end of file diff --git a/13_Maksimova/lab1.c b/13_Maksimova/lab1.c new file mode 100644 index 0000000..e0cd962 --- /dev/null +++ b/13_Maksimova/lab1.c @@ -0,0 +1,320 @@ +#include "stdio.h" +#include "locale.h" +#include "stdlib.h" +#include "time.h" + +int z = 0; +void main() +{ + setlocale(LC_ALL, "Rus"); + int a, b, i, mass[10], temp[10], min = 0, max = 9, left = 0, right = 9, mid; + + printf("Выберите способ ввода массива:"); + scanf_s("%d", &a); + + if (a == 1) { + printf("Задайте массив длиной в 10 значений:"); + for (int i = 0; i < 10; i++) + { + scanf_s("%d", &mass[i]); + } + } + if (a == 2) { + srand(time(NULL)); + for (int i = 0; i < 10; i++) { + mass[i] = rand() % 100; + printf("%d\n", mass[i]); + } + } + printf("Выберите метод сортировки:"); + scanf_s("%d", &b); + switch (b) + { + case 1: + bubbleSort(mass); + for (int i = 0; i < 10; i++) + { + printf("%d\t", mass[i]); + } + break; + case 2: + mergeSort(mass, left, right, z); + for (int i = 0; i < 10; i++) + { + printf("%d\t", mass[i]); + } + break; + case 3: + QuikSort(mass, left, right); + for (int e = 0; e < 10; e++) + { + printf("%d\t", mass[e]); + } + break; + case 4: + InsertionSort(mass); + for (int i = 0; i < 10; i++) + { + printf("%d\t", mass[i]); + } + break; + case 5: + selectionSort(mass); + for (int i = 0; i < 10; i++) + { + printf("%d\t", mass[i]); + } + break; + default: + printf("Ошибка"); + break; + } + + printf("Выберите способ поиска:"); + int target; + int h; + scanf_s("%d", &h); + switch (h) + { + case 1: + printf("Введите элемент для поиска:"); + scanf_s("%d", &target); + int indexB = BinSearch(mass, min, max, target); + printf("Элементу принадлежит индекс %d", indexB); + break; + case 2: + printf("Введите элемент для поиска:"); + scanf_s("%d", &target); + LinSearch(mass, min, max, target); + int indexL = LinSearch(mass, min, max, target); + printf("Элементу принадлежит индекс %d", indexL); + break; + default: + printf("Ошибка"); + break; + } +} +int bubbleSort(int mass[])// Двунаправленный пузерек +{ + int left = 0, right = 10 - 1; + int flag = 1; + clock_t start = clock(); + z++; + printf("z = % d\n", z); + while ((left < right) && flag > 0) { + flag = 0; + for (int i = left; i < right; i++) { + if (mass[i] > mass[i + 1]) { + int t = mass[i]; + mass[i] = mass[i + 1]; + mass[i + 1] = t; + flag = 1; + } + } + right--; + for (int i = right; i > left; i--) { + if (mass[i - 1] > mass[i]) { + int t = mass[i]; + mass[i] = mass[i - 1]; + mass[i - 1] = t; + flag = 1; + + } + } + left++; + z++; + printf("z = % d\n", z); + } + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + printf("Время работы вашей программы: %f \n", time_spent); + printf("\n"); + +} +int merge(int mass[], int left, int a, int right) //Метод слияния +{ + clock_t start = clock(); + int i, j, k; + int n1 = a - left + 1; + int n2 = right - a; + int leftArr[10], rightArr[10]; + + for (i = 0; i < n1; i++) + leftArr[i] = mass[left + i]; + for (j = 0; j < n2; j++) + rightArr[j] = mass[a + 1 + j]; + + i = 0; + j = 0; + k = left; + + while (i < n1 && j < n2) + { + z++; + printf("z = % d\n", z); + + if (leftArr[i] <= rightArr[j]) { + mass[k] = leftArr[i]; + i++; + } + else { + mass[k] = rightArr[j]; + j++; + } + k++; + + } + + while (i < n1) { + + mass[k] = leftArr[i]; + i++; + k++; + } + + while (j < n2) { + + mass[k] = rightArr[j]; + j++; + k++; + } + + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + printf("Время работы вашей программы: %f \n", time_spent); + printf("\n"); + +} + +int mergeSort(int mass[], int left, int right) +{ + + if (left < right) + { + int a = left + (right - left) / 2; + mergeSort(mass, left, a); + mergeSort(mass, a + 1, right); + merge(mass, left, a, right); + } +} +int QuikSort(int mass[], int left, int right) // Быстрая сортировка +{ + z++; + printf("z = % d\n", z); + if (left > right) + return; + clock_t start = clock(); + int i = left; + int j = right; + int pivot = mass[(right + left) / 2]; + while (i <= j) + { + while (mass[i] < pivot) + { + i++; + + } + while (mass[j] > pivot) + { + j--; + } + if (i <= j) + { + int temp = mass[i]; + mass[i] = mass[j]; + mass[j] = temp; + i++; + j--; + } + } + QuikSort(mass, left, j); + QuikSort(mass, i, right); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + printf("Время работы вашей программы: %f \n", time_spent); + printf("\n"); +} +int InsertionSort(int mass[]) // Сортировка вставками +{ + clock_t start = clock(); + z++; + printf("z = %d\n", z); + int el, loc; + for (int i = 1; i < 10; i++) + { + el = mass[i]; + loc = i - 1; + while (loc >= 0 && mass[loc] > el) + { + mass[loc + 1] = mass[loc]; + loc = loc - 1; + z++; + printf("z = %d\n", z); + } + + mass[loc + 1] = el; + } + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + printf("Время работы вашей программы: %f \n", time_spent); + printf("\n"); +} +int selectionSort(int mass[]) // Сортировка выбором +{ + clock_t start = clock(); + z++; + printf("z = %d\n", z); + for (int i = 0; i < 10; i++) + { + int min_idx = i; + for (int j = i + 1; j < 10; j++) + { + if (mass[j] < mass[min_idx]) + { + min_idx = j; + z++; + printf("z = %d\n", z); + } + } + int temp = mass[min_idx]; + mass[min_idx] = mass[i]; + mass[i] = temp; + } + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + printf("Время работы вашей программы: %f \n", time_spent); + printf("\n"); +} + +int BinSearch(int mass[], int min, int max, int target) // Бинарный поиск +{ + while (min <= max) + { + int mid = (min + max) / 2; + if (target < mass[mid]) + { + max = mid - 1; + } + else if (target > mass[mid]) + { + min = mid + 1; + } + else + { + return mid; + } + } + return -1; +} + +int LinSearch(int mass[], int min, int max, int target) // Линейный поиск +{ + for (int i = 0; i < 10; i++) + { + if (mass[i] == target) + { + return i; + } + } + return -1; +} From 9f31a6b4199344664f34103ad1880093ae83fcaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Sat, 7 Dec 2024 23:06:23 +0300 Subject: [PATCH 2/6] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B8=20=D0=B4=D0=B2=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=8B=D0=B5=20=D0=BC=D0=B0=D1=81=D1=81=D0=B8?= =?UTF-8?q?=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/contr1.c | 53 ++++++++++++++++++++++++++ 13_Maksimova/contr2.c | 88 +++++++++++++++++++++++++++++++++++++++++++ 13_Maksimova/dv13.c | 62 ------------------------------ 13_Maksimova/dv14.c | 60 +++++++++++++++++++++++++++++ 13_Maksimova/dv19.c | 71 ---------------------------------- 13_Maksimova/dv22.c | 60 +++++++++++++++++++++++++++++ 6 files changed, 261 insertions(+), 133 deletions(-) create mode 100644 13_Maksimova/contr1.c create mode 100644 13_Maksimova/contr2.c delete mode 100644 13_Maksimova/dv13.c create mode 100644 13_Maksimova/dv14.c delete mode 100644 13_Maksimova/dv19.c create mode 100644 13_Maksimova/dv22.c diff --git a/13_Maksimova/contr1.c b/13_Maksimova/contr1.c new file mode 100644 index 0000000..8ef2d8c --- /dev/null +++ b/13_Maksimova/contr1.c @@ -0,0 +1,53 @@ +#include "stdio.h" +#include"stdlib.h" +#include"locale.h" +int unic(int* a, int s, int x) { + for (int i = 0; i < s; i++) { + if (a[i] == x) { + return 0; + } + } + return 1; +}int main() { + setlocale(LC_ALL, "Rus"); + int* a1, * a2, * ob; + int s1, s2, obs = 0; + printf("Введите размер первого массива:"); + scanf_s("%d", &s1); + a1 = (int*)malloc(s1 * sizeof(int)); + printf("Введите элементы первого массива:\n"); + for (int i = 0; i < s1; i++) { + scanf_s("%d", &a1[i]); + } + printf("Введите размер второго массива:"); + scanf_s("%d", &s2); + a2 = (int*)malloc(s2 * sizeof(int)); + printf("Введите элементы второго массива:\n"); + for (int i = 0; i < s2; i++) + { + scanf_s("%d", &a2[i]); + } + ob = (int*)malloc((s1 + 2) * sizeof(int)); + for (int i = 0; i < s1; i++) { + if (unic(ob, obs, a1[i])) + { + ob[obs++] = a1[i]; + } + } + for (int i = 0; i < s2; i++) { + if (unic(ob, obs, a2[i])) + { + ob[obs++] = a2[i]; + } + } + printf("Массив объединения:\n"); + for (int i = 0; i < obs; i++) + { + printf("%d", ob[i]); + } + printf("\n"); + free(a1); + free(a2); + free(ob); + return 0; +} \ No newline at end of file diff --git a/13_Maksimova/contr2.c b/13_Maksimova/contr2.c new file mode 100644 index 0000000..fc13f5e --- /dev/null +++ b/13_Maksimova/contr2.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include + + +void fillMatrix(double** matrix, int m, int n) { + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + matrix[i][j] = (double)(rand() % 100) / 10; + } + } +} + +void printMatrix(double** matrix, int m, int n) { + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + printf("%.2f ", matrix[i][j]); + } + printf("\n"); + } +} + +double calculateAverage(double** matrix, int m, int n) { + double sum = 0.0; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + sum += matrix[i][j]; + } + } + return sum / (m * n); +} + +int findColumnWithMostAboveAverage(double** matrix, int m, int n, double average, int* columnIndex) { + int maxCount = 0; + *columnIndex = -1; + + for (int j = 0; j < n; j++) { + int count = 0; + for (int i = 0; i < m; i++) { + if (matrix[i][j] > average) { + count++; + } + } + if (count > maxCount) { + maxCount = count; + *columnIndex = j; + } + } + + return maxCount; +} + +int main() { + int m, n; + setlocale(LC_ALL, "Rus"); + srand(time(NULL)); + printf("Введите количество строк: "); + scanf_s("%d", &m); + printf("Введите количество столбцов: "); + scanf_s("%d", &n); + double** matrix = (double**)malloc(m * sizeof(double*)); + for (int i = 0; i < m; i++) { + matrix[i] = (double*)malloc(n * sizeof(double)); + } + fillMatrix(matrix, m, n); + printf("Матрица:\n"); + printMatrix(matrix, m, n); + double average = calculateAverage(matrix, m, n); + printf("Среднее значение в матрице: %.2f\n", average); + int columnIndex; + int countAboveAverage = findColumnWithMostAboveAverage(matrix, m, n, average, &columnIndex); + + if (columnIndex != -1) { + printf("Столбец с наибольшим количеством значений больше среднего: %d\n", columnIndex + 1); + printf("Количество значений в этом столбце больше среднего: %d\n", countAboveAverage); + } + else { + printf("Нет значений больше среднего.\n"); + } + + for (int i = 0; i < m; i++) { + free(matrix[i]); + } + free(matrix); + + return 0; +} diff --git a/13_Maksimova/dv13.c b/13_Maksimova/dv13.c deleted file mode 100644 index 5c51e48..0000000 --- a/13_Maksimova/dv13.c +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include - - -void mat(int m[100][100], int* a, int* b) { - setlocale(LC_ALL, "Rus"); - printf("Введите количество строк: "); - scanf_s("%d", a); - printf("Введите количество столбцов: "); - scanf_s("%d", b); - - printf("Введите элементы матрицы:\n"); - for (int i = 0; i < *a; i++) { - for (int j = 0; j < *b; j++) { - scanf_s("%d", &m[i][j]); - } - } -} - -void minrow(int m[100][100], int* a, int b) { - int minRow = 0; - int minel = m[0][0]; - - // Находим минимальный элемент и его строку - for (int i = 0; i < *a; i++) { - for (int j = 0; j < b; j++) { - if (m[i][j] < minel) { - minel = m[i][j]; - minRow = i; - } - } - } - - // Удаляем строку с минимальным элементом - for (int i = minRow; i < *a - 1; i++) { - for (int j = 0; j < b; j++) { - m[i][j] = m[i + 1][j]; - } - } - (*a)--; // Уменьшаем количество строк -} - -void vivod(int m[100][100], int a, int b) { - printf("Матрица после удаления:\n"); - for (int i = 0; i < a; i++) { - for (int j = 0; j < b; j++) { - printf("%d ", m[i][j]); - } - printf("\n"); - } -} - -int main() { - int m[100][100]; - int a, b; - - mat(m, &a, &b); - minrow(m, &a, b); - vivod(m, a, b); - - return 0; -} \ No newline at end of file diff --git a/13_Maksimova/dv14.c b/13_Maksimova/dv14.c new file mode 100644 index 0000000..7d53526 --- /dev/null +++ b/13_Maksimova/dv14.c @@ -0,0 +1,60 @@ +#include +#include + +void printMatrix(int matrix[100][100], int a, int b) { + for (int i = 0; i < a; i++) { + for (int j = 0; j < b; j++) { + printf("%d ", matrix[i][j]); + } + printf("\n"); + } +} + +void removeColumn(int matrix[100][100], int* a, int* b, int colToRemove) { + for (int i = 0; i < *a; i++) { + for (int j = colToRemove; j < *b - 1; j++) { + matrix[i][j] = matrix[i][j + 1]; + } + } + (*b)--; +} + +int main() { + int matrix[100][100]; + int a, b; + setlocale(LC_ALL, "Rus"); + printf("Введите количество строк и столбцов матрицы: "); + scanf_s("%d %d", &a, &b); + + printf("Введите элементы матрицы:\n"); + for (int i = 0; i < a; i++) { + for (int j = 0; j < b; j++) { + scanf_s("%d", &matrix[i][j]); + } + } + int minElement; + int minColIndex = -1; + + minElement = matrix[0][0]; + minColIndex = 0; + + for (int j = 0; j < b; j++) { + for (int i = 0; i < a; i++) { + if (matrix[i][j] < minElement) { + minElement = matrix[i][j]; + minColIndex = j; + } + } + } + + if (minColIndex != -1) { + removeColumn(matrix, &a, &b, minColIndex); + printf("\nМатрица после удаления столбца с минимальным элементом (%d):\n", minElement); + printMatrix(matrix, a, b); + } + else { + printf("Не удалось найти минимальный элемент.\n"); + } + + return 0; +} \ No newline at end of file diff --git a/13_Maksimova/dv19.c b/13_Maksimova/dv19.c deleted file mode 100644 index 5e87093..0000000 --- a/13_Maksimova/dv19.c +++ /dev/null @@ -1,71 +0,0 @@ -#include -#include - - - -void Grades(int grades[100][3], int* n) { - setlocale(LC_ALL, "Rus"); - printf("Введите количество студентов: "); - scanf_s("%d", n); - - printf("Введите оценки студентов (1 - неявка, 2 - неудовлетворительная, 3 - удовлетворительная, 4 - хорошая, 5 - отличная):\n"); - for (int i = 0; i < *n; i++) { - for (int j = 0; j < 3; j++) { - scanf_s("%d", &grades[i][j]); - } - } -} - -void Statistics(int grades[100][3], int n) { - int absence_count[3] = { 0 }; - int unsatisfactory_count[3] = { 0 }; - int satisfactory_count[3] = { 0 }; - int good_count[3] = { 0 }; - int excellent_count[3] = { 0 }; - - for (int j = 0; j < 3; j++) { - for (int i = 0; i < n; i++) { - switch (grades[i][j]) { - case 1: - absence_count[j]++; - break; - case 2: - unsatisfactory_count[j]++; - break; - case 3: - satisfactory_count[j]++; - break; - case 4: - good_count[j]++; - break; - case 5: - excellent_count[j]++; - break; - default: - printf("Некорректная оценка: %d\n", grades[i][j]); - break; - } - } - } - - // Вывод результатов - printf("\nРезультаты по экзаменам:\n"); - for (int j = 0; j < 3; j++) { - printf("Экзамен %d:\n", j + 1); - printf("Неявки: %d\n", absence_count[j]); - printf("Неудовлетворительных: %d\n", unsatisfactory_count[j]); - printf("Удовлетворительных: %d\n", satisfactory_count[j]); - printf("Хороших: %d\n", good_count[j]); - printf("Отличных: %d\n", excellent_count[j]); - } -} - -int main() { - int grades[100][3]; - int n; - - Grades(grades, &n); - Statistics(grades, n); - - return 0; -} \ No newline at end of file diff --git a/13_Maksimova/dv22.c b/13_Maksimova/dv22.c new file mode 100644 index 0000000..c33a0fb --- /dev/null +++ b/13_Maksimova/dv22.c @@ -0,0 +1,60 @@ +#include +#include + +// Функция для нахождения максимального количества подряд идущих свободных мест +void findMaxFreeSeats(int train[100][100], int wagons, int seats, int* maxFree, int* wagonNumber) { + *maxFree = 0; + *wagonNumber = -1; + + for (int i = 0; i < wagons; i++) { + int currentFree = 0; + + for (int j = 0; j < seats; j++) { + if (train[i][j] == 0) { + currentFree++; + } + else { + if (currentFree > *maxFree) { + *maxFree = currentFree; + *wagonNumber = i + 1; + } + currentFree = 0; + } + } + + if (currentFree > *maxFree) { + *maxFree = currentFree; + *wagonNumber = i + 1; + } + } +} + +int main() { + setlocale(LC_ALL, "Rus"); + int train[100][100]; + int wagons, seats; + + printf("Введите количество вагонов: "); + scanf_s("%d", &wagons); + printf("Введите количество мест в каждом вагоне: "); + scanf_s("%d", &seats); + + for (int i = 0; i < wagons; i++) { + printf("Введите данные для вагона %d (0 - свободно, 1 - занято):\n", i + 1); + for (int j = 0; j < seats; j++) { + scanf_s("%d", &train[i][j]); + } + } + int maxFree, wagonNumber; + findMaxFreeSeats(train, wagons, seats, &maxFree, &wagonNumber); + + if (wagonNumber != -1) { + printf("Максимальное количество подряд идущих свободных мест: %d\n", maxFree); + printf("Номер вагона с этим количеством свободных мест: %d\n", wagonNumber); + } + else { + printf("Все места заняты.\n"); + } + + return 0; +} From 9e952684e2a861e069325d825d46e81fd5eccb4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Mon, 9 Dec 2024 17:16:25 +0300 Subject: [PATCH 3/6] =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/summa3chisel.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 13_Maksimova/summa3chisel.c diff --git a/13_Maksimova/summa3chisel.c b/13_Maksimova/summa3chisel.c new file mode 100644 index 0000000..3f8f792 --- /dev/null +++ b/13_Maksimova/summa3chisel.c @@ -0,0 +1,25 @@ +#include +#include + +int main() +{ + + int sum; + for (sum = 0; sum <= 9 * 3; sum++) + { + int a, b; + for (a = 1; a <= 9; a++) + { + if (a > sum) break; + for (b = 0; b <= 9; b++) + { + int c = sum - a - b; + if (c < 0) break; + if (c <= 9) + printf("%d%d%d ", a, b, c); + } + } + } + + return 0; +} \ No newline at end of file From 16eb61f741f4f415b56fe8e1796445f07b596ffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Wed, 11 Dec 2024 22:42:48 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/lab1.c | 570 ++++++++++++++++++++------------------------ 1 file changed, 265 insertions(+), 305 deletions(-) diff --git a/13_Maksimova/lab1.c b/13_Maksimova/lab1.c index e0cd962..891cd56 100644 --- a/13_Maksimova/lab1.c +++ b/13_Maksimova/lab1.c @@ -1,320 +1,280 @@ -#include "stdio.h" -#include "locale.h" -#include "stdlib.h" -#include "time.h" - -int z = 0; -void main() -{ - setlocale(LC_ALL, "Rus"); - int a, b, i, mass[10], temp[10], min = 0, max = 9, left = 0, right = 9, mid; - - printf("Выберите способ ввода массива:"); - scanf_s("%d", &a); - - if (a == 1) { - printf("Задайте массив длиной в 10 значений:"); - for (int i = 0; i < 10; i++) - { - scanf_s("%d", &mass[i]); - } - } - if (a == 2) { - srand(time(NULL)); - for (int i = 0; i < 10; i++) { - mass[i] = rand() % 100; - printf("%d\n", mass[i]); - } - } - printf("Выберите метод сортировки:"); - scanf_s("%d", &b); - switch (b) - { - case 1: - bubbleSort(mass); - for (int i = 0; i < 10; i++) - { - printf("%d\t", mass[i]); - } - break; - case 2: - mergeSort(mass, left, right, z); - for (int i = 0; i < 10; i++) - { - printf("%d\t", mass[i]); - } - break; - case 3: - QuikSort(mass, left, right); - for (int e = 0; e < 10; e++) - { - printf("%d\t", mass[e]); - } - break; - case 4: - InsertionSort(mass); - for (int i = 0; i < 10; i++) - { - printf("%d\t", mass[i]); - } - break; - case 5: - selectionSort(mass); - for (int i = 0; i < 10; i++) - { - printf("%d\t", mass[i]); - } - break; - default: - printf("Ошибка"); - break; - } - - printf("Выберите способ поиска:"); - int target; - int h; - scanf_s("%d", &h); - switch (h) - { - case 1: - printf("Введите элемент для поиска:"); - scanf_s("%d", &target); - int indexB = BinSearch(mass, min, max, target); - printf("Элементу принадлежит индекс %d", indexB); - break; - case 2: - printf("Введите элемент для поиска:"); - scanf_s("%d", &target); - LinSearch(mass, min, max, target); - int indexL = LinSearch(mass, min, max, target); - printf("Элементу принадлежит индекс %d", indexL); - break; - default: - printf("Ошибка"); - break; - } +#include +#include +#include +#include // Для QueryPerformanceCounter и QueryPerformanceFrequency + +#define MAX_SIZE 10000 + +void bubbleSort(int mass[], int size, int* iterations) { + int flag = 1; + *iterations = 0; + while (flag) { + flag = 0; + for (int i = 0; i < size - 1; i++) { + (*iterations)++; + if (mass[i] > mass[i + 1]) { + int t = mass[i]; + mass[i] = mass[i + 1]; + mass[i + 1] = t; + flag = 1; + } + } + } +} + +void merge(int mass[], int left, int mid, int right, int* iterations) { + int n1 = mid - left + 1; + int n2 = right - mid; + int leftArr[10000], rightArr[10000]; + + for (int i = 0; i < n1; i++) + leftArr[i] = mass[left + i]; + for (int j = 0; j < n2; j++) + rightArr[j] = mass[mid + 1 + j]; + + int i = 0, j = 0, k = left; + + while (i < n1 && j < n2) { + (*iterations)++; + if (leftArr[i] <= rightArr[j]) { + mass[k] = leftArr[i]; + i++; + } + else { + mass[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < n1) { + mass[k] = leftArr[i]; + i++; + k++; + } + + while (j < n2) { + mass[k] = rightArr[j]; + j++; + k++; + } } -int bubbleSort(int mass[])// Двунаправленный пузерек -{ - int left = 0, right = 10 - 1; - int flag = 1; - clock_t start = clock(); - z++; - printf("z = % d\n", z); - while ((left < right) && flag > 0) { - flag = 0; - for (int i = left; i < right; i++) { - if (mass[i] > mass[i + 1]) { - int t = mass[i]; - mass[i] = mass[i + 1]; - mass[i + 1] = t; - flag = 1; - } - } - right--; - for (int i = right; i > left; i--) { - if (mass[i - 1] > mass[i]) { - int t = mass[i]; - mass[i] = mass[i - 1]; - mass[i - 1] = t; - flag = 1; - - } - } - left++; - z++; - printf("z = % d\n", z); - } - clock_t end = clock(); - double time_spent = (double)(end - start) / CLOCKS_PER_SEC; - printf("Время работы вашей программы: %f \n", time_spent); - printf("\n"); +void mergeSort(int mass[], int left, int right, int* iterations) { + if (left < right) { + int mid = left + (right - left) / 2; + mergeSort(mass, left, mid, iterations); + mergeSort(mass, mid + 1, right, iterations); + merge(mass, left, mid, right, iterations); + } } -int merge(int mass[], int left, int a, int right) //Метод слияния -{ - clock_t start = clock(); - int i, j, k; - int n1 = a - left + 1; - int n2 = right - a; - int leftArr[10], rightArr[10]; - - for (i = 0; i < n1; i++) - leftArr[i] = mass[left + i]; - for (j = 0; j < n2; j++) - rightArr[j] = mass[a + 1 + j]; - - i = 0; - j = 0; - k = left; - - while (i < n1 && j < n2) - { - z++; - printf("z = % d\n", z); - - if (leftArr[i] <= rightArr[j]) { - mass[k] = leftArr[i]; - i++; - } - else { - mass[k] = rightArr[j]; - j++; - } - k++; - - } - - while (i < n1) { - - mass[k] = leftArr[i]; - i++; - k++; - } - - while (j < n2) { - - mass[k] = rightArr[j]; - j++; - k++; - } - - clock_t end = clock(); - double time_spent = (double)(end - start) / CLOCKS_PER_SEC; - printf("Время работы вашей программы: %f \n", time_spent); - printf("\n"); +void quickSort(int mass[], int left, int right, int* iterations) { + if (left < right) { + int pivot = mass[(left + right) / 2]; + int i = left, j = right; + while (i <= j) { + while (mass[i] < pivot) i++; + while (mass[j] > pivot) j--; + if (i <= j) { + int temp = mass[i]; + mass[i] = mass[j]; + mass[j] = temp; + i++; + j--; + } + (*iterations)++; + } + quickSort(mass, left, j, iterations); + quickSort(mass, i, right, iterations); + } } -int mergeSort(int mass[], int left, int right) -{ +void insertionSort(int mass[], int size, int* iterations) { + *iterations = 0; + for (int i = 1; i < size; i++) { + int el = mass[i]; + int loc = i - 1; + while (loc >= 0 && mass[loc] > el) { + mass[loc + 1] = mass[loc]; + loc--; + (*iterations)++; + } + mass[loc + 1] = el; + (*iterations)++; + } +} - if (left < right) - { - int a = left + (right - left) / 2; - mergeSort(mass, left, a); - mergeSort(mass, a + 1, right); - merge(mass, left, a, right); - } +void selectionSort(int mass[], int size, int* iterations) { + *iterations = 0; + for (int i = 0; i < size; i++) { + int min_idx = i; + for (int j = i + 1; j < size; j++) { + (*iterations)++; + if (mass[j] < mass[min_idx]) { + min_idx = j; + } + } + int temp = mass[min_idx]; + mass[min_idx] = mass[i]; + mass[i] = temp; + } } -int QuikSort(int mass[], int left, int right) // Быстрая сортировка -{ - z++; - printf("z = % d\n", z); - if (left > right) - return; - clock_t start = clock(); - int i = left; - int j = right; - int pivot = mass[(right + left) / 2]; - while (i <= j) - { - while (mass[i] < pivot) - { - i++; - - } - while (mass[j] > pivot) - { - j--; - } - if (i <= j) - { - int temp = mass[i]; - mass[i] = mass[j]; - mass[j] = temp; - i++; - j--; - } - } - QuikSort(mass, left, j); - QuikSort(mass, i, right); - clock_t end = clock(); - double time_spent = (double)(end - start) / CLOCKS_PER_SEC; - printf("Время работы вашей программы: %f \n", time_spent); - printf("\n"); + +int binSearch(int mass[], int min, int max, int target) { + while (min <= max) { + int mid = (min + max) / 2; + if (target < mass[mid]) { + max = mid - 1; + } + else if (target > mass[mid]) { + min = mid + 1; + } + else { + return mid; + } + } + return -1; } -int InsertionSort(int mass[]) // Сортировка вставками -{ - clock_t start = clock(); - z++; - printf("z = %d\n", z); - int el, loc; - for (int i = 1; i < 10; i++) - { - el = mass[i]; - loc = i - 1; - while (loc >= 0 && mass[loc] > el) - { - mass[loc + 1] = mass[loc]; - loc = loc - 1; - z++; - printf("z = %d\n", z); - } - - mass[loc + 1] = el; - } - clock_t end = clock(); - double time_spent = (double)(end - start) / CLOCKS_PER_SEC; - printf("Время работы вашей программы: %f \n", time_spent); - printf("\n"); + +int linSearch(int mass[], int size, int target) { + for (int i = 0; i < size; i++) { + if (mass[i] == target) { + return i; + } + } + return -1; } -int selectionSort(int mass[]) // Сортировка выбором -{ - clock_t start = clock(); - z++; - printf("z = %d\n", z); - for (int i = 0; i < 10; i++) - { - int min_idx = i; - for (int j = i + 1; j < 10; j++) - { - if (mass[j] < mass[min_idx]) - { - min_idx = j; - z++; - printf("z = %d\n", z); - } - } - int temp = mass[min_idx]; - mass[min_idx] = mass[i]; - mass[i] = temp; - } - clock_t end = clock(); - double time_spent = (double)(end - start) / CLOCKS_PER_SEC; - printf("Время работы вашей программы: %f \n", time_spent); - printf("\n"); + +int isSorted(int mass[], int size) { + for (int i = 1; i < size; i++) { + if (mass[i - 1] > mass[i]) { + return 0; + } + } + return 1; } -int BinSearch(int mass[], int min, int max, int target) // Бинарный поиск -{ - while (min <= max) - { - int mid = (min + max) / 2; - if (target < mass[mid]) - { - max = mid - 1; - } - else if (target > mass[mid]) - { - min = mid + 1; - } - else - { - return mid; - } - } - return -1; +void copyArray(int source[], int destination[], int size) { + for (int i = 0; i < size; i++) { + destination[i] = source[i]; + } } -int LinSearch(int mass[], int min, int max, int target) // Линейный поиск -{ - for (int i = 0; i < 10; i++) - { - if (mass[i] == target) - { - return i; - } - } - return -1; +int main() { + setlocale(LC_ALL, "Rus"); + int a, b, size; + int mass[MAX_SIZE]; + + printf("Введите количество элементов массива (максимум %d): ", MAX_SIZE); + scanf_s("%d", &size); + if (size > MAX_SIZE) { + printf("Ошибка: количество элементов превышает максимальное значение.\n"); + return 1; + } + + printf("Выберите способ ввода массива:\n1. Ввод вручную\n2. Случайные числа\n"); + scanf_s("%d", &a); + + if (a == 1) { + printf("Задайте массив длиной в %d значений:\n", size); + for (int i = 0; i < size; i++) { + scanf_s("%d", &mass[i]); + } + } + else if (a == 2) { + srand(time(NULL)); + for (int i = 0; i < size; i++) { + mass[i] = rand() % 100; + printf("%d\n", mass[i]); + } + } + else { + printf("Ошибка: неверный выбор.\n"); + return 1; + } + + int temp[MAX_SIZE]; + int iterations = 0; + LARGE_INTEGER start, end, frequency; + + while (1) { + printf("Выберите метод сортировки:\n1. Пузырьковая сортировка\n2. Сортировка слиянием\n3. Быстрая сортировка\n4. Сортировка вставками\n5. Сортировка выбором\n6. Выход\n"); + scanf_s("%d", &b); + + if (b == 6) { + break; // Выход из программы + } + + copyArray(mass, temp, size); + + // Начало отсчета времени + QueryPerformanceFrequency(&frequency); // Получаем частоту таймера + QueryPerformanceCounter(&start); // Запоминаем начальное время + + switch (b) { + case 1: + bubbleSort(temp, size, &iterations); + break; + case 2: + mergeSort(temp, 0, size - 1, &iterations); + break; + case 3: + quickSort(temp, 0, size - 1, &iterations); + break; + case 4: + insertionSort(temp, size, &iterations); + break; + case 5: + selectionSort(temp, size, &iterations); + break; + default: + printf("Ошибка: неверный выбор.\n"); + continue; + } + + // Конец отсчета времени + QueryPerformanceCounter(&end); // Запоминаем конечное время + + double time_spent = (double)(end.QuadPart - start.QuadPart) / frequency.QuadPart; // Время в секундах + + printf("Отсортированный массив:\n"); + for (int i = 0; i < size; i++) { + printf("%d ", temp[i]); + } + printf("\n"); + + printf("Проверка, что массив отсортирован: %s\n", isSorted(temp, size) ? "Да" : "Нет"); + printf("Количество итераций: %d\n", iterations); + printf("Время работы: %f секунд\n", time_spent); + + int target; + printf("Выберите метод поиска:\n1. Бинарный поиск\n2. Линейный поиск\n"); + int searchMethod; + scanf_s("%d", &searchMethod); + + printf("Введите элемент для поиска: "); + scanf_s("%d", &target); + + int result; + if (searchMethod == 1) { + result = binSearch(temp, 0, size - 1, target); + } + else if (searchMethod == 2) { + result = linSearch(temp, size, target); + } + else { + printf("Ошибка: неверный выбор метода поиска.\n"); + continue; + } + + if (result != -1) { + printf("Элемент %d найден на позиции %d.\n", target, result); + } + else { + printf("Элемент %d не найден.\n", target); + } + } + + return 0; } From a170c8a25ed68be7784474c08f14fc3415b359a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Sun, 15 Dec 2024 21:13:01 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=A2=D0=B5=D0=B9=D0=BB=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/teylor.c | 260 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 13_Maksimova/teylor.c diff --git a/13_Maksimova/teylor.c b/13_Maksimova/teylor.c new file mode 100644 index 0000000..fb4d38c --- /dev/null +++ b/13_Maksimova/teylor.c @@ -0,0 +1,260 @@ +#define _USE_MATH_DEFINES +#include +#include +#include +#include + + +void changefunction() { + printf("\nВыберите функцию:\n"); + printf("1. Sin\n"); + printf("2. Cos\n"); + printf("3. Exp\n"); + printf("4. Tanh\n"); + printf(">>> "); +} + + +double FirstSin(double x) { + return x; +} + +double NextSin(double x, int i) { + return (-x * x / ((i - 1) * i)); +} + + +double FirstCos(double x) { + return 1; +} + +double NextCos(double x, int i) { + i--; + return -x * x / ((i - 1) * i); +} + + +double FirstExp(double x) { + return 1; +} + +double NextExp(double x, int i) { + i--; + return x / i; +} + + +double FirstTanh(double x) { + return x; +} + +int factorial(int n) { + if (n == 0) + return 1; + return n * factorial(n - 1); +} + +double bernulli(int n) { // bernulli number B(n) + int k; + double result = 0.0; + int C; + + if (n == 0) + return 1; + + else { + for (k = 1; k <= n; k++) { + C = factorial(n + 1) / (factorial(n - k) * factorial(k + 1)); + result += C * bernulli(n - k); + } + result = result * (-1.0 / (n + 1)); + } + return result; +} + +double NextTanh(double x, int i) { + double th1, th2; + + if (i == 2) { + th1 = ((pow(2, 2 * i) * bernulli(2 * i) * (pow(2, 2 * i) - 1)) / factorial(2 * i)) * (pow(x, 2 * i - 1)); + return (th1 / x); + } + + th1 = ((pow(2, 2 * i) * bernulli(2 * i) * (pow(2, 2 * i) - 1)) / factorial(2 * i)) * (pow(x, 2 * i - 1)); + th2 = ((pow(2, 2 * (i - 2)) * bernulli(2 * (i - 2)) * (pow(2, 2 * (i - 2)) - 1)) / factorial(2 * (i - 2))) * (pow(x, 2 * (i - 2) - 1)); + + return (th1 / th2); +} + + +typedef double(*First)(double); +typedef double(*Next)(double, int); + +double Teylor(double x, int N, First f, Next g, int h, double eps, double res) { + double prev, next, sum; + int i = 1, shag; + sum = 0.0; + prev = f(x); + next = 0; + shag = h; + + while ((fabs(sum - res) > eps) && (i < N)) { + if (i == 1) + sum += prev; + else { + next = prev * g(x, i); + sum += next; + prev = next; + } + i += shag; + } + + printf("Эталонное значение: %lf \n", res); + printf("Вычисленная оценка значения: %lf \n", sum); + printf("Разница между оценкой и эталонным значением: %lf \n", fabs(res - sum)); + printf("Количество слагаемых,которое было вычислено: %d \n\n", i - 1); + return sum; +} + + +double Teylor2(double x, int N, First f, Next g, int h, double res) { + double prev, next, sum; + int i = 1, shag; + sum = 0.0; + prev = f(x); + next = 0; + shag = h; + + printf("\nЭталонное значение: %lf \n\n", res); + + while (N >= i) { + if (i == 1) + sum += prev; + else { + next = prev * g(x, i); + sum += next; + prev = next; + } + printf("(N = %d) Вычисленная оценка значения: %lf \n", i, sum); + printf("(N = %d) Разница между оценкой и эталонным значением: %lf \n\n", i, fabs(res - sum)); + i += shag; + } + return sum; +} + + +void main() { + setlocale(LC_ALL, "Rus"); + int N; + double eps; + double x; + double y; + int choice; + int mode = -1; + + while (mode != 3) { + printf("CВыберите режим:\n"); + printf("1. Однократный расчет\n"); + printf("2. Серийный расчет\n"); + printf("3. Выход\n"); + scanf_s("%d", &mode); + + if (mode == 3) { + printf("Пока!\n"); + break; + } + + do { + changefunction(); + scanf_s("%d", &choice); + printf("\n"); + } while ((choice < 1) || (choice > 4)); + + + if (choice == 4) { + printf("\n(!) tanh(x): -0.5 <= x <= 0.5\n"); + do { + printf("Введите x: \n"); + scanf_s("%lf", &x); + } while ((x < -0.5) || (x > 0.5)); + } + + else { + printf("Введите x: \n"); + scanf_s("%lf", &x); + } + + + if (choice == 4) { + printf("\n(!) tanh(x): N <= 10\n"); + do { + printf("Введите N: \n"); + scanf_s("%d", &N); + } while (N > 10); + } + + else { + printf("Введите N(<= 50):\n"); + scanf_s("%d", &N); + } + + + if (mode == 1) { + printf("Введите точность вычислений: \n"); + scanf_s("%lf", &eps); + } + + + if ((choice == 1) || (choice == 2)) { + if (fabs(x) == x) + while (fabs(x) > 2 * M_PI) + x = x - 2 * M_PI; + else + while (fabs(x) > 2 * M_PI) + x = x + 2 * M_PI; + } + + printf("\n"); + + if (mode == 1) { + switch (choice) { + case 1: + y = Teylor(x, N, FirstSin, NextSin, 2, eps, sin(x)); + break; + case 2: + y = Teylor(x, N, FirstCos, NextCos, 2, eps, cos(x)); + break; + case 3: + y = Teylor(x, N, FirstExp, NextExp, 1, eps, exp(x)); + break; + case 4: + y = Teylor(x, N, FirstTanh, NextTanh, 1, eps, tanh(x)); + break; + default: + printf("Неверный выбор\n"); + continue; + } + } + + + if (mode == 2) { + switch (choice) { + case 1: + y = Teylor2(x, N, FirstSin, NextSin, 2, sin(x)); + break; + case 2: + y = Teylor2(x, N, FirstCos, NextCos, 2, cos(x)); + break; + case 3: + y = Teylor2(x, N, FirstExp, NextExp, 1, exp(x)); + break; + case 4: + y = Teylor2(x, N, FirstTanh, NextTanh, 1, tanh(x)); + break; + default: + printf("Неверный выбор\n"); + continue; + } + } + } +} From e27d33b9ecfb817dd7cefa9a45ae26d10e5749b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=9C=D0=B0=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D0=B2=D0=B0?= Date: Tue, 24 Dec 2024 19:24:48 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=BA=D0=B0=D1=81=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 13_Maksimova/kassa.c | 117 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 13_Maksimova/kassa.c diff --git a/13_Maksimova/kassa.c b/13_Maksimova/kassa.c new file mode 100644 index 0000000..4fb7937 --- /dev/null +++ b/13_Maksimova/kassa.c @@ -0,0 +1,117 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include +#include +#include +#include + + +typedef struct { + char name[20]; + double price_per_kg; +} Product; + +// Функция для приведения строки к нижнему регистру +void to_lower_case(char* str) { + for (int i = 0; str[i]; i++) { + str[i] = tolower(str[i]); + } +} + +// Функция для чтения списка товаров с консоли +void read_purchase_list(char purchases[100][256], int* count) { + setlocale(LC_ALL, "Rus"); + printf("Введите список покупок (введите 'end' для завершения ввода):\n"); + *count = 0; + while (*count < 100) { + fgets(purchases[*count], 256, stdin); + purchases[*count][strcspn(purchases[*count], "\n")] = 0; + if (strcmp(purchases[*count], "end") == 0) { + break; + } + (*count)++; + } +} + +// Функция для разбора строки на количество и название товара +void parse_purchase(const char* line, double* quantity, char* name) { + char* token; + char line_copy[256]; + strcpy(line_copy, line); + + *quantity = 0.0; + name[0] = '\0'; + + token = strtok(line_copy, " "); + while (token != NULL) { + char* endptr; + double value = strtod(token, &endptr); + if (endptr != token) { + *quantity += value; + } + else { + strcat(name, token); + strcat(name, " "); + } + token = strtok(NULL, " "); + } + name[strlen(name) - 1] = '\0'; +} + +// Функция для формирования чека +void generate_check(Product stock[], int stock_count, char purchases[100][256], int purchase_count) { + FILE* check_file = fopen("check.txt", "w"); + if (check_file == NULL) { + printf("Ошибка создания файла чека.\n"); + return; + } + + double total_sum = 0.0; + fprintf(check_file, "Чек:\n"); + fprintf(check_file, "-----------------------------------\n"); + for (int i = 0; i < purchase_count; i++) { + double quantity = 0.0; + char name[256] = ""; + parse_purchase(purchases[i], &quantity, name); + to_lower_case(name); + + for (int j = 0; j < stock_count; j++) { + char stock_name[256]; + strcpy(stock_name, stock[j].name); + to_lower_case(stock_name); + + if (strcmp(stock_name, name) == 0) { + double cost = quantity * stock[j].price_per_kg; + fprintf(check_file, "%-15s %2.1f кг * %-10.2f = %.2f\n", stock[j].name, quantity, stock[j].price_per_kg, cost); + total_sum += cost; + break; + } + } + } + + fprintf(check_file, "-----------------------------------\n"); + fprintf(check_file, "Общая сумма: %.2f\n", total_sum); + fclose(check_file); + printf("Чек успешно сформирован в файл check.txt\n"); +} + +int main() { + Product stock[] = { + {"banana", 105.0}, + {"tomato", 300.0}, + {"kiwi", 400.0}, + {"apple", 150.0}, + {"cucumber", 200.0}, + {"potato", 50.0} + }; + int stock_count = sizeof(stock) / sizeof(stock[0]); + + char purchases[100][256]; + int purchase_count = 0; + + read_purchase_list(purchases, &purchase_count); + generate_check(stock, stock_count, purchases, purchase_count); + + return 0; +} +