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 flow chart 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 highlevel 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 Turing Machine Example 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.) Example von Neumann Machine 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++