# Lecture 2: Fundamental Concepts

## Presentation on theme: "Lecture 2: Fundamental Concepts"— Presentation transcript:

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?