§ 16. Рэалізацыя алгарытмаў работы з цэлалікавымі данымі

16.1. Цэлалікавы тып даных

Часта пры рашэнні задач трэба працаваць з цэлымі лікамі. Для гэтага ў Pascal выкарыстоўваецца тып даных integer.

З дапамогай пераменных гэтага тыпу задаюцца цэлыя лікі ад –2147483648 да 2147483647. Для тыпу даных integer вызначаны наступныя аперацыі:

Матэматычныя
аперацыі

Запіс
у Pascal

+ (складанне)

+

(адніманне)

(множанне)

*

цэлалікавае дзяленне

div

знаходжанне астачы

mod

Для цэлалікавых даных не вызначана аперацыя дзялення, як для рэчаісных лікаў. Пры спробе выкарыстаць аперацыю дзялення будзе выдадзена памылка (прыклад 16.1).

Для арганізацыі вылічэнняў з цэлымі лікамі вызначаны аперацыі div и mod. Гэтыя аперацыі маюць такі ж прыярытэт, як і аперацыі дзялення і множання.

Пример 16.2. Дадзены два цэлыя лікі a і b. Напішам праграму, якая знаходзіць цэлую частку ад дзялення a на b і астачу.

Этапы выканання задання:

1. Вызначэнне зыходных даных: пераменныя a і b.

2. Вызначэнне вынікаў: пераменныя c (цэлалікавая дзель) і d (астача).

3. Алгарытм рашэння задачы:

3.1. Увод зыходных даных.

3.2. Цэлалікавую дзель знаходзім як вынік аперацыі a div b, астачу — a mod b.

3.3. Вывад выніку.

4. Апісанне пераменных.

Усе пераменныя, вызначаныя для рашэння задачы, маюць тып integer.

Значэнне, якое выдаецца як вынік аперацыі mod, можа адрознівацца ад матэматычнага азначэння астачы (у матэматыцы пад астачай разумеюць неадмоўны лік). Калі астача не роўна нулю, то знак ліку, які з’яўляецца вынікам аперацыі mod, вызначае знак дзялімага.

16.2. Выкарыстанне цэлалікавых даных для рашэння задач

Прыклад 16.3. Няхай таймер паказвае час толькі ў секундах. Напішам праграму, якая пераводзіць час у мінуты і секунды.

Этапы выканання задання:

1. Вызначэнне зыходных даных: пераменная с (час у секундах).

2. Вызначэнне вынікаў: пераменныя m (поўная колькасць мінут) і s (астача секунд).

3. Алгарытм рашэння задачы:

3.1. Увод зыходных даных.

3.2. Для знаходжання поўнага ліку мінут трэба знайсці цэлую частку ад дзялення зыходнага ліку секунд на 60.

3.3. Секунды, што засталіся, знаходзім як астачу ад дзялення зыходнага ліку секунд на 60.

3.4. Вывад выніку.

4. Апісанне пераменных.

Пераменныя, вызначаныя для рашэння задачы, маюць тып integer.

Прыклад 16.4Зададзены двухзначны лік. Трэба памяняць месцамі першую і другую лічбы ліку.

Этапы выканання задання:

1. Вызначэнне зыходных даных: пераменная а (зыходны лік).

2. Вызначэнне вынікаў: пераменная b (пераўтвораны лік).

3. Алгарытм рашэння задачы:

3.1. Увод зыходных даных.

3.2. Для пераўтварэння ліку неабходна выканаць наступныя дзеянні:

а)  у пераменнай a1 захаваем другую лічбу ліку. Для вылучэння лічбы з ліку трэба знайсці астачу ад дзялення зыходнага ліку на 10 (mod 10);

б) для вылучэння першай лічбы (пераменная a2) трэба знайсці цэлую частку ад дзялення ліку на 10;

в) шуканы лік b атрымаем, калі памножым a1 на дзесяць і да атрыманага здабытку дададзім значэнне пераменнай a2.

3.3. Вывад выніку.

4. Апісанне пераменных.

Усе пераменныя, вызначаныя для рашэння задачы, маюць тып integer.

Прыклад 16.5. У гістарычнай кнізе даўжыня адрэзу тканіны вымяралася ў локцях. Напішам праграму, якая перавядзе локці ў метры і сантыметры.

Этапы выканання задання:

1. Вызначэнне зыходных даных: пераменная l (локці).

2. Вызначэнне вынікаў: пераменныя m (метры) і s (санты-метры).

3. Алгарытм рашэння задачы:

