Удаление строки и столбца в матрице с использованием других матриц - C (СИ)
Формулировка задачи:
Задача:
сделать программу, удаляющую из матрицы строку с самым минимальным элементом и столбец с самым максимальным.
Надо сделать через новые матрицы
Я хоть задание правильно понял или нет?
// ïðîãðГ*ììГ* ГіГ¤Г*ëÿåò ГЁГ§ Г¬Г*òðèöû ñòðîêó Г± Г±Г*ìûì ìèГ*ГЁГ¬Г*ëüГ*ûì
// ГЁ ñòîëáåö Г± Г±Г*ìûì Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûì ýëåìåГ*òîì
#include <conio.h>
#include <stdio.h>
int minf(int**,int,int);
int maxf(int**,int,int);
int main()
{
int n,m,i,j,k=0,min,max;
printf("n = "); scanf("%d",&n);
printf("m = "); scanf("%d",&m);
int a[n-1][m],b[n][m-1];
// ââîä/âûâîä Г¬Г*òðèöû "x"
int** x=new int*[n];
for(i=0;i<n;i++)
{
x[i]=new int[m];
for(j=0;j<m;j++)
{
k++;
printf("%d element = ",k);
scanf("%d",&x[i][j]);
}
}
printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("\n");
// ïîèñê, âûâîä Г¬Г*òðèö Г± ГіГ¤Г*ëåГ*Г*ûìè ýëåìåГ*ГІГ*ìè
min=minf(x,n,m);
max=maxf(x,n,m);
printf("min = %d\n",min+1);
printf("max = %d\n",max+1);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(i!=min) a[i][j]=x[i][j];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(j!=max) b[i][j]=x[i][j];
for(i=0;i<n-1;i++)
{
for(j=0;j<m;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<m-1;j++)
printf("%3d",b[i][j]);
printf("\n");
}
getch();
return 0;
}
// ïîèñê ñòðîêè Г± ìèГ*ГЁГ¬Г*ëüГ*ûì ýëåìåГ*òîì
int minf(int** y,int n, int m)
{
int i,j,k,k1=0;
k=y[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(y[i][j]<k) {k=y[i][j]; k1=i;}
return(k1);
}
// ïîèñê ñòîëáöГ* Г± Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûì ýëåèåГ*òîì
int maxf(int** y,int n, int m)
{
int i,j,k,k1=0;
k=y[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(y[i][j]>k) {k=y[i][j]; k1=j;}
return(k1);
}Решение задачи: «Удаление строки и столбца в матрице с использованием других матриц»
textual
Листинг программы
// ïðîãðГ*ììГ* ГіГ¤Г*ëÿåò ГЁГ§ Г¬Г*òðèöû ñòðîêó Г± Г±Г*ìûì ìèГ*ГЁГ¬Г*ëüГ*ûì
// ГЁ ñòîëáåö Г± Г±Г*ìûì Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûì ýëåìåГ*òîì
#include <conio.h>
#include <stdio.h>
int minf(int**,int,int);
int maxf(int**,int,int);
int main()
{
int n,m,i,j,k=0,min,max;
printf("n = "); scanf("%d",&n);
printf("m = "); scanf("%d",&m);
int a[n-1][m],b[n][m-1];
// ââîä/âûâîä Г¬Г*òðèöû "x"
int** x=new int*[n];
for(i=0;i<n;i++)
{
x[i]=new int[m];
for(j=0;j<m;j++)
{
k++;
printf("%d element = ",k);
scanf("%d",&x[i][j]);
}
}
printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("\n");
// ïîèñê, âûâîä Г¬Г*òðèö Г± ГіГ¤Г*ëåГ*Г*ûìè ýëåìåГ*ГІГ*ìè
min=minf(x,n,m);
max=maxf(x,n,m);
printf("min = %d\n",min+1);
printf("max = %d\n",max+1);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(i<min) a[i][j]=x[i][j];
if(i>min) a[i-1][j]=x[i][j];
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(j<max) b[i][j]=x[i][j];
if(j>max) b[i][j-1]=x[i][j];
}
for(i=0;i<n-1;i++)
{
for(j=0;j<m;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<n;i++)
{
for(j=0;j<m-1;j++)
printf("%3d",b[i][j]);
printf("\n");
}
getch();
return 0;
}
// ïîèñê ñòðîêè Г± ìèГ*ГЁГ¬Г*ëüГ*ûì ýëåìåГ*òîì
int minf(int** y,int n, int m)
{
int i,j,k,k1=0;
k=y[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(y[i][j]<k) {k=y[i][j]; k1=i;}
return(k1);
}
// ïîèñê ñòîëáöГ* Г± Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûì ýëåèåГ*òîì
int maxf(int** y,int n, int m)
{
int i,j,k,k1=0;
k=y[0][0];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(y[i][j]>k) {k=y[i][j]; k1=j;}
return(k1);
}
Объяснение кода листинга программы
В этом коде представлена реализация удаления строки и столбца из матрицы с использованием других матриц. Список действий:
- Ввод размеров матрицы
nиmс помощью функцииscanf(). - Создание матрицы
aразмеромn-1наmи матрицыbразмеромnнаm-1, заполненных нулями. - Создание двумерного массива
xразмеромnнаm, заполненного значениями из матрицыa. - Вывод содержимого матрицы
xс помощью циклаfor. - Вычисление минимального и максимального элементов матрицы
xс помощью функцийminf()иmaxf(). - Заполнение матрицы
aзначениями из матрицыxс помощью циклаfor, где условиеifпроверяет, что номер строки или столбца меньше или равен минимальному значению. - Заполнение матрицы
bзначениями из матрицыxс помощью циклаfor, где условиеifпроверяет, что номер строки или столбца меньше или равен максимальному значению. - Вывод содержимого матрицы
aс помощью циклаfor. - Вывод содержимого матрицы
bс помощью циклаfor. - Вызов функции
getch()для приостановки выполнения программы до нажатия клавиши. - Возврат значения
0в функциюmain(), что означает успешное выполнение программы. Функцииminf()иmaxf()используются для поиска минимального и максимального элементов в матрице. Они работают по принципу перебора всех элементов матрицы и сравнения их с текущим минимальным или максимальным значением. Если найденное значение меньше или больше текущего минимального или максимального значения, оно становится новым минимальным или максимальным значением, а его индексы сохраняются в отдельных переменныхk1. Примечание: В данном коде не учтены случаи выхода за границы матрицы, что может привести к ошибкам выполнения программы.