L-2 MCS 275 Wed 10 Jan 2001

Below are the listings for the programs we discussed in class.
/* illustration of passing arrays to functions
   lecture 2 MCS 275 Wed 10 Jan 2001 */

#include <stdio.h>

float avg (float a[], int n); /* computes average of a[n] */

int main()
{
   float a[] = {7.0, 3.0, 4.0, 3.0, 7.0, 2.0};
   int i;
   printf("The array is\n");
   for (i = 0; i < 6; ++i) printf("  %f", a[i]);
   printf("\n");
   printf("average of all 6 elements   : %f\n", avg(a,6));
   printf("average of first 3 elements : %f\n", avg(a,3));
   printf("average of last 3 elements  : %f\n", avg(&a[3],3));
   return 0;
}

float avg (float a[], int n)
{
   int i;
   float sum = 0.0;
   for (i = 0; i < n; ++i)
      sum += a[i];
   return sum/n;
}
See the text book for the program about bubble sort.
/* finding saddle points in a matrix 
   This program illustrates two-dimensional arrays
   in lecture 2 of MCS 275, Wed 10 Jan 2001. */

#include <stdio.h>

int row_min (int m, int n, int a[m][n], int i);
 /* return minimum on row i of an m-by-n matrix a */
int row_max (int m, int n, int a[m][n], int i);
 /* return maximum on row i of an m-by-n matrix a */
int col_min (int m, int n, int a[m][n], int j);
 /* return minimum on column j of an m-by-n matrix a */
int col_max (int m, int n, int a[m][n], int j);
 /* return maximum on column j of an m-by-n matrix a */
int is_saddle (int m, int n, int a[m][n], int i, int j);
 /* a[i][j] is a saddle (where "a" is an m-by-n matrix)
        if it is the minimum on its row and maximum on its column
     or if it is the maximum on its row and minimum on its column
    is_saddle(a,i,j) == 0 if a[i][j] is not a saddle
                     == 1 if a[i][j] is a saddle */
void saddle (int m, int n);  /* reads m-by-n matrix and finds saddles */

int main(void)
{
   int m,n;
   printf("Give number of rows : ");    scanf("%d",&m);
   printf("Give number of columns : "); scanf("%d",&n);
   saddle(m,n);
   return 0;
}

void saddle (int m, int n)
{
   int a[m][n], i,j, cnt = 0;
   printf("Give %d-by-%d matrix : \n", m,n);
   for (i = 0; i < m; ++i)        /* read the matrix */
      for (j = 0; j < n; ++j)
         scanf("%d",&a[i][j]);
   printf("your matrix is :\n");
   for (i = 0; i < m; ++i)        /* print the matrix */
   {
      for (j = 0; j < n; ++j)
         printf("%4d",a[i][j]);
      printf("\n");
   }
   printf("computing the saddles...\n");
   for (i = 0; i < m; ++i)        /* count number of saddles */
      for (j = 0; j < n; ++j)
      {
         if (is_saddle(m,n,a,i,j) == 1)
         {
            printf("a[%d][%d] = %d is saddle\n",i,j,a[i][j]);
            cnt+= 1;
         }
      }
   printf("Number of saddles : %d\n", cnt);
}

int is_saddle (int m, int n, int a[m][n], int i, int j)
{
   int rowmin,rowmax,colmin,colmax;

   rowmin = row_min(m,n,a,i);
   if (rowmin == a[i][j])
   {
     colmax = col_max(m,n,a,j);
     if (colmax == a[i][j])
        return 1;
     else
        return 0;
   }
   else
      rowmax = row_max(m,n,a,i);
      if (rowmax == a[i][j])
      {
         colmin = col_min(m,n,a,j);
         if (colmin == a[i][j])
            return 1;
         else
            return 0;
      }
}

int row_min (int m, int n, int a[m][n], int i)
{
   int j, min;
   min = a[i][0];
   for (j = 1; j < n; ++j)
     if (a[i][j] < min)
        min = a[i][j];
   return min;
}

int row_max (int m, int n, int a[m][n], int i)
{
   int j, max;
   max = a[i][0];
   for (j = 1; j < n; ++j)
     if (a[i][j] > max)
        max = a[i][j];
   return max;
}

int col_min (int m, int n, int a[m][n], int j)
{
   int i, min;
   min = a[0][j];
   for (i = 1; i < m; ++i)
     if (a[i][j] < min)
        min = a[i][j];
   return min;
}

int col_max (int m, int n, int a[m][n], int j)
{
   int i, max;
   max = a[0][j];
   for (i = 1; i < m; ++i)
     if (a[i][j] > max)
        max = a[i][j];
   return max;
}