Цель: получение навыков работы со строками в Паскале.

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