Сполучення кількох текстових рядків.

 Function Соncat(s1, s2, ... : string) :string;

Функція повертає рядок, який є об'єднанням всіх значень зі списку формальних параметрів.

Якщо довжина утвореного рядка більша ніж 255, то зайві символи ігноруються.

 Приклад:

для рядкових змінних S, S1, S2, S3 запис

 S := Concat( S1, S2, S3 );

тотожний запису

 S := S1 + S2 + S3;


Копіювання частини текстового рядка.

 Function Соpy(s : string; n, k : integer) :string;

Функція повертає рядок, число символів якого задано цілим параметром k і який починається із символу рядка s, номер якого заданий цілим параметром n.

якщо значення параметра n перевищує довжину рядка, то повертається порожній рядок. якщо параметр k задає більше символів, ніж залишається в рядку, починаючи із символу n, то повертається тільки залишок рядка.

 Приклад:

в результаті виконання фрагменту програми

 s := 'ABCDEF';

 s := Copy(s,2,3);

s набуде значення 'BCD'.


Видалення частини текстового рядка.

 Procedude Delete(var s : string; n ,k : integer);

Процедура видаляє символи з текстового рядка s, кількість яких задана цілим параметром k, починаючи із символу рядка s, номер якого заданий цілим параметром n.

якщо значення параметра n перевищує довжину рядка, то символи не видаляються. якщо параметр k задає більше символів, ніж залишається в рядку, починаючи із символу n, то видаляється тільки залишок рядка.

 Приклад:

в результаті виконання фрагменту програми

 s := 'ABCDEF';

 Delete(s,2,3);

s набуде значення 'AEF'.


Вставка тексту в рядок.

 Procedure Insert(s1 : string; var s : string; n : integer);

Параметр s1 являє собою вираз текстового типу. Параметр s - змінна текстового типу будь-якої довжини. Параметр n є виразом цілого типу. Дана процедура вставляє рядок, що задається параметром s1, у рядок, що задається параметром s, починаючи з позиції n. якщо рядок , що утворився в результаті , перевищує 255 символів, то він обрізається до 255 символів.

 Приклад:

в результаті виконання фрагменту програми

 s := 'Наше місто';

 Insert('гарне ',s,6);

s набуде значення 'Наше гарне місто'.


Довжина текстового рядка.

 Function Length(s : string) :integer;

Параметр s є виразом текстового типу. Результатом буде довжина s.

 Приклад:

в результаті виконання фрагменту програми

 s := 'Наше місто';

 n := Length( s );

s набуде значення 10.


Пошук зразка в рядку.

 Function Pos( s1, s : string) :integer;

Параметри s1 і s є виразами текстового типу. Дана функція шукає зразок, заданий параметром s1, у рядку s і повертає ціле значення, що є позицією першого символу s1 в рядку s. якщо зразок не знайдений, то функція повертає значення 0.

 Приклад:

наступний фрагмент програми замінить пробіли нулями

 s := '1 23 5 6';

 while Pos(' ',s) > 0 do

s[ Pos(' ',s)] := '0';

s отримає значення '10230506'.


Модуль числа.
Function Abs(x);

Фактичним параметром має бути вираз дійсного або цілого типу.

Тип результату збігається з типом параметра. Результатом є модуль (абсолютне значення) х.


Квадрат числа.
Function Sqr(x :real);

Фактичним параметром має бути вираз дійсного або цілого типу.

Тип результату збігається з типом параметра. Результатом є квадрат  х, тобто x*x.


Перевірка на парність.
Function Odd(n : integer) :boolean;

Фактичним параметром має бути вираз цілого типу.

Результат має логічний тип і рівний true, якщо n непарне, і false в протилежному випадку.


Отримання символа за його кодом.
Function Chr(n : integer) :char;

Фактичним параметром має бути вираз цілого типу, який задає порядковий номер символа в таблиці кодів.

Результатом є символ з номером n і має символьний тип.


Порядковий номер.
Function Ord(n) :integer;

Фактичним параметром має бути вираз порядкового (boolean, char, integer) типу.

Результатом є номер значення n в множині всіх значень типу і має цілий тип. Для цілого параметру результат завжди рівний n. Функція використовується для знаходження порядкового номера символа в таблиці кодів.


Наступне значення.
Function Succ(n);

Фактичним параметром має бути вираз порядкового (boolean, char, integer) типу.

Тип результату збігається з типом параметра і має наступне після n значення в множині всіх значень типу.


Попереднє значення.
Function Pred(n);

Фактичним параметром має бути вираз порядкового (boolean, char, integer) типу.

Тип результату збігається з типом параметра і має попереднє перед n значення в множині всіх значень типу.


Округлення.
Function Round(x : real) :integer;

Функція Round округляє значення дійсного типу до значення цілого типу.


Відкидання дробової частини.
Function Trunc(x : real) :integer;

Функція перетворює значення дійсного типу до значення цілого типу шляхом відкидання дробової частини.


