Funny Programming in Delphi - Hares and Pheasants

Introduction

An hunting event has been organized by local gamekeepers community. At the end of the event all hunters were interested in results, i.e. how many hares and pheasants were shot. Because gamekeepers were extremely tired, they weren't able to distinguish between hare and pheasant. A local teacher got an idea: "We count all shot animals and total figure of their legs. Based on these facts, we should be able to determine particular totals of hares and pheasants.".

Used variables

  • KS - real count of heads
  • NOHY - total count of legs
  • KUSY - calculated count of heads (changes by every loop pass, at the end it will have the same value as variable KS)
  • ZAJ - count of hares (changes by every loop pass, at the end it will have value of real count of hares)
  • BAZ - count of pheasants (changes by every loop pass, at the end it will have value of real count of pheasants)

procedure TForm2.Button1Click(Sender: TObject);
 var Nohy, Ks, Kusy, Baz, Zaj, Test:Integer;
begin
 begin
   Nohy:=seNohy.Value;
   Ks:=seKs.Value;
   if NOHY <= 4*KS                   //No animal can have more than 4 legs
      then
         if NOHY >= 2*KS             //No animal can have less than 2 legs
            then
               begin
                  TEST := NOHY div (2);   //test of divisibility by 2
                  TEST := TEST*2;
                  if NOHY = TEST
                     then            //All the nonsense values are out of question,
                        begin        //we can calculate
                           ZAJ := 0;       //Initial settings - no hare,
                           BAZ := NOHY div (2);  //all pheasants
                           KUSY := ZAJ + BAZ;   //We'll try how many heads it would be

                           //While loop
                           while KUSY > KS do   //Until there are more test heads than real ones
                           begin
                              ZAJ := ZAJ + 1;   //One hare is added
                              BAZ := BAZ - 2;   //Two pheasants are removed
                              KUSY := ZAJ + BAZ;  //Heads recalculated
                           end;
                           ShowMessage('Hares '+IntToStr(ZAJ)+ ', Pheasants ' +IntToStr(BAZ));
                        end
                     else             //Odd count of legs
                        ShowMessage('Animals with odd count of legs are not accepted:-)');
                 end
            else
               ShowMessage ('Each animal must have at least two legs! ')
      else
         ShowMessage ('No animal can have more than four legs! ');
 end;
end;

Notes

Our new series of articles focused on practical using of algorithms should show how to use some mathematical and statistical methods for solving real life tasks and issues.

Sample project regarding this topic can be downloaded from here.

About the Author

Ing. Jana Pšenčíková