Code:
/*
Izbacuje glavnu dijagonalu matrice.
*/
#include <stdio.h>
#include <stdlib.h> // zbog exit()
#define MAX_SIZE 10
// Prikazuje matricu M[][] koja ima r redova i k kolona
void prikazi_matricu( char *tekst, int M[][MAX_SIZE], int r, int k )
{
int i, j;
printf("\n%s\n\n",tekst);
for(i=0;i<r;i++) { // Stampamo matricu M[][]
for(j=0;j<k;j++)
printf("%4d",M[i][j]);
printf("\n\n"); // novi red matrice
}
printf("\n\n");
}
void unos_elemenata_matrice( int M[][MAX_SIZE], int r, int k )
{
int i, j;
for(i=0;i<r;i++)
for(j=0;j<k;j++){
printf("\n Unesite M[%d][%d] = ",i,j);
scanf("%d",&M[i][j]);
}
printf("\n");
}
// Formira matricu M[][] koja ima r redova i k kolona
void formiraj_matricu( int M[][MAX_SIZE], int r, int k )
{
int i, j, broj = 1;
for(i=0;i<r;i++)
for(j=0;j<k;j++)
M[i][j] = broj++;
}
// Izbacuje glavnu dijagonalu matrice M[r][k] koja ima r redova i k kolona.
// Nova matrica bez glavne dijagonale imace isti broj redova,
// a broj kolona ce za 1 biti manji.
void izbaci_glavnu_dijagonalu_matrice( int M[][MAX_SIZE], int *r, int *k )
{
int i, j, r1, k1;
// r1 i k1 su broj redova i kolona matrice M[][] sa izbacenom glavnom dijagonalom
for(i=0;i<*r;i++){
r1=i; // pocetna vrednost za brojac redova nove matrice
k1=0; // pocetna vrednost za brojac kolona nove matrice
for(j=0;j<*k;j++)
if( i != j ) // ako to nije element glavne dijagonale matrice M[][]
M[r1][k1++] = M[i][j]; // i povecavamo k1, broj kolona nove matrice
}
// (*r)--; // smanjujemo broj redova
(*k)--; // smanjujemo broj kolona
}
int main(void)
{
int M[MAX_SIZE][MAX_SIZE];
int i, r, k; // r je broj redova a k je broj kolona matrice M[][]
// Zadatak ima smisla za r = k tj. za kvadratnu matricu, ali radi vezbe,
// dopustamo da broj redova i kolona bude razlicit:
printf("\n Unesi broj redova kvadratne matrice M[r][k] (manji od %d) : r = ",MAX_SIZE);
scanf("%d", &r);
printf("\n");
if ( r > MAX_SIZE ) {
printf("\n Broj redova matrice ne sme biti veci od %d \n",MAX_SIZE);
exit(1);
}
printf("\n Unesi broj kolona matrice M[%d][k] (manji od %d) : k = ",r,MAX_SIZE);
scanf("%d", &k);
printf("\n");
if ( k > MAX_SIZE ) {
printf("\n Broj redova matrice ne sme biti veci od %d \n",MAX_SIZE);
exit(2);
}
// unos_elemenata_matrice(M,r,k);
formiraj_matricu(M,r,k); // matricu formiramo u funkciji da ne gubimo vreme za unos elemenata
prikazi_matricu(" Matrica M[][] je: ",M,r,k);
izbaci_glavnu_dijagonalu_matrice(M,&r,&k);
prikazi_matricu(" Matrica M[][] bez glavne dijagonale je: ",M,r,k);
return 0;
}