Загрузка данных
#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;
}