CSC111 Final Exam 2010

From dftwiki3
Revision as of 10:49, 30 April 2010 by Thiebaut (talk | contribs)
Jump to: navigation, search


Final Exam

This exam is given under the rules of the honor code at Smith College. It is open-books, open-notes, and open-Web. The work on this exam is to be done individually, and assistance from anybody other than the instructor is forbidden. TAs are not available to answer questions, and will be asked not to answer any questions relating to this exam. No pair-programming is allowed.

Any program section greater than a function used and taken from a Web site other than our CSC111 Web page should be cited in the header of your program, or the header of the function.

Questions can only be asked to your instructor, and only via email. Email questions will be returned with an answer to the whole class.

The exam is due on Friday, May 7th, at 4:00 p.m. You will need to submit the exam using the submit command, similarly to the way you have submitted homework assignment this past semester.

Problem #1: Temperatures in the UK

HistoricStationDataUKWeather.png

You have to write a program that reads weather data from the Web, process the data, and output the answers to several questions.

Call your program final1.py

The Web site http://www.metoffice.gov.uk/climate/uk/stationdata/ keeps records of temperatures for 37 towns/cities of the UK for the past few years, going back in some cases to 1853.

Your assignment will deal with reading the data from this site, for all the cities, gathering some statistics, and outputting information in a nice, human readable format.

Accessing the Data

  • Note: in case the metoffice.gov.uk were to go down during the exam period, the data has been replicated at http://cs.smith.edu/~111c/climate/uk/stationdata/, and you can use this Smith-based Url instead. The data files are the same at both places.
  • The list of all the town names and their associated file names is given to you below.
Town/City File Name Year
Aberporth aberporthdata.txt 1941
Armagh armaghdata.txt 1853
Ballypatrick Forest ballypatrickdata.txt 1961
Bradford bradforddata.txt 1908
Braemar braemardata.txt 1959
Camborne cambornedata.txt 1978
Cambridge NIAB cambridgedata.txt 1959
Cardiff Bute Park cardiffdata.txt 1977
Chivenor chivenordata.txt 1951
Cwmystwyth cwmystwythdata.txt 1959
Dunstaffnage dunstaffnagedata.txt 1972
Durham durhamdata.txt 1880
Eastbourne eastbournedata.txt 1959
Eskdalemuir eskdalemuirdata.txt 1914
Heathrow heathrowdata.txt 1948
Hurn hurndata.txt 1957
Lerwick lerwickdata.txt 1930
Leuchars leucharsdata.txt 1957
Lowestoft lowestoftdata.txt 1914
Manston manstondata.txt 1934
Nairn nairndata.txt 1931
Newton Rigg newtonriggdata.txt 1959
Oxford oxforddata.txt 1853
Paisley paisleydata.txt 1959
Ringway ringwaydata.txt 1946-2004
Ross-on-Wye rossonwyedata.txt 1930
Shawbury shawburydata.txt 1946
Sheffield sheffielddata.txt 1883
Southampton southamptondata.txt 1855-2000
Stornoway Airport stornowaydata.txt 1873
Sutton Bonington suttonboningtondata.txt 1959
Tiree tireedata.txt 1928
Valley valleydata.txt 1930
Waddington waddingtondata.txt 1947
Whitby whitbydata.txt 1961
Wick Airport wickairportdata.txt 1914
Yeovilton yeoviltondata.txt 1964

The contents of this table is available to you as a Python list for your convenience:

[ ('Aberporth', 'aberporthdata.txt'), ('Armagh', 'armaghdata.txt'), ('Ballypatrick Forest', 'ballypatrickdata.txt'), 
 ('Bradford', 'bradforddata.txt'), ('Braemar', 'braemardata.txt'), ('Camborne', 'cambornedata.txt'),
 ('Cambridge NIAB', 'cambridgedata.txt'), ('Cardiff Bute Park', 'cardiffdata.txt'), ('Chivenor', 'chivenordata.txt'), 
 ('Cwmystwyth', 'cwmystwythdata.txt'), ('Dunstaffnage', 'dunstaffnagedata.txt'), ('Durham', 'durhamdata.txt'), 
 ('Eastbourne', 'eastbournedata.txt'), ('Eskdalemuir', 'eskdalemuirdata.txt'), ('Heathrow', 'heathrowdata.txt'), 
 ('Hurn', 'hurndata.txt'), ('Lerwick', 'lerwickdata.txt'), ('Leuchars', 'leucharsdata.txt'), ('Lowestoft', 
  'lowestoftdata.txt'), ('Manston', 'manstondata.txt'), ('Nairn', 'nairndata.txt'), ('Newton Rigg', 
  'newtonriggdata.txt'), ('Oxford', 'oxforddata.txt'), ('Paisley',  'paisleydata.txt'),
 ('Ringway', 'ringwaydata.txt'), ('Ross-on-Wye', 'rossonwyedata.txt'), ('Shawbury', 'shawburydata.txt'), 
 ('Sheffield',  'sheffielddata.txt'), ('Southampton', 'southamptondata.txt'), ('Stornoway Airport', 
  'stornowaydata.txt'), ('Sutton Bonington', 'suttonboningtondata.txt'), ('Tiree', 'tireedata.txt'), ('Valley', 
  'valleydata.txt'), ('Waddington', 'waddingtondata.txt'), ('Whitby', 'whitbydata.txt'), ('Wick Airport', 
  'wickairportdata.txt'), ('Yeovilton', 'yeoviltondata.txt') ]

