Имейте в виду, что диагональ будет иметь тот же X и Y индекс. Быстрая программа для обнуления диагонали C следующим образом:
#include <stdio.h>
static void printMat(char mat[4][4], char *comment)
{
printf("%s:\n", comment);
for(int jj=0; jj<4; jj++) {
for(int ii=0; ii<4; ii++) {
printf("%2d ",mat[jj][ii]);
}
printf("\n");
}
}
main()
{
static char matrix[4][4]= {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
printMat(matrix,"Before");
for(int ii=0; ii<4; ii++) {
matrix[ii][ii]=0;
}
printMat(matrix,"After");
}
Это приводит к:
Before:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
After:
0 2 3 4
5 0 7 8
9 10 0 12
13 14 15 0
Чтобы удалить, а что просто очистить диагонали сложнее.
Это должно сделать трюк: (имейте в виду, что тетсру нулевых байтов может адресовать элементы, которые не существуют.)
#include <stdio.h>
#include <strings.h>
static void printMat(char *mat, int xDim, int yDim,char *comment)
{
printf("%s:\n", comment);
for(int jj=0; jj<yDim; jj++) {
for(int ii=0; ii<xDim; ii++) {
printf("%2d ",(mat[(jj)*xDim+ii]));
}
printf("\n");
}
}
main()
{
static char matrix[4][4]= {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
static char new[4][3];
printMat((char*)matrix,4,4,"Before");
for(int ii=0; ii<4; ii++) {
memcpy(&new[ii][0], &matrix[ii][0],ii);
memcpy(&new[ii][ii],&matrix[ii][ii+1], 4-ii);
}
printMat((char*)new,3,4,"After");
}
Результаты в:
Before:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
After:
2 3 4
5 7 8
9 10 12
13 14 15
Конечно, если вы хотите что-то на другом языке, это помогает спросить.
Какой язык вы используете? – lurker
На каком языке? Что вы подразумеваете под удалением? Установлено в ноль? – us2012
@ us2012 Я имею в виду удаление их из матрицы – Titi90