Оператор выбора Case Of в Pascal.

Помимо условного оператора If в языке программирования Pascal существует оператор выбора Case of. Рассмотрим его применение на примере программы, которая выводит на экран то или иное сообщение, в зависимости от введенного числа.

Перевод числа из десятичной системы счисления в шестнадцатеричную.

Напишем программу, которая вводит с клавиатуры целое число в диапазоне от 0 до 15 и преобразует его к шестнадцатеричной системе счисления. Напомню, что в шестнадцатеричной системе счисления числа в диапазоне от 0 до 9 соответствуют таким же числам в ...

Логические операции And, Or, Not, Xor в Pascal.

Над переменными логического типа можно производить логические операции. В языке программирования Pascal существуют следующие логические операции : Andлогическое умножение, Orлогическое сложение, Notлогическое отрицание, Xor ...

Циклы и массивы

Арифметический цикл с рекуррентной зависимостью.

Многие циклические вычислительные процессы используют рекуррентные зависимости при решении различных математических задач.

Оператор варианта CASE.

Иногда его называют также оператором выбора. Это оператор CASE, который является обобщением оператора IF и позволяет сделать выбор из произвольного числа имеющихся вариантов.

В языке Паскаль при работе с текстами чаще всего используются короткие строки типа STRING. Стандартные процедуры READLN(St), WRITE(St) и WRITELN(St) поддерживают ввод и вывод строк переменной длины St: STRING.

Объявление и структура строки.

Строку можно объявить двумя способами.

  • В разделе констант можно сформировать переменную типа STRING и инициализировать ее путем присваивания начального значения в виде текстового литерала.

CONST A: STRING ='Я учусь программировать'; {Длина строки 255 символов}
В: STRING[15] = 'IBM PC {Длина строки 15 символов }

  • Второй способ состоит в объявлении строки в разделе VAR. В этом случае в памяти компьютера отводится место для хранения информации в объеме, не превышающем размер строки.

VAR
A:STRING;
В:STRING[15];
С:ARRAY[1..10] OF STRING[25];

В этом объявлении A представляет собой строку максимально возможной длины, занимающую в памяти компьютера 256 байт. Байт с номером 0, то есть А[0], содержит двоичный код равный количеству символов в строке. Остальные байты A[1]...А[255], имеющие номера с 1 по 255, используются для хранения кодов литер, соответствующих ASCII. Строка B резервирует только 16 байт. В остальном она ничем не отличается от строки А. Переменная С представляет собой массив из 10 строк, каждая из которых имеет длину 15 символов. Обратиться к любой строке массива можно так — С[I], где I — номер строки (I = 1..10). Имеется возможность обратиться к любой литере любой строки — C[I, J], где I — номер строки (I = 1..10), a J — номер литеры в строке (J = 1..25).
Ниже перечисляются стандартные операциями над строками, принятые во многих языках программирования.

Сцепка строк.

Сцепка строк — построение такой их комбинации, которая представляет единую результирующую строку. Операцией сцепления является знак '+'. Иногда эту операцию называют конкатенацией строк.

Пример 10. Ввести строку ST символов. Построить три строки: SR – содержащую все символы русского алфавита исходной строки в порядке их следования; SL – содержащую латинские символы исходной строки; SP – содержащую все остальные символы. Указать количество символов в каждой из строк.
При решении задач со строками часто пользуются функциями. В рассматриваемой задаче введем пользовательскую функцию UST(X). На вход этой функции подается литера, а на выходе число 1, 2, или 3. Число идентифицирует символ на принадлежность одной из строк латинской, русской или прочих символов соответственно. Поскольку порядок следования символов в выходных строках соответствует исходной строке, то можно организовать арифметический цикл от 1 до N, где N — длина введенной строки текста. На каждом шаге цикла следует классифицировать текущую литеру с помощью функции UST(ST[I]). По результатам анализа оператор CASE направляет вычислительный процесс по одной из трех ветвей, в которых путем сцепки формируются выходные строки SL, SR, SP. Программа завершается выводом на экран каждой строки и ее размера.


