Дан двумерный массив. Составить программу,которая меняет местами две любые строки - C (СИ)
Формулировка задачи:
Здравствуйте всем,эту задачу надо решить следующим образом:
1. Размерность исходного массива вводит пользователь
2. Исходный массив заполняется при помощи датчика случайный чисел (равномерный закон распределения) в отдельной программной функции.
4. После ввода размерности исходного массива вывести на экран его в матричном виде
5. Если результатом программы является массив - вывести его (или их) в матричном виде.
У меня получилось создать матрицу,в котором элементы массива выбираются случайным образом,а дальше программу которая меняет местами две любые строки,мне составить не удается помогите люди добрые пожалуйста,очень надо...
А собственно,вот и начало программы:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int rzr()
{
int z=rand()%9-0;
return z;
}
int main()
{
int i,j,n,m;
printf("vvedite kolichestvo strok ");
scanf("%d", &n);
printf("vvedite kolichestvo stolbcov ");
scanf("%d", &m);
int **M=(int**)malloc(n* sizeof(int*));
for(i=0;i<n;i++)
{
M[i]=(int*) malloc(m*sizeof(int));
}
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
M[i][j]=rzr();
}
}
printf("nachalniy massiv:");
for(i=0;i<=n-1;i++)
{
printf("\n ");
for(j=0;j<=m-1;j++)
{
printf(" %d",M[i][j]);
}
}
}
Кстати,я делал на NetBeans 7.2
Решение задачи: «Дан двумерный массив. Составить программу,которая меняет местами две любые строки»
textual
Листинг программы
// Меняет местами строки "first" и "second" в матрице "a"
void Change2Lines(int **a, int first, int second){
int *t;
t = a[first];
a[first] = a[second];
a[second] = t;
}
Объяснение кода листинга программы
В данном коде происходит следующее:
- В функции
Change2Linesпередается двумерный массивaи два индексаfirstиsecond. - Создается временная переменная
t, которая содержит указатель на начало строкиfirst. - Значение
tприсваиваетсяa[first], то естьaтеперь содержит указатель на начало первой строки. - Значение
a[second], которое изначально содержит указатель на начало второй строки, присваиваетсяt, то естьaтеперь содержит указатель на начало второй строки. - Значение
tприсваиваетсяa[second], то естьaснова содержит исходные значения указателей на строки. - Функция завершается, и измененный массив
aвозвращается в основную программу.