Exercice programmation C recherche de points-cols

#include <stdio.h>
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; I<N; I++)
    for (J=0; J<M; 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<N; I++)
    {
     for (J=0; J<M; J++)
          printf("%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<N; I++)
     {
      /* Recherche du maximum sur la ligne I */
      AIDE=A[I][0];
      for (J=1; J<M; J++)
           if (A[I][J]>AIDE) AIDE=A[I][J];
      /* Marquage de tous les maxima sur la ligne */
      for (J=0; J<M; J++)
           if (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<M; J++)
     {
      /* Recherche du minimum sur la colonne J */
      AIDE=A[0][J];
      for (I=1; I<N; I++)
           if (A[I][J]<AIDE) AIDE=A[I][J];
      /* Marquage de tous les minima sur la colonne J */
      for (I=0; I<N; I++)
           if (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; I<N; I++)
      for (J=0; J<M; J++)
           if (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;
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *