- •Уводзіны Ключавыя палажэнні
- •Развіццё моў камп’ютарнага праграміравання
- •Эвалюцыя мовы Pascal
- •Структурная метадалогія распрацоўкі праграм Алгарытм
- •Асноўныя этапы рашэння задач на эвм
- •Блок-схемы
- •Структураграмы
- •Тэсціраванне праграм
- •Адладка праграм
- •Структурнае праграміраванне і дакладнасць праграм
- •Асноўныя канструкцыі структур кіравання
- •Метады распрацоўкі праграм
- •Праграміраванне зверху ўніз (ад агульнага да асобнага)
- •Модульнае праграміраванне
- •Праграміраванне знізу ўверх
- •Структурнае кадзіраванне
- •Арыфметыка эвм Сістэмы злічэння
- •Пераклады лікаў з адной сістэмы злічэння ў другую
- •Пераклад цэлых дадатных лікаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад правільных дробаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад змешаных дробаў
- •Формы прадстаўлення даных
- •Формы прадстаўлення лікаў у персанальным камп’ютары
- •Захаванне лікаў з фіксаванай кропкай
- •Захаванне цэлых лікаў
- •Алгарытм прадстаўлення адмоўнага ліку ў адваротным кодзе
- •Прынцыпы захавання лікаў з плаваючай кропкай
- •Фарматы лікаў з плаваючай кропкай арыфметычнага супрацэсара ibm pc/aт 8087
- •Сродкі алгарытмічнай мовы Pascal Агульная характарыстыка алгарытмічных моў
- •Базавыя элементы мовы Pascal
- •Алфавіт
- •Лексічная структура мовы
- •Агульная структура Pascal-праграмы
- •Простыя даныя мовы Pascal і работа з імі Тыпы звестак
- •Канстанты і пераменныя
- •Абсалютныя пераменныя
- •Цэлалікавыя даныя
- •Бітавая арыфметыка
- •Дзеянні бітавай арыфметыкі
- •Сапраўдныя даныя
- •Аперацыі над сапраўднымі данымі
- •Выразы мовы
- •Літарныя даныя
- •Функцыі
- •Булеўскія даныя
- •Даныя адраснага тыпу
- •Даныя карыстальніцкага тыпу
- •Даныя пералічальнага тыпу
- •Даныя інтэрвальнага тыпу
- •Элементарныя сродкі па рабоце з данымі Наданне значэння даным
- •Найпрасцейшае вызначэнне працэдур і функцый
- •Параметры
- •Знаёмства з файлавай сістэмай
- •Файлавы тып
- •Тэкставыя стандартныя файлы
- •Увод даных розных тыпаў
- •Вывад даных розных тыпаў
- •Вывад сімвалаў
- •Вывад радковых даных
- •Вывад лагічных значэнняў
- •Вывад цэлалікавых значэнняў
- •Вывад даных сапраўднага тыпу
- •Базавыя аператары мовы і метады праграміравання Аператары
- •Простыя аператары
- •Аператар безумоўнага пераходу goto
- •Аператар выкліку працэдуры
- •Пусты аператар
- •Састаўны аператар
- •Аператары выбару
- •Умоўны аператар
- •Метады і прыёмы праграміравання
- •Аператар варыянта
- •Прыклады праграм
- •Аператары паўтарэння
- •Аператар паўтарэння for
- •Аператар паўтарэння repeat
- •Аператар паўтарэння while
- •Хуткая ступень
- •Ітэрацыйныя алгарытмы вышэйшай матэматыкі
- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
- •Механізмы структуравання праграм Працэдуры і функцыі
- •Функцыі карыстальніка
- •Параметры
- •Параметры-значэнні
- •Параметры-пераменныя
- •Прынцып лакалізацыі
- •Пабочны эфект
- •Рэкурсія і ітэрацыі
- •Параметры без тыпу
- •Працэдуры і функцыі як параметры. Працэдурныя тыпы
- •Пераменныя – працэдуры і функцыі
- •Падпраграмы ў модулях
- •Выкарыстанне модуля
- •Стандартныя бібліятэчныя модулі
- •Працэдуры кіравання праграмай
- •Эфектыўнасць праграм
- •Аптымізацыя ў час кампілявання
- •Індэксацыя
- •Выкарыстанне цыклаў
- •Арганізацыя цыклаў
- •Аптымізацыя цыклаў
- •Літаратура
Працэдуры кіравання праграмай
Для кіравання праграмай у Turbo Pascal выкарыстоўваюць працэдуры Delay, Exit, Halt.
Працэдура Delay(T) забяспечвае затрымку выканання праграмы на T мілісекунд. Уключана ў модуль CRT.
Напрыклад: Delay (1000+2000); {затрымка на 3000 мс (3 с)}
Працэдура Exit (з модуля System) забяспечвае выхад з выконваемага блока ў навакольнае асяроддзе. Гэта значыць здзяйсняецца выхад з падпраграмы або функцыі ў вызыўную праграму, калі Exit выкарыстаны там ці калі Exit паказаны ў галоўнай праграме, выхад з асноўнай праграмы ў сістэму праграміравання (калі выконваецца *.pas-файл) ці DOS (калі выконваецца *.exe-файл).
Працэдура Halt(N) (з модуля System) спыняе выкананне праграмы і перадае кіраванне сістэме праграміравання (калі выконваецца *.pas-файл) ці DOS (калі выконваецца *.exe-файл).
Эфектыўнасць праграм
Асноўнай задачай праграміравання з’яўляецца стварэнне правільных і эфектыўных праграм.
Звычайна стыль праграмы больш важны, чым яе эфектыўнасць, бо добра структураваную праграму лягчэй правіць, мадыфікаваць і выкарыстоўваць.
У тых выпадках, калі праграма або не змяшчаецца ў памяці, або часта ўжываецца, або доўга выконваецца, эфектыўнасць становіцца вельмі важкім фактарам.
У кожнай праграмы ёсць свае крытычныя часткі, якія выкарыстоўваюць многа часу ці памяці. Эфектыўнасці адразу падвяргаюцца крытычныя часткі. Такія фрагменты праграмы трэба аптымізаваць, а потым зноў прааналізаваць праграму, каб знайсці іншыя крытычныя часткі.
Аптымізаваць праграму можна на розных этапах яе напісання. Разгледзім некаторыя палажэнні.
Аптымізацыя ў час кампілявання
Некаторыя кампілятары выконваюць аптымізацыю, якая заключаецца ў змяншэнні вылічэнняў, што паўтараюцца. Праграміст можа палегчыць аптымізацыю для кампілятара, зрабіўшы некаторыя дзеянні на ўзроўні ўваходнай мовы.
Разгледзім прыклады:
1) x*y і y*x – для кампілятара розныя выразы;
2) 2.00*x і 2.0*x – для кампілятара розныя выразы;
3) A:=B*B*C*C – лепш запісаць як A:=(B*C)*(B*C);
4) A:=B-C; D:=C-B; – лепш запісаць як D:=-(B-C), бо аптымізуючаму транслятару цяжка выявіць усе паўтаральныя выразы.
Праграмісты павінны запісваць праграму так, каб выключыць, наколькі магчыма, паўтаральныя выразы.
Трэба памятаць, што кампілятар можа аптымізаваць толькі лінейныя ўчасткі праграмы, г. зн. тыя, якія маюць адзін уваход і адзін выхад.
Кампілятар можа аптымізаваць наступнае:
K:=I/3.0*B; P:=3+I/3.0*B; A:=B*B-I/3.0*B;
Ён не можа аптымізаваць такі фрагмент, бо сярод аператараў з’явіўся аператар з меткай:
K:=I/3.0*B; BL : P:=3+I/3.0*B; A:=B*B-I/3.0*B;
Калі другі аператар мае метку, то кампілятар не ведае, які ўплыў акажа пераход на гэты аператар з другога месца. У такім выпадку праграміст павінен сам паклапаціцца аб аптымізацыі выразаў.
Разгледзім, як аптымізаваць такую частку праграмы:
FOR i := 1 TO 100 DO
IF t THEN x[i] := a[i] + b[i]
ELSE
x[i] := a[i] - b[i];
паколькі пераменная t унутры цыкла не змяняецца, але ж 100 разоў выконваецца праверка IF, то лепш запісаць гэты фрагмент інакш:
IF t THEN
FOR i := 1 TO 100 DO x[i]:=a[i]+b[i]
ELSE
FOR i := 1 TO 100 DO x[i] := a[i] - b[i];