Загрузка данных


#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <windows.h>

// Функция для очистки буфера ввода (чтобы scanf не пропускал ввод)
void clear_input() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

// ================= ЗАДАЧА 1 =================
void task_1() {
    printf("\n--- Задача 1 ---\n");
    float A[5];
    float sum = 0.0;

    printf("Введите 5 вещественных элементов массива A:\n");
    for (int i = 0; i < 5; i++) {
        printf("A[%d]: ", i);
        while (scanf("%f", &A[i]) != 1) {
            printf("Ошибка! Введите число: ");
            clear_input();
        }
    }

    printf("\nИсходный массив A: ");
    for (int i = 0; i < 5; i++) {
        printf("%.2f ", A[i]);
        sum += A[i];
    }

    printf("\nСреднее значение: %.2f\n", sum / 5.0);
}

// ================= ЗАДАЧА 2 =================
void task_2() {
    printf("\n--- Задача 2 ---\n");
    float A[10];
    float max_val;
    int max_index = 0;

    printf("Введите 10 вещественных элементов массива A:\n");
    for (int i = 0; i < 10; i++) {
        printf("A[%d]: ", i);
        while (scanf("%f", &A[i]) != 1) {
            printf("Ошибка! Введите число: ");
            clear_input();
        }
    }

    max_val = A[0];
    for (int i = 1; i < 10; i++) {
        if (A[i] > max_val) {
            max_val = A[i];
            max_index = i;
        }
    }

    printf("\nИсходный массив A: ");
    for (int i = 0; i < 10; i++) {
        printf("%.2f ", A[i]);
    }
    printf("\nМаксимальное значение: %.2f\n", max_val);
    printf("Номер элемента (индекс): %d\n", max_index);
}

// ================= ЗАДАЧА 3 =================
void task_3() {
    printf("\n--- Задача 3 ---\n");
    float A[4][5];
    float B[4];

    // Заполнение массива случайными числами для демонстрации
    srand(time(NULL));
    printf("Исходный массив A[4][5] (заполнен случайными числами):\n");
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 5; j++) {
            A[i][j] = (float)(rand() % 200 - 100) / 10.0; // от -10.0 до 10.0
            printf("%7.2f ", A[i][j]);
        }
        printf("\n");
    }

    // Логика задачи
    for (int i = 0; i < 4; i++) {
        if (A[i][0] >= 0) {
            // Ищем максимум в строке
            float max_val = A[i][0];
            for (int j = 1; j < 5; j++) {
                if (A[i][j] > max_val) max_val = A[i][j];
            }
            B[i] = max_val;
        } else {
            // Ищем минимум в строке
            float min_val = A[i][0];
            for (int j = 1; j < 5; j++) {
                if (A[i][j] < min_val) min_val = A[i][j];
            }
            B[i] = min_val;
        }
    }

    printf("\nПолученный массив B[4]:\n");
    for (int i = 0; i < 4; i++) {
        printf("B[%d] = %.2f\n", i, B[i]);
    }
}

// ================= ЗАДАЧА 4 =================
// Вспомогательная функция проверки на возрастание
int is_sorted(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        if (arr[i] > arr[i + 1]) return 0; // Не возрастает
    }
    return 1; // Возрастает
}

// Вспомогательная функция обработки массива
void process_array(int arr[], int size, const char* name) {
    printf("\nИсходный массив %s: ", name);
    for (int i = 0; i < size; i++) printf("%d ", arr[i]);

    if (is_sorted(arr, size)) {
        printf("\nМассив %s упорядочен по возрастанию. Заменяем положительные элементы на 0.\n", name);
        for (int i = 0; i < size; i++) {
            if (arr[i] > 0) arr[i] = 0;
        }
    } else {
        printf("\nМассив %s НЕ упорядочен по возрастанию. Оставляем без изменений.\n", name);
    }
    printf("Изменённый массив %s: ", name);
    for (int i = 0; i < size; i++) printf("%d ", arr[i]);
    printf("\n");
}

void task_4() {
    printf("\n--- Задача 4 ---\n");
    int X[10], Y[10];

    printf("Введите 10 целочисленных элементов массива X:\n");
    for (int i = 0; i < 10; i++) {
        printf("X[%d]: ", i);
        while (scanf("%d", &X[i]) != 1) {
            printf("Ошибка! Введите целое число: ");
            clear_input();
        }
    }

    printf("Введите 10 целочисленных элементов массива Y:\n");
    for (int i = 0; i < 10; i++) {
        printf("Y[%d]: ", i);
        while (scanf("%d", &Y[i]) != 1) {
            printf("Ошибка! Введите целое число: ");
            clear_input();
        }
    }

    process_array(X, 10, "X");
    process_array(Y, 10, "Y");
}

// ================= ГЛАВНОЕ МЕНЮ =================
int main() {
    // Настройка кодировки для корректного отображения русских символов в Windows
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");

    int choice;

    while (1) {
        printf("\n================================\n");
        printf("           МЕНЮ ЗАДАЧ           \n");
        printf("================================\n");
        printf("1 - Задача 1 (Среднее значение A[5])\n");
        printf("2 - Задача 2 (Максимум и номер A[10])\n");
        printf("3 - Задача 3 (Массив B из A[4][5])\n");
        printf("4 - Задача 4 (Преобразование X[10], Y[10])\n");
        printf("0 - Выход\n");
        printf("================================\n");
        printf("Выберите задачу: ");

        while (scanf("%d", &choice) != 1) {
            printf("Ошибка! Введите число: ");
            clear_input();
        }
        clear_input(); // Убираем символ новой строки после выбора

        switch (choice) {
            case 1: task_1(); break;
            case 2: task_2(); break;
            case 3: task_3(); break;
            case 4: task_4(); break;
            case 0:
                printf("Выход из программы.\n");
                return 0;
            default:
                printf("Неверный ввод. Попробуйте снова.\n");
        }
    }

    return 0;
}