- •Уводзіны Ключавыя палажэнні
- •Развіццё моў камп’ютарнага праграміравання
- •Эвалюцыя мовы Pascal
- •Структурная метадалогія распрацоўкі праграм Алгарытм
- •Асноўныя этапы рашэння задач на эвм
- •Блок-схемы
- •Структураграмы
- •Тэсціраванне праграм
- •Адладка праграм
- •Структурнае праграміраванне і дакладнасць праграм
- •Асноўныя канструкцыі структур кіравання
- •Метады распрацоўкі праграм
- •Праграміраванне зверху ўніз (ад агульнага да асобнага)
- •Модульнае праграміраванне
- •Праграміраванне знізу ўверх
- •Структурнае кадзіраванне
- •Арыфметыка эвм Сістэмы злічэння
- •Пераклады лікаў з адной сістэмы злічэння ў другую
- •Пераклад цэлых дадатных лікаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад правільных дробаў з сістэмы злічэння з асновай «p» у сістэму злічэння з асновай «q»
- •Пераклад змешаных дробаў
- •Формы прадстаўлення даных
- •Формы прадстаўлення лікаў у персанальным камп’ютары
- •Захаванне лікаў з фіксаванай кропкай
- •Захаванне цэлых лікаў
- •Алгарытм прадстаўлення адмоўнага ліку ў адваротным кодзе
- •Прынцыпы захавання лікаў з плаваючай кропкай
- •Фарматы лікаў з плаваючай кропкай арыфметычнага супрацэсара ibm pc/aт 8087
- •Сродкі алгарытмічнай мовы Pascal Агульная характарыстыка алгарытмічных моў
- •Базавыя элементы мовы Pascal
- •Алфавіт
- •Лексічная структура мовы
- •Агульная структура Pascal-праграмы
- •Простыя даныя мовы Pascal і работа з імі Тыпы звестак
- •Канстанты і пераменныя
- •Абсалютныя пераменныя
- •Цэлалікавыя даныя
- •Бітавая арыфметыка
- •Дзеянні бітавай арыфметыкі
- •Сапраўдныя даныя
- •Аперацыі над сапраўднымі данымі
- •Выразы мовы
- •Літарныя даныя
- •Функцыі
- •Булеўскія даныя
- •Даныя адраснага тыпу
- •Даныя карыстальніцкага тыпу
- •Даныя пералічальнага тыпу
- •Даныя інтэрвальнага тыпу
- •Элементарныя сродкі па рабоце з данымі Наданне значэння даным
- •Найпрасцейшае вызначэнне працэдур і функцый
- •Параметры
- •Знаёмства з файлавай сістэмай
- •Файлавы тып
- •Тэкставыя стандартныя файлы
- •Увод даных розных тыпаў
- •Вывад даных розных тыпаў
- •Вывад сімвалаў
- •Вывад радковых даных
- •Вывад лагічных значэнняў
- •Вывад цэлалікавых значэнняў
- •Вывад даных сапраўднага тыпу
- •Базавыя аператары мовы і метады праграміравання Аператары
- •Простыя аператары
- •Аператар безумоўнага пераходу goto
- •Аператар выкліку працэдуры
- •Пусты аператар
- •Састаўны аператар
- •Аператары выбару
- •Умоўны аператар
- •Метады і прыёмы праграміравання
- •Аператар варыянта
- •Прыклады праграм
- •Аператары паўтарэння
- •Аператар паўтарэння for
- •Аператар паўтарэння repeat
- •Аператар паўтарэння while
- •Хуткая ступень
- •Ітэрацыйныя алгарытмы вышэйшай матэматыкі
- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
- •Механізмы структуравання праграм Працэдуры і функцыі
- •Функцыі карыстальніка
- •Параметры
- •Параметры-значэнні
- •Параметры-пераменныя
- •Прынцып лакалізацыі
- •Пабочны эфект
- •Рэкурсія і ітэрацыі
- •Параметры без тыпу
- •Працэдуры і функцыі як параметры. Працэдурныя тыпы
- •Пераменныя – працэдуры і функцыі
- •Падпраграмы ў модулях
- •Выкарыстанне модуля
- •Стандартныя бібліятэчныя модулі
- •Працэдуры кіравання праграмай
- •Эфектыўнасць праграм
- •Аптымізацыя ў час кампілявання
- •Індэксацыя
- •Выкарыстанне цыклаў
- •Арганізацыя цыклаў
- •Аптымізацыя цыклаў
- •Літаратура
Тыпізаваныя канстанты тыпу «мноства»
Канстанта тыпу «мноства»:
Канстанта-элемент:
Прыклад.
CONST Xset : SET OF Char=['а', 'б', 'в'];
Разгледзім выкарыстанне даных з тыпам «мноства».
Задача. Запраграміраваць рэшата Эратасфена для пошуку простых лікаў велічыні 255.
Алгарытм. Сярод усёй сукупнасці лікаў ад 2 да 255 выкраслім кратныя чарговаму простаму.
PROGRAM Proct;
VAR
Prime : SET OF 2..255;
j, i, m : Integer;
BEGIN
Write ('увядзі m <= 255');
Readln (m);
Prime := [2..m];
FOR i := 2 TO m DO
IF i IN Prime THEN
FOR j := 2 TO (m DIV i) DO
Prime := Prime-[i * j];
{выключылі ўсе кратныя простаму ліку i}
Writeln ('простыя лікі <=', m);
FOR i := 2 TO m DO
IF i IN Prime THEN Write (i:4);
END.
Заданне. Зададзена паслядоўнасць розных сімвалаў. Падлічыць, колькі сярод іх сімвалаў-лічбаў.
Алгарытм. Бяром чарговы сімвал, пакуль ён не «.». Калі ён у мностве сімвалаў-лічбаў, падлічваем яго. Раздрукоўваем вынік.
Масівы
Пераменныя тыпу «масіў», або масіў, – гэта ўпарадкаваная сукупнасць аднатыпных даных, якія захоўваюцца паслядоўна.
Тып «масіў» вызначаецца наступнай канструкцыяй:
Масіў абавязкова мае фіксаваныя памеры, якія вызначаюць, колькі элементаў захоўваецца ў ім. Любы элемент у масіве можна знайсці па яго індэксе. Індэксы – гэта выразы любога парадкавага тыпу.
Тып індэксаў паказвае, у якіх межах змяняецца індэкс масіву. Тып кампанентаў – любы вядомы тып даных.
Калі ў апісанні масіву зададзены адзін індэкс, масіў называецца аднамерным, два – двухмерным, n – n-мерным. Памеры масіву абмежаваны толькі аб’ёмам памяці. Для Turbo Pascal – гэта прыблізна 64 кб.
У секцыі TYPE можна вызначыць тыпы масіваў. Гэта будуць найменныя тыпы масіваў, якія потым скарыстоўваюцца пры вызначэннях пераменных тыпу «масіў».
Пасля аб’яўлення масіву кожны яго элемент можна апрацоўваць, указаўшы імя (ідэнтыфікатар) масіву і індэксы элемента ў квадратных дужках.
Індэксіраваныя элементы масіву называюцца індэксіраванымі пераменнымі і могуць быць выкарыстаны як простыя пераменныя.
TYPE
Array01to10 = ARRAY [ 1..10] OF Real;
Array11to20 = ARRAY [11..20] OF Real;
Гэтыя два тыпы (Array01to10 і Array11to20) па-рознаму нумаруюць свае элементы, хаця абодва ўтрымліваюць наборы з 10 значэнняў тыпу Real.
VAR
a01to10 : array01to10;
a11to20 : array11to20;
Доступ да i-га элемента масіву:
a01to10[i], i=1,…,10,
a11to20[i], i=11,…,20.
Прыклад 1.
CONST k=4; n=6;
TYPE TVector = ARRAY [1..4] OF Integer;
TMatrica = ARRAY [-4..4, -4..4] OF Real;
TMassiv = ARRAY [1..4] OF TVector;
VAR Matr : TMatrica;
Vect : TVector;
M : TMassiv; масіў масіваў}
Mas : ARRAY [1..k, 1..n] OF Char;
Доступ да элемента masij mas[i,j]. Доступ да элементаў масіву M можна ажыццявіць і так: m[i][j], і так: m[i,j].
У агульным выпадку ніхто не абавязвае аб’яўляць дыяпазон індэксаў масіву лікамі.
Прыклад 2.
TYPE
MonthType = (January, February, March, April, May);
ComplectType = ARRAY [MonthType] OF Word;
SpringType = ARRAY [March..May] OF Word;
VAR
Complect : ComplectType; {5 элементаў тыпу Word}
Spring : SpringType; {3 элементы тыпу Word}
Alpfa : ARRAY [A..Z] OF Char; {26 элементаў}
Switch : ARRAY [boolean] OF Byte; {2 элементы}
Зварот да элементаў вызначаных масіваў:
Spring[April]; Alpfa[X]; Switch[true];
Прыклад 3.
VAR
M : ARRAY[-10..0, A..C, boolean] OF Byte;
Эквівалентны запіс:
M : ARRAY[-10..0] OF ARRAY[A..C] OF
ARRAY[boolean] OF Byte;
У апошнім выпадку M[0] – масіў-матрыца тыпу
ARRAY [A..C] OF ARRAY [boolean] OF Byte;
ці
M[0] – ARRAY [A..C, boolean] OF Byte.
M[0, B] – гэта вектар тыпу ARRAY [boolean] OF Byte.
M[0, B, false] – значэнне тыпу Byte.
Выкарыстоўваць жа элементы M[0], M[0, B] даволі складана, бо трэба клапаціцца аб сумяшчальнасці тыпаў даных.
У памяці камп’ютэра масівы захоўваюцца як суцэльныя паслядоўнасці кампанентаў, пры гэтым калі ў масіве некалькі індэксаў, тады ў першую чаргу змяняецца апошні індэкс, потым перадапошні і гэтак далей да першага. Значыць, матрыцы захоўваюцца па радках:
A : ARRAY[1..5, 1..5] OF Byte;
{a[1,1], a[1,2], a[1,3],…, a[1,5], a[2,1],…, a[5,5]}
Адрас пачатку масіву ў памяці адпавядае адрасу яго першага элемента, г. зн. элемента з мінімальнымі значэннямі індэксаў.
Калі праграма ці фрагмент яе кампілюецца ў рэжыме {$R+}, тады пры звароце да элементаў масіваў будзе правярацца належнасць значэння індэкса аб’яўленаму дыяпазону, і ў выпадку памылкі (парушэнне межаў дыяпазону) узнікне памылка Range check Error.
Прыклад 4.
v : ARRAY [1..10] OF Integer;
Зварот да элемента v[11] дасць памылку на кроку кампіляцыі ў рэжыме {$R+}.
Калі ў рэжыме {$R-} узнікне аналагічная сітуацыя, праграма будзе працаваць далей, і некарэктнае значэнне індэкса можа здабыць якое-небудзь значэнне, але ўсё ж не з патрэбнага масіву. Звычайна праграму адладжваюць у рэжыме {$R+}, а эксплуатуюць пры рэжыме {$R-}.
Работа з элементам масіву займае больш часу, чым са скалярнай пераменнай, бо трэба падлічваць месцазнаходжанне элемента ў памяці. Але пры выкарыстанні масіваў праграмы становяцца больш функцыянальнымі.