Programming November 13, 2001. Administrivia From santaclaus@northpole.org Thu Nov 8 12:05:31 2001...

Post on 20-Dec-2015

212 views 0 download

Tags:

transcript

Programming

November 13, 2001

Administrivia

From santaclaus@northpole.org Thu Nov 8 12:05:31 2001

Date: Thu, 8 Nov 2001 12:04:36 -0500 (EST)

From: santaclaus@northpole.org

no goodies for you

just a lump of coal

Administrivia

From santaclaus@northpole.org Thu Nov 8 12:05:31 2001Return-Path: <santaclaus@northpole.org>Received: from Princeton.EDU (postoffice.Princeton.EDU [128.112.129.120]) by upright.CS.Princeton.EDU (8.11.6/8.11.6) with ESMTP id fA8H5QQ29528 for <dpd@cs.Princeton.EDU>; Thu, 8 Nov 2001 12:05:31 -0500 (EST)Received: from yuma.Princeton.EDU (yuma.Princeton.EDU [128.112.128.89]) by Princeton.EDU (8.9.3/8.9.3) with SMTP id MAA29199 for dpd; Thu, 8 Nov 2001 12:04:36 -0500 (EST)Date: Thu, 8 Nov 2001 12:04:36 -0500 (EST)From: santaclaus@northpole.orgMessage-Id: <200111081704.MAA29199@Princeton.EDU>Status: RO

no goodies for youjust a lump of coal

Where we are

• Built a machine

• Built an operating system to control the machine

• Now, want to run programs under the operating system

What is programming

• We did machine language– Single instructions that tell the hardware what to do

– Primitive• Arithmetic, simple branching, communication with memory

• We built state machines– States using memory– Transitions modeling tasks

Problem solving

We’ve seenTruth tables

Logic gates

States and transitions in a state machine

Machine language

Now, higher level programming language

To build a computer program

• Figure out what you want to do– Understand the rules that guide the process you

are automating• Make sure that your rules are complete

• Translate the rules into the computer language– Build structures to hold your data– Build tools to manipulate them

• Make sure that the program does what the rules say

Figuring out the rules

• For traffic lights, – We stored data that told us the current color of lights

– We read input from sensors

– We had rules that told us whether to change state

– We had rules that told us how to change state

Light

ATraffic Light Behavior

IF A=1

AND B=0

Always

IF A=0

AND B=1

Otherwise

Light BOtherwise

Always

Turn Memory Into Variables

• Store data to tell current color of lights– Dim LightA, LightB as Integer

• ‘ 0 for red, 1 for yellow, 2 for green

• Read input from sensors– Dim SensorA, SensorB as Integer

• ‘ tell if cars are waiting

Turn Rules Into Statements

• Decide whether to change state– If LightA = 2 And SensorA = 0 And SensorB = 1 Then

• ‘ here we want to specify that the colors change

– If LightB = 2 And SensorA = 1 And SensorB = 0 Then• ‘ again, we want to specify that the colors change

Build shell of program

Dim LightA, LightB as Integer Dim SensorA, SensorB as Integer If LightA = 2 And SensorA = 0 And SensorB = 1 Then

ChangeGreenToYellow(LightA)ChangeYellowToRed(LightA)ChangeRedToGreen(LightB)

If LightB = 2 And SensorA = 1 And SensorB = 0 ThenChangeGreenToYellow(LightB)ChangeYellowToRed(LightB)ChangeRedToGreen(LightA)

Some Rules

• Statements have to be in blocks• How does the computer know that it is

If LightA = 2 And SensorA = 0 And SensorB = 1 ThenChangeGreenToYellow(LightA)ChangeYellowToRed(LightA)ChangeRedToGreen(LightB)

• And NotIf LightA = 2 And SensorA = 0 And SensorB = 1 Then

ChangeGreenToYellow(LightA)

ChangeYellowToRed(LightA)ChangeRedToGreen(LightB)

Some Rules

• Statements have to be in blocksIf LightA = 2 And SensorA = 0 And SensorB = 1 Then

ChangeGreenToYellow(LightA)

ChangeYellowToRed(LightA)

ChangeRedToGreen(LightB)

End If

More Rules

• We have to tell the program to loopDo While condition

action Loop

More Rules

• We have to tell the program to loop

Do While StillWantToControlTraffic RunMyTrafficControlProgram

Loop

Procedures

• Must fill in functions to change lightsPrivate Sub ChangeGreenToYellow(Light As Integer)

Light = 1End SubPrivate Sub ChangeYellowToRed(Light As Integer)

Light = 2End SubPrivate Sub ChangeRedToGreen(Light As Integer)

Light = 0End Sub

Could build Procedure of Procedures

ChangeGreenToYellow(LightA)ChangeYellowToRed(LightA)ChangeRedToGreen(LightB)

