Что сразу бросается в глаза: функции не возвращают значений, void не написан
Во-первых неправильно создается матрица:
a=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));
Что естественно, означает что и обращение к элементам матрицы тоже неверно в функции matrica(...)
Вместо
if(a[i]==0)...
надо видимо писать
if(a[i][j]==0)...
Потом несуразица какая-то с использованием переменной k. Почему она равна m*n/2 ? Потом еще много ошибок, о которых уже впадлу писать, особенно вроде последнего printf когда в %d подставляется указатель
в общем могу предложить следующий вариант:
struct element { int val,x,y; };
int matrixf(int** matrix,element* elems,int m,int n)
{
int k=0;
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
if(matrix[i][j]!=0)
{
element el={matrix[i][j],i,j};
elems[k++]=el;
}
return k;
}
int main()
{
int** v,m,n;
FILE* in;
in=fopen("1.txt","r");
if(in==NULL)
{
printf("\n net faila \n");
exit(1);
}
fscanf(in,"%d%d",&m,&n);
v=(int**)malloc(m*sizeof(int*));
int i=0,j=0;
for(;i<m;++i)
v[i]=(int*)malloc(n*sizeof(int));
for(i=0;i<m;++i)
for(;i<n;++j)
fscanf(in,"%d",&v[i][j]);
int k=m*n;
element* els=(element*)malloc(k*sizeof(element));
k=matrixf(v,els,m,n);
printf("\n OTVET :) \n");
for(i=0;i<k;++i)
printf("Element {%d,%d} with value=%d\n",els[i].x,els[i].y,els[i].val);
printf("\n END \n");
return 0;
}