diff --git "a/22_Sergeev_Nikita/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213.c" "b/22_Sergeev_Nikita/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213.c" new file mode 100644 index 0000000..49243fe --- /dev/null +++ "b/22_Sergeev_Nikita/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213/\320\261\321\213\320\272\320\270 \320\270 \320\272\320\276\321\200\320\276\320\262\321\213.c" @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +int main() { + setlocale(LC_ALL, "rus"); + + srand(time(0)); + int random_number = rand() % 9000 + 1000; + int ch = 0; + + int r4 = random_number % 10; + int r3 = ((random_number % 100) - r4) / 10; + int r2 = ((random_number % 1000) - r3) / 100; + int r1 = (random_number - r2) / 1000; + printf("%d\n", random_number); + + while (ch != random_number) { + + printf("введите четырехзначное число\n"); + scanf_s("%d", &ch); + if (ch < 1000 || ch > 9999) { + printf("Ошибка! Введите четырехзначное число.\n"); + continue; + } + + int k = 0; + + int m4 = ch % 10; + int m3 = ((ch % 100) - m4) / 10; + int m2 = ((ch % 1000) - m3) / 100; + int m1 = (ch - m2) / 1000; + + if (r1 == m1) k++; + if (r2 == m2) k++; + if (r3 == m3) k++; + if (r4 == m4) k++; + + int b = 0; + + int r_digits[4] = {r1, r2, r3, r4}; + int m_digits[4] = {m1, m2, m3, m4}; + + int r_used[4] = {0}; + int m_used[4] = {0}; + + for (int i = 0; i < 4; i++) { + if (r_digits[i] == m_digits[i]) { + r_used[i] = 1; + m_used[i] = 1; + } + } + + + for (int i = 0; i < 4; i++) { + if (m_used[i] != 1) { + for (int j = 0; j < 4; j++) { + if (r_used[j] != 1 && m_digits[i] == r_digits[j]) { + b++; + r_used[j] = 1; + m_used[i] = 1; + break; + } + } + } + } + + + if (k == 0) printf("0 коров\n"); + else if (k == 1) printf("1 корова\n"); + else if (k > 1) printf("%d коровы\n", k); + + if (b == 0) printf("0 быков\n"); + else if (b == 1) printf("1 бык\n"); + else if (b > 1) printf("%d быка\n", b); + + if (ch == random_number) { + printf("Вы угадали число: %d\n", random_number); + break; + } + } + + + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/14 2D.c" "b/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/14 2D.c" new file mode 100644 index 0000000..2a7680c --- /dev/null +++ "b/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/14 2D.c" @@ -0,0 +1,74 @@ +#include +#include +#include +#include + + +int min(int a, int b) { + return (a < b) ? a : b; +} + +int main() { + setlocale(LC_ALL, "rus"); + srand(time(NULL)); + + int rows = rand() % 5 + 1; + int cols = rand() % 5 + 1; + + printf("Размеры массива: %d x %d\n", rows, cols); + + + int** A = (int**)malloc(rows * sizeof(int*)); + for (int i = 0; i < rows; i++) { + A[i] = (int*)malloc(cols * sizeof(int)); + } + + + printf("\nИсходный массив A:\n"); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + A[i][j] = rand() % 100 + 1; + printf("%4d ", A[i][j]); + } + printf("\n"); + } + + + int k = 101; + int stolbec = 0; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (A[i][j] < k) { + k = A[i][j]; + stolbec = j; + } + } + } + + printf("\nМинимальный элемент: %d в столбце %d\n", k, stolbec); + + + int** B = (int**)malloc(rows * sizeof(int*)); + for (int i = 0; i < rows; i++) { + B[i] = (int*)malloc((cols - 1) * sizeof(int)); + } + + for (int i = 0; i < rows; i++) { + int b_col = 0; + for (int j = 0; j < cols; j++) { + if (j == stolbec) continue; + B[i][b_col] = A[i][j]; + b_col++; + } + } + + printf("\nМассив B\n"); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols - 1; j++) { + printf("%4d ", B[i][j]); + } + printf("\n"); + } + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/20 2D.c" "b/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/20 2D.c" new file mode 100644 index 0000000..230fb10 --- /dev/null +++ "b/22_Sergeev_Nikita/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213/20 2D.c" @@ -0,0 +1,59 @@ +#include +#include +#include + +int main() { + setlocale(LC_ALL, "rus"); + + int employees, months; + + printf("Введите количество сотрудников: "); + scanf_s("%d", &employees); + printf("Введите количество месяцев: "); + scanf_s("%d", &months); + + + double* hourly_rates = (double*)malloc(employees * sizeof(double)); + int** hours_worked = (int**)malloc(employees * sizeof(int*)); + double** salaries = (double**)malloc(employees * sizeof(double*)); + + for (int i = 0; i < employees; i++) { + hours_worked[i] = (int*)malloc(months * sizeof(int)); + salaries[i] = (double*)malloc(months * sizeof(double)); + } + + + for (int i = 0; i < employees; i++) { + printf("\nВведите почасовую оплату сотрудника %d: ", i + 1); + scanf_s("%lf", &hourly_rates[i]); + + printf("Введите количество отработанных часов для сотрудника %d за каждый месяц:\n", i + 1); + for (int j = 0; j < months; j++) { + printf("Месяц %d: ", j + 1); + scanf_s("%d", &hours_worked[i][j]); + } + } + + + printf("\nЗарплата сотрудников за каждый месяц:\n"); + for (int i = 0; i < employees; i++) { + printf("\nСотрудник %d:\n", i + 1); + for (int j = 0; j < months; j++) { + salaries[i][j] = hourly_rates[i] * hours_worked[i][j]; + printf("Месяц %d: %.2f\n", j + 1, salaries[i][j]); + } + } + + printf("\nОбщий фонд зарплаты за каждый месяц:\n"); + for (int j = 0; j < months; j++) { + double total_fund = 0.0; + for (int i = 0; i < employees; i++) { + total_fund += salaries[i][j]; + } + printf("Месяц %d: %.2f\n", j + 1, total_fund); + } + + + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\320\272\321\200/1 \320\267\320\260\320\264\320\260\320\275\320\270\320\265 \320\272\321\200.c" "b/22_Sergeev_Nikita/\320\272\321\200/1 \320\267\320\260\320\264\320\260\320\275\320\270\320\265 \320\272\321\200.c" new file mode 100644 index 0000000..b0f0e7d --- /dev/null +++ "b/22_Sergeev_Nikita/\320\272\321\200/1 \320\267\320\260\320\264\320\260\320\275\320\270\320\265 \320\272\321\200.c" @@ -0,0 +1,48 @@ +#include +#include + +int main() { + int A[11] = { 1, 6, 6, 3, 7, 9, 5, 10, 11, 111, 1111}; + int B[8] = { 3, 5, 6, 6, 7, 9, 11}; + int a_size = sizeof(A) / sizeof(A[0]); + int b_size = sizeof(B) / sizeof(B[0]); + int* C = (int*)malloc(sizeof(B)); + int count = 0; + + for (int i = 0; i < a_size; i++) { + for (int j = 0; j < b_size; j++) { + if (A[i] == B[j]) { + C[count] = A[i]; + count++; + } + } + + } + + int uni = 0; + int* uniq = (int*)malloc(sizeof(C)); + + for (int i = 0; i < count; i++) { + int dubl = 0; + for (int j = 0; j < uni; j++) { + if (C[i] == uniq[j]) { + dubl = 1; + break; + } + } + if (dubl == 0) { + uniq[uni] = C[i]; + uni++; + } + } + + for (int i = 0; i < uni; i++) { + printf("%d ", uniq[i]); + + } + + + + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\320\272\321\200/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213.c" "b/22_Sergeev_Nikita/\320\272\321\200/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213.c" new file mode 100644 index 0000000..cb180a1 --- /dev/null +++ "b/22_Sergeev_Nikita/\320\272\321\200/\320\264\320\262\321\203\320\274\320\265\321\200\320\275\321\213\320\265 \320\274\320\260\321\201\321\201\320\270\320\262\321\213.c" @@ -0,0 +1,81 @@ +#include +#include +#include +#include + + +int max(int a, int b) { + return (a > b) ? a : b; +} + +int main() { + setlocale(LC_ALL, "rus"); + srand(time(NULL)); + + + int rows = rand() % 4 + 2; + int cols = rand() % 4 + 2; + + printf("Размер массива: %d x %d\n", rows, cols); + + + int** A = (int**)malloc(rows * sizeof(int*)); + for (int i = 0; i < rows; i++) { + A[i] = (int*)malloc(cols * sizeof(int)); + } + + + printf("Случайный массив:\n"); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + A[i][j] = rand() % 100 + 1; + printf("%4d", A[i][j]); + } + printf("\n"); + } + + + int sum = 0; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + sum += A[i][j]; + } + } + + + float mid = (float)sum / (rows * cols); + printf("\nСреднее значение: %.3f\n", mid); + + + int* count = (int*)calloc(cols, sizeof(int)); + + for (int j = 0; j < cols; j++) { + int k = 0; + for (int i = 0; i < rows; i++) { + if (A[i][j] > mid) k++; + } + count[j] = k; + } + + + int max_count = 0; + int stolbec = 0; + + for (int j = 0; j < cols; j++) { + if (count[j] > max_count) { + max_count = count[j]; + stolbec = j; + } + } + + printf("\nСтолбец %d (%d число(а))\n", stolbec, max_count); + + + for (int i = 0; i < rows; i++) { + free(A[i]); + } + free(A); + free(count); + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\320\273\320\260\320\261\320\260 1/\320\273\320\260\320\261\320\260.c" "b/22_Sergeev_Nikita/\320\273\320\260\320\261\320\260 1/\320\273\320\260\320\261\320\260.c" new file mode 100644 index 0000000..b3b7edd --- /dev/null +++ "b/22_Sergeev_Nikita/\320\273\320\260\320\261\320\260 1/\320\273\320\260\320\261\320\260.c" @@ -0,0 +1,381 @@ +#include +#include +#include +#include +#include + +void menu() { + printf("|1.Рандомный массив |\n"); + printf("|2.Ввод массива вручную |\n"); + printf("|3.Вывести массив |\n"); + printf("---------------------------\n"); + printf("|4.сортировка вставками |\n"); + printf("|5.сортировка выбором |\n"); + printf("|6.сортировка подсчетом |\n"); + printf("|7.сортировка шелла |\n"); + printf("|8.быстрая сортировка |\n"); + printf("|9.сортировка слиянием |\n"); + printf("---------------------------\n"); + printf("|10.выход |\n\n"); + printf("выбор: "); +} + +void insertionSort(int arr[], int n, int* iterationCount) { + *iterationCount = 0; + for (int i = 1; i < n; i++) { + int k = arr[i]; + int j = i - 1; + while (j >= 0 && arr[j] > k) { + arr[j + 1] = arr[j]; + j = j - 1; + (*iterationCount)++; + } + arr[j + 1] = k; + (*iterationCount)++; + } +} + +void selectionSort(int arr[], int n, int* iterationCount) { + *iterationCount = 0; + for (int i = 0; i < n - 1; i++) { + int minIndex = i; + for (int j = i + 1; j < n; j++) { + (*iterationCount)++; + if (arr[j] < arr[minIndex]) { + minIndex = j; + } + } + int temp = arr[minIndex]; + arr[minIndex] = arr[i]; + arr[i] = temp; + (*iterationCount)++; + } +} + +void countingSort(int arr[], int size, int* iterationCount) { + *iterationCount = 0; + int min = arr[0]; + int max = arr[0]; + for (int i = 1; i < size; i++) { + (*iterationCount)++; + if (arr[i] > max) { + max = arr[i]; + } + if (arr[i] < min) { + min = arr[i]; + } + } + + int range = max - min + 1; + int* count = (int*)calloc(range, sizeof(int)); + + for (int i = 0; i < size; i++) { + count[arr[i] - min]++; + (*iterationCount)++; + } + + int index = 0; + for (int i = 0; i < range; i++) { + while (count[i] > 0) { + arr[index++] = i + min; + count[i]--; + (*iterationCount)++; + } + } + + free(count); +} + +void shellSort(int arr[], int size, int* iterationCount) { + *iterationCount = 0; + for (int gap = size / 2; gap > 0; gap /= 2) { + for (int i = gap; i < size; i++) { + int temp = arr[i]; + int j; + for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) { + arr[j] = arr[j - gap]; + (*iterationCount)++; + } + arr[j] = temp; + (*iterationCount)++; + } + } +} + +void quickSort(int arr[], int low, int high, int* iterationCount) { + if (low < high) { + int pivot = arr[high]; + int i = low - 1; + + for (int j = low; j < high; j++) { + (*iterationCount)++; + if (arr[j] <= pivot) { + i++; + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + } + + int temp = arr[i + 1]; + arr[i + 1] = arr[high]; + arr[high] = temp; + + + quickSort(arr, low, i, iterationCount); + quickSort(arr, i + 2, high, iterationCount); + } +} + +void merge(int arr[], int left, int right, int* iterationCount) { + if (left < right) { + int mid = left + (right - left) / 2; + + merge(arr, left, mid, iterationCount); + merge(arr, mid + 1, right, iterationCount); + + int n1 = mid - left + 1; + int n2 = right - mid; + + int* L = (int*)malloc(n1 * sizeof(int)); + int* R = (int*)malloc(n2 * sizeof(int)); + + for (int i = 0; i < n1; i++) { + L[i] = arr[left + i]; + (*iterationCount)++; + } + for (int i = 0; i < n2; i++) { + R[i] = arr[mid + 1 + i]; + (*iterationCount)++; + } + + int i = 0; + int j = 0; + int k = left; + while (i < n1 && j < n2) { + (*iterationCount)++; + if (L[i] <= R[j]) { + arr[k++] = L[i++]; + } + else { + arr[k++] = R[j++]; + } + } + + while (i < n1) { + arr[k++] = L[i++]; + (*iterationCount)++; + } + while (j < n2) { + arr[k++] = R[j++]; + (*iterationCount)++; + } + + free(L); + free(R); + } +} + +void mergeSort(int arr[], int left, int right, int* iterationCount) { + merge(arr, left, right, iterationCount); +} + +int isSorted(int arr[], int size) { + for (int i = 0; i < size - 1; i++) { + if (arr[i] > arr[i + 1]) { + return 0; + } + } + return 1; +} + +void restoreArray(int* arr, int* originalArray, int size) { + memcpy(arr, originalArray, size * sizeof(int)); +} + +int main() { + int vib = 0; + setlocale(LC_ALL, "rus"); + int globalArraySize = 0; + int* globalArray = NULL; + int* originalArray = NULL; + + menu(); + while (vib != 10) { + scanf_s("%d", &vib); + switch (vib) { + case 1: { + printf("введите размер массива: "); + scanf_s("%d", &globalArraySize); + globalArray = (int*)malloc(globalArraySize * sizeof(int)); + originalArray = (int*)malloc(globalArraySize * sizeof(int)); + for (int i = 0; i < globalArraySize; i++) { + globalArray[i] = rand() % 101; + } + memcpy(originalArray, globalArray, globalArraySize * sizeof(int)); + printf("\n"); + for (int i = 0; i < globalArraySize; i++) { + printf("%d ", globalArray[i]); + } + printf(" - ваш рандомный массив\n\n"); + menu(); + break; + } + case 2: { + printf("введите размер массива: "); + scanf_s("%d", &globalArraySize); + globalArray = (int*)malloc(globalArraySize * sizeof(int)); + originalArray = (int*)malloc(globalArraySize * sizeof(int)); + printf("Вводите массив: "); + for (int i = 0; i < globalArraySize; i++) { + scanf_s("%d", &globalArray[i]); + } + memcpy(originalArray, globalArray, globalArraySize * sizeof(int)); + printf("\n"); + for (int i = 0; i < globalArraySize; i++) { + printf("%d ", globalArray[i]); + } + printf(" - ваш введенный массив\n\n"); + menu(); + break; + } + case 3: { + if (globalArray != NULL && globalArraySize > 0) { + printf("\nТекущий массив: "); + for (int i = 0; i < globalArraySize; i++) { + printf("%d ", globalArray[i]); + } + printf("\n\n"); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 4: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + insertionSort(globalArray, globalArraySize, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (сортировка вставками)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 5: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + selectionSort(globalArray, globalArraySize, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (сортировка выбором)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 6: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + countingSort(globalArray, globalArraySize, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (сортировка подсчетом)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 7: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + shellSort(globalArray, globalArraySize, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (сортировка Шелла)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 8: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + quickSort(globalArray, 0, globalArraySize - 1, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (быстрая сортировка)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 9: { + if (globalArray != NULL && globalArraySize > 0) { + int iterations = 0; + clock_t start = clock(); + mergeSort(globalArray, 0, globalArraySize - 1, &iterations); + clock_t end = clock(); + double time_spent = (double)(end - start) / CLOCKS_PER_SEC; + + printf("\nОтсортированный массив (сортировка слиянием)\n"); + printf("Количество итераций: %d\n", iterations); + printf("Время сортировки: %f секунд\n", time_spent); + } + else { + printf("Массив не инициализирован. Сначала введите или создайте массив.\n\n"); + } + menu(); + break; + } + case 10: + printf("выход\n"); + break; + default: + printf("Неверный выбор. Попробуйте снова.\n"); + menu(); + } + } + + if (globalArray != NULL) { + free(globalArray); + } + if (originalArray != NULL) { + free(originalArray); + } + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\321\201\320\273\320\276\320\266\320\275\320\260\321\217 \320\275\320\260 \321\206\320\270\320\272\320\273\321\213/\321\206\320\270\320\272\320\273\321\213.c" "b/22_Sergeev_Nikita/\321\201\320\273\320\276\320\266\320\275\320\260\321\217 \320\275\320\260 \321\206\320\270\320\272\320\273\321\213/\321\206\320\270\320\272\320\273\321\213.c" new file mode 100644 index 0000000..8cc62b2 --- /dev/null +++ "b/22_Sergeev_Nikita/\321\201\320\273\320\276\320\266\320\275\320\260\321\217 \320\275\320\260 \321\206\320\270\320\272\320\273\321\213/\321\206\320\270\320\272\320\273\321\213.c" @@ -0,0 +1,17 @@ +#include + +int main() { + + for (int i = 1; i < 28; i++) { + for (int j = 100; j < 1000; j++) { + int m3 = j % 10; + int m2 = ((j % 100) - m3) / 10; + int m1 = (j - m2) / 100; + if (i == m1 + m2 + m3) { + printf("%d\n", j); + } + } + } + + return 0; +} \ No newline at end of file diff --git "a/22_Sergeev_Nikita/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213.c" "b/22_Sergeev_Nikita/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213.c" new file mode 100644 index 0000000..9f7a42c --- /dev/null +++ "b/22_Sergeev_Nikita/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213/\321\201\321\202\321\200\320\276\320\272\320\270+\321\204\320\260\320\271\320\273\321\213.c" @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include + +#pragma warning(disable : 4996) + +// Структура для хранения информации о товаре +struct Item { + char name[100]; // Название товара + double price; // Цена за кг + double quantity; // Количество на складе или в чеке +}; + +// Массив товаров на складе +struct Item inventory[] = { + {"tomato", 820.0, 43.0}, + {"milk", 530.0, 101.0}, + {"cheese", 2250.0, 31.0}, + {"raxat-lukum", 31000.0, 29.0}, + {"bread", 220.0, 52.0}, + {"egg", 1030.0, 2.0} +}; + +// Массив для хранения товаров, выбранных покупателем +struct Item basket[100]; + +// Функция для перевода строки в нижний регистр +void toLowerCase(char* str) { + for (int i = 0; str[i] != '\0'; i++) { + str[i] = tolower((unsigned char)str[i]); + } +} + +// Функция для поиска товара в массиве на складе +int findItemByName(const char* itemName) { + for (int i = 0; i < sizeof(inventory) / sizeof(inventory[0]); i++) { + int j = 0; + // Сравниваем строки без учета регистра + while (inventory[i].name[j] != '\0' && itemName[j] != '\0') { + if (tolower((unsigned char)inventory[i].name[j]) != tolower((unsigned char)itemName[j])) { + break; + } + j++; + } + // Если строки совпали + if (inventory[i].name[j] == '\0' && itemName[j] == '\0') { + return i; // Товар найден + } + } + return -1; // Товар не найден +} + +int main() { + int numberOfItems = 0; // Количество введенных товаров + char userInput[100]; // Строка для ввода пользователя + char* token; + char delimiter[] = " "; // Разделитель для строк + char inputLines[100][100]; // Массив для хранения строк с товарами + char tokens[100][100]; // Массив для хранения токенов (слов) + + setlocale(LC_ALL, "Russian"); + + // Ввод списка товаров + printf("Введите список товаров, чтобы завершить, введите пустую строку:\n"); + while (1) { + fgets(userInput, sizeof(userInput), stdin); + userInput[strcspn(userInput, "\n")] = '\0'; // Удаляем символ новой строки + if (strlen(userInput) == 0) break; // Завершаем ввод при пустой строке + strcpy(inputLines[numberOfItems], userInput); + numberOfItems++; + } + + // Разбиваем строки на отдельные токены (слова) + int tokenCount = 0; + for (int i = 0; i < numberOfItems; i++) { + token = strtok(inputLines[i], delimiter); + while (token != NULL) { + strcpy(tokens[tokenCount], token); + token = strtok(NULL, delimiter); + tokenCount++; + } + } + + // Формируем список товаров в корзине (basket) на основе введенных данных + int basketIndex = 0; + for (int t = 0; t < tokenCount; t++) { + double quantity = 1.0; // Стандартное количество — 1 + if (sscanf(tokens[t], "%lf", &quantity)) { // Если токен — это число + basket[basketIndex].quantity = quantity; + strcpy(basket[basketIndex].name, tokens[t + 1]); + t++; // Переходим к следующему товару + } + else { + basket[basketIndex].quantity = atof(tokens[t + 1]); + strcpy(basket[basketIndex].name, tokens[t]); + t++; // Переходим к следующему товару + } + basketIndex++; + } + + // Вывод чека с точками между товаром и его стоимостью + printf("Чек:\n"); + double totalSum = 0.0; + for (int i = 0; i < basketIndex; i++) { + char lowerName[100]; + strcpy(lowerName, basket[i].name); + toLowerCase(lowerName); + + int inventoryIndex = findItemByName(lowerName); + if (inventoryIndex != -1) { + double totalPrice = basket[i].quantity * inventory[inventoryIndex].price; + totalSum += totalPrice; + + printf("%-20s.... %.1lf * %.2lf.... %.2lf\n", basket[i].name, basket[i].quantity, inventory[inventoryIndex].price, totalPrice); + } + else { + printf("%-20s.... Не найден\n", basket[i].name); + } + } + + // Вывод общей суммы + printf("Сумма.................... %.2lf\n", totalSum); + + return 0; +} diff --git "a/22_Sergeev_Nikita/\321\202\320\265\320\271\320\273\320\276\321\200/\321\202\320\265\320\271\320\273\320\276\321\200.c" "b/22_Sergeev_Nikita/\321\202\320\265\320\271\320\273\320\276\321\200/\321\202\320\265\320\271\320\273\320\276\321\200.c" new file mode 100644 index 0000000..2ef3634 --- /dev/null +++ "b/22_Sergeev_Nikita/\321\202\320\265\320\271\320\273\320\276\321\200/\321\202\320\265\320\271\320\273\320\276\321\200.c" @@ -0,0 +1,162 @@ +#include +#include + +#define _USE_MATH_DEFINES +#include +#include + +void print_menu() +{ + printf("0. Синус \n"); + printf("1. Косинус \n"); + printf("2. Экспонента \n"); + printf("3. Секанс \n"); + printf("4. Выход \n"); +} + +// Первый синус +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 FirstSec(double x) +{ + return 1; +} +// Следующий секанс +double NextSec(double x, int i) +{ + if (i % 2 == 0) { + return (x * x / (i - 1) / i); + } + else { + return 0; // Только чётные члены + } +} + +typedef double(*First)(double); +typedef double(*Next)(double, int); + +// Тейлор режим 1 +double Teylor(double x, int N, First f, Next g, int h, double eps, double rez, int max_iter) +{ + double prev; + double next; + double sums; + int i = 1, shag; + prev = f(x); + sums = 0.0; + next = 0; + shag = h; + int iter = 0; + + while (fabs(sums - rez) > eps && iter < max_iter) // Остановка по точности и количеству итераций + { + if (i == 1) + sums += prev; + else + { + next = prev * g(x, i); + sums += next; + prev = next; + } + i += shag; + iter++; // Увеличиваем счетчик итераций + } + + printf("Исходное значение - %lf \n", rez); + printf("Посчитанное значение - %lf \n", sums); + printf("Разница в значениях - %lf \n", fabsl(rez - sums)); + printf("Количество слагаемых, которое было вычислено равно %d \n", i); + + // Проверка, по какому условию завершена работа + if (iter >= max_iter) { + printf("Достигнут максимальный лимит итераций (%d).\n", max_iter); + } + else { + printf("Достигнута требуемая точность.\n"); + } + + return sums; +} + +int main() +{ + int N; + double eps; + double x, y; + int c1 = 0; + int max_iter; + + setlocale(LC_ALL, "Russian"); + + printf("Выбери функцию из перечня \n"); + print_menu(); + scanf_s("%d", &c1); + + printf("Введи точку x, в которой хочешь найти значение функции \n"); + scanf_s("%lf", &x); + printf("Введи число элементов ряда для выполнения расчёта (N) \n"); + scanf_s("%d", &N); + printf("Введи точность вычисления (eps) \n"); + scanf_s("%lf", &eps); + printf("Введи максимальное количество итераций (max_iter) \n"); + scanf_s("%d", &max_iter); + + while (x > M_PI_2) + { + x = x - M_PI_2; + } + + switch (c1) + { + case 0: + y = Teylor(x, N, FirstSin, NextSin, 2, eps, sin(x), max_iter); + break; + case 1: + y = Teylor(x, N, FirstCos, NextCos, 2, eps, cos(x), max_iter); + break; + case 2: + y = Teylor(x, N, FirstExp, NextExp, 1, eps, exp(x), max_iter); + break; + case 3: + y = Teylor(x, N, FirstSec, NextSec, 2, eps, 1 / cos(x), max_iter); + break; + case 4: + printf("Выход из программы\n"); + return 0; + default: + printf("Некорректный ввод. Попробуйте снова.\n"); + return 1; + } + + return 0; +}