PROGRAM PR10;
VAR ST, SL, SR, SP: STRING; I, N: BYTE;
FUNCTION UST(X: GHAR): BYTE; {1 - лат., 2 – рус., 3 - остальные}
CONST AL: SET OF CHAR = ['A'.. "Z", 'a'.. 'z'];
AR: SET OF CHAR = ['A'.. 'Я', 'a'.. 'п' 'p'.. 'я'];
BEGIN
UST := 3;
IF X IN AL THEN UST := 1;
IF X IN AR THEN UST := 2;
END;
BEGIN
WRITELN('Введите строку не более 255 символов');
READLN(ST);
N:= ORD(ST[0]); {Длина исходной строки}
WRITELN('B исходной строке', N:l,' символов');
SR:= ";
SL:= ";
SP:= "; {Инициализация создаваемых строк}
FOR I := 1 ТО N {Просмотр исходной строки}
DO CASE UST(ST[I]) OF
1: SL:= SL + ST[I]; {Формирование латинской строки}
2: SR:= SR + ST[I] {Формирование русской строки}
ELSE SP:= SP + ST[I] {Формирование строки прочих литер}
END; {CASE, FOR}
WRITELN('B латинской строке ', ORD(SL[0]): 1,' символов, текст строки:'); WRITELN(SL);
WRITELN('B русской строке', ORD(SR[0]): 1,' символов, текст строки:'); WRITELN(SR);
WRITELN('B строке прочих литер', ORD(SP[0]): 1,' символов, текст строки:');
WRITELN(SP)
END.


Строки
AL: SET OF CHAR = ['A'.. "Z", 'a'.. 'z'];
AR: SET OF CHAR = ['A'.. 'Я', 'a'.. 'п' 'p'.. 'я'];
описывают AL и AR как (SET OF) множества всех возможных подмножеств элементов исходного множества, включая пустое множество. Например, такое множество, состоящее из трех элементов [A,B,C] включает в себя следующие подмножества: [A,B,C], [A,B], [B,C],[A,C],[A],[B],[C],[]. Соответственно запись 'a'.. 'п' эквивалентна 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п'.
Проверка IF X IN AL определяет наличие переменной X, в множестве AL.

Поиск подстроки.

Поиск подстроки представляет собой анализ, содержит ли исходная (первая St1) строка вторую St2. Если содержит, то определяется порядковый номер литеры в первой строке, являющейся самой левой позицией второй строки. Для поиска используется функция POS(St2, St1), которая (см. табл. 2.1) возвращает целое число N — номер символа в St1, с которого начинается St2, если поиск успешен, и ноль — в противном случае, где St1, St2: String; N: Byte.

поиск подстроки

Удаление подстроки.

Удаление подстроки представляет собой операцию нахождения результирующей строки из исходной St посредствам удаления N литер, начиная с позиции Poz (см. табл. 2.2). Для удаления используется стандартная процедура DELETE(St, Poz, N), где St исходная строка, Poz — номер первого удаляемого символа, N — число удаляемых литер, где St: String; Poz, N: Byte.

удаление подстроки

Однако пользоваться процедурой DELETE неудобно, поскольку результат она не возвращает, а только удаляет из строки подстроку. Лучше разработать пользовательскую функцию DEL(St, Poz, N) с теми же параметрами, что и у процедуры DELETE, которая бы возвращала вычисленную строку непосредственно в строковое выражение, откуда она вызывается.

Пример 11. Создать функцию DEL(St, Poz, N), которая возвращает исходную строку St, из которой удалены N позиций, начиная с позиции Poz.


FUNCTION DEL(ST: STRING; POZ, N: BYTE): STRING;
BEGIN
DELETE(ST, POZ, N);
DEL := ST
END;


Пример 12. Ввести строку, подсчитать число символов в строке и, если оно нечетное, удалить символ, стоящий посредине строки. Вывести полученную строку на экран. В программе использовать функцию DEL.


PROGRAM PR12;
VAR ST: STRING; N: BYTE;
FUNCTION DEL(ST: STRING; POZ, N: BYTE): STRING;
BEGIN
DELETE(ST, POZ, N); DEL:=ST
END;
BEGIN
WRITELN('Введите строку не более 255 символов');
READLN(ST);
N:= ORD(ST[0]); {Длина исходной строки}
IF ODD(N) THEN ST:= DEL(ST, N div 2+1,1);
WRITELN(ST)
END.


