Basic Pascal Tutorial/Chapter 3/Solution/bg

From Lazarus wiki
(Redirected from Solution 3/bg)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (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 и вижте какво ще се получи.

 ◄   ▲   ►