новая папка 1 / Лабораторная работа №10
.docЛАБОРАТОРНАЯ РАБОТА № 10
СТРОКИ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ТУРБО-ПАСКАЛЬ.
1. Литерный тип (CHAR) в языке программирования Паскаль.
Литерный (символьный) тип обозначается именем CHAR. Значениями этого типа являются элементы набора литер (символов). Некоторые из литер не имеют графического представления - это управляющие литеры. Все литеры перенумерованы, начиная с 0. Полный набор литер в Турбо-Паскаль состоит из 256 элементов с номерами от 0 до 255.
Все литеры фиксированы и упорядочены. Отношение порядка между ними такое же, как и между их порядковыми номерами. Так 'A'>'0', потому что номер 'A' - 65, а номер '0' - 48.
Две стандартные функции дают отображение литер на их номера и на-оборот. Это следующие функции: ORD(C), где C - литера. Значением этой функции является номер литеры C; CHR(N), где N - целое число от 0 до 255. Значением этой функции является литера с номером N.
Эти функции являются обратными по отношению друг к другу, то есть
CHR(ORD(C)) = C и ORD(CHR(N)) = N.
Для элементов типа CHAR выполнимы также стандартные функции PRED и SUCC.
2. Строковый тип (STRING) в языке программирования Турбо-Паскаль.
Строки в языке программирования Паскаль - это последовательности литер. В качестве ограничителя строк-констант используются апострофы, например: 'PASCAL', 'компьютер', '25'.
В языке Турбо-Паскаль определен стандартный строковый тип STRING.
Примеры:
Var S:STRING;
Строковые выражения состоят из строковых констант, переменных, имен строковых функций и операндов. Знак "+" используется для слияния (конкатенации) строк.
Например:
Var s,s1,s2:String;
Begin
s1:=’123’;
s2:=’456’;
s:=s1+s2;{В итоге S=’123456’}
End;
Для строк применима операция сравнения. При этом строки сравниваются посимвольно. т.е. сначала сравниваются первые символы. Если они равны, сравниваются вторые символы и т.д.
Например: ‘Привет’>’Пока’
Тип STRING в -Паскале представляется как ARRAY[0..N] OF CHAR.
К любому элементу строки так же, как к элементу одномерного массива. В результате получается величина типа CHAR.
Например, если
VAR A:STRING;
и A:='COMPUTER',
то A[3] равно'M' , A[5] - 'U'.
3. Строковые процедуры и функции в Турбо-Паскале.
В Турбо-Паскале имеются ряд стандартных процедур и функций, специально предназначенных для работы со строками.
3.1. Процедура DELETE.
Синтаксис:
DELETE(var S:String;Pos,Len:Integer);
Убирает из строки S Len символов начиная с Pos .Если Len больше длины S то ничего не происходит . Если Pos+Lеn больше длины строки то удаляются все символы до конца строки .
Например:
S:=’ABCDEF’;
Delete(s,2,3); {В результате S=’AEF’}
3.2. Процедура INSERT.
Синтаксис :
INSERT(S:String;var D:String;Pos:Integer);
Вставляет строку S в строку D начиная с символа с номером Pos . Если Pos больше длины D то S и D сливаются .
Например:
S:=’ABCD’; Insert(‘Q’,S,2) {В результате S=’AQBCD’}
3.3. Функции IntToStr и FloatToStr
Синтаксис :
IntToStr(I:Integer):String;
FloatToStr(R:Real):String;
Преобразует I или R из числа в строку
3.4. Функции StrToInt и StrToFloat
Синтаксис :
StrToInt(S:String):Integer;
StrToFloat(S:String):Real;
Преобразует строковую переменную S в число
3.5. Функция COPY.
Синтаксис :
COPY(S:String;Pos,Len:Integer):String;
Возвращает строку , полученную из Len символов строки S начиная с позиции Pos . Если Pos больше,чем длина строки S то возвращается пустая строка . Если Pos + Len больше ,чем длина строки S то возвращаются только символы , принадлежащие строке S .
Например:
S:=’ABCDEF’;
S1:=Copy(S,2,3); {В результате S1=’BCD’}
3.6. Функция LENGTH.
Синтаксис :
LENGTH(S:String):Integer;
Возвращает длину строки S .
S:=’ABCDEF’;
k:= LENGTH (S); {В результате k=6}
3.7. Функция POS.
Синтаксис :
POS(Pattern,Sourse:String):Integer;
Возвращает номер символа , начиная с которого Pattern входит в
Sourse . Если вхождения нет , то возвращается 0 .
Например: Pos(‘C’,’ABCDC’) = 3;
Pos(‘E’,’ABCD’) = 0.
3.8. Функция AnsiLowerCase;
Синтаксис:
AnsiLowerCase(S:String):String;
Преобразует все буквы строки S к нижнему регистру.
Например: S:=AnsiLowerCase(‘ПрИвЕт’) {Результат: S=’привет’}
3.9. Функция AnsiUpperCase;
Синтаксис:
AnsiUpperCase(S:String):String;
Преобразует все буквы строки S к верхнему регистру.
4. Примеры программ
Пример 1. Написать программу, подсчитывающую число букв ‘A’ в введенной строке.
Для ввода строки используем Edit1. Результат выведем в объект Label1.
Вариант 1.
Var
S:String;
c,I:Integer;
Begin
C:=0;
S:=Edit1.text; {Получаем строку из Edit1}
For I:=1 to Length(s) do {Просматриваем каждую букву строки}
If s[I]=’A’ Then C:=C+1; {Если просматриваемая буква «А», то увеличиваем С}
Label1.caption:=’Число букв «А» в строке «’+s+’» равно ‘+IntToStr(C);
{Путем слияния строк выводим на экран результат. Например, если введена строка ‘AESFDAC’, то результат будет записан в виде: «Число букв «А» в строке «AESFDAC» равно 2»}
End;
Замечание: При сравнении строк различаются большие и маленькие буквы, а также английские и русские символы
Вариант 2:
Var
S:String;
c:Integer;
Begin
C:=0;
S:=Edit1.text; {Получаем строку из Edit1}
While Pos(‘A’,S)>0 do {Пока есть буквы «А» в строке повторяй}
Begin
C:=C+1; {Увеличивай счетчик}
Delete(S,POS(‘A’,S),1); {Удаляй первую найденную букву «А»}
End;
Label1.caption:=’Число букв «А» в строке «’+s+’» равно ‘+IntToStr(C); {Путем слияния строк выводим на экран результат. Например, если введена строка ‘AESFDAC’, то результат будет записан в виде: «Число букв «А» в строке «AESFDAC» равно 2»}
End;
Замечание: Последний вариант подходит не только для поиска числа вхождений одной буквы в строке, но и целой фразы.
Пример 2: Написать программу, заменяющую в введенной строке все буквы “A” на “Я”
Var
S:String;
I:Integer;
Begin
S:=Edit1.text; {Получаем строку из Edit1}
For I:=1 to Length(s) do {Просматриваем каждую букву строки}
If s[I]=’A’ Then S[I]:=’Я’;{Если просматриваемая буква «А», то увеличиваем С}
Label1.caption:=S
End;
Задание 1. Напишите программу, подсчитывающую число заданных букв (например 'А') в произвольном слове. Буква и слово вводятся с клавиатуры
Задание 2. Напишите программу, удаляющую из строки все пробелы.
Задание 3. Напишите программу, заменяющую в произвольном тексте все цифры на символ '*'.
