home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1995 August / NEBULA.bin / SourceCode / OOP_Course / Labs / Stack / Extensions / SquareMatrix / SquareMatrix.m < prev    next >
Encoding:
Text File  |  1993-01-18  |  1.9 KB  |  93 lines

  1. /*Objective_C Implementation of the SquareMatrix Class: SquareMatrix.m*/
  2.  
  3. #import <stdio.h>
  4. #import "SquareMatrix.h"
  5. #import <objc/List.h>
  6. #import <objc/Storage.h>
  7.  
  8. @implementation SquareMatrix
  9.  
  10. - init
  11. {
  12.     return [self initRows:1];
  13. }
  14.     
  15. - initRows:(int)rows
  16. {
  17.     int i;
  18.     if(columnList) {            //if previously initialized, free up
  19.         [columnList freeObjects];
  20.         [columnList free];
  21.         }
  22.     numberOfRows = numberOfColumns = rows;
  23.     columnList = [[List alloc] initCount:numberOfColumns];
  24.     for(i=0;i<numberOfColumns;i++) 
  25.     [columnList addObject:[[Storage  alloc] initCount :numberOfRows
  26.         elementSize:sizeof(float)
  27.          description:"f"]];
  28.     return self;
  29. }
  30.                    
  31. //Return element at (row,column)
  32. -(float)elementAtRow:(int)row column:(int)column
  33. {
  34.     if(! [self checkRow:row column:column]) return 0.0;
  35.  
  36.     return *(float *)[[columnList  objectAt:column] elementAt:row];
  37. }
  38.  
  39. //Set element at (row,column)
  40. -setElementAtRow:(int)row column:(int)column to:(float)aNumber
  41. {
  42.     if( [self checkRow:row column:column]) 
  43.         [[columnList  objectAt:column] replaceElementAt:row with:&aNumber];
  44.     return self;
  45. }
  46.   
  47. //Transpose the matrix
  48. -transpose
  49. {
  50.     float upper,lower;
  51.     int i, j, fromIndex=0;
  52.  
  53.     for(i=0;i<numberOfRows;i++) {
  54.       for(j=fromIndex;j<numberOfColumns;j++) {
  55.         lower = [self elementAtRow:i column:j];
  56.         upper = [self elementAtRow:j column:i];
  57.         [self setElementAtRow:j column:i to:lower];
  58.         [self setElementAtRow:i column:j to:upper];
  59.       }
  60.       fromIndex++;
  61.     }
  62.     return self;
  63. }
  64.  
  65. - (BOOL) checkRow:(int)row column:(int)column
  66. {
  67.     if ((row >= numberOfRows)||(column >= numberOfColumns))
  68.         return NO;
  69.     else
  70.         return YES;
  71. }
  72.  
  73. //Free the matrix
  74. - free
  75. {
  76.     [columnList freeObjects];
  77.     [columnList free];
  78.     return [super free];
  79. }
  80.  
  81. //Print the elements in the matrix
  82. -printMatrix
  83. {
  84.     int i, j;    
  85.     printf("Contents of the Matrix:\n");
  86.     for(j=0;j<numberOfColumns;j++)
  87.       for(i=0;i<numberOfRows;i++)
  88.         printf("Element at Location [%i %i] is %f\n", i, j, [self elementAtRow:i column:j]);
  89.     return self;
  90. }
  91.  
  92. @end
  93.