3.1. Увод зыходных даных.

3.2. Спачатку перавядзём локці ў сантыметры. Для гэтага колькасць локцяў трэба памножыць на 45 і захаваць значэнне ў пераменнай x.

3.3. Для вызначэння ліку метраў знойдзем цэлую частку ад дзялення x на 100.

3.4. Сантыметры, што засталіся, можна знайсці як астачу ад дзялення x на 100.

3.5. Вывад выніку.

4. Апісанне пераменных:

Усе пераменныя, вызначаныя для рашэння задачы, маюць тып integer.

У PascalABC вызначаны розныя тыпы даных для работы з цэлымі лікамі, якія дазваляюць выконваць дзеянні над данымі з розных лікавых дыяпазонаў. Чым большы дыяпазон, тым больш месца ў памяці камп’ютара адводзіцца для захоўвання пераменных.

Некаторыя цэлалікавыя ты-пы даных:

Тып Дыяпазон значэнняў
shortint –128..127
smallint –32768..32767
integer , longint –2147483648..2147483647
int64 –9223372036854775808..
9223372036854775807
byte 0..255
word 0..65535
longword , cardinal 0..4294967295
uint64 0..18446744073709551615

 

Прыклад 16.1. Памылка выкарыстання аперацыі дзялення для цэлалікавых тыпаў даных:

Прыклад 16.2.

5. Праграма:

6. Тэсціраванне праграмы.

Запусціце праграму і ўвядзіце значэнні a = 11 i b = 4.

Вынік работы праграмы павінен быць такім, як паказана ніжэй:

Вынік аперацый div і mod для розных лікаў:

a b a div b a mod b
17 3 5 2
–17 3 –5 –2
17 –3 –5 2
–17 –3 5 –2

Так, a mod b = a — ( a div b ) * b .

Прыклад 16.3.

5. Праграма:

6. Тэсціраванне праграмы.

Запусціце праграму і ўвядзіце значэнне c = 137.

Вынік работы праграмы:

Для значэння с = 24 атрымаем:

 

Прыклад 16. 4 .

5. Праграма:

6. Тэсціраванне праграмы.

Запусціце праграму і ўвядзіце значэнне a = 25.

Вынік работы праграмы павінен быць наступным:

Здаўна на Русі ўжывалася сістэма мер, якая адрознівалася ад сучаснай Міжнароднай сістэмы адзінак (СІ). Напрыклад:

1 локаць = 45 см;
1 аршын = 16 вяршкоў;
1 вяршок = 4 ногці;
1 ногаць ≈ 11 мм.

Прыклад 16.5.

5. Праграма:

6. Тэсціраванне праграмы.

Запусціце праграму і ўвядзіце значэнне l = 7.

Вынік работы праграмы павінен быць наступным:



1. Які тып даных можна выкарыстоўваць у Pascal для работы з цэлалікавымі данымі?



2. Якое максімальнае значэнне можна задаць пераменнай тыпу integer?



3. Якія аперацыі вызначаны для цэлалікавых даных?



  1. Вася напісаў праграму, якая пераводзіць даўжыню з метраў у кіламетры і метры. Але ён не можа вырашыць, дзе трэба выкарыстоўваць div, а дзе mod. Дапамажыце яму. Адкрыйце файл і выпраўце праграму.
  2. Адкажыце на пытанні для прыкладу 16.4.
    1. Пры якіх значэннях пераменнай a значэнне пераменнай b будзе такім жа?
    2. Ці заўсёды ў выніку выканання праграмы мы будзем атрымліваць двухзначны лік? Чаму?
    3. Паспрабуйце ўвесці трохзначны лік (напрыклад, 125). Растлумачце атрыманы вынік.
  3. Напішыце праграмы для рашэння задач. Выкарыстоўвайце аперацыі div і mod.
    1. Зададзены двухзначны лік. Знайдзіце сярэдняе арыфметычнае лічбаў ліку.
    2. Зададзены двухзначны лік. Знайдзіце рознасць паміж колькасцю дзясяткаў і адзінак.
    3. Дадзена маса ў грамах. Перавядзіце яе ў кілаграмы і грамы.
    4. Плошча ўчастка вымяраецца ў арах. Знайдзіце колькасць поўных км2.
  4. Для старарускай сістэмы вагі вядомыя наступныя суадносіны: 1 беркавец = 10 пудоў = 400 фунтаў = 38 400 залатнікоў. Напішыце праграму, якая пераводзіць масу, зададзеную ў залатніках, у фунты, пуды і беркаўцы.