280 likes | 452 Views
Problem Solving via Computers. CS 1428 Week 1 Texas State University Tom O’Hara Spring 2011. Chapter 1 Synopsis. Important Sections 2, 3 Useful Sections 1, 4, 5, 6 Ignore Section 7 Table 1-1 (programming languages) Serendipity Booksellers project. Overview. Syllabus and text
E N D
Problem Solving via Computers CS 1428 Week 1 Texas State University Tom O’Hara Spring 2011
Chapter 1 Synopsis • Important • Sections 2, 3 • Useful • Sections 1, 4, 5, 6 • Ignore • Section 7 • Table 1-1 (programming languages) • Serendipity Booksellers project
Overview • Syllabus and text • Problem solving via algorithms • Models for computers • Hardware and software • Features of C++ programming language • Generating machine code from C++
Computer Science • Computers are general-purpose machines for performing calculations • Originally just a glorified calculator • Now quite versatile and pervasive • Computer science studies of how to solve problems on computers • Focused on abstract model of computers • Avoids vendor specifics (e.g., IBM vs. Apple) • More than just computer programming
Problem Solving via Computer • Algorithms: precise specification of how to solve a particular problem • Flowcharts: schematic representation of steps in solving a problem (old school) • Pseudo-code: instructions that combine aspects of programming languages and natural language • Program: instructions in artificial language designed for computer problem solving
Sample algorithm For each hour of day Let temp be current temperature If temp less than 32 then print "Below freezing" Otherwise print "At or above freezing" Wait one hour Note: displays hourly status about freezing temperature
Sample pseudo-code hour = 0 while (hour < 24) do temp = read_value() if (temp < 32) then print("Below freezing") else print("Above freezing") hour = hour + 1 end while
Sample C++ Program #include <iostream> // standard I/O operations using namespace std; // import standard names int main () { double temperature; // temperature in Farhenheit for (int hour = 0; hour < 24; hour++) { cout << "Enter current temperature: "; cin >> temperature; if (temperature < 32) { cout << "It is below freezing" << endl; } else { cout << "It is at or above freezing" << endl; } } return (0); }
Algorithm • Precise specification on solving a problem • Central to computer science • First solve problem via algorithm • Then implement algorithm via program • Example • Goal: Drive from South Austin to Texas State • High-level Algorithm Get on I35 at exit 226 (Slaughter Lane) Drive 20 miles south Take right on exit 206 (Aquarena Springs Drive)
Characteristics of Bad Algorithms • Vague descriptions ex: Take I35 to San Marcos • Omits important details Not mentioning exit 206 in San Marcos • Overly wordy descriptions ex: Get on I35 by Walmart, taking access road along South Park Meadows, passing I30 toll, ... • In C++ or another programming language This is a program not an algorithm
Characteristics of Good Algorithms • Mostly in a natural language (e.g., English) • Precise specification of problem Get on I35 at exit 226, drive for 20 miles south, get off I35 at exit 206, ... • Avoids technical terms and jargon Depress the decelerator if state officer detected => Hit the breaks if you spot a trooper • Minimal use of "programeese" Not written using C++ syntax
Algorithm Development • Approach • Top-level from high-level description of task • Stepwise refinement from English into high-level pseudo-code (but not program) • Example: • Task: Convert dollars to pesos • Initial algorithm Get amount of dollars Get currency exchange for pesos Divide dollars by exchange rate
Group Exercise on Algorithms • Done in separate groups • Have one person record algorithm to hand in • Task: Write algorithm to do following • Convert Celsius to Fahrenheit • Fahrenheit = 9/5 Celsius + 32 • Also give clothing advice for temperature • ex: Wear heavy parka if temperature below 32 • Tip: • Be specific but not overly wordy • Write as if explaining to a younger sibling
Computer Hardware • CPU: combines control unit and ALU • Registers: high speed storage in CPU • Usually just few dozen given expense • Main Memory: temporary storage for data • Secondary Storage: persistent memory for data • Input Devices: keyboards, mice, etc. • Output Devices: monitors, printers, etc.
Computer Software • Programs and associated data • Types • System • Operating System • Device Drivers • System utilities • Application • Word processing and other office applications • Web browsers
Turing Machine Note: For CS1428, this is mainly FYI material • Early model of computer • Designed by English mathematician Alan Turing • Famous for cracking German Enigma machine • Important in computational theory • Features • Infinite tape • Operates only on current cell based on contents • Can just change symbols or erase
von Neumann Machine • Model developed by John von Neumann • Mathematician at Princeton • Pronounced as /noy man/ • Foundation for modern computers • Thus very important (see CS 1428 objectives) • Features: • Programs and data both reside in memory: “stored program computer” • Control unit for fetch/decode/execute cycle • Separate unit for basic operations (add, etc.)
Programming Language Types • Machine: based on CPU operations 10001001000011011100000010000011 • Assembly: symbolic version of above ADL $13, %eax • High-level: usual mathematical notation x + 13
C Language • Developed at Bell Labs in early 70’s • High-level language • Some lower-level features Direct access to memory • Somewhat cryptic *p++; // result = *p; p = p + 1; rate = (age>17) ? adult : child;
C++ Language • Developed circa 1980 by Bjarne Stroustrup • Adds additional features to C • Object-oriented programming • Namespaces • Templates • Exception handling • Operator overloading • Not covered in depth until CS 2308
Program Elements in C++ • Variables: user names for memory • Constants: numbers and strings • Operators: mathematical and logical • Comments: notes about program • Keywords: reserved words • Functions: user-defined operations
Currency Conversion Program #include <iostream> // standard I/O operations using namespace std; // simplify access to internals int main () { double rate = 13.07; double dollars, pesos; // Get number of dollars and convert to pesos cout << "Amount in dollars: "; cin >> dollars; pesos = dollars * rate; // Output result with optional qualification cout << "In pesos: " << pesos << endl; if (pesos < 100) cout << "Pobrecito!" << endl; return (0); }
Miscellaneous C++ Issues • Lines versus statements Statements don’t end until semicolon occurs Ex: value = 1 * digit4 + 2 * digit3 + 4 * digit2 + 8 * digit1; • Syntax versus Semantics Syntax indicates format of expressions, etc.; semantics determines how interpreted. • Procedural versus Object-oriented Step by step specification versus use of agent-like objects that encapsulate their behavior.
From C++ to Machine Code • Preprocessor • Loads common definitions: • Ex: #include <iostream> • Performs miscellaneous text substitutions • Compilation • Creates relocatable machine code • Linking • Adds library code and creates executable
Student Exercise • Done by each student • Convert Celsius to Fahrenheit • Fahrenheit = 9/5 Celsius + 32 • Tip • Use currency conversion program as sample • Don't panic: just to get you thinking in C++