- •Уводзіны Ключавыя палажэнні
- •Развіццё моў камп’ютарнага праграміравання
- •Эвалюцыя мовы Pascal
- •Структурная метадалогія распрацоўкі праграм Алгарытм
- •Асноўныя этапы рашэння задач на эвм
- •Блок-схемы
- •Структураграмы
- •Тэсціраванне праграм
- •Адладка праграм
- •Структурнае праграміраванне і дакладнасць праграм
- •Асноўныя канструкцыі структур кіравання
- •Метады распрацоўкі праграм
- •Праграміраванне зверху ўніз (ад агульнага да асобнага)
- •Модульнае праграміраванне
- •Праграміраванне знізу ўверх
- •Структурнае кадзіраванне
- •Арыфметыка эвм Сістэмы злічэння
- •Пераклады лікаў з адной сістэмы злічэння ў другую
- •Пераклад цэлых дадатных лікаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад правільных дробаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад змешаных дробаў
- •Формы прадстаўлення даных
- •Формы прадстаўлення лікаў у персанальным камп’ютары
- •Захаванне лікаў з фіксаванай кропкай
- •Захаванне цэлых лікаў
- •Алгарытм прадстаўлення адмоўнага ліку ў адваротным кодзе
- •Прынцыпы захавання лікаў з плаваючай кропкай
- •Фарматы лікаў з плаваючай кропкай арыфметычнага супрацэсара ibm pc/aт 8087
- •Сродкі алгарытмічнай мовы Pascal Агульная характарыстыка алгарытмічных моў
- •Базавыя элементы мовы Pascal
- •Алфавіт
- •Лексічная структура мовы
- •Агульная структура Pascal-праграмы
- •Простыя даныя мовы Pascal і работа з імі Тыпы звестак
- •Канстанты і пераменныя
- •Абсалютныя пераменныя
- •Цэлалікавыя даныя
- •Бітавая арыфметыка
- •Дзеянні бітавай арыфметыкі
- •Сапраўдныя даныя
- •Аперацыі над сапраўднымі данымі
- •Выразы мовы
- •Літарныя даныя
- •Функцыі
- •Булеўскія даныя
- •Даныя адраснага тыпу
- •Даныя карыстальніцкага тыпу
- •Даныя пералічальнага тыпу
- •Даныя інтэрвальнага тыпу
- •Элементарныя сродкі па рабоце з данымі Наданне значэння даным
- •Найпрасцейшае вызначэнне працэдур і функцый
- •Параметры
- •Знаёмства з файлавай сістэмай
- •Файлавы тып
- •Тэкставыя стандартныя файлы
- •Увод даных розных тыпаў
- •Вывад даных розных тыпаў
- •Вывад сімвалаў
- •Вывад радковых даных
- •Вывад лагічных значэнняў
- •Вывад цэлалікавых значэнняў
- •Вывад даных сапраўднага тыпу
- •Базавыя аператары мовы і метады праграміравання Аператары
- •Простыя аператары
- •Аператар безумоўнага пераходу goto
- •Аператар выкліку працэдуры
- •Пусты аператар
- •Састаўны аператар
- •Аператары выбару
- •Умоўны аператар
- •Метады і прыёмы праграміравання
- •Аператар варыянта
- •Прыклады праграм
- •Аператары паўтарэння
- •Аператар паўтарэння for
- •Аператар паўтарэння repeat
- •Аператар паўтарэння while
- •Хуткая ступень
- •Ітэрацыйныя алгарытмы вышэйшай матэматыкі
- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
- •Механізмы структуравання праграм Працэдуры і функцыі
- •Функцыі карыстальніка
- •Параметры
- •Параметры-значэнні
- •Параметры-пераменныя
- •Прынцып лакалізацыі
- •Пабочны эфект
- •Рэкурсія і ітэрацыі
- •Параметры без тыпу
- •Працэдуры і функцыі як параметры. Працэдурныя тыпы
- •Пераменныя – працэдуры і функцыі
- •Падпраграмы ў модулях
- •Выкарыстанне модуля
- •Стандартныя бібліятэчныя модулі
- •Працэдуры кіравання праграмай
- •Эфектыўнасць праграм
- •Аптымізацыя ў час кампілявання
- •Індэксацыя
- •Выкарыстанне цыклаў
- •Арганізацыя цыклаў
- •Аптымізацыя цыклаў
- •Літаратура
Пераменныя – працэдуры і функцыі
Прымяненне працэдурнага тыпу не абмяжоўваецца толькі адным апісаннем параметраў – працэдур ці функцый. Калі ёсць тып, значыць, могуць быць і пераменныя такога тыпу.
Працэдурныя пераменныя па фармаце сумяшчальныя з пераменнымі тыпу Pointer і пасля прывядзення тыпаў могуць абменьвацца з імі значэннямі.
Адносна папярэдняй праграмы могуць быць такія змяненні. Дабавім
VAR Oper : Func;
Cond : Char;
У галоўнай праграме выканаем наступныя дзеянні:
Writeln('задай аперацыю (*/+)');
Readln(Cond);
Writeln;
CASE Cond OF
'*' : Oper := Mult;
'+' : Oper := Add
END;
MakeTable(16, 16, Oper, Cond); ...
Заўвага. Падпраграма, якая надаецца працэдурнай пераменнай:
1) не павінна быць стандартнай працэдурай ці функцыяй.
Гэта абмежаванне можна абысці такім, напрыклад, прыёмам: выклік стандартнай падпраграмы заключыць у «абалонку».
VAR Func : FUNCTION(x : Real) : Real;
…
FUNCTION MySin(x : Real) : Real; FAR;
BEGIN
MySin:=Sin(x)
END;
…
Func:=MySin;
2) не можа быць укладзена ў другія падпраграмы;
3) не можа быць падпраграмай спецыяльнага віду, якая мае спецыфікацыю INTERRUPT ці канструкцыю INLINE.
Пераменныя працэдурных тыпаў, каб быць сумяшчальнымі па наданні значэння, павінны мець:
аднолькавую колькасць фармальных параметраў;
параметры на адпаведных пазіцыях павінны належаць аднаму і таму ж тыпу (супадаць).
У выніку функцый павінны супадаць тыпы значэнняў, якія вяртаюцца.
Разгледзім задачу падліку значэння вызначанага інтэграла, сэнс якога – плошча крывалінейнай трапецыі.
Прыклад. Саставіць падпраграму вылічэння значэння інтэграла па формуле трапецый.
дзе i = 1, 2, …, n – 1, – лік адрэзкаў разбіўкі інтэрвалу інтэгравання.
Па гэтай праграме падлічыць і для нейкага зададзенага n.
Рашэнне.
PROGRAM Int;
CONST n = 20;
TYPE
TFunc = FUNCTION(x : Real) : Real;
VAR fu: TFunc;
FUNCTION f1(x : Real) : Real; FAR;
BEGIN
f1 := (x * x * ln(x)) / (Sin(x) + x)
END;
FUNCTION f2(x : Real) : Real; FAR;
BEGIN
f2 := x * x / (Cos(x) + x)
END;
FUNCTION Trap(n : Integer; a,b: Real; f : TFunc) : Real;
VAR
h, s, x : Real;
i : Integer;
BEGIN
h := (b - a) / n;
s := (f(a) + f(b)) * 0.5;
x := a;
FOR i := 1 TO n - 1 DO
BEGIN
x := x + h;
s := s + f(x)
END;
Trap := h * s;
END;
BEGIN
Writeln('n=', n);
fu := f2;
Writeln(Trap(n,pi/4,pi/2, f1),Trap(n,pi/6,pi/3,fu));
END.
Модулі
Паняцце модуля, ці ў больш агульным выпадку модульнага праграміравання, узнікла на пэўным этапе развіцця вылічальнай справы і было абумоўлена ў першую чаргу: а) узрастаючымі аб’ёмамі праграм; б) іх узрастаючай унутранай складанасцю і в) калектыўным характарам распрацовак. Спачатку гэта былі бібліятэкі ўключаемых фрагментаў, а цяпер гэта незалежна захоўваемыя і распрацоўваемыя, незалежна кампілюемыя і тэсціруемыя праграмныя адзінкі са строга вызначаным інтэрфейсам, якія могуць аб’ядноўвацца ў розных спалучэннях.
Уяўленне праграмы як адзінай моўнай канструкцыі з’явілася перашкодай для эфектыўнай арганізацыі калектыўных распрацовак складаных сістэм. Падпраграмы, разгледжаныя раней (працэдуры і функцыі), былі часткай праграмы, яны аформлены ў выглядзе асобнай сінтаксічнай канструкцыі, якая мела імя.
Вырашальным крокам на шляху пераўтварэння мовы Turbo Pascal у мову, прыгодную для буйных распрацовак вытворчага і камерцыйнага прызначэння на сучасным узроўні тэхналогіі праграміравання, з’явілася ўвядзенне паняцця модуля. За кошт увядзення модуляў удалося аслабіць абмежаванні на сумарны аб’ём гатовых праграм (праграма 64 кб).
У мове Turbo Pascal модуль (UNIT) па азначэнні лічыцца асобнай праграмнай адзінкай. Калі падпраграма з’яўляецца структурным элементам Pascal-праграмы і не можа існаваць па-за ёй, тады модуль уяўляе сабой асобна захоўваемую і незалежна кампілюемую праграмную адзінку.
У агульным выглядзе модуль – гэта сукупнасць (калекцыя) праграмных рэсурсаў, прызначаных для выкарыстання іншымі модулямі і праграмамі. Пад рэсурсамі будзем разумець канстанты, тыпы, пераменныя, падпраграмы. Важна памятаць, што модуль сам па сабе не з’яўляецца выконваемай праграмай, яго аб’екты выкарыстоўваюцца другімі праграмнымі адзінкамі.
Усе праграмныя рэсурсы модуля можна разбіць на дзве часткі:
аб’екты, прызначаныя для выкарыстання другімі праграмамі ці модулямі;
аб’екты рабочага характару.
Модуль мае тры часткі – інтэрфейсную, рэалізацыі і ініцыялізацыі.
У інтэрфейснай частцы модуля сабраны апісанні аб’ектаў, якія даступны з другіх праграм. Гэта бачныя па-за модулем аб’екты. У частцы рэалізацыі змяшчаюцца рабочыя аб’екты – скрытыя, або нябачныя. У частцы ініцыялізацыі апісваюцца дзеянні, якія трэба выканаць пры падключэнні модуля.
Агульная структура модуля:
UNIT Unitname;
INTERFAСE
|
Апісанне тыпаў, канстант, пераменных, працэдур, функцый |
IMPLEMENTATION
|
Рэалізацыя працэдур і функцый, якія апісаны ў інтэрфейснай частцы, і дапаможных алгарытмаў, тыпаў, канстант і пераменных |
BEGIN
|
Прызначаны для ўстаноўкі пачатковых значэнняў пераменных модуля перад яго выкарыстаннем |
END.
Пры апісанні модуля выкарыстоўваюцца службовыя словы: UNIT, INTERFAСE, IMPLEMENTATION.
Прыклад.
UNIT Calendar;
INTERFAСE
TYPE
Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
WorkingDays = Mon .. Fri;
Months = (Jan, Feb, Mar, Apr, May, June,
Jule, Aug, Sept, Oct, Nov, Desem);
Summer = June .. Aug;
Autumn = Sept .. Nov;
Spring = Mar .. May;
Dayno = 1 ..31;
Yearno = 1900 ..2020;
Date = RECORD
Day : Dayno;
Month : Months;
Year : Yearno
END;
{тут можна апісаць падпраграмы на атрыманне дня
нядзелі па зададзеным мінулым дні, месяцы, годзе ...}
IMPLEMENTATION
END.
Прыклад тычыцца вызначэнняў, звязаных з датамі, месяцамі і г. д. Модуль з прычыны сваёй прастаты не ўтрымлівае раздзелаў рэалізацыі і ініцыялізацыі.
Падключэнне модуля адбываецца ў пачатку праграмы аператарам Uses.