{
 "metadata": {
  "name": "",
  "signature": "sha256:3a9b6dffdf9d20cf5158c028c4012a0a2cf4ee76994f18e9b81499931df7cb5d"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Chapter 11, Pointers and Indirection"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-1, Page Number : 278"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Introduction to pointers\n",
      "\n",
      "# There is no concept of pointers in python\n",
      "i = 3\n",
      "\n",
      "j = id(i)\t# id() returns the address of the variable supplied\n",
      "j = i \t\t# assign value of i to j such that it seems like j points to i\n",
      "k = j\n",
      "j = 4\n",
      "\n",
      "print \"i = %d, *j = %d, k = %d\"%(i,j,k)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "i = 3, *j = 4, k = 3\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-2, Page Number: 280"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Demonstration of passing by reference for a function to be able to modify its parameters\n",
      "\n",
      "def modify(i) :\n",
      "\ti = 3\n",
      "\treturn i\n",
      "\n",
      "i = 1\n",
      "print \"i is now equal to %d\"%i\n",
      "\n",
      "i = modify(i)\t\t\t\n",
      "print \"i is now equal to %d\"%i"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "i is now equal to 1\n",
        "i is now equal to 3\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-3, Page Number: 281"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Pointer parameters in action: the swap routine\n",
      "\n",
      "def swap(i,j) :\n",
      "\t\"\"\" exchange i with j and return \"\"\"\n",
      "\ttemp = i   \t\t\t# temp variable can be avoided using i,j = j,i\n",
      "\ti = j\n",
      "\tj = temp\n",
      "\treturn i,j\n",
      "\n",
      "i = 1\n",
      "j = 9\n",
      "print \"i = %d and j = %d\"%(i,j)\n",
      "\n",
      "# Now exchange them\n",
      "i, j = swap(i,j)\n",
      "print \"\\nnow i = %d and j = %d\"%(i,j)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "i = 1 and j = 9\n",
        "\n",
        "now i = 9 and j = 1\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-4, Page Number: 282"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Array names are constant pointers\n",
      "\n",
      "an_array = [ 3, 7 ]\n",
      "\n",
      "def main() :\n",
      "\talso = an_array\n",
      "\talso[0] = 14\n",
      "\tprint \"an_array = { %d, %d }\"%(an_array[0],an_array[1])\n",
      "\n",
      "main()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "an_array = { 14, 7 }\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-5, Page Number: 284"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Sorting an array revisited\n",
      "# Passing an array as parameter\n",
      "\n",
      "# Macro definition\n",
      "MAX_ARRAY_SIZE = 20\t\t# The array may have up to 20 elements\n",
      "# Message flags for \"print array\"\n",
      "ORIGINAL = 0\t# Display original array\n",
      "SORTED = 1\t\t# Display sorted array\n",
      "\n",
      "numbers = [ 10, 42, 7, 0, 923, 12, -5, 6, 19, 3 ]\n",
      "array_size = 0\n",
      "\n",
      "def get_size(size)\t:\n",
      "\t\"\"\" reads the size of the array (until a valid value is entered) \"\"\"\n",
      "\tglobal array_size\n",
      "\tprint \"How many numbers?\",\n",
      "\tsize = 10\n",
      "\tprint size\n",
      "\twhile size < 1 or size > MAX_ARRAY_SIZE\t:\n",
      "\t\tprint \"How many numbers?\",\n",
      "\t\tsize = 10\n",
      "\t\tprint size\n",
      "\tarray_size = size\n",
      "\n",
      "def get_array(array, size) :\n",
      "\t\"\"\" read in the array called 'array' of size 'size' \"\"\"\n",
      "\tprint \"Please enter the integers:\"\n",
      "\tfor i in array :\n",
      "\t\tprint i,\n",
      "\tprint\n",
      "\n",
      "def print_array(array, size, message) :\n",
      "\t\"\"\" print out the array on a single line. 'message' is a flag indicating which message to display(ORIGINAL or SORTED) \"\"\"\n",
      "\tif message == ORIGINAL :\n",
      "\t\tprint \"\\nThe original array is:\"\n",
      "\telse :\n",
      "\t\tprint \"\\nThe sorted array is:\"\n",
      "\tfor i in array :\n",
      "\t\tprint i,\n",
      "\tprint\n",
      "\n",
      "def sort_array(array,size) :\n",
      "\t\"\"\" sort 'array' of size 'size' \"\"\"\n",
      "\tfor i in range(size - 1) :\n",
      "\t\tfor j in range(i+1, size) :\n",
      "\t\t\tif array[i] > array[j] :\n",
      "\t\t\t\telement_swap(array, i, j)\n",
      "\n",
      "def element_swap(array, i, j) :\n",
      "\t\"\"\" swap elements 'i' and 'j' of 'array' \"\"\"\n",
      "\tglobal numbers\n",
      "\tnumbers[i],numbers[j] = numbers[j],numbers[i]\n",
      "\n",
      "\n",
      "get_size(array_size)\t\t\t\t\t\t# Read in the array's size\n",
      "get_array(numbers, array_size)\t\t\t\t\t# Read in the array 'numbers' of size 'array_size'\n",
      "print_array(numbers, array_size, ORIGINAL) \t# Echo the array \n",
      "sort_array(numbers, array_size)\n",
      "print_array(numbers, array_size, SORTED)\t\t# Print the sorted array"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many numbers? 10\n",
        "Please enter the integers:\n",
        "10 42 7 0 923 12 -5 6 19 3\n",
        "\n",
        "The original array is:\n",
        "10 42 7 0 923 12 -5 6 19 3\n",
        "\n",
        "The sorted array is:\n",
        "-5 0 3 6 7 10 12 19 42 923\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Program 11-6, Page Number: 294"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Sorting of array revisited\n",
      "# Two dimensional char array (array of strings)\n",
      "\n",
      "# Macro definition\n",
      "MAX_ARRAY_SIZE = 20\t\t# The array may have up to 20 elements\n",
      "MAX_STRING_SIZE = 10 \t# Each string may have up to 10 characters\n",
      "# Message flags for \"print_array\"\n",
      "ORIGINAL = 0\n",
      "SORTED = 1\n",
      "\n",
      "words = [ \"cat\", \"pig\", \"dog\", \"earlobe\", \"bingo\", \"elbow\", \"likely\", \"radar\" ]\n",
      "array_size = 0\n",
      "\n",
      "def get_size(size) :\n",
      "\t\"\"\" Read the size of the array into size (until a value is entered) \"\"\"\n",
      "\tprint \"How many words? \",\n",
      "\tsize = 8\n",
      "\tprint size\n",
      "\twhile size < 1 or size > MAX_ARRAY_SIZE :\n",
      "\t\tprint \"How many words? \",\n",
      "\t\tsize = 8\n",
      "\t\tprint size\n",
      "\tglobal array_size\n",
      "\tarray_size = size\n",
      "\n",
      "def get_array(array,size) :\n",
      "\t\"\"\" Read in the string array called 'array' of size 'size' \"\"\"\n",
      "\tprint \"Please enter the words:\"\n",
      "\tfor i in array :\n",
      "\t\tprint i\n",
      "\t\n",
      "def print_array(array,size,message) :\n",
      "\t\"\"\" Print out string array 'array' of size 'size'. 'message' is a flag indicating which message to display(ORIGINAL or SORTED) \"\"\"\n",
      "\tif message == ORIGINAL :\n",
      "\t\tprint \"\\nThe original array is:\"\n",
      "\telse :\n",
      "\t\tprint \"\\nThe sorted array is:\"\n",
      "\tfor i in array :\n",
      "\t\tprint i\n",
      "\n",
      "def sort_array(array,size) :\n",
      "\t\"\"\" sort string array \"\"\"\n",
      "\tfor i in range (size-1) :\n",
      "\t\tfor j in range (i + 1, size) :\n",
      "\t\t\tif array[i] > array[j] :\n",
      "\t\t\t\tstring_swap(i,j)\n",
      "\n",
      "def string_swap(i, j) :\n",
      "\t\"\"\" Exchange strings \"\"\"\n",
      "\tglobal words\n",
      "\twords[i],words[j] = words[j],words[i]\n",
      "\n",
      "get_size(array_size)\t\t# Read in the array size\n",
      "get_array(words, array_size)\t# Read in the string array \"words\" of size \"array_size\"\n",
      "print_array(words, array_size, ORIGINAL)\t# Echo the original array\n",
      "sort_array(words, array_size)\t\n",
      "print_array(words, array_size, SORTED) # Print the sorted array"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "How many words?  8\n",
        "Please enter the words:\n",
        "cat\n",
        "pig\n",
        "dog\n",
        "earlobe\n",
        "bingo\n",
        "elbow\n",
        "likely\n",
        "radar\n",
        "\n",
        "The original array is:\n",
        "cat\n",
        "pig\n",
        "dog\n",
        "earlobe\n",
        "bingo\n",
        "elbow\n",
        "likely\n",
        "radar\n",
        "\n",
        "The sorted array is:\n",
        "bingo\n",
        "cat\n",
        "dog\n",
        "earlobe\n",
        "elbow\n",
        "likely\n",
        "pig\n",
        "radar\n"
       ]
      }
     ],
     "prompt_number": 6
    }
   ],
   "metadata": {}
  }
 ]
}