Написать функцию, осуществляющую перемену местами столбцов вещественной матрицы - C (СИ)
Формулировка задачи:
Написать функцию SwapCol(A, M, N, K1, K2), осуществляющую перемену местами столбцов вещественной матрицы A размера M × N с номерами K1 и K2. Матрица A является входным и выходным параметром; если K1 или K2 больше N, то матрица не изменяется. Используя эту функцию, поменять для данной матрицы A размера M × N столбцы с данными номерами K1 и K2.
Как понимаю нужно работать с указателями, а я до них пока не дошел, но срочно нужно ее сдать...
Решение задачи: «Написать функцию, осуществляющую перемену местами столбцов вещественной матрицы»
textual
Листинг программы
#include <stdio.h>
float *SwapCol(float *A,int M,int N,int K1,int K2)
{
if((K1 >N)||(K2>N))return A;
int i;
float k;
--K1;--K2;
for(i=0;i<M*N;i+=M)
{
k=*(A+i+K1);
*(A+i+K1)=*(A+i+K2);
*(A+i+K2)=k;
}
return A;
}
#define S 5
#define P 5
int main(void)
{
float B[S][P]={{3,65,2.3,56.7,5},{2,4.5,890.9,7,1},{34,51,3.4,22.56,34},{9,8,6,5,4},{4,3,7,89.0,7}};
int i,j;
for(i=0;i<S;i++)//Печатаем исходный массив
{
printf("\n");
for(j=0;j<P;j++)
printf("%-6.2f ",B[i][j]);
}
printf("\n");
SwapCol(*B,5,5,1,5);
for(i=0;i<S;i++)//Печатаем преобразованный массив
{
printf("\n");
for(j=0;j<P;j++)
printf("%-6.2f ",B[i][j]);
}
return (0);
}
Объяснение кода листинга программы
- В функции SwapCol осуществляется перемена местами столбцов вещественной матрицы. Функция принимает в качестве аргументов указатель на первый элемент матрицы, количество строк и столбцов матрицы, а также номера столбцов, между которыми необходимо поменять местами значения.
- Если хотя бы один из номеров столбцов больше количества столбцов в матрице, функция возвращает указатель на первый элемент матрицы, не осуществляя никаких изменений.
- Внутри функции создаются три переменные: i (для итерации по элементам матрицы), k (для хранения временного значения элемента) и две переменные K1 и K2 (для хранения номеров столбцов). Значения K1 и K2 уменьшаются на единицу, чтобы корректно работать с 0-индексированными массивами.
- Далее следует цикл, который проходит по всем элементам матрицы. В каждой итерации значение элемента с индексом i+K1 копируется во временную переменную k.
- Затем значения элементов с индексами i+K1 и i+K2 меняются местами, и временное значение k присваивается элементу с индексом i+K2.
- В конце функции возвращается указатель на первый элемент матрицы.
- В функции main создается массив B, заполненный некоторыми значениями.
- Далее следует цикл, который проходит по всем строкам матрицы и печатает значения элементов каждой строки через пробел.
- Затем вызывается функция SwapCol, которая меняет местами столбцы матрицы B с 1-го на 5-й и с 5-го на 1-й.
- После этого цикл проходит по всем строкам матрицы и печатает значения элементов каждой строки через пробел.
- В конце функции main возвращается 0, что означает успешное завершение работы программы.