# Advanced Programming - PowerPoint PPT Presentation

1 / 19

Advanced Programming. 15 Feb 2003. The “OI” Programming Process. Reading the problem statement Thinking Coding + Compiling Testing + Debugging Finalizing the program. Reading…. Read the problem statements carefully Note the constraints Meaningful Range of variables

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

15 Feb 2003

### The “OI” Programming Process

• Thinking

• Coding + Compiling

• Testing + Debugging

• Finalizing the program

• Read the problem statements carefully

• Note the constraints

• Meaningful Range of variables

• Execution time limit

• Do not “guess” the meaning of the problem statements.

### Thinking

• What is the ‘type’ of the problem?

• DP? Graph? Maths? Others?

• Have you solved a similar problem before?

• How do you solve the problem without computer?

• Can the problem be further divided into some easier sub-problems?

### Thinking (cont.)

• Drawing diagrams may be useful (especially for DP and Graph problems)

• Is the problem too simple?

• If yes, look for tricks ;-)

• Is the algorithm correct?

• Any special cases?

• Have you coded it before?

• What were the difficulties you faced?

### Thinking (cont.)

• Is the algorithm feasible?

• How to code it in PASCAL?

• Is it easy to code?

• What is the approximate execution time?

• How to store the data?

• Integer? LongInt? String? Array of char?

• Are there enough memory to store the data?

### Thinking (cont.)

• Are there any (simple) ways to improve

• Program execution time?

• Ease of coding?

### Coding

• Pre-processing (e.g. find primes)

• Input

• Process

• Part 1, 2, …, N

• Output

• Save and compile your code frequently

### Coding (cont.)

• Avoid long and complex expressions

x:=(2*(y2-y1)*(x1*x1+y1*y1-x3*x3-y3*y3)-2*(x1*x1+y1*y1-x2*x2-y2*y2)*(y3-y1)) /(4*(x2-x1)*(y3-y1)-4*(y2-y1)*(x3-x1));

y:=((x1*x1+y1*y1-x2*x2-y2*y2)*2*(x3-x1)-2*(x2-x1)*(x1*x1+y1*y1-x3*x3-y3*y3)) /(4*(x2-x1)*(y3-y1)-4*(y2-y1)*(x3-x1));

r:=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));

a:=2*(x2-x1); b:=2*(y2-y1);

c:=x1*x1+y1*y1-x2*x2-y2*y2;

d:=2*(x3-x1); e:=2*(y3-y1);

f:=x1*x1+y1*y1-x3*x3-y3*y3;

x:=(b*f-c*e)/(a*e-b*d);

y:=(c*d-a*f)/(a*e-b*d);

r:=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));

### Coding (cont.)

• Copy-and-paste

• Make sure the “source” is correct

• Update all variables

• Double checking required

### Testing

• When to test your program?

• After completing the whole program?

• After writing each statement?

• After coding each part?

• After making changes to a part?

### Testing (cont.)

• Print all important variables to screen

• Print messages

• Use debugger, inspect program behavior by running step-by-step

### Testing (cont.)

• Sample Output

• “A problem has Sample Output for two reasons:

• To make you understand what the correct output format is

• To make you believe that your incorrect solution has solved the problem correctly ”

### Testing (cont.)

• Boundary Case

• “Large” Input

• Execution Time

• Overflow

### Debugging

• Some short-cut keys

• F4 – Goto Cursor

• F7 – Trace into

• F8 – Step Over

• Ctrl-F2 – Program Reset

• Alt-F5 – Screen Output

### Finalizing

• Check I/O filename

• Check Output Format

• Trailing spaces?

• Correct source/executable name?

• Is the executable updated?

### Demostration

• HKOI2003 Junior Q3 – Goldbach’s Conjecture

• Read the problem statements, and think about the algorithms now ;-)

• Given an integer N, find two primes p1,p2 such that p1+p2=N

• p1 ≤ p2

• Minimize (p2-p1)

• Minimum N = 4

• Maximum N = 10,000,000 (wow!)

• Can N be odd?

### Thinking…

• Find two primes…

• if M mod pi = 0, where pi is a prime, then M is not prime.

• So….the first step is to find some small prime numbers (up to )

• Then, write a function that uses these prime numbers to check for larger primes

• Use a for-loop to find two prime numbers such that their sum is N

• Feasible? Easy to write?