- •Программирование на языках высокого уровня
- •1. Основные понятия
- •1.1. Алфавит и словарь языка
- •1.2. Скалярные, стандартные типы данных
- •1.3. Встроенные функции
- •1.4. Структура программы
- •2. Программирование вычислительных процессов
- •2.1. Линейные процессы вычислений
- •2.2. Разветвляющийся вычислительный процесс
- •2.3. Программирование циклов
- •3. Программирование данных
- •3.1. Конструирование простых пользовательских типов
- •3.2. Массивы. Регулярные типы
- •3.3. Сортировка одномерного массива
- •3.4. Многомерные массивы
- •4. Работа со строковыми данными
- •4.1 Массив символов
- •4.2 Манипулирование строками string
- •7.4. Массив строк типа string
- •5 Подпрограммы, определенные пользователем
- •5.1 Описание функций
- •5.2 Передача имени объекта в качестве параметра функции
- •5.3 Рекурсивные вычислительные процессы
- •5.4. Описание процедур
4.1 Массив символов
Одномерный массив символов по своим свойствам существенно отличается от всех остальных массивов языка Паскаль. Свойства одномерного массива символов приближены к свойствам коротких строк (String).
Инициализация массива символов
• Массив можно объявить и присвоить ему начальное значение непосредственно в разделе констант. При этом требуется соблюдение условия — длина текстовой константы должна равняться количеству элементов массива. CONST В: ARRAY[1 .. 50] OF CHAR = 'Я учусь программировать';
• Массив символов можно ввести с клавиатуры как последовательность символов конечной длины N, не превышающей количество элементов массива — N ≤ HIGH(B) – LOW(B) + 1.
VAR ARRAY[1.. 500] OF CHAR; I, N: WORD;
BEGIN ...
WRITELN('Введите длину строки текста не более 500 символов, N');
READLN(N);
WRITELN('Введите строку текста В');
FOR I :=1 ТО N DO READ(B[I]); ...
Существенным недостатком этого способа ввода текста является необходимость знать точное количество символов N во вводимой строке.
• Массив символов можно заполнить в теле программы с помощью оператора присваивания. Но есть ограничение — количество символов в текстовой константе должно быть равно количеству элементов массива.
VAR ARRAY[1..23] OF CHAR;
BEGIN ...
В:= 'Я учусь программировать';
Вывод массива символов
Массив символов можно вывести на экран монитора двумя способами.
• Процедуры WRITELN и WRITE поддерживают вывод массива символов. Допускается запись — WRITELN(B), где В — идентификатор одномерного массива символов.
• Содержимое массива символов можно выводить в цикле, используя оператор WRITE(B[I]). Ниже приведен фрагмент программы, обеспечивающей посимвольный вывод элементов массива B в строку.
WRITELN('Массив В содержит текст:');
FOR I := LOW(B) ТО HIGH(B) DO WRITE(B[I]); WRITELN;
Пример 38. Ввести натуральное число N. Вывести строку S, представляющую запись этого числа в двоичной системе счисления.
Для пояснения алгоритма преобразования десятичного числа в двоичную систему счисления используем пример на рис. 4.1.
-
20
2
20
10
2
0
10
5
2
0
4
2
2
1
2
1
0
Рис. 4.1. Преобразование числа 20 в двоичную систему счисления
PROGRAM PR38;
CONST B:ARRAY[1..10] OF CHAR = ";
VAR I, К, N: BYTE; S: STRING[1];
BEGIN
WRITELN('Введите число N');
READLN(N);
К:= 0;
WHILE N> 1
DO BEGIN
К:= К + 1;
STR(N mod 2:1, S);
В[К] := S[1];
N := N div 2
END;
IF(N= 1) or (K = 0)
THEN BEGIN
К := К + 1;
STR(N mod 2:1, S);
B[K] := S[1]
END;
WRITELN('B двоичном коде число будет равно:');
FOR I:= К DOWNTO 1 DO WR1TE(B[I]); {Вывод массива символов}
WRITELN
END.
Структурограмма
Ввод с клавиатуры числа N; К = 0; {К — счетчик разрядов двоичного числа} |
|
|
Пока N > 1 делать: |
|
К = К + 1; {номер вычисляемого разряда двоичного кода} |
|
STR(N mod 2:1, S); B[K]:=S[1]; {Преобразование числа 0 или 1 в литеру |
|
и помещение этой литеры в массив символов В} |
|
N = N div 2; {Деление числа N на основание 2} |
( N = l) or (K = 0) True |
|
К = К + l; STR(N mod 2:1, S); В[К] := S[l]; {Запись числа N } |
|
|
Для I от К до 1 с шагом -1 делать: {Вывод двоичного кода на экран} |
|
Вывод литеры В[I]; |
Из этой программы видно, что строковая процедура STR, преобразующая число в строку, не принимает в качестве аргумента переменные типа CHAR. Именно по этой причине пришлось ввести строку S единичной длины.
Операции с массивами символов
Массивы символов можно использовать в сцепках. Например, в операторе WRITELN в списке вывода допускается строковое выражение:
WRITELN('Результирующая строка:' + B + ',');
где i массив символов. Знак + означает операцию сцепки строк. Недостатком такого выражения является то, что пустые разряды массива B займут на экране свои позиции, и поэтому запятая может оказаться на значительном удалении от текста, хранимого в массиве B.
Массивы символов A и B в отличие от массивов всех других типов можно сравнивать между собой с помощью операций отношения =, <>; допускается использование также <, >, <=, >=.
Сравнение массивов производится путем последовательного сравнения литер (элементов массивов) от наименьшего индекса до наибольшего индекса. Сравнение завершается при первом несовпадении или достижении верхнего индекса одного из массивов. Массивы A и B могут иметь разную размерность. В строковых выражениях сцепок массивы символов ничем не отличаются от строк. Так допустима следующая конструкция:
IF A+B>='X = ' + B + '.'
THEN S := А + 'за вычетом' + В;
где A и B массивы символов, a S строка String.