Цель: получение навыков работы со строками в Паскале.
1. Теоретический материал.
Понятие строковой переменной.
Тип STRING (строка) в Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [O . . N] OF CHAR, однако, в отличие от последнего, количество символов в строке – переменной может меняться от О до N, где N – максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не более 255, например:
Const N = 25;
Type Stroka = String [n];
Var S: Stroka;
B: String [50];
C: String [230];
D: String [270]; Ошибка, 270>255
Разрешается не указывать N. В этом случае длина строки принимается максимально возможной, а именно N=255. Т. о. согласно описания
Var A: String;
B: String [255];
переменные А и В могут содержать до 255 символов каждая.
Строка в Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [O . . N] of Char, например:
Var St : String [20];
Begin …….
If St [5] = ‘A’ then …..
end
Занесение значений в строковую переменную.
Значение в строковую переменную может быть занесено с помощью оператора присваивания : =, например:
St : = ‘How do you do!’
При этом будут соблюдаться следующие правила:
1. Позиция символа в строке соответствует номеру позиции в строковой переменной,
т. е. St [1] = ¢H¢ (см. последний пример), St [2] = ¢о¢ St [3] = ¢w¢ St [4] = ¢ ¢
St [5] = ¢d ¢, ……, St [14] = ¢!¢.
2. Если в правой части количество символов в строке превышает максимально возможный размер значения строковой переменной, расположенный слева от знака присваивания, “лишние” символы отбрасываются. Например, если при описании
Var st : string [10];
в программе встретится оператор
St : = ¢Hoy do you do!¢
то переменная St получит значение ‘Hoy do you’, а оставшиеся четыре символа будут отброшены.
3. Если в переменной St уже содержались какие-либо значения, оно полностью уничтожается, а в переменную заносится новое значение. Например, если
St: = ¢Hello!¢
переменная St = ‘Hello!’ (а не St = ‘Hello! you do’)
Справа от знака “присвоить” может стоять как строковая константа, так и строковая переменная, при этом максимальное количество символов в строковых переменных может быть разным, т. е. при описании
Var A: string [20];
B: string [10];
C: string [2];
Занести значение в строковую переменную можно и с помощью оператора ввода Readln. При этом соблюдаются все выше перечисленные правила.
Длина строки.
Длинна строки, определяется с помощью стандартной функции Length (St), которая возвращает целое число, равное количеству символов в строке St, например:
Lenght (¢Hello!¢) = 6
Следует заметить, что строковая переменная может содержать пустую строку, которая обозначается двумя подряд идущими апострофами. Длина пустой строки равна нулю:
Lenght (¢ ¢) = 0
Самый первый байт строковой переменной имеет индекс 0, и содержит символ, код которого равен длине строки:
Ord (St [0] ) = Lenght (St).
Если этот символ заменить символом, кож которого меньше, то строка уменьшиться по длине настолько, насколько код нового символа меньше, а остальные символы будут безвозвратно утрачены. Если попытаться заменить символ первого элемента на символ с большим кодом, то это приведет к непредсказуемым последствиям. При переприсваивании строковой переменной нового значения, автоматически меняется символ в элементе с индексом ноль.
Сложение строк.
К строкам можно применять операцию “+” – сцепление, например:
St: = ¢a ¢ + ¢b¢;
Аналогичным образом функция типа String
Concat (St1, St2, …. , Stn), n = 1,2, ..
возвращает строку, представляющую собой сцепление строк St1, St2, .. , Stn, например:
St = ( ¢com¢, ¢pu ¢, ¢ter ¢); {St = ¢computer¢}.
Строки можно не только сцеплять, но и вставлять одну в другую. Это осуществляется с помощью процедуры
Insert (SubSt, St, N),
которая вставляет подстроку SubSt в строку St, начиная с символа с номером N, например:
Удаление, вырезка, поиск подстрок.
Процедура
Delete (St,N,Kol)
удаляет Kol символов из строки St, начиная с символа с номером N.
Если число символов, которые требуется удалить, превышает число символов в строке St, начиная с указанной позиции (т. е. Length (St)-N+1<Kol), то удаляются все символы, начиная с указанного, и до конца строки.
Если второй параметр превышает длину строки, из которой удаляется подстрока (т. е. Length (St)<N), в этом случае ни один символ из строки не будет удален.
При решении многих задач используется не вся строка, а только ее часть (подстрока). Выделить подстроку из строки можно с помощью функции типа String.
Copy (St,N,Kol),
копирующий из строки St Kol символов, начиная с символа с номером N. Строка St не изменяется.
Если в строке, начиная с указанной позиции, количество символов меньше, чем требуется, скопировать (Length (St)-N+1<Kol), функцией возвращается реально существующая часть строки.
Очень полезна при работе со строками функция типа Integer
Pos (SubSt,St),
отыскивающая в строке St первое вхождение подстроки SubSt и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль.
Две взаимообратные процедуры Str и Var преобразуют любое число в строку и из строки в число.
Процедура: Str (X[:W[:D]], St) преобразует число Х любого вещественного или целого типов в строку символов St так, как это делает процедура Writeln перед выводом. Параметры :W и :D, если они присутствуют, задают формат преобразования: W определяет общую ширину поля, выделенное под соответствующее символьное представление вещественного или целого числа X, а D – количество символов дробной части (этот параметр имеет смысл только в том случае, когда Х – вещественное число).
Процедура Val (St,X,Code) преобразует строку символов St во внутреннее представление целой или вещественной переменной Х, которая определяется типом этой переменной. Параметр Code содержит 0, если преобразование прошло успешно, и тогда в Х помещается результат
В строке St могут быть ведущие пробелы, однако ведомые пробелы недопустимы.
Например, обращение Val (¢ 123¢,X,C) пройдет успешно: Х получит значение 123, в С будет помещен 0, в то время, как обращение Val (¢123 ¢,X,C) будет ошибочным: значение Х не изменится, а С будет содержать 4.
Операции отношения строк.
В Turbo Pascal’e над двумя строками определены следующие операции отношения: =, <>, >, <, >=, <=. Операции отношения над двумя строками выполняются посимвольно. Слева направо, с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением Chr(0). Следующие операции отношения дадут значение True:
‘’’’< ‘.’
‘A’> ‘1’
‘Turbo’< ‘Turbo Pascal’
‘Паскаль’> ‘Turbo Pascal’
2. Контрольные вопросы.
1. Как описываются строковые переменные?
2. Как можно занести значение в строковую переменную?
3. Соединение строк.
4. Как найти необходимую подстроку в строке?
5. Удаление символов из строки.
6. Как сравниваются строки?
3. Задачи для самостоятельного решения.
1. Дана последовательность слов, разделенных между собой пробелами. Определите, сколько слов в последовательности начинается на букву М.
2. Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые содержат букву А.
3. Дана последовательность слов, разделенных пробелами. Вывести слова в обратном порядке.
4. Var St, St1, St2:String;
В переменную St помещено предложение, в котором слова разделены пробелами. В переменную St1 поместить слова, стоящие на нечетных местах, а в St2 – слова, стоящие на четных местах. Вывести значения St1 и St2 на экран.
5. Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые совпадают с начальным отрезком латинского алфавита (ab, abc, abcd и т. д.).
6. Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые совпадают с конечным отрезком латинского алфавита (yz, xyz и т. д.).
7. Дана последовательность символов. Разбить ее на четыре последовательности: буквы русского алфавита, буквы латинского алфавита, цифры и другие символы.
8. Дана последовательность слов, разделенных пробелами. Вывести на экран эти слова в алфавитном порядке.
9. Дано арифметическое выражение, имеющее вид:
<число><знак><число>=<число>,
где <число> – любое целое положительное число, а <знак> – арифметический знак +, –, , /. (Например, 38+43=81, 56*43=275). Проверить, не является ли данное арифметическое выражение тождеством.
10. Дана последовательность символов. Вывести их на экран по одному разу.
11. Дана последовательность символов. Вывести на экран те из них, которые входят в последовательность два, три и более раз.
12. Дана последовательность символов. Вывести на экран те из них, которые встречаются два раза.
13. Дана последовательность слов. Вывести на экран те из них, которые встречаются три, четыре и более раз.
14. Дана последовательность слов, разделенных пробелами. Вывести на экран все слова, предварительно перенеся последнюю букву в начало слова.
15. Дана последовательность символов. Вывести на экран тот символ, который в последовательности встречается чаще остальных.
16. Дано слово. Замените каждую букву слова числом, соответствующим позиции буквы в алфавите (а-1, … , г-4, …). Найти сумму этих чисел (например, слово математика даст результат 14+1+20+6+14+1+20+10+12+1=99).
17. Из последовательности слов St, разделенных пробелами, вывести на экран те слова, которые следуют за данным словом Sl, в алфавитном порядке.
18. Из последовательности слов St, разделенных пробелами, вывести на экран те слова, которые предшествуют данному слову, занесенному в переменную Sl, в алфавитном порядке.
19. В строковую переменную St занесена последовательность чисел, разделенных запятыми. Определить, образуют ли эти числа арифметическую прогрессию (например: 2,4,6,8,10,12; 13,10,7,4,1).
20. Дан текст из букв и цифр. Определить, равна ли длина текста сумме числовых значений цифр, входящих в текст.
4. Список дополнительной литературы.
1. В.В. Фаронов. Turbo Pascal 7.0. Начальный курс. Учебное пособие – М: «Нолидж», 1с.
2. , , Трифонова в язык Паскаль. Учебное пособие. – М: Наука Гл. ред. физ.-мат. лит., с.
3. . Язык программирования Turbo Pascal 6.0. – Мн.: Высш шк., 1с.
4. Ян Белецкий. Турбо Паскаль с графикой для ПК. – М.: Машиностроение, 1с.
5. . Турбо Паскаль (в 3 книгах) – М.: Наука, 1992г.
6. . Система программирования. Турбо Паскаль. – М.: Радио и связь, 1с.
7. и др. Программирование в среде Турбо Паскаль 6.0. Мн.: Высш. Шк., 1с.
8. Дональд Алкок. Язык Паскаль в иллюстрациях. – Мир, 1с.
Лабораторная работа №8
Тема: Разработка программ с использованием множеств и записей.
Цель работы: познакомиться с понятием «запись», научиться применять записи в составлении программ.
1. Теоретические сведения
В настоящее время вычислительная техника находит широкое применение в различного рода информационных системах. Они имеются в больших библиотеках, торговле, производстве, адресных бюро и т. д. В информационных системах довольно часто приходится иметь дело с комбинациями разнотипных объектов. В Паскале комбинациями разного типа являются записи. Составляющие запись объекты называются полями. В записи каждое поле имеет своё собственное имя. Упрощённая форма определения записи включает указание имени записи, имён отдельных компонентов (полей) и соответствующих им типов данных.
TYPE
< имя записи >=
RECORD
< имя поля 1 > : < тип >
< имя поля 2 > : < тип >
…………………………
< имя поля N > : < тип >
END;
Например, для решения задачи определения среднего балла, имея данные по пяти дисциплинам для конкретного студента, запись может иметь вид:
TYPE
STR =
RECORD
FAM: STRING[20];
B1, B2, B3, B4, B5 :1..5;
SB : REAL;
END;
Здесь FAM обозначает строку символов для хранения фамилии студента, В1, B2, B3, B4, B5 – баллы по соответствующим дисциплинам, SB – средний балл. Переменная типа STR имеет смысл записи, содержащей информацию об одном студенте.
Если требуется хранить информацию не по одному студенту, а по 25, то можно ввести массив записей TBL:
VAR
TBL: ARRAY [1..25] OF STR;
Обращение к полям записи осуществляется посредством составного имени:
<имя переменной-записи>.<имя поля>
Возможны, например, такие операторы присваивания :
TBL[ 3 ].FAM:= “Иванов”;
TBL[ 20 ].B2:=5;
TBL[ K+1 ].SB:=4.666;
Имена компонент внутри записи не должны повторяться. Значения записи можно пересылать в другие переменные – записи с помощью операторов присваивания. Возвращаясь к рассмотренному примеру, можно записать:
TYPE
STR=
RECORD
FAM : STRING[20];
B1, B2, B3, B4, B5 :2..5;
SB : REAL
END;
VAR Z1, Z2 : STR;
BEGIN
Z1:=Z2;
Указанный в программе оператор присваивания эквивалентен следующим операторам :
Z1.FAM := Z2.FAM;
Z1.B1 := Z2.B2;
Z1.B2 := Z2.B2;
Z1.B3 := Z2.B3;
Z1.B4 := Z2.B4;
Z1.B5 := Z2.B5;
Z1.SB := Z2.SB;
При обращении к компонентам записи мы сталкиваемся с необходимостью указать в отдельных операторах составных имён, что приводит к удлинению программы и излишней громоздкости. Для устранения этого неудобства в языке Паскаль используется оператор WITH, который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были простыми переменными.
Общий вид оператора:
With < имя записи > do
< оператор >;
Внутри оператора к компонентам записи можно обращаться только с помощью имени компоненты.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 |