Синус.
Function Sin(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу, який задає кут в радіанах.

Результатом є значенням синуса x і має дійсний тип.


Косинус.
Function Cos(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу, який задає кут в радіанах.

Результатом є значенням косинуса x і має дійсний тип.


Експонента.
Function Exp(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу.

Результат має дійсний тип і є значенням експоненти x, тобто значення e підноситься до степені x (e - основа натурального логарифма).


Натуральний логарифм.
Function Ln(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу.

Результатом є значенням натурального логарифма x і має дійсний тип.

Зауваження: якщо x <= 0 видається повідомлення про помилку.


Корінь квадратний.
Function Sqrt(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу.

Результатом є значенням квадратного кореня x і має дійсний тип.

Зауваження: якщо x < 0 видається повідомлення про помилку.


Арктангенс.
Function ArcTan(x : real) :real;

Фактичним параметром має бути вираз дійсного або цілого типу.

Результатом є головним значенням арктангенса x і має дійсний тип.


Випадкове число.
Function Random(x);

Фактичним параметром має бути вираз дійсного або цілого типу, який задає діапазон випадкових чисел.

Тип результату збігається з типом параметра. Результатом є випадкове число в діапазоні від [0 ,  x].

Зауваження: якщо функцію Random вживати без параметра, то результатом є дійсне випадкове число в діапазоні [0 , 1].


Число Пі.
Function Pi: real;

Результат має дійсний тип і є значенням числа Pi (3,1415926535897932385).


Опитування системного годинника.

 Procedude Time(var година, хвилина, секунда :integer);

Процедура присвоює фактичним параметрам, які мають бути цілими змінними, значення показів системного годинника в момент звертання до неї.

Параметри приймають такі значення:

година - від 0 до 23;

хвилина - від 0 до 59;

секунда - від 0 до 59.


Календарна дата.

 Procedude Date(var рік, місяць, день :integer);

Процедура присвоює фактичним параметрам, які мають бути цілими змінними, значення показів системного годинника в момент звертання до неї.

Параметри приймають такі значення:

рік – 1999, 2000;

місяць - від 1 до 12;

день - від 1 до 31.


Часова затримка.

 Procedure Delay(ms :integer);

Параметр ms повинен бути виразом цілого типу і задає число мілісекунд інтервалу чекання. Дана процедура є приблизною, тому період затримки не буде точно рівний заданому числу мілісекунд.


Опитування наявності події.

 Function IsEvent :boolean;

Функція повертає логічне значення true, якщо від моменту початку виконання програми або останнього звертання до процедури Event відбулася подія і false в протилежному випадку. Подією вважається натискання довільної клавіші на клавіатурі або натискання мишки у вікні виконання.


Процедура отримання події.

 Procedure Event( var k, x, y :integer);

Подією вважається натискання довільної клавіші на клавіатурі або натискання мишки у вікні виконання. ALGO фіксує факт настання події та запам'ятовує останню подію для її обробки. При настанні наступної події інформація про попередню втрачається. Процедура обнулює признак наявності події та присвоює фактичним параметрам, які повинні бути змінними цілого типу, такі значення.

При натисканні клавіші:

k = 1;

x - код клавіші

y - інформація про стан службових клавіш.

При натисканні кнопки мишки:

k = 2;

x – координата x;

y – координата y.

Коли на момент звертання до процедури подія ще не відбулася, процедура очікує події, про що вказуєтья у вікні режиму роботи ALGO.

Приклад.

Наступна програма малює лінію до точки при натисканні кнопки мишки або виводить код натисненої клавіші до тих пір, поки не буде натиснена клавіша Esc.

Program test;

var i,j,k:integer;

Begin

Repeat

Event(i,j,k);

Case i of

1 : Write(j)

2 : LineTo(j,k)

end

until (i=1) and (j=27)

end.


Графічний екран.

Для відображення інформації в середовищі ALGO виділено робоче поле розміром 800 точок по горизонталі та 600 точок по вертикалі. Частина цього поля видно у вікні виводу. За допомогою вертикального та горизонтального повзунків можна переглядати весь графічний екран.

як видно з наведеного малюнка, початком координат вважають верхній лівий куток екрану. Вісь Х направлена зліва направо, Y - зверху вниз. Для всіх графічних функцій координати задають в формі (X,Y).

якщо координати при побудові зображення виходять за межі графічного екрану, то інформація поза межами екрану ігнорується. Виняток становлять оператори readln та writeln. При спробі виводу за нижню межу екрану все зображення на екрані посувається вверх на величину висоти символа.


Поточні координати та кольoри.

При виводі текстової чи графічної інформації на екран необхідно вказати, куди саме виводити: зверху, посередині чи внизу, а також колір тексту, ліній та заповнення. Вказувати цю інформацію в кожному операторі було б дуже незручно. Тому система запам'ятовує значення координат точки, в якій завершився вивід інформації та кольорів. Ці значення називають активними. При запуску програми встановлюються нульові координати (верхній лівий куток екрану) та чорний колір ліній і тексту. Колір заповнення замкнених фігур (колір пензля) вибирається прозорий, тобто замкнені фігури не зафарбовуються.

В процесі роботи програми активні координати міняються так,щоб наступний вивід здійснювався там, де закінчився попередній.

Активні координати міняють такі процедури MoveTo, LineTo, Line, Rectangle, Write,WriteLn, Point, Clear, а використовують процедури LineTo таWrite,WriteLn

Активні кольори встановлюють процедурами: Color, TextColor, BrushColor

Приклад:

в результаті виконання фрагменту програми

Write('ПОЧАТОК');

LineTo(30,60);

Write('КІНЕЦЬ');

LineTo(0,60);

отримаємо такий результат


Встановлення поточних координат.

Активна графічна позиція встановлюється в точку з координатами x,yпроцедурою MoveTo, яка оголошена наступним чином

procedure MoveTo( x, y : integer);

процедура Перемістити( x, y : цілі);

Активну графічну позицію використовують процедури:

LineTo.

Write,WriteLn.


Проведення лінії до точки.

Коли наступна лінія починається з кінця попередньої, якбуває при побудові ламаних ліній чи графіків, зручно користуватисьпроцедурою LineTo, яка оголошена наступним чином

procedure LineTo( x, y : integer);

процедура ЛініяДо ( x, y : цілі);

де x,y - координати кінця лінії. Лінія починається з активної графічної позиції.Фактичними параметрами при звертанні до процедури LineTo мають бути змінні, константи чи вирази цілого типу.

Лінія буде проведена активним кольором ліній.

Після виконання процедури активна графічна позиція встановлюється в точку з координатами x,y.

Приклад:

в результаті виконання фрагменту програми

LineTo(30,30);

LineTo(10,90);

LineTo(60,90);

отримаємо такі лінії

Активну графічну позицію міняють процедурою MoveTo.

Лінію проводять також процедурою Line.


Проведення лінії між точками.

Лінію проводять за допомогою звертання до стандартної процедури line, яка оголошена наступним чином

procedure line(x1, y1, x2, y2 : integer);

процедура лінія (x1, y1, x2, y2 : цілі);

де x1,y1 та x2,y2 - координати двох кінців лінії. Фактичними параметрами при звертанні до процедури line мають бути змінні, константи чи вирази цілого типу.

Лінія буде проведена активним кольором ліній.

Після виконання процедури активна графічна позиція встановлюється в точку з координатами x2,y2.

Приклад:

в результаті виконання фрагменту програми

line(30,30,90,60);

line(10,90,60,10);

отримаємо такі лінії

Лінію проводять також процедурою LineTo.


Встановлення кольору ліній.

Активний (поточний) колір ліній встановлюють за допомогою звертання до процедури Color, яка оголошена наступним чином

procedure Color (r, g, b : integer);

процедура Колір (r, g, b : цілі);

де r, g, b - задають частки червоного,зеленого та синього в результуючому кольорі ліній. Встановленим кольором будуть відображатись усі лінії , які виводяться на екран процедурами LineTo, Line, Rectangle, Ellipse, Point. Фактичними параметрами при звертанні до процедури Color мають бути змінні, константи чи вирази цілого типу, значення яких знаходиться в діапазоні 0 -:- 255.

По замовчуванню встановлений чорний колір ліній (0,0,0).


Встановлення кольору заповнення.

Активний (поточний) колір заповнення встановлюють за допомогою звертання до процедури BrushColor, яка оголошена наступним чином

procedure BrushColor (r, g, b : integer);

процедура КолірПензля (r, g, b : цілі);

де r, g, b - задають частки червоного,зеленого та синього в результуючому кольорі заповнення. Встановленим кольором будуть зафарбовуватись фігури процедурами Rectangle, Ellipse та Fill. Фактичними параметрами при звертанні до процедури BrushColor мають бути змінні, константи чи вирази цілого типу, значення яких знаходиться в діапазоні 0 -:- 255.

якщо задати один з параметрів від'ємним, то встановлюється так званий прозорий колір заповнення, тобто фігури не зафарбовуються. Такий режим встановлений по замовчуванню.

В залежності від типу монітора операційна система може використовувати для заповнення суміш кольорів. В цьому випадку процедура Fill може працювати некоректно. Для отримання чистих кольорів в цьому випадку треба задавати значенняr, g, b такі, щоб остача від ділення їх на 8 була рівна 7.

Приклад:

в результаті виконання фрагменту програми

 Color(255,0,0);

 Rectangle(0,0,60,60);

 Color(0,0,255);

 BrushColor(0,255,0);

 Rectangle(30,30,90,90);

 Color(255,0,255);

 BrushColor(-1,0,0);

 Ellipse(10,10,80,80);

отримаємо такий результат


Встановлення кольору тексту.

Активний (поточний) колір тексту встановлюють за допомогою звертання до процедури TextColor, яка оголошена наступним чином

procedure TextColor(r, g, b : integer);

процедура КолірТексту (r, g, b : цілі);

де r, g, b - задають частки червоного,зеленого та синього в результуючому кольорі тексту. Встановленим кольором буде відображатись уся текстова інформація, яка виводиться на екран процедурами read та write. Фактичними параметрами при звертанні до процедури TextColor мають бути змінні, константи чи вирази цілого типу, значення яких знаходиться в діапазоні 0 -:- 255.

По замовчуванню встановлений чорний колір тексту (0,0,0).

Приклад:

в результаті виконання фрагменту програми

TextColor(200, 0, 0);

writeln('Привіт, Маруся!');

TextColor(0, 0, 255);

writeln('Здоров, Миколо!');

отримаємо такий результат

Привіт, Маруся!

Здоров, Миколо!


Побудова прямокутника.

Прямокутник будують за допомогою звертання до стандартної процедури rectangle, яка оголошена наступним чином

procedure rectangle(x1, y1, x2, y2 : integer);

процедура прямокутник (x1, y1, x2, y2 : цілі);

де x1,y1 та x2,y2 - координати двох діаметрально протилежних вершин прямокутника. Фактичними параметрами при звертанні до процедури rectangle мають бути змінні, константи чи вирази цілого типу.

Прямокуткик буде побудований активним кольором ліній та зафарбований активним кольором пензля, або не зафарбований, якщо встановлений прозорий колір пензля.

Після виконання процедури активна графічна позиція встановлюється в точку з координатами x2,y2.

Приклад:

в результаті виконання фрагменту програми

rectangle(30,30,90,60);

rectangle(10,90,60,10);

отримаємо такі прямокутники


Побудова еліпса.

Еліпс будують за допомогою звертання до стандартної процедури ellipse, яка оголошена наступним чином

procedure ellipse(x1,y1,x2,y2 :integer);

процедура еліпс (x1, y1, x2, y2 : цілі);

де x1,y1 та x2,y2 - координати двох діаметрально протилежних вершин прямокутника, в який вписується еліпс. Фактичними параметрами при звертанні до процедури ellipse мають бути змінні, константи чи вирази цілого типу.

Еліпс буде побудований активним кольором ліній та зафарбований активним кольором пензля, або не зафарбований, якщо встановлений прозорий колір пензля.

Після виконання процедури активна графічна позиція не змінюється

Приклад:

в результаті виконання фрагменту програми

ellipse( 0, 0,90,60);

ellipse(30,30,60,90);

отримаємо такі еліпси


Крапка.

Щоб поставити (намалювати) крапку в позиції з координатами x,y, треба звернутись до процедури Point, яка оголошена наступним чином

procedure Point( x, y : integer);

процедура Крапка( x, y : цілі);

Фактичними параметрами при звертанні до процедури Point мають бути змінні, константи чи вирази цілого типу.

Колір крапки визначається активним кольором ліній.

Після виконання процедури активна графічна позиція встановлюється в точку з координатами x,y.


Зафарбування замкнених областей.

Щоб зафарбувати замкнену область, треба звернутись до процедури Fill, яка оголошена наступним чином

procedure Fill( x, y : integer);

процедура Зафарбувати( x, y : цілі);

Фактичними параметрами при звертанні до процедури Fill мають бути змінні, константи чи вирази цілого типу.

Починаючи з точки з координатами x,y, процедура заповнює екран у всіх напрямках активним кольором заповнення до тих пір, поки не зустрінеться межа іншого кольору, ніж колір вказаної точки. Іншими словами процедура Fill міняє колір замкненої області, всередині якої лежить точка (x,y) на активний колір заповнення, який встановлюють процедурою BrushColor

Процедура Fill не виконує ніяких дій, якщо заданий прозорий колір заповнення або колір точки (x,y) співпадає з кольором заповнення.


Вибір шрифта.

Активний (поточний) шрифт для виведення тексту встановлюють за допомогою звертання до процедури font, яка оголошена наступним чином

procedure font (h, a, b : integer);

процедура шрифт (h, a, b : цілі);

де h, a, b - задають висоту в половинах піксела, кут нахилу в градусах та насиченість тексту. Насиченість задають числом з діапазону 0 -:- 1000. При цьому звичайний шрифт має насиченість 400, а жирний - 600. Встановленим шрифтом буде відображатись уся текстова інформація, яка виводиться на екран процедурами read та write. Фактичними параметрами при звертанні до процедури font мають бути змінні, константи чи вирази цілого типу.

По замовчуванню встановлений шрифт (8,0,400).

Зауваження: для коректної роботи при виведенні нахиленого тексту треба перед оператором виведення встановлювати графічну позицію, а в списку виводу вказувати лише одне значення.

Приклад:

в результаті виконання фрагменту програми

font(20,0,300);

writeln('горизонтальний текст');

moveto(0,100);

font(30,30,800);

writeln('нахилений текст');

отримаємо такий результат


Витирання вікна виведення.

Для витирання вікна результатів використовують процедуру

procedure clear ;

процедура витерти ;

Крім витирання вікна, процедура виконує натупні дії:

встановлює чорний колір ліній та тексту;

встановлює прозорий колір заповнення;

встановлює активну графічну позицію - ( 0, 0);

встановлює активний шрифт - (8,0,400).


Текстові файли.
Текстові файли. Ввід даних з клавіатури.

Будь-який файл, що складається з послідовності символів, можна представити у такому вигляді.

Бачимо, що файл є набором рядків тексту, кожен з яких закінчується спеціальним символом "кінець рядка". Весь файл закінчується символом "кінець файлу".

При відкриванні файлу для читання операційна система створює спеціальний вказівник, який показує наступний символ, який повинен бути прочитаний з файлу, і встановлює його на перший символ файлу. Зчитуючи кожен наступний символ, операційна система переставляє вказівник на наступний символ. Символи "кінець рядка" вводяться як будь-які інші, а спроба прочитати "кінець файлу" діагностується як помилка. Отже файл читається тільки посимвольно від початку до кінця, тобто є файлом послідовного доступу.

Аналогічно можна було б організувати введення з клавіатури. При звертанні до оператора Read система очікувала б натискання клавіш і вводила інформацію символ за символом. Але це незручно, бо випадково чи помилково натиснутий символ безпосередньо вводиться в програму, що позбавляє користувача можливості зробити виправлення.

Тому для введення даних з клавіатури передбачений спеціальний рядок символів, який називається буфером введення. При запуску програми на виконання буфер введення порожній. Коли зустрічається перший Read, виконання програми припиняється до тих пір, поки користувач не введе з клавіатури в буфер рядок символів, завершивши його натисканням Enter. До натискання цієї клавіші користувач може перевіряти і виправляти рядок. Виконання програми поновлюється, а ввід здійснюється з буфера до тих пір, поки не буде прочитаний останній символ, який міститься в ньому. Коли даних не вистачає, то система очікує вводу в буфер нового рядка. Таким чином - введення з клавіатури повністю аналогічно введенню з файлу, тільки при цьому кожний рядок вводиться користувачем.

Наприклад, якщо при виконанні фрагменту програми

Read(a);

WriteLn('A=',a);

Read(b);

WriteLn('B=',b);

ввести два числа одразу, то програма не очікуватиме вводу другого числа, а введе його з буфера, тобто у вікні виконання будемо бачити таке:

10	25

A=	10

B=	25


Приєднання файлу.

Procedude  Аssign( f :text ; name :string);

Процедура  Приєднати( f :текст ; name :рядок);

Параметр f  є файловою змінною типу текст, а  є виразом текстового типу. Подальші операції з f  будуть виконуватися з зовнішнім файлом з ім'ям, заданим параметром .

Ім'я складається з маршруту (шляху доступу), що визначає доступ до 0 або більш каталогів, імена яких відділені одне від одного за допомогою оберненої косої риски, за яким слідує справжнє ім'я файлу:

 Диск:\ім'я_кат\ім'я_кат\...ім'я_кат\ім'я_файлу

 Якщо шлях доступу починається з оберненої косої риски, то пошук починається в кореневому каталозі, у протилежному випадку він починається в поточному каталозі. Диск являє собою ідентифікатор диску (А-Z). якщо Диск і двокрапка будуть опущені, то використовується призначений по замовчуванню диск.

Параметр ім'я_файлу може містити саме ім'я, за яким можуть слідувати крапка і розширення імені файлу, довжиною до трьох символів.

Процедура Аssign не повинна використовуватися для відкритого файлу.


Закривання файлу.

Procedude  Close(f :text );

Процедура  Закрити(f :текст );

Параметр f  являє собою файлову змінну типу текст, що був попередньо відкритий за допомогою процедур Rеset або Rеwrite. Для зовнішнього файлу, пов'язаного зі змінною f  цілком виконується його відновлення і потім він закривається, після чого файловий канал операційної системи для даного файлу звільняється для наступного використання.


Опитування кінця файлу.

Function  Eof(f :text ) :boolean;

Параметр f  є файловою змінною, що визначає текстовий файл. якщо цей параметр опущений, то функція використовується для стандартного вводу з клавітури (натискання Ctrl+Z вводить символ “кінець файлу”).

Коли поточна позиція у файлі вказує на символ “кінець файлу” або якщо файл не містить ніяких елементів, то функція Еоf(f) повертає значення true. У протилежному випадку вона повертає значення false.

Функцією Eof слід користуватись дуже акуратно при роботі з текстовими файлами. Дуже часто в літературі для роботи з нетипізованими файлами наводиться такий приклад:

while not Eof(MyFile) do

Begin

Read(MyFile,alfa);

..................

end;

Для текстових файлів ця програма працюватиме правильно лише в тому випадку, коли символ "кінець файлу" слідує безпосередньо після останньої цифри останнього числа. Коли після останнього числа є пробіл або символ кінця рядка, то виконання циклу продовжиться і наступний оператор введення завершиться аварійно.


Опитування кінця рядка.

Function  Eoln(f :text ) :boolean;

Параметр f  є файловою змінною, що визначає текстовий файл. якщо цей параметр опущений, то функція використовується для стандартного вводу з клавітури (натискання Enter вводить символ “кінець рядка”).

якщо поточна позиція у файлі вказує на символ “кінець рядка”, то функція Еоln(f) повертає значення true. У протилежному випадку вона повертає значення false.


Введення інформації.

Read( [  f : text ; ] v1, [, v2,...,vn ] );

Ввести( [  f : текст ; ] v1, [, v2,...,vn ] );

Параметр f  (якщо він наявний) є файловою змінною, яка відповідає текстовому файлу. Коли він пропущений, то процедура використовується для стандартного вводу з клавітури. Кожний параметр v є змінною символьного, текстового, цілого або дійсного типу. Повинна бути хоча б одна змінна, значення якої треба прочитати.

У випадку символьного типу процедура Rеаd зчитує із файлу один символ і присвоює його змінній. Вказівник файлу переміщується на наступну позицію. Символ “кінець рядка” (Chr(13)) зчитується як звичайний символ. Коли поточна позиція у файлі вказує на символ “кінець файлу” або якщо файл не містить ніяких елементів, то видається повідомлення про помилку.

У випадку змінної цілого або дійсного типу процедура Rеаd зчитує з файлу послідовность символів, що утворять число, відповідно до синтаксису запису чисел. Вказівник файлу встановлюється на перший символ після числа. якщо числовий рядок не відповідає синтаксису, то виводиться повідомлення про помилку. У протилежному випадку змінній присвоюється значення прочитаного числа.

У випадку змінної текстового типу процедура Rеаd зчитує усі символи, аж до мітки кінця рядка (але не включаючи її), або до кінця файлу. Змінній присвоюється текстовий рядок, що утворився в результаті. якщо довжина результуючого рядка перевищує 255, то вона урізається. Вказівник файлу залишається на мітці кінця рядка. Тому для зчитування послідовності рядків не можна використовувати послідовного звертання до процедури Rеаd, оскільки при цьому ви ніколи не перейдете далі першого рядка. Після першого звертання до процедури Rеаd наступні операції Rеаd будуть виявляти мітку кінця рядка і повертати рядок нульової довжини. Тому для зчитування послідовності рядків використовуйте процедуру RеаdLn.


Ввід рядка.

ReadLn( [  f : text ; ] v1 [, v2,...,vn ] );

ВвестиР( [  f : текст ; ] v1 [, v2,...,vn ] );

Процедура виконується аналогічно до Read, але після присвоєння значень всім елементам списку змінних встановлює вказівник файлу на початок наступного рядка, пропускаючи всю інформацію до кінця поточного рядка.

Виклик функції ReadLn(f) без списку змінних приводить до переміщення поточної позиції файлу на початок наступного рядка (якщо вона є, у протилежному випадку відбувається перехід до кінця файлу). Просто запис ReadLn без параметрів очищує буфер вводу з клавіатури, якщо в ньому були символи, або очікує натискання клавіші Enter.

Коли для роботи програми потрібно вводити багато інформації, то доцільно створити текстовий файл і вводити інформацію з нього, а не з клавіатури. Для відлагодження програми її прийдеться виконувати багато разів і, коли нема файлу, щоразу вводити дані.

Наведемо приклад фрагменту програми, яка ілюструє ввід з текстового файлу.

Program апроксимація;

Var

  ПочІнт, КінІнт : real;

  КількТочок, ПорПолін, K : integer;

  X, Y : array [1:10] of real;

  Дані : text;

Begin

  Assign( Дані, 'apr.dat' );

  Reset( Дані );

  ReadLn( Дані, ПочІнт );

  ReadLn( Дані, КінІнт );

  ReadLn( Дані, КількТочок );

  ReadLn( Дані, ПорПолін );

  for K:=1 to КількТочок do

    ReadLn( Дані, X[K], Y[K] );

...........................

Для її роботи потрібно підготувати файл apr.dat, можливий текст якого наведений далі. Зверніть увагу, що при процедура ReadLn ігнорує залишок рядка після вводу параметрів, які є у її списку. Ми використали це, щоб написати коментарі до чисел.

0.5   початок інтервалу

7.35  кінець інтервалу

7     кількість точок

5     порядок поліному

0.83   7.28 значення X,Y

1.33   5.07

2.28   10.25

4.27   1.25e-3

4.83   -3.85

5.01   -2.57

7.07   1.586


Відкривання файлу для читання.

Procedure Reset(f :text );

Процедура Встановити(f :текст );

Параметр f  є файловою змінною. Він повинен бути пов'язаний із зовнішнім файлом за допомогою процедури Assign.

Процедура Reset відкриває існуючий зовнішній файл, ім'я якого було привласнено f . якщо зовнішній файл із зазначеним ім'ям відсутній, то це є помилкою. якщо файл f  уже відкритий, то він спочатку закривається, а потім відкривається знову. Поточна позиція у файлі встановлюється на початок файлу. Текстовий файл стає доступним тільки для читання.


Відкривання файлу для запису.

Procedure Rewrite(f : text );

Процедура переписати(f : текст );

Параметр f  є файловою змінною. Він повинен бути пов'язаний із зовнішнім файлом за допомогою процедури Assign.

Процедура Reset створює новий зовнішній файл, ім'я якого було привласнено f . якщо зовнішній файл із зазначеним ім'ям вже існує, то він знищиться і на його місці створюється новий порожній файл. Файл стає доступним тільки для запису.


Вивід інформації.

Write( [ f : text ; ] v1 [, v2,...,vn] );

Вивести( [ f : текст ; ] v1 [, v2,...,vn] );

Параметр f  (якщо він наявний) є файловою змінною, яка відповідає текстовому файлу. Коли він пропущений, то процедура використовується для стандартного виводу на екран. Кожний параметр v є виразом, значення котрого повинно бути записане у файл чи виведене на екран. Кожний вираз повинний бути символьного, цілого, дійсного, текстового або логічного типу. В списку повинен бути хоча б один вираз.

Після кожного виразу можна вказувати мінімальну кількість символів, якою має бути записане виведене значення. Для цього після виразу ставиться двокрапка і записується вираз цілого типу, значання якого вказує кількість символів. якщо для значення, що виводиться, потрібно менше місця, то процедура дописує зліва необхідну кількість пробілів. Коли ж значення неможливо записати у вказаному полі, то воно записується мінімально можливою кількістю символів.

 Дійсне значення записується у формі з плаваючою комою (+0.0000000Е+000). Мінімально можливе поле для нього – 7 символів. Можна виводити дійсні числа у формі з фіксованою комою. Для цього після відповідного виразу дійсного типу, значення якого треба вивести, вказують два числа, відділяючи кожне двокрапкою. При цьому перше означає загальну кількість позицій, яка має бути виділена для числа, а друге – кількість цифр після десяткової крапки.

При виводі логічного значення виконуються такі ж дії, як при записі рядків ‘Тruе’ або ‘False’, у залежності від значення виразу, який виводиться.

Процедура Write виводить всю інформацію в один нескінченно довгий рядок (виняток складає вивід символа «кінець рядка»). Це означає, що при наступному звертанні до вивід почнеться з того місця, на якому завершився попередній. Для переходу на новий рядок використовують процедуру WriteLn.

В ALGO екран завжди знаходиться в графічному режимі. Для запам’товування координат місця, в яке потрібно здійснювати вивід, існує так звана активна графічна позиція. При виводі кожного символа координата Х збільшується на ширину символа вибраного шрифта, а при виводі символа “кінець рядка” координата Х=0, а Y збільшується на висоту символа.


Вивід з переходом на новий рядок.

WriteLn( [ f : text ; ] v1 [, v2,...,vn] );

ВивестиР( [ f : текст ; ] v1 [, v2,...,vn] );

Процедура виконує процедуру Write, а потім виводить символ кінця рядка. Коли виразів немає, то виводиться тільки символ кінця рядка.


Від автора.
Призначення програми.

ALGO - одна з перших оболонок, яка розроблена не для професійного програмування, а для навчання програмуванню.

Так історично склалося, що програмування всі вивчали, користуючись професійними системами. Це було зрозуміло і на старих великих обчислювальних машинах, і на перших персональних комп'ютерах з вбудованою мовою Бейсик або однозадачною операційною системою MS DOS. Багатозадачні операційні системи з інтуїтивно зрозумілим для користувача інтерфейсом (MAC OS, Windows, Linux та ін.) витіснили старі системи разом зі старими комп'ютерами.

Однак програмне забезпечення для програмування настільки ускладнилось, що стало практично недоступне для початківців, які мають зрозуміти поняття змінної, виразу, умови, циклу і т.д. Повертатися з цією метою до текстового Бейсика чи Tubo Pascal для DOS не хотілося, тому і було створене ALGO - середовище із загальноприйнятим сучасним графічним інтерфейсом і простою мовою програмування.

Ми маємо лабораторне обладнання для вивчення більшості предметів. ALGO - навчальна система програмування , тобто аналог лабораторного обладнання для вивчення програмування. Це перша реалізація і, як в кожній справі, перша спроба не завжди дає досконалий результат. Ваші зауваження допоможуть усунути наявні недоліки та помилки.

Відповідність до інших систем програмування.

В середовищі ALGO реалізована мова програмування Pascal. Однак вибрані тільки ті елементи мови, які необхідні початківцю для розуміння основ програмування. В цьому розділі перелічені основні відмінності реалізованої мови від мови середовища Turbo Pascal.

Не підтримуються вказівники, об'єкти, UNIT, USES.

Не реалізовані множинні, перелічувані та діапазонні типи.

Файли підтримуються тільки текстові.

Опис міток повинен бути останнім при оголошенні, а мітки позначаються тільки цілими числами.

В наступних версіях ALGO будуть по черзі зніматись ці обмеження, про що буде вказано в цьому розділі.


Користування довідковою системою.

Довідкова система середовища ALGO побудована з використанням стандартних засобів операційної системи Windows. Наведемо лише основні прийоми роботи з довідкою. При натисканні клавіші F1 довідкова система активізується і переходить до розділу, в якому описане слово, на яке вказував курсор в момент натискання клавіші. Якщо такого розділу немає, то виводиться зміст всіх розділів. В цьому випадку потрібно відшукати по змісту потрібний розділ і вивести його подвійним натисканням кнопки мишки.

При описі кожного розділу нові терміни і поняття виділені зеленим кольором і підкреслені. Коли вказівник мишки потрапляє на виділені слова, він набуває форми вказівного пальця. Це означає, що можна натисканням калавіші мишки негайно вивести розділ, в якому описаний виділений термін. Прочитавши опис, можна повернутись назад до попереднього розділу натисканням відповідної кнопки в меню довідкової системи.

В довідковій системі ALGO описано:

як користуватись оболонкою програмного середовища, зчитувати з диску, записувати на диск, готувати та виправляти тексти програм, а також виконувати їх;

підмножина мови програмування Паскаль, реалізована в ALGO;

інформація про всі стандартні процедури і функції;


Користування оболонкою.

Для того, щоб виконати програму, написану мовою Паскаль, необхідний комрілятор, який перекладе цю програму в коди комп'ютера. Але для цього потрібен текстовий файл з програмою на Паскалі. Щоб підготувати такий текст потрібно скористуватись екранним редактором. Крім того потрібно вміти запустити програму на покрокове виконання, мати засоби роботи з файлами, перегляду проміжних результатів та багато іншого. Всі ці засоби, зібрані разом, назвемо програмним середовищем, а вигляд цього середовища на екрані (вікна, меню, кнопки) - оболонкою.

На малюнку поданий вигляд оболонки ALGO і показані основні його елементи.

Оболонка виконана двома мовами - англійською та українською. Для переходу на англійську мову треба натиснути кнопку [image], а на українську - кнопку [image]. Це ж можна зробити з клавіатури натисканням Ctrl+E та Ctrl+U відповідно, або через меню (Опції Англійська мова; Опції Українська мова)

Для переходу до меню вказують мишкою на відповідний його пункт або натискають клавішу Alt, вибирають потрібний пункт клавішами керування курсором, після чого натискають Enter.

Мова оболонки ніяк не пов'язана з режимом роботи клавіатури. Для переключення клавіатури з латинських букв на кириличні і навпаки в більшості випадків використовують правий Ctrl+Shift. Це треба виясняти у викладача або власника комп'ютера. Але завжди можна переключити режим роботи клавіатури за допомогою іконки в правому нижньому кутку екрану, як показано на малюнку.

Звертайте увагу на вікно режиму роботи програми. Підготовка та виправлення тексту програми дозволяється тільки в режимі редагування. В інших випадках для переходу в цей режим треба натиснути кнопку [image] або клавішу F6 .

У вікні заголовка вказано повний шлях та ім'я файлу програми, з яким Ви працюєте. Коли цієї інформації нема, то це означає, що Ви не записували програми на диск. Рекомендується записувати програму після набору кожних 10 - 20 рядків тексту та перед першим виконанням. Інакше в результаті помилкових дій чи збою програми підготовлений Вами текст програми може бути втрачений.


Зчитування та запис програм.

Для того, щоб зчитати (завантажити) програму з диску, треба натиснути кнопку [image] на панелі інструментів або вибрати пункт Файл Прочитати в меню, або натиснути клавішу F3. На екрані появиться вікно системного діалогу, яке має такий вигляд.

За допомогою цього діалогу Ви можете вибрати і прочитати будь-який доступний текстовий файл. Не можна вводити імена файлів, яких немає. Для того, щоб створити новий файл, треба натиснути кнопку [image] на панелі інструментів або вибрати пункт Файл Новий в меню, або натиснути клавішу F4.

Аналогічним способом записують (зберігають) файли на диску. Для цього треба натиснути кнопку [image] на панелі інструментів або вибрати пункт Файл Записати в меню, або натиснути клавішу F2. Вікно системного діалогу має такий самий вигляд. Коли Ви записуєте новий файл, то обов'язково слід ввести з клавіатури його ім'я у відповідному вікні діалогу. якщо при цьому буде вказане розширення (.pas, .dat, .txt), то файл буде записаний з цим розширенням, інакше система автоматично запише файл з розширенням .pas.

При потребі запису файлу в нову папку (підкаталог) можна створити її за допомогою цього ж діалогу, натиснувши кнопку [image].


Редагування тексту програми.

Для вказання місця, на яке записується введений з клавіатури текст, використовується курсор - мигаюча вертикальна риска. Введений символ завжди записується перед курсором, а наявний текст розсувається на одну позицію. Символи переходу на новий рядок (Enter) та пробіл (довга клавіша внизу клавіатури) опрацьовуються так само, як і решта символів.

Курсор можна перемістити за допомогою клавіш керування курсором, вертикальної та горизонтальної полос прокрутки та натисканням лівої кнопки мишки у відповідній позиції. Курсор ніколи не встановлюється поза текстом. Наприклад, коли Ви вкажете позицію після рядка, то курсор буде встановлений на кінець рядка.

Витерти неправильний символ перед курсором можна клавішею BackSpace, а після курсора - клавішею Delete.

При виправленні програм часто виникає необхідність витерти чи переставити в інше місце великі фрагменти тексту (блоки). Для цього передбачені так звані блочні операції. Щоб помітити блок треба поставити курсор на його початок і, тримаючи натисненою клавішу Shift, перемістити курсор до кінця блоку. Блок при цьому буде виділений чорним кольором. Це ж можна зробити мишкою: натиснути ліву кнопку на початку блоку і провести до кінця, не відпускаючи кнопки. Помітка автоматично анульовується будь-якою операцією переміщення курсора.

З поміченим блоком можна виконувати такі операції:

вилучити клавішею Delete;

вилучити і запам'ятати в спеціальному буфері натисканням кнопки [image] на панелі інструментів або вибором пункту Редактор Вилучити в меню, або натисканням Shift+Delete на клавіатурі;

скопіювати в буфер натисканням кнопки [image] на панелі інструментів або вибором пункту Редактор Скопіювати в меню, або натисканням Ctrl+Insert на клавіатурі;

скопіювати вміст буфера в текст програми на місце курсора натисканням кнопки [image] на панелі інструментів або вибором пункту Редактор Вставити в меню, або натисканням Shift+Insert на клавіатурі.

В буфері одночасно може знаходитись лише один фрагмент тексту, який зберігається протягом всього часу роботи програми. Це дає можливість переставляти фрагменти тексту з одного файлу в інший.

ALGO передбачає можливість автоматичного впорядкування тексту програми (запису кожного оператора з нового рядка, відступів перед вкладеними операторами і т.п.). Для виконання цієї операції натисніть кнопку [image] на панелі інструментів або виборіть пункт Редактор Впорядкувати в меню.

Увага! Впорядкування тексту програми є незворотньою операцією. Ви вже не зможете повернутись до попереднього тексту. Тому перед виконанням цієї операції бажано записати програму на диск.

Для спрощення підготовки програми забезпечена можливість вставки в програму операторів, описів та інших конструкцій, які можна вибирати з меню Шаблони. Це ж меню можна активізувати клавішею F10 або натисканням правої кнопки мишки. Вибраний текст вставляється в програму на місце курсора.


Виконання програми.

Щоб виконати програму треба натиснути кнопку [image] на панелі інструментів або вибрати пункт Команди Виконати програму в меню, або натисути клавішу F9.

як не прикро, але в більшості випадків замість очікуваного результату виконання отримуємо повідомлення про помилку в програмі. ALGO виділяє червоним кольром рядок, в якому припинилася компіляція і встановлює курсор на місці зупинки. Це не завжди означає, що саме в цьому рядку допущено помилку. Наприклад, якщо курсор встановлений на початку виділеного рядка, а в тексті повідомлення є слово "пропущено", то це в більшості випадків означає, що пропущено щось в попередньому рядку.

При виконанні програми зеленим кольром виділяється рядок, який виконується, а у вікні режиму роботи вказаний поточний режим.

Кнопкою [image] або клавішею F6 завжди можна припинити виконання програми.

Кнопками [image] та [image] або клавішамиF8 та F7 можна виконувати програму покроково та до курсора відповідно.


Подвійна клавіша.
Запис Клавіша1+Клавіша2 означає, що потрібно натиснути Клавішу1 і, тримаючи її натисненою, натиснути Клавішу2.


Клавіші керувнння.


Символи і зарезервовані слова.

Символами (лексемами) називаються мінімальні значимі одиниці тексту в програмі, написаної на Паскалі.

Програма, написана на Паскалі, складається з лексем і роздільників, причому роздільник являє собою пробіл, перехід на новий рядок або коментар. Лексеми подані такими категоріями як спеціальні символи, ідентифікатори, мітки, числа і рядкові константи. Дві сусідніх лексеми, якщо вони являють собою зарезервоване слово, ідентифікатор, мітку або число, повинні бути відділені одна від одної одним або кількома роздільниками. Роздільники не можуть бути частиною лексем, за винятком рядкових констант.

Спеціальні символи і зарезервовані слова.

Паскаль використовує такі підмножини набору символів коду ASCII:

- Букви англійського алфавіту від A до Z і від a до z.

- Букви українського алфавіту від А до Я і від a до я.

- Арабські цифри від 0 до 9.

- Пробіли - символ пробілу (ASCII 32) і усі керуючі символи коду ASCII, включаючи символ кінця рядка або символ повернення (ASCII 13).

Спеціальні символи і зарезервовані слова являють собою символи, що мають одне або кілька фіксованих значень. Спеціальними символами є такі одиночні символи:

+ - * / = < > [ ] . , ' ( ) : ; { }

Такі пари символів також являють собою спеціальні символи:

Деякі спеціальні символи є також знаками операцій.

Нижче наведена таблиця зарезервованих слів мови Паскаль та їхніх перекладів, які використовуються при роботі ALGO українською мовою.

Тут зарезервовані слова записані малими літерами. Проте, для Паскалю байдужний регістр клавіатури, тому ви можете використовувати у своїй програмі як великі, так і малі букви.

На вiдмiну вiд багатьох реалiзацiй програмних оболонок з  компiлятором Паскалю ця оболонка допускає використання букв українського алфавiту в конструкцiях мови.


Імена (ідентифікатори).

Ідентифікатори виступають у якості імен констант, типів, змінних, процедур, Функцій, програм та полів у записах. Ідентифікатор може мати довжину до 16 символів.

Ідентифікатор повинен починатися з букви і не повинен містити пробілів. Після першого символу допускають букви, цифри і знак підкреслення _. як і зарезервовані слова, ідентифікатори байдужні до регістра клавіатури.

Приведемо кілька прикладів ідентифікаторів:

G, alfa, test17, x2y,

Сума2Чисел, кінець_масиву.

Надалі слова «ім’я» та “ідентифікатор” вживатимемо як синоніми.

В ALGO ідентифікатори, які означають імена стандартних типів, функцій та процедур, виділяються червоним кольром. Мова Паскаль не забороняє використовувати ці імена для позначення інших змінних, але робити це не рекомендується, бо змінні з іменами sin, write і т.п. заплутують автора програми та інших програмістів.

Змінним, функціям і типам бажано надавати такі імена, щоб при читанні програми відразу було зрозумілим призначення даного ідентифікатора.


Числа, символи, рядки.

Для чисел, що є константами цілого і дійсного типу, використовується звичайний десятковий запис. Для відокремлення цілої частини дійсного числа від дробової використовують крапку. В Паскалі дійсне число не може починатися з крапки. Технічне позначення (Е або е з показником) у дійсних типах читається як "на десять у ступені". Наприклад, 7.3Е-3 означає [image] тобто 0.0073. Числа з десятковими крапками або экспонентами являють собою константи дійсного типу. Числа без десяткової крапки та експоненти позначають константи цілого типу. Вони повинні приймати значення в діапазоні від -2147483648 до 2147483647. Знак перед числом в програмі не належить до числа, а є унарною операцією.

Рядок символів являє собою послідовність, що містить нуль або більше символів із розширеного набору символів коду ASCII, записану в одному рядку програми й укладену в одиночні лапки (апострофи). Рядок символів, який нічого не містить між апострофами, називається нульовим рядком. Два послідовних апострофи в рядку символів позначають один символ - апостроф. Атрибут довжини рядка символів виражається справжньою кількістю символів між апострофами.

Рядок, який містить один символ, є константою символьного типу, а рядок іншої довжини - константою рядкового типу.


Пояснення до програми (коментарі).

Будь- який текст, взятий в фігурні дужки або обмежений парами символів (* *) є коментарем та ігноруються компілятором:

{будь-який текст, що не містить праву фігурну дужку}

(*будь-який текст, що не містить зірочку/праву круглу дужку*)

Коментарі в ALGO виділяються зеленим кольром.

При написанні програм, робота яких не є очевидною, бажано писати коментарі, щоб інший програміст міг зрозуміти їх.


Структура програмного модуля.

Кожна програма, процедура чи функція складається з заголовку та тіла програмного модуля, яке надалі будемо називати блоком.

Заголовки процедури та функції описані в окремому розділі.

Заголовок програми є суто декоративною деталлю, бо вказана в ньому інформація не використовується ніде. Але заголовок є обов'язковим і записується в такому вигляді:

Program назва;

Програма назва;

Зауважимо, що назва програми ніяк не пов'язана з іменем файлу, у якому ця програма записана.

Після заголовку записують блок, який завершується словом end, після якого ставиться крапка.

Структура блоку.

Блоки складаються з описів, що записані в певному порядку, і операторів. Всі ідентифікатори і мітки, описані в розділі описів даного блоку, є для блоку локальними, тобто доступні тільки в цьому блоці.

У загальному вигляді будь-який блок має такий формат:

розділ опису міток;

розділ опису констант;

розділ опису типів;

розділ опису змінних;

опис процедур та функцій;

begin

оператор1;

.....................

операторN

end

В кожному конкретному випадку задаються лише необхідні для даного програмного модуля розділи описів, але порядок їх слідування повинен строго відповідати приведеній схемі.

Наведемо приклад програми, яка виводить квадрати введених чисел, поки не буде введений нуль.

Program Квадрат;

Var

i:integer;

Begin

repeat

Read(i);

WriteLn(sqr(i));

until i=0

end.


Змінні.

Поняття змінної в програмуванні достатньо близьке до звичного для нас математичного поняття. В математиці, фізиці змінною ми називаємо деяке символічне позначення величини, яка може набувати різних значень. Причому змінна - це не завжди число. Вектори, матриці та більш складні структури теж позначають буквами і називають змінними.

Обчислювальна машина обробляє інформацію, записану певним способом в оперативній пам'яті. Для символа тексту, цілого чи дійсного числа, логічного значення в пам'яті виділяється ділянка необхідного розміру, в яку може бути записана інформація. Отже для кожної одиниці інформації треба знати місце її розміщення в пам'яті (адресу), та спосіб (формат) запису.

Пам'ять, необхідна для розміщення величин, що міняються в процесі роботи програми (змінних), виділяється компілятором автоматично. Кожній змінній ми надаємо ім'я, яке однозначно ідентифікує її, (ідентифікатор). Для того, щоб компілятор міг визначити розмір пам'яті для змінної та формат запису її значення, необхідно вказати її тип, тобто описати її.

Ідентифікатор описаної змінної вказує адресу в пам'яті, де записано її значення, а також розмір і формат запису цього значення.

Якщо ідентифікатор зустрічається у виразі, то це означає, що треба прочитати з пам'яті і використати для обчислень значення змінної. Якщо в лівій частині оператора присвоєння, то записати значення в ділянку пам'яті, яка виділена для змінної.

ALGO перед використанням значення змінної перевіряє, чи даній зінній було надане якесь значення.

Змінні структурних типів (масиви і записи) займають в пам'яті великі ділянки і складаються з простих елементів. Для доступу до них використовують індекси масиву та імена полів запису. Тут лише наголосимо, що і структурний тип і його компоненти є змінними.


Видимість змінних.
Області дії описів (видимість імен).

Наявність імені в одному з описових розділів  означає визначення ідентифікатора. Щоразу, коли ідентифікатор зустрічаються в програмі, він повинен знаходитися в області дії цього опису. Область дії ідентифікатора поширюється від його опису до кінця поточного блоку, включаючи всі блоки, що входять у поточний блок. Ідентифікатори не можна використовувати доти, поки вони не описані, тобто опис ідентифікатора повинен передувати будь-якому входженню ідентифікатора в тексті програми.

Ідентифікатор поля запису описується в рамках типу запис має значення тільки в сполученні з посиланням на змінну цього типу запис. Тому ви можете повторно визначити ідентифікатор поля (із таким же написанням) у тому ж самому блоці, але не на тому ж самому рівні в рамках зазначеного типу запис. Проте, ідентифікатор, що був раніше описаний, може бути повторно визначений як ідентифікатор поля в тому ж самому блоці.

Правила для обдасті дії описів покажемо на такому прикладі. Нехай в програмі Test описані модулі Alfa та Omega, а в процедурі Alfa описані модулі Beta та Gamma, як показано на малюнку. В модулях описані зінні, імена яких написані червоним кольром.

Змінні D,E є глобальними, тобто їх можна використовувати у всіх блоках і всюди вони позначають одну і ту ж область пам’яті та мають однакове значення. Змінні M,N доступні тільки в процедурі Omega.

Змінна А доступна всюди, але у функції Gamma вона є локальною, тобто А в цій функції позначає зовсім іншу область пам’яті. Значення змінної А у функції Gamma ніяк не пов’язано зі значенням цієї змінної у всіх інших модулях.

Змінні В,С доступні в модулях Alfa, Beta, Gamma, але для модуля Beta змінна В є локальною, тобто її значення в процедурі Beta ніяк не пов’язано зі значенням цієї змінної в процедурі Alfa.

Такі ж правила стосуються імен процедур та функцій. До процедур Alfa та Omega можна звертатись з будь-якого місця, до Beta – тільки всередині Alfa і Beta, до Gamma – тільки всередині Alfa і Gamma.


Розділ опису міток.

В цьому розділі оголошуються мітки, що привласнюються операторам. Кожна мітка повинна помічати тільки один оператор. Всі мітки перед вживанням повинні бути оголошені за допомогою такого запису:

Label мітка1,мітка2,...міткаN;

Мітки мітка1,мітка2,...міткаN;

Міткою є послідовність цифр, тобто ціле число без знаку, яке знаходиться в діапазоні від 0 до 9999. Нулі перед числами ігноруються.

Мітки є локальними для блоку, в якому вони описані. Для інших блоків (в тому числі вкладених) мітки даного блоку невидимі.


Виконувані оператори (команди).

Програма - це деякий алгоритм перетворення та пересилки інформації, записаний конкретною мовою програмування. На відміну від описового подання алгоритму, яке передбачає читання його людиною, в програмі кожен крок алгоритму мусить бути записаний у формі однієї з небагатьох інструкцій, які компілятор здатний переписати в кодах машини. Такі інструкції (англійською мовою statement - вислів, наказовий вислів, вказівка) у вітчизняній літературі отримали назву оператори.

Розглянемо оператори мови Паскаль.

Оператор присвоєння обчислює значення виразів і записує отриманий результат в комірку пам'яті, позначену змінною.

Оператор переходу вказує, що наступним має бути виконаний не той оператор, який записаний після нього, а помічений міткою.

Оператор звертання до процедури передає керування окремому програмному модулю (процедурі), після виконання якого керування повертається наступному оператору.

Порожній оператор складається з єдиного символа крапка з комою і не виконує ніяких дій.

Умовний оператор дозволяє в залежності від деякої умови вибрати для виконання один з двох операторів, які входять до нього, або не виконати жодного.

Оператор вибору дозволяє вибрати для виконання один з багатьох операторів, які входять до нього, або не виконати жодного в залежності від значення деякої змінної.

Оператор циклу з передумовою повторює виконання іншого оператора,що входить до нього, 0 або більше разів, поки значення деякої умови не стане хибним.

Оператор циклу з післяумовою повторює виконання групи операторів,що входять до нього, 1 або більше разів, поки значення деякої умови не стане істинним.

Оператор циклу з параметром повторює виконання іншого оператора,що входить до нього, для всіх значень деякого параметра, які знаходяться в заданому діапазоні.

Складений оператор об'єднує групу будь-яких операторів в один оператор.


Розділ опису констант.

Розділ опису констант служить для іменування довгих або часто вживаних чисел чи рядків тексту. Оголошені в цьому розділі константи використовуються так само, як змінні, але їм не можна надавати інших значень. Типи костант визначаються типами константних виразів, які стоять після знаку =.

Розділ починається зарезервованим словом const (сталі), після якого слідує один або більше речень

ідентифікатор = значення;

в яких значення є числом, символом чи рядком.

Наприклад:

Const

v0 = 37.55;

alfa = 45;

прізвище = 'Микитин';


Стандартні типи.
Стандартні типи змінних.

При описі змінної необхідно зазначити її тип. Тип змінної визначає набір значень, які вона може приймати, форму запису їх в пам’яті та дії, що можуть бути над нею виконані. Типи поділяються на прості та складні. Змінна простого типу завжди позначає одне значення (число, символ і т.п). Змінна складного типу позначає таблицю значень однакового типу (масив) або набір полів різного типу (запис). До простих типів в ALGO належать:

логічний тип boolean - логічні ;

символьний тип char - символи ;

цілий тип integer - цілі ;

дійсний тип real - дійсні .

Всі прості типи, крім дійсного, є порядковими. Всі можливі значення даного порядкового типу являють собою упорядковану множину, і кожне можливе значення пов'язане з порядковим номером, що являє собою ціле значення. За винятком значень цілого типу, перше значення будь-якого порядкового типу має порядковий номер 0, наступне значення має порядковий номер 1 і так далі для кожного значення в цьому порядковому типі. Порядковим номером значення цілого типу є саме це значення. У будь-якому порядковому типі кожному значенню, крім першого, передує інше значення, і після кожного значення, крім останнього, слідує інше значення відповідно до упорядкованості типу.

Змінні лоігічного (boolean ) типу приймають одне з двох фіксованих значень, які позначаються стандартними ідентифікаторами констант false(ні) та True(так). При операціях порівняння для змінних логічного типу має місце співвідношення true>false.

Множиною значень символьного (char ) типу є символи, упорядковані відповідно до розширеного набору символів коду ASCII. При виклику функції Ord(Ch), де Ch - значення символьного типу, повертається порядковий номер Ch. рядкова константа з одиничною довжиною може позначати значення константи символьного типу. Будь-яке значення символьного типу може бути отримане за допомогою стандартної функції Chr.

Змінні цілого (integer ) типу можуть набувати значень з діапазону від –2147483648 до 2147483647 і займають в пам’яті 4 байти.

До дійсного типу відносить підмножина дійсних чисел, що можуть бути подані у форматі з плаваючою комою із фіксованим числом цифр. Дійсні числа в ALGO можуть мати порядок від Е+320 до Е-320.

Рядковий тип (string - рядки) займає проміжне становище між простими та складними типами. Значенням змінної рядкового типу є рядок символів із динамічним атрибутом довжини (у залежності від справжнього числа символів при виконанні програми) і постійним атрибутом розміру в діапазоні від 1 до 255.

Змінні рядкового типу можуть входити як операнди у вирази, аналогічно до змінних простих типів. До символів у рядку можна мати доступ як до компонентів масиву, що є властивістю складного типу.

В даній реалізації Паскалю наявний лише текстовий тип файлів text (текст), який визначає файл, що містить символи, упорядковані в рядки. Текстові файли використовують спеціальні процедури введення/виведення


Розділ опису типів.

Крiм стандартних типiв можна  створити  типи  змiнних, якi дiють лише у межах програмного модуля. Розділ опису типів починається зарезервованим словом Type ( Типи), за яким записують одне або більше речень вигляду

ідентифікатор = опис_типу;

кожне з яких закінчується символом крапка з комою.

В цьому означенні опис_типу може бути записаний в одному з наступних варіантів:

- ідентифікатор стандартного типу;

- опис масиву;

- опис запису;

- ідентифікатор типу, описаного раніше.

Наведемо в такому самому порядку приклади опису типів.

Type

довжина = real;

Vector = array[1..15] of real;

товар = record

назва : string;

кількість,ціна : real;

термін : дата;

end;

швидкість = Vector;


Масиви.

Масиви містять фіксоване число компонентів одного типу, так званого типу конпонента. Границі масиву задаються піддіапазоном будь-якого порядкового типу за формою

array [ початок..кінець ] of опис_типу;

масив [ початок..кінець ] із опис_типу;

При цьому має виконуватись умова початок<=кінець, а опис_типу може бути записаний в одному з наступних варіантів:

- ідентифікатор стандартного типу;

- опис масиву;

- опис запису;

- ідентифікатор типу, описаного раніше.

Приведемо приклад типу масив:

array[1..100] of real;

Якщо тип елемента в типі масив також є масивом, то результат можна розглядати як масив масивів або як один багатомірний масив. Наприклад,

array[3..8] of array[‘a’..’f’] of real

інтепретується компілятором точно так само, як

array[3..8,‘a’..’f’] of real


Записи.

Тип запис містить установлене число елементів або полів, що можуть бути різноманітних типів. Опис типу запис вказує тип кожного поля та ідентифікатор, що іменує поле.

Record

CписокІмен1 : опис_типу1;

...........................

CписокІменN : опис_типуN;

end;

Запис

CписокІмен1 : опис_типу1;

...........................

CписокІменN : опис_типуN;

кінець;

Опис_типу для кожної групи імен, які називають полями запису, може бути записаний в одному з наступних варіантів:

- ідентифікатор стандартного типу;

- опис масиву;

- опис запису;

- ідентифікатор типу, описаного раніше.

Приведемо приклад типу запис:

Запис

Прізвище,Імя,По_батькові : масив [1..15] із символи;

Зріст,Вага : дісні;

РікНародження,НомерКарточки : цілі;

кінець;


Опис процедур та функцій.

Описи процедур

Опис процедури або функції складається із заголовка та тіла (блоку), структура якого повністю аналогічна до структури програми.

Заголовок процедури має вигляд:

Procedure назва( список_формальних_параметрів );

Процедура назва( список_формальних_параметрів );

У заголовку процедури вказується ім'я процедури й описується список формальних параметрів (якщо він потрібний).

Запуск процедури здійснюється за допомогою оператора звертання до процедури.

Приведемо приклад опису процедури:

procedure Change(a,b : integer);

var

i:integer;

begin

i:=a; a:=b; b:=i

end;

У заголовку функції визначається ідентифікатор функції, формальні параметри (якщо вони є) і тип результату функції.

Function назва( список_формальних_параметрів ): тип;

Функція назва( список_формальних_параметрів ): тип;

Функція активізується при виклику функції. При виклику функції вказується ідентифікатор функції і параметри, необхідні для обчислення функції. Виклик функції може включатися у вирази в якості операнда. Коли вираз обчислюється, функція виконується і значенням операнда стає значення, яке повертається функцією.

В операторній частині блока функції повинен міститися принаймні один оператор присвоювання, у якому ідентифікатору функції присвоюється значення. Результатом функції є останнє присвоєне значення. Якщо такий оператор присвоювання відсутній або він не був виконаний, то значення, що повертається функцією, невизначене.

Якщо ідентифікатор функції використовується при виклику функції усередині модуля-функції, то функція виконується рекурсивно.

Приведемо приклад опису функції:

function Max(a: Vector; n: integer ):integer;

var

i,x: integer;

begin

x := a(1);

for i := 2 to n do

if x < a[i] then x := a[i];

Max := x;

end;


Формальні та фактичні параметри.

У описі процедури або функції задається список формальних параметрів. Кожний параметр, описаний у списку формальних параметрів, є локальним для модуля процедури або функції й на нього можна посилатися по його ідентифікатору.

Список формальних параметрів записується групами, які розділяються символом крапка з комою. Ідентифікатори кожної групи розділяються комою, після списку через двокрапку вказують ідентифікатор типу для даної групи.

Група параметрів, перед якими відсутнє ключове слово var, є списком параметрів-значень, група параметрів, перед якими міститься ключове слово var, є списком параметрів-змінних.

Формальний параметр-значення опрацьовується, як локальна стосовно процедури або функції змінна, за винятком того, що він отримує своє початкове значення із відповідного фактичного параметра при активізації процедури або функції. Зміни формального параметра-значення, не впливають на значення фактичного параметра.

Відповідне фактичне значення параметра-значення повинно бути виразом, який має тип, сумісний по присвоюванню з типом формального параметра-значення.

Параметр-змінна використовується, коли значення повинно передаватися з процедури або функції програмі , що її викликає. Відповідний фактичний параметр в операторі виклику процедури або функції повинен бути змінну. При активізації процедури або функції формальний параметр-змінна замінюється фактичною змінною, будь-які зміни в значенні формального параметра-змінної відбиваються на фактичному параметрі.

Усередині процедури або функції будь-яке посилання на формальний параметр-змінну приводить до доступу до самого фактичного параметра. Тип фактичного параметра повинен збігатися з типом формального параметра-змінної.

Якщо формальний параметр має рядковий тип, йому присвоюється атрибут довжини, рівний 255, і фактичний параметр повинний також мати рядковий тип і атрибут довжини, рівний 255.

Файловий тип може передаватися тільки, як параметр-змінна.

При посиланні на фактичний параметр-змінну, пов'язану з індексуванням масиву , ця дія виконуються перед активізацією процедури або функції.


Вирази.

Вирази складаються з операцій і операндів. Операндами можуть бути константи, змінні, вирази в дужках та значення, які повертаються функціями. Більшість операцій у мові Паскаль є бінарними, тобто містять два операнди. Інші операції є унарними і містять тільки один операнд. У бінарних операціях використовується звичайне алгебраїчне уявлення, наприклад a+b. В унарних операціях операція завжди передує операнду, наприклад -b. У більш складних виразах порядок, у якому виконуються операції, відповідає пріоритету операцій. Спочатку вираховуються вирази в дужках, значення індексів масивів та значення функцій, потім виконуються операції з найвищим пріорітетом, потім з нижчим і т.д. Операції з однаковим пріорітетом виконуються зліва направо. Операнд, що знаходиться між двома операціями з різними пріоритетами, зв'язується з операцією, що має більш високий пріоритет.

По пріорітету виконання операції діляться на такі групи:

1. Унарні not - ;

2. Мультиплікативні mod div and * / ;

3. Адитивні or + - ;

4. Операції порівняння = < > <= >= <>.

Для зміни порядку виконання операцій використовують круглі дужки. як уже згадувалось на початку цього розділу, вирази в дужках обраховуються в першу чергу. Слід зауважити, що зайві дужки, наприклад a+(18*x+12*y), ігноруються компілятором. Коли Ви не впевнені в порядку виконання виразу, то користуйтесь дужками, бо вони в жодному випадку не можуть зробити програму гіршою.

Тип результату операції, яка виконується останньою при вирахуванні значення виразу, визначає тип самого виразу. Тому інколи вирази, що дають результат логічного типу, називають логічними виразами, хоча в них входять операції множення, додавання і т.п. Арифметичними виразами часто називають вирази, які дають результат цілого або дійсного типу.

Наведемо приклади виразів


Звертання до функцій, елементів масивів та полів у записах.

     	Значення функцій використовуються у виразах, як звичайні операнди. При цьому треба вказати список фактичних параметрів (аргументів), якщо такий список наявний в оголошенні функції, слідкуючи за відповідністю типів.

Доступ до елемента масиву отримують по його імені, після якого в квадратних дужках вказують вираз, який визначає номер елемента в масиві.

Поле запису в ALGO дентифікується тільки за допомогою імені змінної-запису, після якої вказують ім'я поля.Наприклад, якщо є змінна	Список : масив [1..100] із

Запис

Прізвище,Імя,По_батькові : масив [1..15] із символи;

Зріст,Вага : дісні;

РікНародження,НомерКарточки : цілі;

кінець;

то Список[N].РікНародження дає доступ до поля РікНародження N-того пацієнта, а Список[N].Прізвище[1] - до першої літери його прізвища.


Оператор присвоєння.
Оператор присвоювання.

Оператор присвоювання заміняє поточне значення змінноїновим значенням, що визначається виразом.

змінна := вираз

Вираз повинний бути сумісний по присвоюванню з типом змінної.

Приведемо деякі приклади операторів присвоювання:

X := Y + Z

Done := (I>=1) and (I<100);

I := Sqr(J) - I*K;


Складений оператор.

Складений оператор опрацьовується, як один оператор, що має вирішальне значення там, де синтаксис Паскалю допускає використання тільки одного оператора.

begin

оператор1;

........

операторN

end

Оператори записуються в операторні дужки begin і end, відокремлюються один від одного крапкою з комою та виконуються в порядку запису.

Зверніть увагу, що в Паскалі символ крапка з комою служить для відокремлення операторів один від одного, а не для завершення оператора. Тому після останнього оператора (перед ключовим словом end) крапку з комою ставити не потрібно. Однак, якщо вона є, то у випадку складеного оператора цей символ сприймається як порожній оператор (оператор, який не виконує ніяких дій). В інших випадках (в операторах if, де синтаксис вимагає запису одного оператора) наявність крапки з комою приводить до повідомлення про помилку.

Можна сформулювати таке правило: крапка з комою ставиться після оператора (в тому числі після слова end складеного оператора) у всіх випадках, крім тих, коли наступним словом є end, until або слово else оператора if.

Приведемо приклад складеного оператора:

begin

Z := X;

X := Y;

Y := Z;

end;


Умовний оператор.

Повний умовний оператор дозволяє вибрати для виконання один із складових операторів.

If вираз then оператор1

else оператор2

якщо вираз то оператор1

інакше оператор2

Неповний умовний оператор виконує внутрішній оператор тільки в тому випадку, коли значення виразу є істинним (при виконанні умови).

If вираз then оператор

якщо вираз то оператор

У виразі повинен утворюватися результат, що має стандартний логічний тип. якщо результатом виразу є істинне значення (true), то виконується оператор, що слідує за ключовим словом then. якщо результатом виразу є значення false і  присутнє ключове слово else, то виконується оператор, що слідує за ключовим словом else, а якщо воно відсутнє, то ніякий оператор не виконується.

В обидвох частинах умовного оператора можна вживати лише по одному оператору. При необхідності помістити групу операторів, потрібно утворити з них складений оператор.

Синтаксична неоднозначність, що виникає в конструкції:

if e1 then if e2 then s1else s2

вирішується шляхом такої інтепретації цієї конструкції:

if e1 then

begin

if e2 then

s1

else

s2

end

У загальному випадку ключове слово else зв'язується з найближчим ключовим словом if, що ще не пов'язано з ключовим словом else.

Приведемо приклад оператора if:

if X < 1.5 then

Z := X+Y

else

Z := 1.5;


Оператор переходу.

Оператор переходу викликає передачу керування оператору, якому передує мітка, зазначена в даному операторі переходу. Оператора переходу має такий вигляд:

GоTо мітка

ЙтиДо мітка

Міткою є послідовність цифр у діапазоні від 0 до 9999. Початкові нулі не є значущими. Наступним після оперетора переходу буде виконаний оператор, позначений вказаною міткою.

При використанні оператора переходу повинні дотримуватися такі правила:

1. Мітка, що вказується в операторі переходу, повинна знаходитися в тому ж модулі, що і сам оператор переходу. Іншими словами, не допускаються переходи з процедури або функції назовні або ззовні усередину її.

2. Перехід ззовні усередину структурного оператора (тобто перехід на більш глибокий рівень вкладеності) може викликати непередбачені ефекти, хоча компілятор не видає повідомлення про помилку. Наприклад, перехід всередину оператора циклу з параметром приводить до виконання частини тіла циклу при невідомих значеннях параметра та початкового і кінцевого значень.

Часте вживання оператора переходу робить програму заплутаною, тому його не рекомендують використовувати.

Приклад:

У випадку, коли потрібно негайно завершити виконання процедури при Х<0, можна скористатись переходом на порожній оператор, який є останнім у процедурі.

Procedure Test;

..........

Label 11;

Begin

.......

If X<0 then GoTo 11;

.......

11 : ;

end;


Оператор вибору.

Оператор вибору (варіанту) складається з виразу (перемикача) і списку операторів, кожному з яких передує список констант, які називаються константами вибору, або ключове слово else. В кожному списку має бути хоча б одна константа. Перемикач повинен мати порядковий тип. Всі константи вибору повинні бути унікальними (зустрічатись лише один раз в даному операторі) і мати тип, сумісний із типом перемикача.

Case вираз оf

K11,...,K1M : оператор1

..................

KN1,...,KNL : операторN

else операторN1

end

Вибір вираз із

K11,...,K1M : оператор1

..................

KN1,...,KNL : операторN

інакше операторN1

кінець

В кожному варіанті записують лише один оператор, що може бути складеним оператором. Частина оператора, яка починається словом else, може бути відсутня.

Оператор вибору (варіанту) приводить до виконання оператора, перед яким є константа вибору, рівна значенню перемикача в момент виконання оператора. якщо такої константи вибору нема і присутнє слово else, то виконується оператор, що слідує за ключовим словом else. якщо ж гілка else відсутня і константи вибору нема, то ніякий оператор не виконується.

Приклад оператора вибору.

Нехай при тестуванні учень отримав N балів з 20 можливих. Треба вивести суму балів з коротким коментарем. Зробимо це за допомогою оператора case.

Case N оf

20: WriteLn('Краще не буває!');

19,18,17 : WriteLn('Відмінно!');

16,15,14,13 : WriteLn('Добре.');

12,11,10,9 : WriteLn('Задовільно.')

8,7 : WriteLn('Ще трохи, і все було б в порядку.');

else WriteLn('як нічого не знаєте, то хоч би щось вгадали!')

end;

WriteLn('Сума балів - ',N:2,' з 20 можливих');


Цикл з передумовою.

Оператор циклу з перед-умовою містить у собі логічний вираз, який керує повторним виконанням оператора (що може бути складеним оператором).

While вираз dо

оператор

Поки вираз виконувати

оператор

Вираз, за допомогою якого здійснюється керування повторенням оператора, повинен мати логічний тип. Обчислення його проводиться до того, як внутрішній оператор буде виконаний. Внутрішній оператор виконується повторно доти, поки вираз приймає значення false. якщо вираз із самого початку приймає значення false, то оператор, що міститься всередині оператора циклу з перед-умовою, не виконується.

Приклад оператора циклу з перед-умовою:

while Data[I] <> X do I := I + 1;


Цикл з післяумовою.

Оператор циклу з після-умовою записують в загальному вигляді так:

Repeat

оператор1;

........

операторN

until вираз

Повторювати

оператор1;

........

операторN

покиНе вираз

Операторів може бути довільна кількість, або не бути зовсім. Результат виразу повинен мати логічний тип. Оператори, поміщені між ключовими словами repeat і until, виконуються послідовно доти, поки результат виразу не прийме значення true. Послідовність операторів виконається принаймні один раз, оскільки обчислення виразу провадиться після виконання послідовності операторів.

Приведемо приклад оператора циклу з після-умовою:

repeat

K := I mod J;

I := J;

J := K;

until J = 0;


Цикл з параметром.

Оператор циклу з параметром викликає повторюване виконання оператора (що може бути складеним оператором) для всіх значень керуючої змінної в межах заданого діапазону.

For змінна := ПочЗн to КінЗн do

Оператор

Для змінна := ПочЗн до КінЗн виконувати

Оператор

У якості керуючої змінної повинен використовуватися ідентифікатор, що позначає змінну, оголошену локальною в блоці, у якому міститься оператор for . Керуюча змінна повинна мати простий порядковий тип. Початкове і кінцеве значення повинні мати тип, сумісний по присвоюванню з порядковим типом.

Коли починає виконуватися оператор for , початкове і кінцеве значення визначаються один разів, і ці значення зберігаються протягом усього виконання оператора for . Оператор, що міститься у тілі оператора for , виконується один раз для кожного значення в діапазоні між початковим і кінцевим значенням. Керуюча змінна завжди ініціалізуться початковим значенням. При кожному наступному повторенні оператора for береться наступне значення керуючої змінної. якщо початкове значення перевищує кінцеве значення, то оператор , що міститься у тілі оператора for, не виконується. Коли в операторі циклу замість слова do використовується ключове слово downto ( назад ), значення керуючої змінної змінюються в зворотньому порядку. якщо початкове значення в цьому випадку менше, ніж кінцеве значення, то оператор не виконується.

Оператор, що міститься у тілі оператора for, не повинен змінювати значення керуючої змінної. Після виконання оператора for значення керуючої змінної стає невизначеним, якщо тільки виконання оператора for не було перервано за допомогою оператора переходу.

Приведемо приклади оператора циклу з параметром:

for sym := 'z' downto 'o' do

if str[i] = sym then goto 25;

for I := 1 to 10 do

for J := 1 to 10 do

begin

X := 0;

for K := 1 to 10 do

X := X + Mat1[I,K]*Mat2[K,J];

Mat[I,J] := X;

end;


Звертання до процедури.

Оператор процедури активізує процедуру, позначену за допомогою ідентифікатора процедури. Якщо відповідний опис процедури містить список формальних параметрів, то оператор процедури повинен містити в собі відповідний йому список фактичних параметрів (параметри, список яких приводиться у визначенні, є формальними параметрами, а в операторі виклику процедури є фактичними параметрами). При виклику відбувається передача фактичних параметрів формальним параметрам.

Приведемо деякі приклади операторів процедур:

PrintHeaing;

Transpose(A,N,M);

Fin(Name,Address);


Рекомендації з оформлення програм.

Пишіть програми так, щоб їх можна було зрозуміти не тільки Вам, а й іншим людям. Для цьго:

Надавайте змінним такі імена, які відповідають назві іменованої величини.

Кожен оператор намагайтеся писати з нового рядка.

Робіть відступи перед вкладеними операторами.


Розділ опису змінних.

Розділ починається зарезервованим словом var (змінні), після якого слідує один або більше речень

CписокІмен : опис_типу;

Опис_типу для кожної групи імен може бути записаний в одному з наступних варіантів:

- ідентифікатор стандартного типу;

- опис масиву;

- опис запису;

- ідентифікатор типу, описаного раніше.

Приклади:

Var

Місто,Вулиця : масив [1..15] із символи;

ПлощаДороги,ПлощаКлумб : дісні;

КілБудинків, КілМешканців : цілі;


Операції. Типи операндів та результату.

Найвищий пріорітет мають унарні операції.

До унарних операцій можна віднести також знак +, якщо він стоїть перед першим операндом, наприклад, +а*с. Це операція збереження знаку, яка не виконує ніякої дії, тому практично ніколи не використовується.

Другу групу складають так звані мультиплікативні операції.

Третю групу складають адитивні операції.

якщо обидва операнди в операціях +, -, *, div або mоd є операндами цілого типу, то тип результату буде цілим. якщо один або більше операндів в операціях +, -, або * мають дійсний тип, то тип результату буде дійсним. Значення виразу х/у завжди буде дійсного типу, незалежно від типів операндів. якщо у дорівнює 0, то буде виведене повідомлення про помилку. Значення вираз i div j являє собою математичну частку від i/j, округлену в меншу сторону до значення цілого типу. якщо j дорівнює 0, то буде виведене повідомлення про помилку. Операція mod повертає залишок від ділення двох її операндів, тобто:

i mod j = i - (i div j) * j

Знак результату операції mod буде тим же, що і знак i. якщо j дорівнює нулю, то результатом буде помилка.

Результати логічних операцій відповідають звичайній булевій логіці. Наприклад, вираз a and b є істинним (приймає значення truе) тільки в тому випадку, якщо обидва операнди a і b мають істинне значення (truе).

При повному обчисленні припускається, що кожний операнд логічного виразу, побудований за допомогою операцій or і and, завжди буде обчислюватися, навіть якщо результат усього виразу уже відомий.

Паскаль дозволяє використовувати операцію + для об'єднання двох рядкових операндів. Результатом операції s+ t, де s і t мають рядковий або символьний тип, буде об'єднання s і t. якщо довжина результуючого рядка перевищує 255 символів, то вона урізається до 255 символів.

В останню чергу виконуються операції відношення

Коли операції =, <>, <, >, >=, <= застосовуються для операндів простих типів, то це повинні бути сумісні типи. Проте, якщо один операнд має дійсний тип, то інший може бути цілого типу. Для цілого і дійсного типів операції відношення мають звичайний алгебраїчний зміст. З двох символів більший той, який стоїть має більший номер в таблиці кодів. Нарешті, true>false, хоч це рідко використовують.

Операції відношення можуть застосуються для порівняння рядків відповідно до порядку розширеного набору символів коду АSСII. Будь-які два значення рядкових даних можна порівняти, оскільки всі значення рядкових даних сумісні.

Відношення між будь-якими двома рядковими значеннями встановлюється відповідно до відношення порядку між значеннями символів у відповідних позиціях. У двох рядках різної довжини кожний символ більш довгого рядка без відповідного символу в більш короткому рядку приймає значення "більше". Наприклад, 'Xs' більше, ніж 'X'. Нульові рядки можуть бути рівні тільки іншим нульовим рядкам, і вони є найменшими рядковими значеннями.

Значення символьного типу сумісні зі значеннями рядкового типу, і при їхньому порівнянні символьне значення опрацьовується як рядкове значення з довжиною 1.


Коди ASCII.

Для запису одного символа в пам'яті виділяється один байт (8 біт). В одному байті можна записати 256 різних кодів, які можна вважати цілими числами вид 0 до 255. Для кодування символів складена таблиця кодів, в якій кожному символу відповідає ціле число. Перша частина цієї таблиці є міжнародним стандартом (американський стандартний код для обміну інформацією - ASCII). Друга частина містить літери національних алфавітів та спеціальні символи. Порядок їх розміщення в таблиці регулюється національними або міждержавними стандартами.

Коди з 0 до 31 є службовими і тут не наводяться. Серед них:13 - код кінця рядка, 26 - код кінця файлу.


Стандартні процедури і функції.

Тут описані всі стандартні процедури і функції, що реалізовані в ALGO. У довідці до процедур та функцій приведені їхні заголовки, що дозволяє бачити інформацію про їх формальні параметри та тип результату.

Функції для обробки даних.

Ім'я	Виконувана дія.
Сhr	повертає символ, заданий цілим числом.
Оrd	повертає порядкове число за значенням порядкового типу.
Rоund	округляє дійсне число до цілого.
Тrunс	відкидає дробову частину.
Abs	повертає абсолютне значення аргументу.
Аrctan	повертає арктангенс аргументу.
Соs	повертає косинус аргументу.
Ехp	повертає експоненту аргументу.
Ln	повертає натуральний логарифм аргументу.
Рi	повертає значення числа Pi (3.141592653897932385).
Sin	повертає синус аргументу.
Sqr	повертає аргумент у квадраті.
Sqrt	повертає квадратний корінь аргументу.
Randом	повертає випадкове число.
Оdd	перевіряє, чи є аргумент непарним числом.
Рred	повертає попереднє значення аргументу.
Suсс	повертає наступне значення аргументу.

Процедури введення і виведення текстових даних.

Ім'я	Виконувана дія.
Assign	ставить у відповідність файловій змінній конкретний файл.
Reset	відкриває файл для читання.
Rewrite	відкриває файл для запису.
Close	закриває файл.
Read	вводить дані.
ReadLn	вводить рядок даних.
Write	виводить результати.
WriteLn	виводить рядок результатів.
Eof	опитує кінець файлу.
Eoln	опитує кінець рядка.

Процедури і функції для роботи з текстом.

Ім'я	Виконувана дія.
Concat	сполучає кілька рядків в один.
Copy	повертає частину рядка.
Delete	видаляє частину рядка.
Insert	добавляє рядок в інший.
Length	повертає динамічну довжину рядка.
Роs	робить пошук зразка в рядку.

Процедури для побудови графічних зображень.

Ім'я	Виконувана дія.
MoveTo	встановлює поточні координати.
LineTo	проводить лінію до точки.
Line	проводить лінію між точками.
Color	встановлює колір ліній.
BrushColor	встановлює колір заповнення.
TextColor	встановлює колір тексту.
Rectangle	будує прямокутник.
Ellipse	будує еліпс.
Point	ставить крапку.
Fill	зафарбовує замкнену область.
Font	вибирає шрифт.
Clear	витирає вікно виведення.

Процедури роботи з системним годинником.

Ім'я	Виконувана дія.
Date	отримує дату.
Time	опитує системний годинник.
Delay	робить паузу.

Обробка подій.

Ім'я	Виконувана дія.
IsEvent	опитує наявність події.
Event	отримує та обробляє подію.