{
 "metadata": {
  "name": "ch7"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Capter 7: Pointers and References"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.1, Page no: 157"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "n=44\n",
      "print \"n = \" , n \n",
      "# prints the value of n\n",
      "print \"&n = \" , hex(id(n)) # prints the address of n\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  44\n",
        "&n =  0x8fc0eec\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.2, Page no: 157"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "'''\n",
      "Note : Python doesn't support reference/pointer variable. But can be achieved by using mutable datatypes i.e. list.\n",
      "'''\n",
      "\n",
      "\n",
      "n = [44]\n",
      "rn=n # r is a synonym for n\n",
      "print \"n = \" , n , \", rn = \" , rn \n",
      "n[0] -= 1\n",
      "print \"n = \" , n , \", rn = \" , rn \n",
      "rn[0] *= 2\n",
      "print \"n = \" , n , \", rn = \" , rn \n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  [44] , rn =  [44]\n",
        "n =  [43] , rn =  [43]\n",
        "n =  [86] , rn =  [86]\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.3, Page no: 158"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "n = [44]\n",
      "rn=n # r is a synonym for n\n",
      "print \"&n = \" , hex(id(n)) , \", rn = \" , hex(id(rn ))\n",
      "rn2 = n\n",
      "rn3 = rn\n",
      "print \"&rn2 = \" , hex(id(rn2)) , \", rn = \" , hex(id(rn ))\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "&n =  0x9c6228c , rn =  0x9c6228c\n",
        "&rn2 =  0x9c6228c , rn =  0x9c6228c\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.4, Page no: 159"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "n = [44]\n",
      "print \"n = \" , n , \", &n = \" , hex(id(n))\n",
      "pn = n\n",
      "print \"pn = \" , hex(id(pn)) , \", &pn = \" , hex(id(hex(id(pn))))\n",
      "\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  [44] , &n =  0x9c624ec\n",
        "pn =  0x9c624ec , &pn =  0x9c6aa60\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.5, Page no: 159"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "n = [44]\n",
      "print \"n = \" , n , \", &n = \" , hex(id(n))\n",
      "pn = n\n",
      "print \"\\tpn = \" , hex(id(pn)) , \",\\n &pn = \" , hex(id(hex(id(pn))))\n",
      "print \"*pn = \" , pn\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  [44] , &n =  0x9c58d6c\n",
        "\tpn =  0x9c58d6c ,\n",
        " &pn =  0x9c6ab20\n",
        "*pn =  [44]\n"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.6, Page no: 160"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "n = [44]\n",
      "print \"n = \" , n , \", &n = \" , hex(id(n))\n",
      "pn = n\n",
      "print \"\\tpn = \" , hex(id(pn)) , \",\\n &pn = \" , hex(id(hex(id(pn))))\n",
      "print \"*pn = \" , pn\n",
      "ppn = pn\n",
      "\n",
      "print \" ppn = \" , hex(id(hex(id(ppn)))) \n",
      "print \" &ppn = \" , hex(id(hex(id(hex(id(ppn))))))\n",
      "print \" *ppn = \" , hex(id(ppn)) \n",
      "print \"**ppn = \" , ppn \n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  [44] , &n =  0x9bf05ac\n",
        "\tpn =  0x9bf05ac ,\n",
        " &pn =  0x9c58160\n",
        "*pn =  [44]\n",
        " ppn =  0x9c58680\n",
        " &ppn =  0x9c58160\n",
        " *ppn =  0x9bf05ac\n",
        "**ppn =  [44]\n"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.7, Page no: 160"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "n = [44]\n",
      "print \"n = \" , n , \"\\n &n = \" , hex(id(n))\n",
      "pn = n\n",
      "print \"\\tpn = \" , hex(id(pn)) , \",\\n &pn = \" , hex(id(hex(id(pn))))\n",
      "print \"*pn = \" , pn\n",
      "nn = pn\n",
      "print \" ppn = \" , hex(id(nn))\n",
      "print \" &ppn = \" , hex(id(hex(id(nn))))\n",
      "rpn = pn\n",
      "print \" ppn = \" , hex(id(rpn))\n",
      "print \" &ppn = \" , hex(id(hex(id(rpn))))\n",
      "\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "n =  [44] \n",
        " &n =  0x9bf60ec\n",
        "\tpn =  0x9bf60ec ,\n",
        " &pn =  0x9bf0e40\n",
        "*pn =  [44]\n",
        " ppn =  0x9bf60ec\n",
        " &ppn =  0x9bf0e40\n",
        " ppn =  0x9bf60ec\n",
        " &ppn =  0x9bf0f20\n"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.8, Page no: 162"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "def max_(m,n):\n",
      "    if m>n:\n",
      "        return m\n",
      "    else:\n",
      "        return n\n",
      "\n",
      "m = 44\n",
      "n = 22\n",
      "print m , \", \" , n , \", \" , max_(m,n)\n",
      "m = max_(m,n) \n",
      "m = 55\n",
      "# changes the value of m from 44 to 55\n",
      "print m , \", \" , n , \", \" , max_(m,n) \n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "44 ,  22 ,  44\n",
        "55 ,  22 ,  55\n"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.9, Page no: 163"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "v = []\n",
      "for k in range(1,5):\n",
      "    v.append(1.0/k)\n",
      "\n",
      "for i in range(4):\n",
      "    print \"v[\" , i , \"] = \" , v[i]\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "v[ 0 ] =  1.0\n",
        "v[ 1 ] =  0.5\n",
        "v[ 2 ] =  0.333333333333\n",
        "v[ 3 ] =  0.25\n"
       ]
      }
     ],
     "prompt_number": 9
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.10, Page no: 163"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "import sys\n",
      "a = [22, 33, 44]\n",
      "\n",
      "print  \"a = \" , hex(id(a))\n",
      "print \"sizeof(int) = \" , sys.getsizeof(1) \n",
      "s = 0\n",
      "for i in a:\n",
      "    s += i\n",
      "    print \"\\t i = \" , hex(id(i)),\n",
      "    print \"\\t *i = \" , i,\n",
      "    print \"\\t sum = \" , s\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "a =  0x9bf688c\n",
        "sizeof(int) =  12\n",
        "\t i =  0x8fc0ff4 \t *i =  22 \t sum =  22\n",
        "\t i =  0x8fc0f70 \t *i =  33 \t sum =  55\n",
        "\t i =  0x8fc0eec \t *i =  44 \t sum =  99\n"
       ]
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.11, Page no: 165"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "a = [22, 33, 44, 55, 66]\n",
      "print \"a = \" , hex(id(a)) , \", *a = \" , a[0] \n",
      "for p in a:\n",
      "    print \"p = \" , hex(id(p)) , \", *p = \" , p \n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "a =  0x9c6526c , *a =  22\n",
        "p =  0x8fc0ff4 , *p =  22\n",
        "p =  0x8fc0f70 , *p =  33\n",
        "p =  0x8fc0eec , *p =  44\n",
        "p =  0x8fc0e68 , *p =  55\n",
        "p =  0x8fc0de4 , *p =  66\n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.12, Page no: 165"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "def loc(a1,a2,n1,n2):\n",
      "    p = []\n",
      "    for element in a2:\n",
      "        if element in a1:\n",
      "            p.append(element)\n",
      "    return p\n",
      "\n",
      "a1 = [11, 11, 11, 11, 11, 22, 33, 44, 55]\n",
      "a2 = [11, 11, 11, 22, 33]\n",
      "print \"Array a1 begins at location\\t\" , hex(id(a1 ))\n",
      "print \"Array a2 begins at location\\t\" , hex(id(a2)) \n",
      "p = loc(a1, a2, 9, 5)\n",
      "if (p):\n",
      "    print \"Array a2 found at location\\t\" , hex(id(p))\n",
      "    for i in range(len(p)):\n",
      "        print \"\\t\" , hex(id(p[i])) , \": \" , p[i], \"\\t\" , hex(id(a2[i])) , \": \" , a2[i] \n",
      "else:\n",
      "    print \"Not found.\"\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Array a1 begins at location\t0x9bea56c\n",
        "Array a2 begins at location\t0x9bea62c\n",
        "Array a2 found at location\t0x9bea6cc\n",
        "\t0x8fc1078 :  11 \t0x8fc1078 :  11\n",
        "\t0x8fc1078 :  11 \t0x8fc1078 :  11\n",
        "\t0x8fc1078 :  11 \t0x8fc1078 :  11\n",
        "\t0x8fc0ff4 :  22 \t0x8fc0ff4 :  22\n",
        "\t0x8fc0f70 :  33 \t0x8fc0f70 :  33\n"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.13, Page no: 166"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "def get(a):\n",
      "    print \"Enter number of items: \"\n",
      "    n = int(raw_input())\n",
      "    print \"Enter \" , n , \" items, one per line:\"\n",
      "    for i in range(n):\n",
      "        print \"\\t\" , i+1 , \": \",\n",
      "        a.append(float(raw_input()))\n",
      "\n",
      "def print_(a):\n",
      "    for i in range(len(a)):\n",
      "        print a[i] ,\n",
      "    print ''\n",
      "\n",
      "a = []\n",
      "get(a)\n",
      "print_(a)\n",
      "a = []\n",
      "get(a)\n",
      "print_(a)\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter number of items: \n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "4\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter  4  items, one per line:\n",
        "\t1 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "44.4\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \t2 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "77.7\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \t3 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "22.2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \t4 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "88.8\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " 44.4 77.7 22.2 88.8 \n",
        "Enter number of items: \n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "2\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter  2  items, one per line:\n",
        "\t1 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "3.33\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " \t2 : "
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "9.99\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " 3.33 9.99 \n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.14, Page no: 167"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "def sort(p, n):\n",
      "    for i in range(1,n):\n",
      "        for j in range(n-i):\n",
      "            if (p[j] > p[j+1]):\n",
      "                p[j],p[j+1] = p[j+1],p[j]\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 14
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example 7.15, Page no: 168"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "def sum_(k,n):\n",
      "    # returns the sum f(0) + f(1) + f(2) + . . . + f(n-1):\n",
      "    s = 0\n",
      "    for i in range(1,n+1):\n",
      "        s += k(i)\n",
      "    return s\n",
      "\n",
      "def square(k):\n",
      "    return k*k\n",
      "\n",
      "def cube(k):\n",
      "    return k*k*k\n",
      "\n",
      "\n",
      "print sum_(square,4) # 1 + 4 + 9 + 16\n",
      "print sum_(cube,4)  # 1 + 8 + 27 + 64\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "30\n",
        "100\n"
       ]
      }
     ],
     "prompt_number": 15
    }
   ],
   "metadata": {}
  }
 ]
}