{
 "metadata": {
  "name": "",
  "signature": "sha256:73c04e2c14bfab695e4acf07dc7752334b6372d624570a4e051fd91aeeb761f7"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h1>Chapter 10: Structures and Unions<h1>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.1, Page Number: 223<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "class inv_type:\n",
      "    def __init__(self):\n",
      "        self.item=None\n",
      "        self.cost=0\n",
      "        self.retail=0\n",
      "        self.on_hand=0\n",
      "        self.lead_time=0\n",
      "\n",
      "#Variable declaration\n",
      "size=100    \n",
      "invtry = []*size\n",
      "i=5                    #User iput for menu selection\n",
      "\n",
      "#Initialize the array\n",
      "def init_list():\n",
      "    for t in range(size):\n",
      "        invtry.append(inv_type())\n",
      "        \n",
      "#get a menu selection\n",
      "def menu():\n",
      "    global i\n",
      "    print \"(E)nter\"\n",
      "    print \"(D)isplay\"\n",
      "    print \"(U)pdate\"\n",
      "    print \"(Q)uit\"\n",
      "    print \"choose one: \"\n",
      "    i-=1\n",
      "    return i\n",
      "\n",
      "#enter items into the list\n",
      "def enter():\n",
      "    #find the first free structure\n",
      "    for i in range(size):\n",
      "        if not(invtry[i].item==None):\n",
      "            break\n",
      "    #i will be size if list is full\n",
      "    if i==size:\n",
      "        print \"List full.\"\n",
      "        return\n",
      "    input(i)\n",
      "    \n",
      "#Input the information\n",
      "def input(i):\n",
      "    #Enter information; User input\n",
      "    invtry[i].item=\"Gloves\"\n",
      "    invtry[i].cost=10\n",
      "    invtry[i].retail=25\n",
      "    invtry[i].on_hand=50\n",
      "    invtry[i].lead_time=10\n",
      "    \n",
      "#Modify an existing item\n",
      "def update():\n",
      "    name=\"Gloves\"   #User input\n",
      "    for i in range(size):\n",
      "        if not(name==invtry[i].item):\n",
      "            break\n",
      "    if i==size:\n",
      "        print \"Item not found.\"\n",
      "        return\n",
      "    print \"Enter new information.\"\n",
      "    input(i)\n",
      "    \n",
      "#Display the list\n",
      "def display():\n",
      "    for t in range(size):\n",
      "        if not(invtry[t].item==None):\n",
      "            print invtry[t].item\n",
      "            print \"Cost: $\",invtry[t].cost\n",
      "            print \"Retail: $\",invtry[t].retail\n",
      "            print \"On hand: \",invtry[t].on_hand\n",
      "            print \"Resupply time: \",invtry[t].lead_time,\" days\"\n",
      "            \n",
      "\n",
      "init_list()\n",
      "while True:\n",
      "    choice=menu()\n",
      "    if choice==4:\n",
      "        enter()\n",
      "    elif choice==3:\n",
      "        display()\n",
      "    elif choice==2:\n",
      "        update()\n",
      "    elif choice==1:\n",
      "        break"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(E)nter\n",
        "(D)isplay\n",
        "(U)pdate\n",
        "(Q)uit\n",
        "choose one: \n",
        "(E)nter\n",
        "(D)isplay\n",
        "(U)pdate\n",
        "(Q)uit\n",
        "choose one: \n",
        "Gloves\n",
        "Cost: $ 10\n",
        "Retail: $ 25\n",
        "On hand:  50\n",
        "Resupply time:  10  days\n",
        "(E)nter\n",
        "(D)isplay\n",
        "(U)pdate\n",
        "(Q)uit\n",
        "choose one: \n",
        "Enter new information.\n",
        "(E)nter\n",
        "(D)isplay\n",
        "(U)pdate\n",
        "(Q)uit\n",
        "choose one: \n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.2, Page Number: 226<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "class sample:\n",
      "    a=None\n",
      "    ch=None\n",
      "    \n",
      "def f1(parm):\n",
      "    print parm.a,\" \",parm.ch\n",
      "\n",
      "#declare arg\n",
      "arg=sample()  \n",
      "\n",
      "#initialize arg\n",
      "arg.a=1000\n",
      "arg.ch='X'\n",
      "\n",
      "#call function\n",
      "f1(arg)\n",
      "    "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1000   X\n"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.3, Page Number: 227<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "class stype:\n",
      "    a=None\n",
      "    b=None\n",
      "\n",
      "#Variable declaration\n",
      "svar1=stype()\n",
      "svar2=stype()\n",
      "\n",
      "svar1.a=svar1.b=10\n",
      "svar2.a=svar2.b=20\n",
      "\n",
      "print \"Structures before assignment.\"\n",
      "print \"svar1: \",svar1.a,' ',svar1.b\n",
      "print \"svar1: \",svar2.a,' ',svar2.b\n",
      "\n",
      "svar2=svar1    #assign structures\n",
      "\n",
      "#Result\n",
      "print \"\\nStructures before assignment.\"\n",
      "print \"svar1: \",svar1.a,' ',svar1.b\n",
      "print \"svar1: \",svar2.a,' ',svar2.b"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Structures before assignment.\n",
        "svar1:  10   10\n",
        "svar1:  20   20\n",
        "\n",
        "Structures before assignment.\n",
        "svar1:  10   10\n",
        "svar1:  10   10\n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.4, Page Number: 230<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "import datetime\n",
      "\n",
      "date=datetime.datetime.now()\n",
      "\n",
      "#Result\n",
      "print date.time()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "17:06:28.236000\n"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.5, Page Number: 231<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "import datetime\n",
      "\n",
      "date=datetime.datetime.now()\n",
      "\n",
      "#Result\n",
      "print date.ctime()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Sat Sep 14 17:07:14 2013\n"
       ]
      }
     ],
     "prompt_number": 15
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.6, Page Number: 232<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "class mystruct:\n",
      "    a=None\n",
      "    b=None\n",
      "\n",
      "def f(var):\n",
      "    var[0].a=var[0].a*var[0].a\n",
      "    var[0].b=var[0].b/var[0].b\n",
      "    return var[0]\n",
      "    \n",
      "#Variable declaration\n",
      "x=[]\n",
      "x.append(mystruct())\n",
      "y=mystruct()\n",
      "\n",
      "#Initializing\n",
      "x[0].a=10\n",
      "x[0].b=20\n",
      "\n",
      "print \"Original x.a and x.b: \",x[0].a,' ',x[0].b\n",
      "\n",
      "y=f(x)   #function call\n",
      "\n",
      "#Result\n",
      "print \"Modified x.a and x.b: \",x[0].a,' ',x[0].b\n",
      "print \"Modified y.a and y.b: \",y.a,' ',y.b\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Original x.a and x.b:  10   20\n",
        "Modified x.a and x.b:  100   1\n",
        "Modified y.a and y.b:  100   1\n"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.7, Page Number: 239<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "class swap_bytes:\n",
      "    ch=[0,0]\n",
      "\n",
      "#Exchange of bytes\n",
      "def disp_binary(u):\n",
      "    t=128\n",
      "    while not(t==0):\n",
      "        if u&t:\n",
      "            print \"1 \",\n",
      "        else:\n",
      "            print \"0 \",\n",
      "        t=t/2\n",
      "\n",
      "#Variable declaration\n",
      "sb=swap_bytes()\n",
      "\n",
      "sb.ch[0]=15\n",
      "\n",
      "print \"Original bytes: \",\n",
      "disp_binary(sb.ch[1])\n",
      "disp_binary(sb.ch[0])\n",
      "\n",
      "#Exchange bytes\n",
      "temp=sb.ch[0]\n",
      "sb.ch[0]=sb.ch[1]\n",
      "sb.ch[1]=temp\n",
      "\n",
      "#Result\n",
      "print \"\\nExchanged bytes: \",\n",
      "disp_binary(sb.ch[1])\n",
      "disp_binary(sb.ch[0])\n",
      "\n",
      "\n",
      "    "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Original bytes:  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  \n",
        "Exchanged bytes:  0  0  0  0  1  1  1  1  0  0  0  0  0  0  0  0 \n"
       ]
      }
     ],
     "prompt_number": 17
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.8, Page Number: 240<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "ch='a'\n",
      "\n",
      "while True:\n",
      "    print \"\\n\",ch,\n",
      "    print bin(ord(ch))     #Display the bit pattern for each character\n",
      "    ch=chr(ord(ch)+1)\n",
      "    if ch=='r':\n",
      "        break"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "a 0b1100001\n",
        "\n",
        "b 0b1100010\n",
        "\n",
        "c 0b1100011\n",
        "\n",
        "d 0b1100100\n",
        "\n",
        "e 0b1100101\n",
        "\n",
        "f 0b1100110\n",
        "\n",
        "g 0b1100111\n",
        "\n",
        "h 0b1101000\n",
        "\n",
        "i 0b1101001\n",
        "\n",
        "j 0b1101010\n",
        "\n",
        "k 0b1101011\n",
        "\n",
        "l 0b1101100\n",
        "\n",
        "m 0b1101101\n",
        "\n",
        "n 0b1101110\n",
        "\n",
        "o 0b1101111\n",
        "\n",
        "p 0b1110000\n",
        "\n",
        "q 0b1110001\n"
       ]
      }
     ],
     "prompt_number": 18
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<h3>Example 10.9, Page Number: 242<h3>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "#Variable declaration\n",
      "ch=['X','Y']\n",
      "c=\"\"\n",
      "def disp_bits(u):\n",
      "    t=128\n",
      "    global c\n",
      "    while not(t==0):\n",
      "        if u&t:\n",
      "            c=c+\"1\"\n",
      "        else:\n",
      "            c=c+\"0\"\n",
      "        t=t/2 \n",
      "    return c\n",
      "\n",
      "#Result\n",
      "print \"union as chars: \",ch[0],ch[1]\n",
      "print \"union as integer: \",\n",
      "c= disp_bits(ord(ch[1]))\n",
      "c= disp_bits(ord(ch[0]))\n",
      "print int(str(c),2)\n",
      "\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "union as chars:  X Y\n",
        "union as integer:  22872\n"
       ]
      }
     ],
     "prompt_number": 19
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}