Оператори алгоритмічної мови Паскаль.
Стандартні функції і оператори роботи з рядками
Для символьних масивів допускають операцію «+» — конкатенації (зчеплення, поєднання). Смисл операції полягає у формуванні нового символьного масиву, кількість елементів якого дорівнює сумі розмірів масивів — операндів, а значення елементів — елементи масивів, які розміщюються послідовно один за одним. У разі присвоювання рядковій змінній виразу з довжиною більше ніж максимально допустимо для… Читати ще >
Оператори алгоритмічної мови Паскаль. Стандартні функції і оператори роботи з рядками (реферат, курсова, диплом, контрольна)
Житомирський Військовий Інститут Національного Авіаційного Уніврситету
Реферат на тему:
Оператори алгоритмічної мови Паскаль. Стандартні функції і оператори роботи з рядками
Житомир 2010
План
1. Прості оператори
2. Структурні оператори
3. Символьні масиви
4. Визначення рядкового типу даних
5. Основні операції над рядковими даними
6. Стандартні засоби обробки рядків: процедури і функції
1. Прості оператори
Оператори мови Паскаль — це синтаксичні конструкції, які призначені для запису алгоритму (перетворення даних, порядок виконання операцій) в стилі структурного програмування.
Всі оператори повинні розділятись символом — «;» .
Оператори мови Паскаль умовно поділяють на дві групи:
1) прості оператори;
2) структурні оператори, які містять один або декілька операторів, або структурних операторів.
Оператор присвоювання;
Оператори звертання до процедури (функції);
Оператор безумовного переходу.
Оператор присвоювання призначений для обчислення нового значення змінної, а також для визначення значення функції, що повертається.
Формат оператора:
Оператор виконується так: обчислюється вираз (права частина) і отримане значення надається (присвоюється) ідентифікатору (змінній).
При цьому тип виразу (тип даних та операції над ними) повинен бути сумісним з типом ідентифікатора (змінної), якому присвоюється результат обчислення.
Наприклад: якщо var a, b, x: integer, то оператор присвоювання виконувати не можна.
Треба так:
var a, b: integer;
x: real;
Тоді буде вірно:
.
Приклади:
var name: string;
.. .
name: = `Іванов`;
var x, y: real;
.. .
x: = 5;
y: = x + 2;
Оператори звертання до процедури (функції) — призначені для активізації процедури (функції) та передачі їй заданих параметрів.
Формат оператора:
Розглянемо процедури введення та виведення даних, які можна викликати за допомогою операторів: read, readln, write, writeln.
write (вираз), writeln (вираз) — оператори запису або виведення;
read (список змінних), readln (список змінних) — читання або введення.
Приклади виведення:
x: = 1;
writeln(1+x);
writeln(x <=1);
на екрані з’явиться:
true
x: = 2;
writeln(1, x, x*x, x*x >2);
на екрані :
1 2 4 true
Використання рядкових констант, наприклад: `x =', `12' і т.п.
x: = 2;
writeln(`x = `, x,'; y = `, x*x);
На екрані: x = 2; y = 4.
Можна указати розмір поля для виводу значень виразу.
Якщо кількість символів менше, то виводяться пробіли, а якщо більше — то виводяться усі символи.
x: =12;
writeln(`x =', x: 4,'; y = `, x*x: 1);
На екрані
x =_ _ 12; y = 144 .
Приклади введення.
Як правило, для зручності перед оператором введення ставиться оператор виведення на екран запрошення:
writeln (`Ввести два цілих числа:');
readln (x1, x2);
На екрані запрошення:
Ввести два цілих числа:
Приклад програми привітання.
Program Privit;
var name: string;
begin
write(`Введіть ваше ім`я');
readln(name);
writeln(`Привіт,', name);
end.
Оператор безумовного переходу.
Мітка описується на початку програми (label 1, 2, lb1) і використовується в програмі наступним чином:
Але використання цього оператора в програмі не бажане, бо порушується її структурна цілісність і читабельність.
2. Структурні оператори
Структурні оператори містять один або декілька операторів. Вони поділяються на три види:
1. складений оператор;
2. умовні оператори;
3. оператори циклу.
Складений оператор представляє собою послідовність операторів, які розділяються «;» і обмежуються службовими словами begin та end. Вони відіграють роль дужок обмеження — операторні дужки початку і кінця складеного оператора).
BEGIN
оператор 1;
…
оператор N
END.
Складений оператор сприймається як єдине ціле.
Умовні оператори — організовують вибір між альтернативними варіантами обчислень (операцій)
Структура оператора:
if <�умова (вираз)>
then <�оператор1>
else <�оператор2>
Семантика оператора:
1. обчислюється умова, тобто вираз після службового слова if (результат повинен мати логічний тип, булевий);
2. якщо результат умови — TRUE (істина) то виконується then <�оператор1>; якщо результат умови FALSE — то виконується else <�оператор2>.
Оператори 1, 2 можуть бути будь-якого типу: умовні, складені, прості.
Умова може бути операцією відношення або логічною.
Операції відношення:=, <>, >, <, >=, <=.
Логічні оператори:
Not — заперечення;
And — логічне «і» ;
Or — логічне «або» ;
Xor — «або», що виключає.
Приклад:
Вибір максимального із двох чисел:
if x>y
thenmax := x
else max := y
!Особливість:! При використанні вкладених умовних операторів може виникнути синтаксична неоднозначність. Тому необхідно пам’ятати: службове слово else зв’язане з найближчим до нього словом if.
Приклад:
var a, b, c: integer;
a:=1; b:=2; c:=3; d:=4;
if a>b then
if cthen
if c<0 then c:=0
else a:=b;
На екрані виведеться {a = 1}.
if a>b then
if cthen
if c<0 then c:=0
else
else
else a:=b;
На екрані виведеться {a = 2}.
Оператор вибору: CASE.
Він дозволяє вибрати одну з N можливих операцій.
Синтаксична діаграма:
Список альтернатив:
Приклад:
Program month (input, output);
var mon: integer;
begin
writeln (`Введіть N місяця');
readln (mon);
if mon < 1 or mon > 12 then
writeln (`Нема такого місяця')
else
case mon of
1: writeln (`січень`);
2: writeln (`лютий`);
.. .
12: writeln (`грудень`);
end
end.
!Особливість:! значення селектора не може мати тип: real; string; частину else можна опускати.
3. Оператори циклу.
Існують три різних оператора:
1. Оператор циклу з параметром
For, To, Do (для, до, виконати)
Семантика:
1. Обчислюється вираз < пз >
2. Присвоювання < пц >: = < пз >
3. Перевірка умови < пц > <= (=>) < кз >, якщо не виконується, то for закінчує роботу ;
4. Виконання < оператора >;
5. Змінна < пц > на + 1 (to) або — 1 (down to)
Приклад: програма введення вільного цілого числа N та обчислення суми цілих чисел від 1 до N.
Program summaInteger;
var i, n, s: integer;
begin
write (` n = `);
readln (n); { ввести n }
S: = 0; { початкове значення суми }
for i: = 1 to n do s: = s + i;
writeln (`Сума дорівнює ', S)
end.
.. ... .
S:=0
if n >=1 then
for:=1 to n do s:= s+i
else
for i:= -1 down to n do s:= s+i
2.Оператор циклу з передумовою.
{поки (виконується), робити }
< умова>- вираз логічного типу; якщо результат умови — TRUE, то виконується оператор, після чого знову перевірка умови. Якщо — FALSE, оператор WHILE закінчує свою роботу.
Приклад: обчислити суму перших 25 цілих чисел.
Program summa;
var sum, n: integer;
begin
sum:=0;
n:=1;
while n<26 do
begin
sum:= sum+ n;
n:=n+1;
end;
writeln (`Сума перших 25 цілих чисел', sum)
end.
3.Оператор циклу з постумовою.
Семантика:
1.Виконується оператор циклу;
2.Перевірка умови:
— якщо false => наступне виконання оператора;
— якщо true => оператор циклу не виконується.
Приклад (для попереднього прикладу):
repeat
sum:=sum+n;
n:=n+1 until n>=26
3. Символьні масиви
Символьний тип даних дозволяє працювати з окремими символами тексту. Для обробки більшої кількості текстових одиниць використовують символьні масиви або рядкові типи даних.
Розглянемо одномірні масиви, які складаються з елементів символьного типу (char). Наприклад:
var
S: array [ 1.12] of char;
Паскаль містить деякі додаткові засоби роботи з такими масивами:
Конкретні значення символьних масивів записують за допомогою зображення рядка та використання їх в присвоюванні та передачі параметрів:
S := `Приклад рядка';
Зображення рядка будується з символів масиву і обмежується апострофами.
Якщо необхідно задати апостроф, то його подвоюють {` «'}.
Допускають формування рядків з використанням десяткових кодів символів і спеціальних позначень: (#7#17C^A^B…)
Для символьних масивів допускають операцію «+» — конкатенації (зчеплення, поєднання). Смисл операції полягає у формуванні нового символьного масиву, кількість елементів якого дорівнює сумі розмірів масивів — операндів, а значення елементів — елементи масивів, які розміщюються послідовно один за одним.
Приклад:
var S1: array [1.8] of char;
S2: array [1.5] of char;
begin
S1 := 'рядковий';
S2 := 'масив';
writeln (S1+' '+S2); {результат на екрані: Рядковий масив}
end.
!Особливість:!
1. в операторах присвоювання рядків символьним масивам необхідна точна відповідність довжини рядків і розмірів масивів;
2. операція конкатенації для символьних масивів не допускається у правій частині присвоювання. Наприклад:
S := S1+' '+S2; {помилка}
У таких випадках необхідно використовувати рядки, тобто рядкові типи даних.
4. Визначення рядкового типу даних
Рядкові типи даних є одним з розширень мови Паскаль, які найбільш використовуються. Рядковий тип узагальнює поняття символьних масивів, дозволяє динамічно змінювати довжину рядка.
При використанні у виразах рядок обмежується апострофами. Кількість символів в рядку (довжина рядка) може динамічно змінюватись від 0 до 255.
Для визначення рядкових даних використовується ідентифікатор STRING, за яким у квадратних дужках вказується максимальна довжина рядка. Якщо значення не вказане, то по замовченню довжина рядка встановлюється 255 байт.
Приклад:
Line: string [80];
Line1: string ;
Line2: string.
В приведеному прикладі змінна Line може мати будь-яку послідовність символів (кожен з яких має стандартний тип char) довільної довжини в межах від 0 до 80 символів; Line1 і Line2 — від 0 до 255 символів.
Таким чином, важливіша різниця між рядками і символьними масивами, що рядки можуть динамічно змінювати свою довжину.
Змінну рядкового типу визначають у розділі опису типів, або безпосередньо у розділі опису змінних.
Рядкові дані також можна використовувати у програмі як константу.
Формат:
1. type
<ім'я типа > = string [max довжина рядка];
var
< ідентифікатор > : <ім'я типа >;
Або
2. var
< ідентифікатор >: string [max довжина рядка];
Приклад:
const address = `пл. Соборна, 1';
type line = string [125];
var
S1: Line;
S2: string;
S3: string [50];
Механізм динамічних рядків реалізований в мові Турбо-Паскаль достатньо просто.
Для рядкових змінних пам’ять виділяється відповідно максимального значення, а використовується лише частина, яка реально зайнята символами рядка у даний час, тобто для N символів виділяється N+1 байт пам’яті, із яких N байт призначено для зберігання символів рядка, а 1 байт — для значення поточної довжини цього рядка:
Елементи рядка нумеруються цілими числами, починаючи з 1. Це іноді використовують для визначення поточної довжини рядка, наприклад:
line := ` '; {пустий рядок}
writeln (ORD (line)); {на екрані число 0}
line: =`ABCD';
writeln (ORD (line)); {на екрані число 4}
Однак, для визначення поточної довжини рядка, як правило, використовують стандартну функцію length, яке повертає ціле значення поточної довжини рядка. Але це ми розглянемо далі.
У разі присвоювання рядковій змінній виразу з довжиною більше ніж максимально допустимо для даної змінної, то символи за межами максимальної довжини не використовуються (вилучаються). Ця ситуація не є помилковою, тому переривання виконання програми у даному випадку не відбувається. Наприклад:
var line: string [4];
begin
line := `дуже довгий рядок'; {на екрані: дуже}
writeln (line);
end.
Таким чином рядки можуть динамічно змінювати свою довжину.
5. Основні операції над рядковими даними
Над рядковими даними виконують такі операції:
1. присвоювання (:=);
2. введення (Read);
3. виведення (Write);
4. поєднання (зчеплення, конкатенації - «+»);
5. порівняння (відношення).
Перші три операції виконуються стандартно, без особливостей. Тому розглянемо дві останні операції.
Операція конкатенації.
Використовується для зчеплення декількох рядків в один, причому довжина результуючого рядка не повинна перевищувати 255 символів (або вказану довжину N). Інакше останні символи будуть відкинуті.
Приклади:
st := `a'+'b';
st := st + `c';
writeln (`st = `, st) {результат st =abc}
var st: string [2];
begin
st :='1' + `2' + `3';
writeln (st) {на екрані 12}
end.
Операція порівняння (відношення).
Проводить порівняння двох рядкових операндів за допомогою стандартних операторів: =, <>, >, <, >=, <=.
Правила порівняння:
1. Порівняння проводиться зліва-направо з урахуванням внутрішнього кодування символів таблиці ASCII. Рядок буде більшим, якщо перший не співпадаючий символ має більший номер.
2. У менший по довжині рядок додаються символи значення CHR (0). Тому при однакових, символах короткий рядок завжди менше довгого рядка.
Результат виконання операції завжди має логічний тип і приймає значення TRUE або FALSE.
Приклади:
1) ` " ` < `.' TRUE
2) `A' > `1' TRUE
3) `AB' = `A' FALSE
4) `ABC' > `AB' TRUE
5) `12' <'2' TRUE
6. Стандартні засоби обробки рядків: процедури і функції
Функції:
1. CONCAT (S1,S2,…, SN) — функція типу STRING. Виконує послідовне поєднання рядків S1,S2,…, SN, кожен з яких є вираз рядкового типу (STRING). Результатом є рядок не більше 255 символів. Дана функція еквівалентна операції конкатенації: `S1' + `S2' + `S3'…
2. COPY (st: STRING; index: INTEGER; count: INTEGER): STRING або COPY (st, index, count).
Функція копіює (повертає) частину рядка, виділеного з рядка st, довжиною count символів, починаючи з символу під номером index.
3. LENGTH (st: STRING) функція типу INTEGER повертає довжину рядка.
4. POS (subst, st: STRING): BYTE. Функція шукає у рядку st рядок subst. Результатом є номер позиції, де рядок subst зустрічається перший раз. Якщо рядок subst не знайдено, то результатом буде 0 (нуль).
5. UPCASE (ch) — функція типу CHAR. Повертає для символьного виразу ch, яке повинно представляти собою рядкову (маленьку) латинську букву, відповідно їй велику букву. Якщо значенням функції ch є будь-який інший символ (в тому числі рядкова буква російського алфавіту), функція повертає його без змін.
Процедури:
1. DELETE (st: STRING; index, count: INTEGER) або DELETE (st, index, count) - процедура вилучає (знищує) count символів у рядку st починаючи з символу під номером index.
2. INSERT (subst: STRING; st: STRING; index: INTEGER) або INSERT (subst, st, index). — процедура вставляє рядок subst у рядок st, починаючи з символу під номером index.
3. STR (X [:width[:decimals]]; st: STRING) — процедура перетворює число Х (real або integer) в рядок символів st так, як це робить це робить процедура WRITELN перед виводом. Параметри width і decimals (якщо вони присутні, тобто дужки [ ] показують на необов’язковість цих параметрів) задають формат перетворення: загальну ширину поля для представлення числа Х (width) та кількість символів дрібної частини (decimals), якщо X: REAL.
4. VAL (st, x, code) — процедура перетворює рядок символів st в значення числової змінної X (визначеного типу). Параметр code = 0, якщо перетворення пройшло успішно, тоді X дорівнює результату перетворення. Якщо виявляється помилковий символ у рядку st, то значення Х не змінюється, а code дорівнює номеру позиції з помилковим символом.
!Особливість!: Недопустимими є пропуски (пробіли) праворуч числа у рядку st!
val (`123_ _', x, k) {помилка, x — не змінюється, k=4 };
val (`_ _123', x, k) {вірно, x=123, k=0 };
Приклади:
var x: real;
y: integer;
st, st1: string;
begin
st := concat (`12', `345'); {рядок st містить 12 345}
st1 := copy (st, 3, Length (st)-2); {st1 містить 345}
insert (`-', st1, 2); {рядок st1 містить 3−45}
delete (st, pos (`2', st), 3); {рядок st містить 15}
str (pi: 6: 2, st); {рядок st містить 3,14}
val (`3.1415', x, y); {y містить 2, х без змін}
end.
Висновок: таким чином над рядками можна виконувати операції присвоювання, порівняння, з'єднання (конкатенації), введення та виведення. Для цього використовують широкий набір процедур та функцій.