Format of the data

  • Your program should accept estimated data as well as real data. In other words, data followed by an asterisk should not be dropped or skipped.

Processing

  • You are free to choose the way you are going to process the data, but you are required to define and use one or several classes.

Questions needing answers

  • Your program should output formatted answers to the questions listed below. By formatted, I mean something written in English and not in Python ("The coldest years were 1914 and 1931" is formatted. "[1914, 1931]" is not formatted.)
  • Your program should print "Answer to Question 1", "Answer to Question 2", etc. for each question.
  • All temperatures should be reported in degrees Fahrenheit (they are all in Celcius on the Web site).
Question 1
For which town (or towns) do we have the oldest recorded information? Although we can get the answer by searching the table above, make your program figure out the answer. If two or more towns have records for the same month and year, and these are the oldest on record, then output the name of each town.
The output should be of the form: "the oldest observation was recorded in townname in month of year"
Question 2
For which town or towns do we have the lowest temperature recorded? Also output the month and year of the measurement.
The output should be of the form: the coldest temperature was recorded in townname in month of year" where month is either Jan, Feb, Mar, Apr... Dec. Numbers are not acceptable. If the month is not specified, then simply output the year.
Question 3
For which town or towns do we have the highest temperature recorded? Also output the month and year of the observation.
Same output format as for Question 2
Question 4
For which town do we have the biggest yearly difference in temperature? In other words, where did we record during the same year the largest difference between coldest and hottest temperature?
Same output format type as for Question 2.
Question 5
If we are interested in retiring in the U.K., and are looking for the place with the most sun exposure per year, which city should be picked? Make sure you document your program well and explain how you compute the answer.
Question 6
Was the average temperature in the U.K. colder during the first half of the 20th century (1900 to 1999), or hotter?
Make sure your program prints out all the data required to support your answer, all in a readable format.

Documentation

  • Document your program!
  • The solution programs for past homework assignments are good examples of fine documentation.
  • A significant portion of the final grade will be for the clarity of the documentation.

Submission

  submit final final1.py
  • Programs submitted after 4:00 p.m. on the due date will not be graded.

Advice

A program that runs is worth more than one that doesn't.
Even if the one that doesn't attempts to run computation aimed at answering all the questions.
Start small!
If it makes life easier for you to make your program read the temperature data from a file or from a string rather than from the Web, then use this approach first while you are developing the code. You can switch at the end to making your program read information from the Web.
Concentrate on the easy questions first.
There is nothing sacred about the order in which the questions above are ordered. The order in which the program outputs the results is important, though.
Submit regularly.
Whenever you have a version of your program that works, just submit it. Every submission overwrites the previous version submitted.
Be resourceful.
There won't be any extension due to failure of the computer, either beowulf or yours. Python can run on all the various platforms available to you. As long as the computer you are using can access the Web, you can write a program for the final. In case beowulf is down on the last day of exam period, email your program to your instructor (thiebaut@cs.smith.edu) before the 4:00 p.m. deadline.

Problem #2

Write a program called final2.py that contains a recursive function called minmax() which returns the smallest and largest element of a list.

Example main() program:


def main():
     A = [ 1, 10, 20, 3, 2, -1, -10, 5, 5, 5, 5 ]
     low, high = minmax( A )
     print "smallest item =", low, " largest item = ", high
     # will print
     # smallest item = -10 largest item = 20

     A = [ 1 ]
     low, high = minmax( A )
     print "smallest item =", low, " largest item = ", high
     # will print
     # smallest item = 1 largest item = 1
 
     A = [ ]
     low, high = minmax( A )
     print "smallest item =", low, " largest item = ", high
     # will print
     # smallest item = None largest item = None

Requirements

The function minmax() must be recursive.

Submission

Submit your program as follows:

    submit final final2.py


Good luck!