L-3 MCS 275 Fri 12 Jan 2001
Below are listings for programs we discussed in class.
/* illustration on now to work with three-dimensional arrays,
lecture 3 of MCS 275, Fri 12 Jan 2001. */
#include <stdio.h>
int sum_a (int n1, int n2, int n3, int a[n1][n2][n3]);
/* returns the sum of the elements in the n1-by-n2-by-n3 matrix */
int sum_p1 (int n1, int n2, int n3, int *a);
/* pointer version 1 of sum_a x*/
int sum_p2 (int n1, int n2, int n3, int *a);
/* pointer version 2 of sum_a x*/
void test_sums (int n1, int n2, int n3);
/* defines a n1-by-n2-by-n3 matrix and calls the summation routines */
int main(void)
{
int n1,n2,n3;
printf("Give dimension n1 : "); scanf("%d",&n1);
printf("Give dimension n2 : "); scanf("%d",&n2);
printf("Give dimension n3 : "); scanf("%d",&n3);
test_sums(n1,n2,n3);
return 0;
}
void test_sums (int n1, int n2, int n3)
{
int a[n1][n2][n3], i,j,k;
for (i = 0; i < n1; ++i) /* define the matrix */
for (j = 0; j < n2; ++j)
for (k = 0; k < n3; ++k)
a[i][j][k] = i+j+k;
printf("the %d-by-%d-by-%d matrix is :\n", n1, n2, n3);
for (i = 0; i < n1; ++i) /* print the matrix */
for (j = 0; j < n2; ++j)
{
for (k = 0; k < n3; ++k)
printf(" a[%d][%d][%d]=%2d",i,j,k,a[i][j][k]);
printf("\n");
}
printf("Sum with array version : %d\n", sum_a(n1,n2,n3,a));
printf("Sum with pointer version 1 : %d\n", sum_p1(n1,n2,n3,&a[0][0][0]));
printf("Sum with pointer version 2 : %d\n", sum_p2(n1,n2,n3,&a[0][0][0]));
}
int sum_a (int n1, int n2, int n3, int a[n1][n2][n3])
{
int i,j,k,sum = 0;
for (i = 0; i < n1; ++i)
for (j = 0; j < n2; ++j)
for (k = 0; k < n3; ++k)
sum += a[i][j][k];
return sum;
}
int sum_p1 (int n1, int n2, int n3, int *a)
{
int *p,sum = 0;
for (p = a; p < a+(n1*n2*n3); ++p)
sum += *p;
return sum;
}
int sum_p2 (int n1, int n2, int n3, int *a)
{
int i,j,k,sum = 0;
for (i = 0; i < n1; ++i)
for (j = 0; j < n2; ++j)
for (k = 0; k < n3; ++k)
sum += *(a + i*(n2*n3) + j*n3 + k);
return sum;
}
/* safe selection from array with assert,
program used in L-3 MCS 275, Fri 12 Jan 2001. */
#include <stdio.h>
#include <assert.h>
int select (int a[], int n, int i);
/* returns a[i] after asserting that 0 <= i < n */
void test_select (int n);
/* testing the select on array of size n */
int main(void)
{
int n;
printf("Give size of array : "); scanf("%d",&n);
test_select(n);
return 0;
}
int select (int a[], int n, int i)
{
assert(i >= 0 && i < n); /* prevents illegal access to array */
return a[i];
}
void test_select (int n)
{
int a[n];
int i;
for (i = 0; i < n; ++i)
a[i] = i;
printf("Give index : ");
scanf("%d", &i);
printf(" a[%d] = %d\n", i, select(a,n,i));
}