Поменять местами максимальные элементы массива и матрицы - 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, чтобы указать, что программа успешно завершилась