- •Уводзіны Ключавыя палажэнні
- •Развіццё моў камп’ютарнага праграміравання
- •Эвалюцыя мовы Pascal
- •Структурная метадалогія распрацоўкі праграм Алгарытм
- •Асноўныя этапы рашэння задач на эвм
- •Блок-схемы
- •Структураграмы
- •Тэсціраванне праграм
- •Адладка праграм
- •Структурнае праграміраванне і дакладнасць праграм
- •Асноўныя канструкцыі структур кіравання
- •Метады распрацоўкі праграм
- •Праграміраванне зверху ўніз (ад агульнага да асобнага)
- •Модульнае праграміраванне
- •Праграміраванне знізу ўверх
- •Структурнае кадзіраванне
- •Арыфметыка эвм Сістэмы злічэння
- •Пераклады лікаў з адной сістэмы злічэння ў другую
- •Пераклад цэлых дадатных лікаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад правільных дробаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад змешаных дробаў
- •Формы прадстаўлення даных
- •Формы прадстаўлення лікаў у персанальным камп’ютары
- •Захаванне лікаў з фіксаванай кропкай
- •Захаванне цэлых лікаў
- •Алгарытм прадстаўлення адмоўнага ліку ў адваротным кодзе
- •Прынцыпы захавання лікаў з плаваючай кропкай
- •Фарматы лікаў з плаваючай кропкай арыфметычнага супрацэсара ibm pc/aт 8087
- •Сродкі алгарытмічнай мовы Pascal Агульная характарыстыка алгарытмічных моў
- •Базавыя элементы мовы Pascal
- •Алфавіт
- •Лексічная структура мовы
- •Агульная структура Pascal-праграмы
- •Простыя даныя мовы Pascal і работа з імі Тыпы звестак
- •Канстанты і пераменныя
- •Абсалютныя пераменныя
- •Цэлалікавыя даныя
- •Бітавая арыфметыка
- •Дзеянні бітавай арыфметыкі
- •Сапраўдныя даныя
- •Аперацыі над сапраўднымі данымі
- •Выразы мовы
- •Літарныя даныя
- •Функцыі
- •Булеўскія даныя
- •Даныя адраснага тыпу
- •Даныя карыстальніцкага тыпу
- •Даныя пералічальнага тыпу
- •Даныя інтэрвальнага тыпу
- •Элементарныя сродкі па рабоце з данымі Наданне значэння даным
- •Найпрасцейшае вызначэнне працэдур і функцый
- •Параметры
- •Знаёмства з файлавай сістэмай
- •Файлавы тып
- •Тэкставыя стандартныя файлы
- •Увод даных розных тыпаў
- •Вывад даных розных тыпаў
- •Вывад сімвалаў
- •Вывад радковых даных
- •Вывад лагічных значэнняў
- •Вывад цэлалікавых значэнняў
- •Вывад даных сапраўднага тыпу
- •Базавыя аператары мовы і метады праграміравання Аператары
- •Простыя аператары
- •Аператар безумоўнага пераходу goto
- •Аператар выкліку працэдуры
- •Пусты аператар
- •Састаўны аператар
- •Аператары выбару
- •Умоўны аператар
- •Метады і прыёмы праграміравання
- •Аператар варыянта
- •Прыклады праграм
- •Аператары паўтарэння
- •Аператар паўтарэння for
- •Аператар паўтарэння repeat
- •Аператар паўтарэння while
- •Хуткая ступень
- •Ітэрацыйныя алгарытмы вышэйшай матэматыкі
- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
- •Механізмы структуравання праграм Працэдуры і функцыі
- •Функцыі карыстальніка
- •Параметры
- •Параметры-значэнні
- •Параметры-пераменныя
- •Прынцып лакалізацыі
- •Пабочны эфект
- •Рэкурсія і ітэрацыі
- •Параметры без тыпу
- •Працэдуры і функцыі як параметры. Працэдурныя тыпы
- •Пераменныя – працэдуры і функцыі
- •Падпраграмы ў модулях
- •Выкарыстанне модуля
- •Стандартныя бібліятэчныя модулі
- •Працэдуры кіравання праграмай
- •Эфектыўнасць праграм
- •Аптымізацыя ў час кампілявання
- •Індэксацыя
- •Выкарыстанне цыклаў
- •Арганізацыя цыклаў
- •Аптымізацыя цыклаў
- •Літаратура
Індэксацыя
Індэксы карысныя, хаця яны растрачваюць і час, і памяць.
Разгледзім, якія дзеянні можна выкарыстаць, каб павысіць эфектыўнасць праграмы:
1. Няхай падлічваецца
x := (a[i] + 1 / a[i]) * a[i]
Лепш зрабіць так:
ai := a[i];
x := (ai + 1.0 / ai) * ai
2. Няхай падлічваецца
FOR i := 1 TO n DO
FOR j := 1 TO m DO
BEGIN
a[i, j] := 0;
FOR k := 1 TO l DO
a[i, j] := a[i, j] + b[j, k] * c[k, j];
END
Тут для кожнага зафіксаванага i, j трэба падлічваць месцазнаходжанне элемента a[i, j], калі k змяняецца ад l да l. Аднак суму можна накопліваць у простай пераменнай t, а потым надаваць значэнне элементу a[i, j].
Індэксацыя валодае адной асаблівасцю: чым больш індэксаў выкарыстоўваецца, тым менш эфектыўная праграма, г. зн., што масіў А[72] больш эфектыўны, чым масіў А[12, 3, 2]. Пры дапамозе прывядзення тыпаў можна налажыць адзін масіў на другі і працаваць з больш эфектыўным.
Трэба пазбягаць вылічэнняў са складанай індэксацыяй. Замест
FOR i := 1 TO 10 DO
X[3 * i + 4] := Y[3 * i + 4] + C
лепш запраграміраваць
FOR i := 1 TO 10 DO
BEGIN
ik := 3 * i + 4;
X[ik] := Y[ik] + C
END;
Выкарыстанне цыклаў
Памяць эканоміцца, калі мы выкарыстоўваем цыклы замест запісу каманд, якія паўтараюцца. Цыклы патрабуюць некаторага дадатковага часу і памяці на ініцыіраванне, праверку, змяненне параметра цыкла і ўстаноўку ўсіх канстант.
1. Не выкарыстоўваць наступны цыкл:
P := A[1];
FOR i := 1 TO 4 DO P := P * x + a[i];
Лепш запісаць схему Горнера:
P := ((a[1] * x + a[2]) * x + a[3]) * x + a[4];
2. Цыклы можна аб’ядноўваць. Замест
FOR i := 1 TO 500 DO x[i] := 0.0;
FOR j := 1 TO 500 DO y[j] := 0.0;
лепш напісаць
FOR i := 1 TO 500 DO
BEGIN
x[i] := 0.0;
y[i] := 0.0
END;
Заданне 1. Трэба вылічыць значэнне N – цэлага ліку, які складаецца з лічбы, якая захавана ў сімвальным выглядзе ў масіве a: a[0] – старэйшая лічба, ..., a[k] – малодшая. У элеменце – знак ліку.
Заданне 2. Па зададзеным цэлым ліку знайсці паслядоўнасць лічбаў гэтага ліку: – малодшая, …, – старэйшая.
Алгарытм. ... .
Арганізацыя цыклаў
Значная колькасць часу затрачваецца на ініцыіраванне і праверку параметра цыкла. Стараннай арганізацыяй укладзеных цыклаў можна зэканоміць час.
Прыклад.
FOR k:=1 TO 20 DO
{ ініцыіраванне выконваецца 1 раз (k := 1)}
FOR j:=1 TO 10 DO
{ ініцыіраванне выконваецца 20 разоў (j := 1)}
FOR l:=1 TO 5 DO
{ ініцыіраванне выконваецца 200 разоў (l := 1)}
BEGIN
{Цела цыкла}
{ аператары выконваюцца 20 * 5 * 10 = 1000 разоў}
END; {{па l} завяршэнне 1000 разоў}
{{па j} завяршэнне 200 разоў}
{{па k} завяршэнне 20 разоў}
Вывад. Ініцыіраванне выконваецца 221 раз і завяршэнне – 1220 разоў.
Гэты прыклад можна перапраграміраваць такім чынам:
FOR l:=1 TO 5 DO
{ ініцыіраванне 1 раз}
FOR j:=1 TO 10 DO
{ ініцыіраванне 5 разоў}
FOR k:=1 TO 20 DO
{ ініцыіраванне 50 разоў}
BEGIN
{Цела цыкла}
END;
{{па k} завяршэнне 1000 разоў = 5 * 10 * 20}
{{па j} завяршэнне 50 разоў = 5 * 10}
{{па l} завяршэнне 5 разоў}
Вывад. Ініцыіраванне выконваецца 56 разоў і завяршэнне 1055 разоў. Тут яўная эканомія.