Sample IC Programs

We encourage students to write their own programs, but we provide here a few to get people started:

Quicksort.ic

class Quicksort {
    int[] a;
    
    int partition(int low, int high) {
	int pivot = a[low];
	int i = low; 
	int j = high;
	int tmp;

	while (true) { 
	    while (a[i] < pivot) i = i+1;
	    while (a[j] > pivot) j = j-1;
	    
	    if (i >= j) break;
	    
	    tmp = a[i];
	    a[i] = a[j]; 
	    a[j] = tmp;
	    i = i+1;
	    j = j-1;
	} 
	
	return j;
    }

    void quicksort(int low, int high) {
	if (low < high) {
	    int mid = partition(low, high);
	    quicksort(low, mid);
	    quicksort(mid+1, high);
	}
    }

    void initArray() {
	int i = 0;
	while(i < a.length) {
	    a[i] =  Library.random(a.length*2);
	    i = i+1;
	}
    }

    void printArray() {
	int i = 0;

	Library.print("Array elements: ");
	while(i<a.length) {
	    Library.printi(a[i]);
	    Library.print (" ");
	    i = i+1;
	}
	Library.print("\n");
    }

    void main(string[] args) {
	int n;

	if (args.length != 1) {
	    Library.println("Unspecified array length");
	    Library.exit(1);
	}

	n = Library.stoi(args[0],0);
	if (n<=0) {
	    Library.println("Invalid array length");
	    Library.exit(1);
	}
	a = new int[n];

	initArray();
	printArray();
	quicksort(0, n-1);
	printArray();
    }
}

Sieve.ic

class Sieve {

  int[] num;

  void initArray() {
    int i = 0;
    while (i < num.length) {
      num[i] = i;
      i=i+1;
    }
  }

  void sieveAll() {
    int i = 2;
    while (i < num.length) {
      sieve(i);
      i=i+1; 
    }
  }

  void sieve(int n) {
    int i = 2*n;
    while (i < num.length) {
      num[i] = 0;
      i=i+n;
    }
  }

  void printPrimes() {
    int i = 2;
    Library.print("Primes less than ");
    Library.printi(num.length);
    Library.print(": ");
    while (i < num.length) {
      if (num[i] != 0) {
        Library.printi(num[i]);
        Library.print(" ");
      }
      i=i+1;
    }
  }


  void main(string[] args) {
    int n;

    if (args.length != 1) {
      Library.println("Unspecified number.");
      return;
    }

    Library.println("");
    n = Library.stoi(args[0], 0);
    if (n <= 0) {
      Library.println("Invalid array length");
      return;
    }
    num = new int[n];

    initArray();
    sieveAll();
    printPrimes();
    Library.println("");

  }

}

MatrixMult.ic

class MatrixMult {
    int[][] a, b, c;
    
    void multiply(){
    	int i, j, k;
	i = 0;
	while(i < a.length){
	    j = 0;
	    while(j < c[i].length){
	        c[i][j] = 0;
	        k = 0;
		while(k < a[i].length){
	            c[i][j] = c[i][j] + a[i][k] * b[k][j];
		    k = k + 1;
	        }
		j = j + 1;
	    }
	    i = i + 1;
	}
    }

    void initMatrix(int[][] m) {
	int i, j;
	i = 0;
	while(i < m.length){
	    j = 0;
	    while(j < m[i].length){
	    	m[i][j] = Library.random(m.length*2);
	        j = j + 1;
	    }
	    i = i + 1;
	}
    }

    void printMatrix(int[][] m) {
	int i, j;
	i = 0;
	while(i < m.length) {
	    j = 0;
	    while(j< m[i].length){
	        Library.printi(m[i][j]);
	        Library.print(" ");
	        j = j + 1;
	    }
	    Library.print("\n");
	    i = i + 1;
	}
	Library.print("\n");
    }

    void main(string[] args) {
	int m, n, p;
	int i;

	if (args.length != 3) {
	    Library.println("Invalid number of parameters.");
	    Library.exit(1);
	}

	m = Library.stoi(args[0], 0);
	n = Library.stoi(args[1], 0);
	p = Library.stoi(args[2], 0);
	if(m < 1){
	    Library.println("Invalid value for parameter `m'");
	    Library.exit(1);
	}
	if(n < 1){
	    Library.println("Invalid value for parameter `n'");
	    Library.exit(1);
	}
	if(p < 1){
	    Library.println("Invalid value for parameter `p'");
	    Library.exit(1);
	}

	a = new int[][m];
	i = 0;
	while(i < m){
	    a[i] = new int[n];
	    i = i + 1;
	}
	
	b = new int[][n];
	i = 0;
	while(i < n){
	    b[i] = new int[p];
	    i = i + 1;
	}
	
	c = new int[][m];
	i = 0;
	while(i < m){
	    c[i] = new int[p];
	    i = i + 1;
	}

	initMatrix(a);
	Library.println("Matrix A:");
	printMatrix(a);
	initMatrix(b);
	Library.println("Matrix B:");
	printMatrix(b);
	multiply();
	Library.println("Matrix C = A x B:");
	printMatrix(c);
    }
}