Поменять местами максимальные элементы массива и матрицы - C (СИ)
Формулировка задачи:
Мне нужно решить задачу "Поменять местами максимальные элементы массива А (45) и матрицы
В (6х9)." Я составила программу, а мне говорят что нужно её решить одним циклом, а я не понимаю как. Помогите, посмотрите, посоветуйте, что изменить
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #define L 4 // Количество элементов массива
- #define N 3 // Количество строк матрицы
- #define M 2 // Количество столбцов матрицы
- void EnterData(double A[L], int num, double B[N][M], int numStr, int numCol);
- void EnterMatrix(double B[N][M], int numStr, int numCol);
- void OutputArray(double A[L], int num);
- void OutputMatrix(double B[N][M], int numStr, int numCol);
- void Change(double A[L], int num, double B[N][M], int numStr, int numCol);
- int main()
- {
- double A[L], B[N][M];
- // Ввод массива и матрицы
- printf("Enter array A and Matrix B:\n");
- EnterData(A, L, B, N, M);
- printf("\n");
- // Вывод введенных массива и матрицы
- printf("Entered array A:\n");
- OutputArray(A, L);
- printf("Entered matrix B:\n");
- OutputMatrix(B, N, M);
- printf("\n");
- Change(A, L, B, N, M);
- // Вывод измененных матриц
- printf("Changed array A:\n");
- OutputArray(A, L);
- printf("Changed matrix B:\n");
- OutputMatrix(B, N, M);
- printf("\n");
- getch();
- return 0;
- }
- // Ввод массива и матрицы
- void EnterData(double A[L], int num, double B[N][M], int numStr, int numCol)
- {
- int i, j;
- for (i = 0; i < num; ++i)
- {
- printf("Enter element[%d] = ", i);
- scanf("%lf", &A[i]);
- }
- for (i = 0; i < numStr; ++i)
- for (j = 0; j < numCol; ++j)
- {
- printf("Enter element[%d][%d] = ", i, j);
- scanf("%lf", &B[i][j]);
- }
- }
- // Вывод массива
- void OutputArray(double A[L], int num)
- {
- int i;
- for (i = 0; i < num; ++i)
- printf("%5.2lf ", A[i]);
- printf("\n");
- }
- // Вывод матрицы
- void OutputMatrix(double B[N][M], int numStr, int numCol)
- {
- int i, j;
- for (i = 0; i < numStr; ++i)
- {
- for (j = 0; j < numCol; ++j)
- printf("%5.2lf ", B[i][j]);
- printf("\n");
- }
- }
- // Смена максимальный элементов массива и матрицы
- void Change(double A[L], int num, double B[N][M], int numStr, int numCol)
- {
- double buf;
- int i, j,
- k, l, m;
- k = 0;
- for (i = 1; i < num; ++i)
- if (A[i] > A[k])
- k = i;
- l = m = 0;
- for (i = 0; i < numStr; ++i)
- for (j = 0; j < numCol; ++j)
- if (B[i][j] > B[l][m])
- {
- l = i;
- m = j;
- }
- buf = A[k];
- A[k] = B[l][m];
- B[l][m] = buf;
- }
Решение задачи: «Поменять местами максимальные элементы массива и матрицы»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <time.h>
- #define L 14 // Количество элементов массива
- #define N 6 // Количество строк матрицы
- #define M 9 // Количество столбцов матрицы
- int main()
- {
- int A[L], B[N][M], k, l, m, buf;
- l = k = m = 0;
- srand(time(NULL));
- for (int i = 0; i < L || i < N; ++i) {
- if (i < L)
- printf("\n[%2d] ", A[i] = rand() % 100);
- if (i < N)
- for (int j = 0; j < M; ++j)
- printf("[%2d]", B[i][j] = rand() % 100);
- }
- for (int i = 0; i < L || i < N; ++i) // Поиск и в матрице и в массиве
- { // одним циклом
- if (i < L)
- if (A[i] > A[k])
- k = i;
- if (i < N)
- for (int j = 0; j < M; ++j)
- if (B[i][j] > B[l][m])
- {
- l = i;
- m = j;
- }
- }
- buf = A[k];
- A[k] = B[l][m];
- B[l][m] = buf;
- printf("\n Change [%2d] in matrix on [%2d] in array\n", A[k], B[l][m]);
- return 0;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O, генерацией случайных чисел и временем
- Определяем количество элементов массива и матрицы
- Инициализируем переменные для хранения индексов максимальных элементов
- Инициализируем генератор случайных чисел текущим временем
- Заполняем массив и матрицу случайными числами
- Поиск индексов максимальных элементов в массиве и матрице с помощью одного цикла
- Обмениваем местами максимальные элементы массива и матрицы
- Выводим результат на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д