Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 3/Solution/bg: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Basic Pascal Tutorial/Chapter 3/Solution/bg

OldNewLine
1+## Решения на задачите
2+
3+*(author: Tao Yue, state: unchanged)*
4+
5+**Решение на задачата за числата на Фибоначи**
6+
7+``` pascal
8+(* Автор: Tao Yue
9+ Дата: 19 July 1997
10+ Описание:
11+ Намиране на първите 10 числа на Фибоначи
12+ Версия:
13+ 1.0 - original version
14+*)
15+
16+program Fibonacci;
17+
18+var
19+ Fibonacci1, Fibonacci2 : integer;
20+ temp : integer;
21+ count : integer;
22+
23+begin (* Main *)
24+ writeln ('Първите 10 числа на Фибоначи са:');
25+ count := 0;
26+ Fibonacci1 := 0;
27+ Fibonacci2 := 1;
28+ repeat
29+ write (Fibonacci2:7);
30+ temp := Fibonacci2;
31+ Fibonacci2 := Fibonacci1 + Fibonacci2;
32+ Fibonacci1 := Temp;
33+ count := count + 1
34+ until count = 10;
35+ writeln;
36+
37+ (* Разбира се, можете да използвате цикли FOR или WHILE
38+ за да решите задачата. *)
39+
40+end. (* Main *)
41+```
42+
43+**Решение на задачата за степените на 2**
44+
45+``` pascal
46+(* Автор: Tao Yue
47+ Дата: 13 July 2000
48+ Описание:
49+ Показване на всички степени на 2 по-малки от 2000, 5 на ред
50+ Версия:
51+ 1.0 - original version
52+*)
53+
54+program PowersofTwo;
55+
56+const
57+ numperline = 5;
58+ maxnum = 20000;
59+ base = 2;
60+
61+var
62+ number : longint;
63+ linecount : integer;
64+
65+begin (* Main *)
66+ writeln ('Степени на ', base, ', 1 <= x <= ', maxnum, ':');
67+ (* Подготовка за цикъл *)
68+ number := 1;
69+ linecount := 0;
70+ (* Цикъл *)
71+ while number <= maxnum do
72+ begin
73+ linecount := linecount + 1;
74+ (* Изпиши запетайка освен ако не е
75+ първото число на реда *)
76+ if linecount > 1 then
77+ write (', ');
78+ (* Изпиши числото *)
79+ write (number);
80+ (* Изпиши запетайка и премини на нов ред ако е
81+ последното число ОСВЕН ако е последното
82+ число от редицата *)
83+ if (linecount = numperline) and not (number * 2 > maxnum) then
84+ begin
85+ writeln (',');
86+ linecount := 0
87+ end;
88+ (* Увеличи числото *)
89+ number := number * base;
90+ end; (* while *)
91+ writeln;
92+
93+ (* Тази програма може да се напише и с използване на
94+ цикъл REPEAT..UNTIL. *)
95+
96+end. (* Main *)
97+```
98+
99+Забележете използването на три константи: основата `base`, броя на числата за изписване на един ред `numperline` и максималното число `maxnum`. Това позволява програмата да бъде лесно адаптирана в бъдеще.
100+
101+Използването на константи вместо литерали е добър навик. Когато пишете наистина големи програми, вие можете да използвате определени числа стотици пъти. Ако ги запишете директно в кода и се наложи да ги промените, ще трябва да ги търсите едно по едно. Също така, може да се окаже, че същото число се използва и за други цели и тогава не можете просто да използвате глобално търсене и замяна (Search-and-Replace). Използването на константа опростява разширяването на програмата.
102+
103+Забележете също че е използван типа `longint` за променливата `number`. Това е така защото за да се излезе от цикъла трябва израза `number <= 20000` да бъде `FALSE`, което означава че `number` ще трябва да бъде `32768`. Това надвишава диапазона на типа `integer`, който е от `-32768` до `32767`. Опитайте с тип `integer` вместо `longint` и вижте какво ще се получи.
104+
105+---
106+*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 3/Solution/bg", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history