Could become the command ChangeLights(LightA,LightB)

Private Sub ChangeLights(Light1 As Integer, Light2 As Integer)

ChangeGreenToYellow(Light1)

ChangeYellowToRed(Light1)ChangeRedToGreen(Light2)

End Sub

Using the procedure

ChangeLights(LightB,LightA) then does

ChangeGreenToYellow(LightB)

ChangeYellowToRed(LightB)

ChangeRedToGreen(LightA)

The program

Private Sub ChangeGreenToYellow(Light As Integer)Light = 1

End SubPrivate Sub ChangeYellowToRed(Light As Integer)

Light = 2End SubPrivate Sub ChangeRedToGreen(Light As Integer)

Light = 0End SubPrivate Sub ChangeLights(Light1 As Integer, Light2 As Integer)

ChangeGreenToYellow(Light1)

ChangeYellowToRed(Light1)ChangeRedToGreen(Light2)

End Sub

The program (cont.)

Dim LightA, LightB as Integer

Dim SensorA, SensorB as Integer

If LightA = 2 And SensorA = 0 And SensorB = 1 Then

ChangeLights(LightA,LightB)

End If

If LightB = 2 And SensorA = 1 And SensorB = 0 Then

ChangeLights(LightB,LightA)

Make it happen forever

Dim LightA, LightB as Integer

Dim SensorA, SensorB as Integer

Dim StillWantToControlTraffic as Integer

StillWantToControlTraffic = 1

Do While StillWantToControlTraffic If LightA = 2 And SensorA = 0 And SensorB = 1 Then

ChangeLights(LightA,LightB)

End If

If LightB = 2 And SensorA = 1 And SensorB = 0 Then

ChangeLights(LightB,LightA)

End If

Loop

What could go wrong?

• Program could get confused– Check for consistency

• ReplacePrivate Sub ChangeGreenToYellow(Light As Integer)

Light = 1End Sub

• WithPrivate Sub ChangeGreenToYellow(Light As Integer)

If (Light = 0) ThenLight = 1

ElseReportInconsistency()

End IfEnd Sub

Building a bigger program

• Could write this as a subroutine– Private sub

ControlTrafficLight(light1,light2,sensor1,sensor2)

• Could reuse the subroutine to do a whole string of lights.

• But how would we keep track of hundreds of lights?

Arrays

• Build arrays– LightNS[1], LightNS[2], LightNS[3], …– LightEW[1]. LightEW[2]. LightEW[3], …– SensorNS[1], SensorNS[2], SensorNS[3], …– SensorEW[1], SensorEW[2], SensorEW[3], …

Arrays (con’t).

• Keep track of things in arrayControlTrafficLight(lightNS[i],lightEW[i],sensorNS[i],sensorEW[i])

• Control all the traffic lights in ManhattanFor i = 1 To 100

ControlTrafficLight(lightNS[i],lightEW[i],sensorNS[i],sensorEW[i]) Next i

• But, – lights may want to communicate

– Light at an intersection carries more information

Object oriented programming

• Figure out characteristics of your data– objects

• Figure out operations you will want to perform – Methods

• Modern idea in programming.

Objects

• Traffic light at intersection involves– Lights in each direction

• Call them red, yellow and green and not 0,1,2

– Sensors in each direction– Timing (rate of change in each direction)

• Timings needn’t be the same

– Neighboring Lights• May affect change as much as sensors

Methods

• Method of querying color of light

• Method of changing color of light

• Method of scheduling a color change later

• …

What happens to the program?

• Compiled or interpreted– Eventually it gets translated into machine

language

• If compiled– Can store executable and run again

• If interpreted– Interpret each time it is executed

What does the compiler do?

• Identifies variables (need space in RAM)– Uses stores and loads to get values to registers

• Parses commands– Turns each command into a string of machine

language commands

• Sets things up for execution

History of Programming Languages

• Fortran (1954) for scientific • Cobol (1959) for business

• Algol (1958) more universal Fortran

• Lisp (1958) string/concept oriented

• APL (1960) formula oriented

History of Programming Languages

• PL/1 (1964) from Algol + Fortran

• Basic (1964) for everyone to use

• Simula (1967) combines with Algol to yield Smalltalk (1969) – object oriented

• BCPL B C (1971)

• Algol Pascal (1971) Modula 1,2,3,

History of Programming Languages

• C++ (1983) C with object oriented features– Often C is still used

• Awk (1978) Perl (1987) report generators– Web programming language

• Java (1991) object oriented and portable– Web applets, devices

• Visual Basic(1991) macros and programs– Core of Microsoft systems

What makes a good language

• Does the task you want

• Keeps you from making mistakes

• Supports debugging when you need it

• Has a strong tool kit

Next class

• Look at a bigger system

• Some internals of how the compiler works

• Some notable bugs

• How do we know if we’ve gotten it right?