Lecture 2: Fundamental Concepts Problems Programs Programming languages
Studying the Theme How do we prove something CAN be done by SOME program? We write a specific program which does it. How do we prove something CANNOT be done by ANY program? We have to develop an argument which takes into account EVERY program that could be written.
We view solving problems as the main application for computer programs
Definition A problem is a mapping or function between a set of inputs and a set of outputs Example Problem: Sorting Inputs Outputs (4,2,3,1) (1,2,3,4) (3,1,2,4) (1,5,7) (7,5,1) (1,2,3) (1,2,3)
How to specify a problem Input Describe what an input instance looks like Output Describe what task should be performed on the input In particular, describe what output should be produced
Example Problem Specifications Sorting problem Input Integers n1, n2, ..., nk Output n1, n2, ..., nk in nondecreasing order Find element problem Integers n1, n2, …, nk Search key S yes if S is in n1, n2, …, nk, no otherwise
Programs solve problems
Purpose Why do we write programs? One answer To solve problems What does it mean to solve a problem? Informal answer: For every legal input, a correct output is produced. Formal answer: To be given later
Programming Language Definition A programming language defines what constitutes a legal program Example: a pseudocode program may not be a legal C++ program which may not be a legal C program A programming language is typically referred to as a “computational model” in a course like this.
C++ Our programming language will be C++ with minor modifications Main procedure will use input parameters in a fashion similar to other procedures no argc/argv Output will be returned type specified by main function type
Maximum Element Problem Input integer n >= 1 List of n integers Output The largest of the n integers
C++ Program which solves the Maximum Element Problem int main(int A[], int n) { int i, max; if (n < 1) return (“Illegal Input”); max = A[0]; for (i = 1; i < n; i++) if (A[i] > max) max = A[i]; return (max); }
Exploring capabilities and limitations of C++ programs Fundamental Theme Exploring capabilities and limitations of C++ programs
Restating the Fundamental Theme We will study the capabilities and limits of C++ programs Specifically, we will try and identify What problems can be solved by C++ programs What problems cannot be solved by C++ programs
Studying the Theme How do we prove a problem CAN be solved by SOME C++ program? We write a specific C++ program which solves it. How do we prove something CANNOT be solved by ANY C++ program? We have to develop an argument which takes into account EVERY C++ program that could be written.
Question Is C++ general enough? Or is it possible that there exists some problem P such that P can be solved by some program P in some other programming language but P cannot be solved by any C++ program?
Church’s Thesis (modified) We have no proof of an answer, but it is commonly accepted that the answer is no. Church’s Thesis (modified) C++ is a general model of computation Any algorithm can be expressed as a C++ program If some algorithm cannot be expressed by a C++ program, it cannot be expressed in any reasonable programming language
Summary Problems Questions When we talk about what programs can or cannot “DO”, we mean what PROBLEMS can or cannot be solved Questions For any problem, can there be more than one program which solves it? For any program, can it solve more than one problem? Which is harder: proving a problem solvable or unsolvable?