- •Уводзіны Ключавыя палажэнні
- •Развіццё моў камп’ютарнага праграміравання
- •Эвалюцыя мовы Pascal
- •Структурная метадалогія распрацоўкі праграм Алгарытм
- •Асноўныя этапы рашэння задач на эвм
- •Блок-схемы
- •Структураграмы
- •Тэсціраванне праграм
- •Адладка праграм
- •Структурнае праграміраванне і дакладнасць праграм
- •Асноўныя канструкцыі структур кіравання
- •Метады распрацоўкі праграм
- •Праграміраванне зверху ўніз (ад агульнага да асобнага)
- •Модульнае праграміраванне
- •Праграміраванне знізу ўверх
- •Структурнае кадзіраванне
- •Арыфметыка эвм Сістэмы злічэння
- •Пераклады лікаў з адной сістэмы злічэння ў другую
- •Пераклад цэлых дадатных лікаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад правільных дробаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад змешаных дробаў
- •Формы прадстаўлення даных
- •Формы прадстаўлення лікаў у персанальным камп’ютары
- •Захаванне лікаў з фіксаванай кропкай
- •Захаванне цэлых лікаў
- •Алгарытм прадстаўлення адмоўнага ліку ў адваротным кодзе
- •Прынцыпы захавання лікаў з плаваючай кропкай
- •Фарматы лікаў з плаваючай кропкай арыфметычнага супрацэсара ibm pc/aт 8087
- •Сродкі алгарытмічнай мовы Pascal Агульная характарыстыка алгарытмічных моў
- •Базавыя элементы мовы Pascal
- •Алфавіт
- •Лексічная структура мовы
- •Агульная структура Pascal-праграмы
- •Простыя даныя мовы Pascal і работа з імі Тыпы звестак
- •Канстанты і пераменныя
- •Абсалютныя пераменныя
- •Цэлалікавыя даныя
- •Бітавая арыфметыка
- •Дзеянні бітавай арыфметыкі
- •Сапраўдныя даныя
- •Аперацыі над сапраўднымі данымі
- •Выразы мовы
- •Літарныя даныя
- •Функцыі
- •Булеўскія даныя
- •Даныя адраснага тыпу
- •Даныя карыстальніцкага тыпу
- •Даныя пералічальнага тыпу
- •Даныя інтэрвальнага тыпу
- •Элементарныя сродкі па рабоце з данымі Наданне значэння даным
- •Найпрасцейшае вызначэнне працэдур і функцый
- •Параметры
- •Знаёмства з файлавай сістэмай
- •Файлавы тып
- •Тэкставыя стандартныя файлы
- •Увод даных розных тыпаў
- •Вывад даных розных тыпаў
- •Вывад сімвалаў
- •Вывад радковых даных
- •Вывад лагічных значэнняў
- •Вывад цэлалікавых значэнняў
- •Вывад даных сапраўднага тыпу
- •Базавыя аператары мовы і метады праграміравання Аператары
- •Простыя аператары
- •Аператар безумоўнага пераходу goto
- •Аператар выкліку працэдуры
- •Пусты аператар
- •Састаўны аператар
- •Аператары выбару
- •Умоўны аператар
- •Метады і прыёмы праграміравання
- •Аператар варыянта
- •Прыклады праграм
- •Аператары паўтарэння
- •Аператар паўтарэння for
- •Аператар паўтарэння repeat
- •Аператар паўтарэння while
- •Хуткая ступень
- •Ітэрацыйныя алгарытмы вышэйшай матэматыкі
- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
- •Механізмы структуравання праграм Працэдуры і функцыі
- •Функцыі карыстальніка
- •Параметры
- •Параметры-значэнні
- •Параметры-пераменныя
- •Прынцып лакалізацыі
- •Пабочны эфект
- •Рэкурсія і ітэрацыі
- •Параметры без тыпу
- •Працэдуры і функцыі як параметры. Працэдурныя тыпы
- •Пераменныя – працэдуры і функцыі
- •Падпраграмы ў модулях
- •Выкарыстанне модуля
- •Стандартныя бібліятэчныя модулі
- •Працэдуры кіравання праграмай
- •Эфектыўнасць праграм
- •Аптымізацыя ў час кампілявання
- •Індэксацыя
- •Выкарыстанне цыклаў
- •Арганізацыя цыклаў
- •Аптымізацыя цыклаў
- •Літаратура
Параметры без тыпу
Перадача параметраў без тыпу азначае перадачу ў падпраграму толькі адраса аб’екта. На гэтым жа месцы можа з’явіцца пераменная любога тыпу.
Сінтаксічная дыяграма параметраў без тыпу:
Выкарыстоўваць такія параметры трэба з асцярогай, бо ў такіх выпадках мова Pascal не апрацоўвае магчымых памылковых сітуацый неадпаведнасці тыпу даных. Калі ж яны неабходны?
Калі замест данага пэўнага тыпу перадаецца яго месцазнаходжанне ў памяці і даўжыня ў байтах, то з ім можна будзе працаваць, як з даным патрэбнага праграмісту тыпу шляхам прывядзення тыпаў ці налажэння на такі параметр данага патрэбнага тыпу.
Прыклад. Раздрукаваць значэнне пераменнай любога тыпу ў 16-й с/зл.
Алгарытм. Вызначым працэдуру Dump ад двух параметраў: імя пераменнай і яе даўжыня ў байтах. Тады рашэнне будзе такое:
PROGRAM Write_Value;
VAR x : Real;
s : STRING;
a : ARRAY[1..255] OF Integer;
PROCEDURE Dump(VAR z; len : Word}; {даўжыня z у байтах}
... {рэалізацыю разгледзім крыху пазней}
END;
BEGIN
Dump(x, SizeOf(x));
Dump(a, SizeOf(a));
{там выпадковая інфармацыя – смецце}
x:=1;
s:='0-x-0x-0x';
Dump(x, SizeOf(x));
Dump(s, SizeOf(s));
END.
Зараз распрацуем Procedure Dump.
Алгарытм. На перададзеную пераменную Z даўжынёй len байтаў наложым масіў байтаў. У кожным байце змяшчаюцца дзве 16-я лічбы з мноства базісных лікаў: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Кожны байт будзем расшыфроўваць як радок з двух сімвалаў (кожны сімвал – 16-я лічба-сімвал) і потым друкаваць яго. Апішам для расшыфроўкі функцыю Hext.
PROCEDURE Dump(VAR Z; len : Word);
TYPE
St2 = STRING[2];
VAR M : ARRAY[1..$FFF0] OF Byte ABSOLUTE Z;
{гэта размяшчэнне масіву па канкрэтным адрасе ў аператыўнай памяці (Absolute)}
i : Word;
FUNCTION Hext(B : Byte) : St2;
CONST HexDigit : ARRAY[0..15] OF
Char = '0123456789ABCDEF';
BEGIN
Hext:=HexDigit[B SHR 4]+HexDigit[B AND $F];
END;
BEGIN
Writeln;
Writeln;
FOR i:=1 TO len DO Write(Hext(M[i]));
Writeln
END; {Dump}
Працэдуры і функцыі як параметры. Працэдурныя тыпы
Адметнай асаблівасцю мовы Pascal з’яўляецца дазвол перадаваць у падпраграме імёны другіх падпраграм, афармляючы іх як параметры. І гэтак жа, як перадавалася значэнне, можа перадавацца нейкая падпраграма апрацоўкі даных. Асабліва важным гэта становіцца пры праграмнай рэалізацыі алгарытмаў вылічальнай матэматыкі.
Вызначэнне працэдурнага ці функцыянальнага тыпу аналагічна загалоўку падпраграмы з тым адрозненнем, што імя падпраграмы не задаецца.
Працэдурны тып:
Імёны параметраў могуць быць выбраны адвольна.
Прыклады.
TYPE
Proc = PROCEDURE;
BinOperation = FUNCTION(x, y : Real) : Real;
UnOperation = FUNCTION(x : Real) : Real;
Reading = PROCEDURE(VAR F:Text; VAR Elem:Char);
Працэдурныя тыпы таксама могуць удзельнічаць у пабудове састаўных тыпаў.
Прыклад.
TYPE
Proc = PROCEDURE(T : Real);
VAR
ArProc : ARRAY[1..10] OF Proc;
Да азначаных вышэй даных можна звяртацца наступным чынам: ArProc[7]((x + 17,5) * 2).
Пасля аб’яўлення працэдурнага ці функцыянальнага тыпу яго можна выкарыстоўваць у апісаннях параметраў падпраграм. І ясна, што неабходна напісаць тыя рэальныя працэдуры і функцыі, якія будуць перадавацца як параметры. Патрабаванне да іх адно: яны павінны кампілявацца ў рэжыме далёкага выкліку (опцыя FAR або {$F+}).
Прыклад. Надрукаваць у 16-й с/зл табліцу складання ці множання.
PROGRAM Tables;
CONST
HD : ARRAY[0..15] OF Char = '0123456789ABCDEF';
TYPE
TFunc = FUNCTION(a, b : Integer) : Integer;
TSt2 = STRING[2];
FUNCTION Add(a, b : Integer) : Integer; FAR;
BEGIN
Add := a + b;
END;
FUNCTION Mult(a, b : Integer) : Integer; FAR;
BEGIN
Mult := a * b;
END;
PROCEDURE MakeTable(w, h : Integer; Op : TFunc;
c : Char);
VAR i, j : Integer;
FUNCTION Hext(i : Integer) : TSt2;
VAR H : Char;
BEGIN
H := HD[i DIV 16];
{вылучылі старэйшую лічбу; можна і SHR 4}
IF H = '0' THEN H := ' ';
{каб не друкаваць нявартасны нуль}
Hext := H + HD[i MOD 16]; {або i AND $F}
END; {Hext}
BEGIN
Write(c:2, ' I');
FOR i := 1 TO w - 1 DO Write(HD[i]:4);
Writeln;
FOR i := 1 TO w DO Write('----');
Writeln;
FOR i := 1 TO h - 1 DO {колькасць радкоў}
BEGIN
Write(HD[I]:2, ' I');
FOR j := 1 TO w - 1 DO
Write(Hext(Op(i, j)):4);
Writeln;
END;
END; {MakeTable}
BEGIN
MakeTable(16, 16, Add, '+');
Writeln;
MakeTable(16, 16, Mult, '*');
END.