Выделение подстроки.

Выделение подстроки представляет собой операцию построение новой строки (см. табл. 2.3), являющейся последовательностью литер исходной строки, начиная с позиции Poz длиной N. Для выделения подстроки St1 из строки St используется функция COPY(St, Poz, N), которая возвращает St1, где St, St1: String; Poz, N: Byte.:

выделение подстроки

Вставка подстроки.

Для вставки подстроки St в строку St1 (см. табл. 2.4), начиная с позиции Poz, используется процедура INSERT(St, St1, Poz), где St, St1: String; Poz: Byte.

вставка подстроки

Часто использование процедуры INSERT оказывается неудобным. Рекомендуется создать пользо-вательскую функцию INS(St, St1, Poz), которая возвращает строку St1, полученную из строки St1 путем вставки подстроки St с позиции Poz.

Пример 13. Создать функцию вставки подстроки INS(St, St1, Poz), описанную выше.


FUNCTION INS(ST, ST1: STRING; POZ: BYTE): STRING;
BEGIN
INSERT(ST, ST1, POZ);
INS:= ST1
END;


Определение длины строки.

Строка St типа STRING отличается от массива символов тем, что содержит один служебный байт памяти с номером ноль St[0], где хранится текущая длина строки, то есть количество информационных байт (литер). Это число N называется длиной строки. Для определения длины строки (см. табл. 36) можно использовать стандартную функцию LENGTH(St), где St: string; N: byte.

определение длины строки

Замена подстроки.

Для замены в исходной строке всех вхождений данной подстроки новой подстрокой стандартной функции нет. Поэтому можно использовать пользовательскую функцию ATR(St, St1, St2), которая описана ниже (см. табл. 2.6). Функция обеспечивает поиск подстроки St в строке St1 и замену всех вхождений на подстроку St2, где St, St1, St2: String.

замена подстроки

Пример 14. В исходной строке заменить все вхождения данной подстроки новой подстрокой, ис-пользуя функцию ATR.


PROGRAM PR14;
VAR      S, S1, S2: STRING;
FUNCTION ATR(ST, ST1, ST2: STRING): STRING;
VAR N,N1: BYTE;
BEGIN
N:= LENGTH(ST); {Длина подстроки подлежащей замене}
WHILE POS(ST, ST1) <> 0 DO BEGIN
N1:= POS(ST, ST1); {Первая позиция заменяемой подстроки}
DELETE(ST1, N1, N);       {Удаление заменяемой подстроки}
INSERT(ST2, ST1, N1);     {Вставка новой подстроки}
END;
WRITELN('Введите исходную строку ST1');
READLN(S1);
WRITELN('Bвeдитe строку подлежащую замене S');
READLN(S);
WRITELN('Введите строку ST2 на которую нужно заменить ST');
READLN(S2);
WRITELN('Peзyльтaт замены ==> ', ATR(S, S1, S2))
END.


 Преобразование численного значения вещественного или целого числа в строку.

Для преобразования целочисленного I или вещественного числа IR в строку символов St можно использовать стандартную процедуру STR(IR, St), где St: String; IR: Real; I: Integer. При вызове процедуры следует использовать правила форматирования. Вид результирующей строки полностью определяется форматом. Примеры преобразования приведены в табл. 2.7.

stroki2

Преобразование строки в вещественное или целое число и помещение результата в переменную.

Для преобразования строки St в переменную целого I или вещественного IR типов используется процедура VAL(St, R, Cod), где Cod целочисленная переменная — Cod: Integer; St: String; IR: Real; I: Integer. Вы можете скачать настольные игры на андроид бесплатно. Если исходная строка St содержит литерал, удовлетворяющий правилам преобразования в переменную заданного типа, то Cod => 0. В противном случае Cod становится равным номеру первой литеры в St, где нарушены правила записи целых или вещественных констант.

stroki2.


Предыдущая статья: Массив символов.
Оглавление: Лекции по Pascal. Часть 2.
Следующая статья: Массив строк типа STRING.


Комментарии  

 
0 # h 28.02.2016 12:16
:-x
 
   ГлавнаяПаскальЛекции по Pascal. Часть 2.Манипулирование строками STRING.