Exercice programmation C recherche de points-cols

Exercice langage C : Matrices 

Rechercher dans une matrice donnée A les éléments qui sont à la fois un maximum sur leur ligne et un minimum sur leur colonne. Ces éléments sont appelés des points-cols. Afficher les positions et les valeurs de tous les points-cols trouvés.

Exemples: Les éléments soulignés sont des points-cols:

/ \ / \ / \ / \| 1 8 3 4 0 | | 4 5 8 9 | | 3 5 6 7 7 | | 1 2 3 || | | 3 8 9 3 | | 4 2 2 8 9 | | 4 5 6 || 6 7 2 7 0 | | 3 4 9 3 | | 6 3 2 9 7 | | 7 8 9 | \ / \ / \ / \ /

Méthode: Etablir deux matrices d'aide MAX et MIN de même dimensions que A, telles que:

/ 1 si A[i,j] est un maximum

MAX[i,j] =| sur la ligne i
\ 0 sinon
/ 1 si A[i,j] est un minimum
MIN[i,j] =| sur la colonne j

\ 0 sinon

Corrigé exercice programmation C recherche de points-cols

#include
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée */
int MAX[50][50];/* matrice indiquant les maxima des lignes */
int MIN[50][50];/* matrice indiquant les minima des colonnes */
int N, M; /* dimensions des matrices */
int I, J; /* indices courants */
int AIDE; /* pour la détection des extréma */
int C; /* compteur des points-cols */
/* Saisie des données */
printf("Nombre de lignes (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
for (I=0; Ifor (J=0; J{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I{
for (J=0; Jprintf("%7d", A[I][J]);
printf("\n");
}
/* Construction de la matrice d'aide MAX */
/* qui indique les positions de tous les */
/* maxima sur une ligne. */
for (I=0; I{
/* Recherche du maximum sur la ligne I */
AIDE=A[I][0];
for (J=1; Jif (A[I][J]>AIDE) AIDE=A[I][J];
/* Marquage de tous les maxima sur la ligne */
for (J=0; Jif (A[I][J]==AIDE) /* ou bien : */
MAX[I][J]=1; /* MAX[I][J] = (A[I][J]==AIDE) */
else
MAX[I][J]=0;
}
/* Construction de la matrice d'aide MIN */
/* qui indique les positions de tous les */
/* minima sur une colonne. */
for (J=0; J{
/* Recherche du minimum sur la colonne J */
AIDE=A[0][J];
for (I=1; Iif (A[I][J]/* Marquage de tous les minima sur la colonne J */
for (I=0; Iif (A[I][J]==AIDE) /* ou bien : */
MIN[I][J]=1; /* MIN[I][J] = (A[I][J]==AIDE) */
else
MIN[I][J]=0;
}

/* Edition du résultat */
/* Les composantes qui sont marquées comme extréma */
/* dans MAX et dans MIN sont des points-cols. */
printf("Points - cols :\n");
for (C=0, I=0; Ifor (J=0; Jif (MAX[I][J]&&MIN[I][J])
{
C++;
printf("L'élément %d\test un maximum "
"sur la ligne %d\n"
" \t et un minimum "
"sur la colonne %d\n", A[I][J], I, J);
}
if (C==0)
printf("Le tableau ne contient pas de points-cols.\n");
return 0;
}

Article publié le 05 Février 2011 Mise à jour le Mardi, 08 Novembre 2022 10:16 par Salim KHALIL