Answers/Solutions to Exercises in Chapter 7, Exercise 5
E5: In C, implement an integer dynamic two-dimensional pseudo-array that is always stored in a contiguous segment of memory and using the row-major approach. For access you have to use two functions, Get(i,j) to fetch a value and Set(i,j,value)to set a value. Because you need these two access functions, we call it a pseudo-array. In C++, implement it as a class that allows the proper indexing x[i][j].
S5: A sample C program for the first part is below.
#include <stdlib.h> int* array=NULL; int row_size; // function Get ------------------------------------------- int Get(int i,int j) { if (array==NULL) { printf("array empty\n"); exit(1); } return *(array+i*row_size+j); }// end Get // function Set ------------------------------------------- void Set(int i,int j,int value) { if (array==NULL) { printf("array empty\n"); exit(1); } *(array+i*row_size+j)=value; }//end Set // function main ------------------------------------------ int main() { int i, j; row_size=2; array = (int*) malloc(sizeof(int)*3*row_size); // 3 rows, 2 columns for(i=0; i<3; i++) for(j=0; j<row_size; j++) Set(i,j,10*i+j); for(i=0; i<3; i++) for(j=0; j<row_size; j++) printf("array[%d][%d]=%d\n",i,j,Get(i,j)); return 0; }// end main
The output of the sample C program:
array[0][0]=0 array[0][1]=1 array[1][0]=10 array[1][1]=11 array[2][0]=20 array[2][1]=21
A sample C++ program:
#include <iostream.h> // we need this class just to facilitate double indexing class Row { protected: static int *fake_row; // we implement it as static to save space public: Row() { fake_row=0; } Row& Convert(int* p) { fake_row=p; return *this; } int& operator[] (int j) { return fake_row[j]; } }; int *Row::fake_row; // implementation of fake_row class Array { protected: int *array; int col; Row fake; // just to facilitate the row indexing public: Array(int rows,int columns) { array=new int[rows*columns]; col=columns; } ~Array() { if (array!=0) delete[] array; } Row& operator[] (int i) { return fake.Convert((int*) &array[i*col]); } }; // function main ------------------------------------------ int main() { Array array(3,2); int i, j; for(i=0; i<3; i++) for(j=0; j<2; j++) array[i][j]=10*i+j; for(i=0; i<3; i++) for(j=0; j<2; j++) cout << "array[" << i<< "][" << j << "]=" << array[i][j] << '\n'; return 0; }// end main
The output the sample C++ program:
array[0][0]=0 array[0][1]=1 array[1][0]=10 array[1][1]=11 array[2][0]=20 array[2][1]=21
Back to Answers/Solutions Index Back to Answers/Solutions for Chapter 7 Index