- •Основи програмування мовою Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскалі 62
- •Частина 1. Основи мови Паскаль
- •1. Алгоритм і програма
- •1.1. Алгоритм
- •1.2. Властивості алгоритму
- •1.3. Форми запису алгоритму
- •1.4. Програма й програмне забезпечення
- •1.5. Етапи розробки програми
- •2. Дані в мові Паскаль
- •2.1 Константи
- •2.2 Змінні й типи змінних
- •3. Арифметичні вирази
- •4. Лінійний обчислювальний процес
- •4.1 Оператор присвоювання
- •4.2 Оператор уведення
- •4.3 Оператор виведення
- •4.4 Керування виводом даних
- •4.5 Вивід на друк
- •5. Структура простої програми на Паскалі
- •6. Компілятор і оболонка Turbo Pascal
- •7. Обчислювальний процес, що розгалужується, і умовний оператор
- •7.4. Короткий умовний оператор
- •If логічний_вираз then оператор1;
- •7.5. Повний умовний оператор
- •If логічний_вираз then оператор1
- •7.7. Вкладені умовні оператори
- •7.9. Приклади програм з умовним оператором
- •8. Директиви компілятора й обробка помилок уведення
- •9. Оператор циклу. Цикли із передумовою і після-умовою
- •10. Цикл із лічильником і дострокове завершення циклів
- •11. Типові алгоритми табулювання функцій, обчислення кількості, суми й добутку
- •11.1 Алгоритм табулювання
- •11.2 Алгоритм організації лічильника
- •11.3 Алгоритми нагромадження суми й добутку
- •12. Типові алгоритми пошуку максимуму й мінімуму
- •13. Розв'язок навчальних завдань на цикли
- •14. Одномірні масиви. Опис, уведення, вивід і обробка масивів на Паскалі
- •15. Розв'язок типових завдань на масиви
- •Частина 2. Елементи професійного програмування на Паскалі
- •16. Кратні цикли
- •16.1 Подвійний цикл і типові завдання на подвійний цикл
- •16.2 Оператор безумовного переходу
- •17. Матриці й типові алгоритми обробки матриць
- •18. Підпрограми
- •18.1 Процедури
- •18.2 Функції
- •18.3 Масиви як параметри підпрограми
- •18.4 Відкриті масиви
- •19. Безлічі й перечислимые типи
- •20. Обробка символьних і строкових даних
- •20.1. Робота із символами
- •20.2 Робота з рядками
- •21. Текстові файли
- •21.1 Загальні операції
- •21.2 Приклади роботи з файлами
- •21.3 Робота з параметрами командного рядка
- •22. Записи. Бінарні файли
- •23. Модулі. Створення модулів
- •23.1. Призначення й структура модулів
- •Implementation
- •23.2. Стандартні модулі Паскаля
- •24. Модуль crt і створення простих інтерфейсів
- •25. Модуль Graph і створення графіки на Паскалі
- •Додаток 1. Таблиці Ascii-Кодів символів для операційних систем dos і Windows
- •Додаток 2. Основні директиви компілятора Паскаля
- •Додаток 3. Основні повідомлення про помилки Паскаля
- •Додаток 4. Додаткові лістинги програм
- •Додаток 5. Розширені коди клавіатури
- •Ascii‑ коди
- •Розширені коди
- •Додаток 6. Правила гарного коду
- •Додаток 7. Рекомендована література
20. Обробка символьних і строкових даних
Комп'ютер здатний обробляти не тільки числові дані. Завдання обробки символьних даних поширені не менш, а можливо й більш, ніж чисто арифметичні розрахунки. У цій главі ми вивчимо роботу із символами й рядками засобами Паскаля.
20.1. Робота із символами
Для роботи з окремими символами описуються змінні типу char:
Var ch:char;
{ . . . }
Ch:='Y';
Одна змінна типу charзберігає інформацію про одне коді Ascii-Символу. Це можна використовувати, наприклад, для відстеження дій користувача по натисканню клавіш. Приведемо приклад одного з варіантів такої програми:
var ch:char;
begin
repeat
writeln;
write ('Продовжити? (Y/N)');
readln (ch);
if (ch='Y') or (ch='y') then begin
{Тут програмується потрібний обчислювальний процес}
end
else if (ch='N') or (ch='n') then halt {Завершення програми}
else writeln ('Натисніть Y або N, потім Enter!');
until false;
end.
Для роботи з кодами символів існують 2 основних функції:
Function Ord(X) : Char; - повертає Ascii-Код символуX
Function Chr(X : Byte) : Char; - повертає символ із зазначеним Ascii-КодомX
Використовуємо останню функцію для того, щоб довідатися, як взагалі виглядає таблиця символів:
var i,j:integer;
begin
Writeln;
Write (' Ascii-Коди [32..255]');
for i:=2 to 15 do begin
writeln;
write (i*16:3,' ');
for j:=0 to 16 do write (Chr(i*16+j), ' ');
end;
Writeln;
Write ('ENTER для виходу...');
readln;
end.
Тут друкува_ тільки символ з код від 32 до 255 включно, тому що перш 32 символ з код від 0 до 31 –, що непечатаемые (такие, как табуляция или перевод
Для визначення того, чи попадає код символу в деякий діапазон значень, зручно використовувати оператор in, як це робить наступний фрагмент програми:
write ('Уведіть символ: '); readln (ch);
if ch in ['A'..'Z'] then write ('Більша латинська;')
else if ch in ['a'..'z'] then write ('Мала латинська;')
else if (ch in ['А'..'Я']) then write ('Більша російська;')
else if (ch in ['а'..'п']) or (ch in ['р'..'я']) then
write ('Мала російська;')
else if ch in ['0'..'9'] then write ('Цифра;')
else write ('Це не алфавітно-цифровий символ;');
write (' Код Вашого символу= ',Ord(ch));
Працюючи з алфавітними символами, доводиться окремо враховувати введення рядкових і прописних букв. Зручніше спочатку перетворити всі символи до прописних за допомогою функції Upcase:
var ch:char; i:integer;
begin
repeat
for i:=1 to random(72) do write ('*');
writeln;
write ('Продовжити? (Y/N)');
readln (ch);
until upcase(ch)='N';
end.
На жаль, ця функція пошук при роботі із символами російського й інших національних алфавітів, для її заміни напишемо й протестуємо власну підпрограму c назвою upcase_ru:
procedure upcase_ru (var s:string);
var i,l,c:integer;
begin
l:=length(s);
for i:=1 to l do begin
c:=Ord(s[i]);
if (c>=Ord('а')) and (c<=Ord('п')) then c:=c-32
else if (c>=Ord('р')) and (c<=Ord('я')) then c:=c-80;
s[i]:=Upcase(Chr(c));
end;
end;
var s:string;
begin
writeln ('Уведіть рядок тексту:');
readln (s);
upcase_ru (s);
writeln ('Перетворений рядок:');
writeln (s);
end.
Програма враховує, що в кодуванні DOS не всі символи кирилиці закодовані числами, що йдуть підряд (див. Додаток 1).
Крім того, у програмі вже застосовується масивсимволів, якому в Паскалі відповідає тип данихString. Ми згадували цей тип даних, але ще не працювали з ним. Зробимо це в наступному розділі.