I believe that all of us seen or maybe even played darts. Everyone knows the circles which are numbered with points which you get by throwing the arrow. How could we calculate the result of our game if we get 10 points by hitting the center and then a minus one on each other circle on the darts board. And if we do not hit the board, we do not get any points which simply corresponds to zero.

You can see an example at this picture:

Our input information is the number of taken shots and the coordinates of shoots in coordinate system. And the main point of this program is to calculate a sum of our taken shots and output it on screen.

Our first step should be making a function which will count points given for one shot. We will be using a mathematical equation of circle. The equation: x*x + y*y = r*r where x and y are the coordinates of point in coordinates system. So we are checking where our dart is pointed (the right circle) and how many points we need to give for that circle. For example, if we hit the seventh circle, we get 7 points and so on. I left two variables to determine this action for learning purposes. You can see whole function below:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function calc_points(r,x, y:integer):integer; var points, // the count of points which:integer; // circle number begin points := 10; which := 10; // initial values while which >= 1 do begin if x*x + y*y <= r*r then begin calc_points := points; break; end else begin points := points - 1; r := r * 2; which := which - 1; end; end; if points <= 0 then calc_points := 0; end; |

Now we just need to add all shots to one sum variable and that’s all. Here is the main program code:

1 2 3 4 5 6 7 8 9 10 11 12 |
WriteLn('Input y: '); ReadLn(y); // initial circle radius WriteLn('Write the count of shots: '); ReadLn(shots); WriteLn('Input coordinates: '); for i := 1 to shots do begin Read(a, b); points := points + calc_points(y, a, b); end; WriteLn('You get: ', points); ReadLn; |

All variables are integers.

This program example also gets an initial circle radius from the person using the program, so it is handy for different types of dart’s boards. In addition, as I mentioned earlier we can abandon **which** variable which is the same as **points** in our **calc_points** function.

## No comments yet.