Basic Pascal Tutorial/Chapter 3/Solution/bg

From Free Pascal wiki
Jump to navigationJump to search

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

 ◄   ▲   ► 

Решения на задачите

(author: Tao Yue, state: unchanged)

Решение на задачата за числата на Фибоначи

(* Автор:    Tao Yue
   Дата:      19 July 1997
   Описание:
      Намиране на първите 10 числа на Фибоначи
   Версия:
      1.0 - original version
*)

program Fibonacci;

var
   Fibonacci1, Fibonacci2 : integer;
   temp : integer;
   count : integer;

begin    (* Main *)
   writeln ('Първите 10 числа на Фибоначи са:');
   count := 0;
   Fibonacci1 := 0;
   Fibonacci2 := 1;
   repeat
      write (Fibonacci2:7);
      temp := Fibonacci2;
      Fibonacci2 := Fibonacci1 + Fibonacci2;
      Fibonacci1 := Temp;
      count := count + 1
   until count = 10;
   writeln;

   (* Разбира се, можете да използвате цикли FOR или WHILE
      за да решите задачата. *)

end.     (* Main *)

Решение на задачата за степените на 2

(* Автор:    Tao Yue
   Дата:      13 July 2000
   Описание:
      Показване на всички степени на 2 по-малки от 2000, 5 на ред
   Версия:
      1.0 - original version
*)

program PowersofTwo;

const
   numperline = 5;
   maxnum = 20000;
   base = 2;

var
   number : longint;
   linecount : integer;

begin    (* Main *)
   writeln ('Степени на ', base, ', 1 <= x <= ', maxnum, ':');
   (* Подготовка за цикъл *)
   number := 1;
   linecount := 0;
   (* Цикъл *)
   while number <= maxnum do
      begin
         linecount := linecount + 1;
         (* Изпиши запетайка освен ако не е 
            първото число на реда *)
         if linecount > 1 then
            write (', ');
         (* Изпиши числото *)
         write (number);
         (* Изпиши запетайка и премини на нов ред ако е
            последното число ОСВЕН ако е последното
            число от редицата *)
         if (linecount = numperline) and not (number * 2 > maxnum) then
            begin
               writeln (',');
               linecount := 0
            end;
         (* Увеличи числото *)
         number := number * base;
      end;  (* while *)
   writeln;

   (* Тази програма може да се напише и с използване на
      цикъл REPEAT..UNTIL. *)

end.     (* Main *)

Забележете използването на три константи: основата base, броя на числата за изписване на един ред numperline и максималното число maxnum. Това позволява програмата да бъде лесно адаптирана в бъдеще.

Използването на константи вместо литерали е добър навик. Когато пишете наистина големи програми, вие можете да използвате определени числа стотици пъти. Ако ги запишете директно в кода и се наложи да ги промените, ще трябва да ги търсите едно по едно. Също така, може да се окаже, че същото число се използва и за други цели и тогава не можете просто да използвате глобално търсене и замяна (Search-and-Replace). Използването на константа опростява разширяването на програмата.

Забележете също че е използван типа longint за променливата number. Това е така защото за да се излезе от цикъла трябва израза number <= 20000 да бъде FALSE, което означава че number ще трябва да бъде 32768. Това надвишава диапазона на типа integer, който е от -32768 до 32767. Опитайте с тип integer вместо longint и вижте какво ще се получи.

 ◄   ▲   ►