Функции для работы со строками

VAR

S, S2 : STRING;

N, Poz : INTEGER;

1. LENGTH (S) – определяет текущую длину строки S. Результатом является значение целого типа.

Пример:

Значение S Выражение Результат
‘test-5’ Length(S)
‘(A+B)*C’ Length(S)

2. COPY (S, Poz,N) - копирует из строки S строку длиной N символов, начиная с позиции Poz.

Пример:

Значение S Выражение Результат
‘ABCDEFG’ Copy(S,2,3) ‘BCD’
‘ABCDEFG’ Copy(S,4,4) ‘DEFG’

3. DELETE (S,Poz,N) - удаляет N символов из строки S, начиная с позиции Poz. Результат строкового типа.

Пример:

Исходное значение S Оператор Конечное значение S
‘abcdefg’ Delete(S,3,2) ‘abefg’
‘abcdefg’ Delete(S,2,6) ‘a’

4. INSERT (S1, S2, Poz) - вставляет строку S1 в строку S2, начиная с позиции Poz. Результат - строка S2 (если она содержит символов больше, чем объявлено, то лишние символы отбрасываются).

Пример:

Исходное значение S2 Оператор Конечное значение S2
‘ЭВМ PC’ Insert(‘IBM-‘,S2,5) ‘ЭВМ IBM-PC’
‘Рис. 2’ Insert(‘№’,S2,6) ‘Рис. №2’

5. CONCAT (S1, S2, …, SN) – выполняет сцепление (конкатенцию) строк S1, S2, …, SN в одну строку. Результат строкового типа.

6. POS (S1, S2) – обнаруживает первое появление в строке S2 подстроки S1. Результат – целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в строке S2 подстроки S1 не обнаружено, то результат равен 0.

Пример:

Значение S2 Выражение Результат
‘abcdef’ Pos(‘cd’,S2)
‘abcdcdef’ Pos(‘cd’,S2)
‘abcdef’ Pos(‘k’,S2)

Пример:

Ввести строку длиной не менее 15 символов. Подсчитать общее количество введенных символов строки и количество знаков “+”, начиная с 7 символа по 15.

PROGRAM PRIMER8;

USES CRT;

LABEL

1;

VAR

S:STRING [100];

K,KP,I:INTEGER;

OTV: CHAR;

BEGIN

1:CLRSCR;

WRITELN (‘Введите строку длиной не менее 15 символов’);

READLN (S);

WRITELN (‘Введенная строка символов’);

WRITELN (S);

K:=LENGTH(S);

WRITELN (‘Количество символов в введенной строке=’,K:3);

KP:=0;

FOR I:=7 TO 15 DO

IF S[I]=‘+’

THEN KP:=KP+1;

WRITELN (‘Количество символов +, начиная с 7 по 15 символ=’,KP:2);

WRITELN (‘Будете вводить новые данные (Y/N)?’);

READLN (OTV);

IF (OTV=’Y’) OR (OTV=’y’)

THEN GOTO 1

END.

Задачи для самостоятельного решения:

1. Дана строка S, состоящая не более чем из 40 символов. В этой строке все вхождения букв ‘ABC’ заменить на ‘123’.

2. Используя функции для работы со строками получить из слова: а) «ВЕЛИЧИНА» слово «НАЛИЧИЕ»; б) «СТРОКА» слово «СЕТКА».

3. Сформировать символьную строку, состоящую из n звездочек (n – целое число, 1≤ n≤ 255).

4. Дан текст, в конце которого стоит точка. Подсчитать количество слов в тексте (слово – подстрока, не содержащая пробелов).

функции для работы со строками - student2.ru записи (комбинированный тип)

При решении экономических и информационных задач, которые обрабатывают ведомости, документы, списки и т.д., возникает необходимость объединять различные типы данных в одну группу. Для этого в языке Паскаль введено понятие записи (RECORD).

Запись – это совокупность ограниченного числа логически связанных компонент различного типа.

Каждая компонента записи называется полем.

Запись, как и другие переменные, объявляется в разделе описания и используется в разделе операторов. Описание записи можно делать как в разделе описания типов TYPE, так и в разделе описания переменных VAR.

Синтаксис описания записи:

TYPE

имя типа=RECORD

имя элемента 1:тип;

имя элемента 2:тип;

…..

имя элемента N:тип

END;

VAR

имя записи:имя типа;

Служебное слово RECORD (запись) выполняет роль открывающейся операторной скобки, END - закрывающейся операторной скобки. Внутри операторных скобок описываются элементы записи.

Для обращения к компонентам (полям) записи необходимо указать идентификатор записи, за которым ставится точка, а затем идентификатор поля (составное имя).

имя записи.имя поля

Имена полей внутри записи не должны повторяться. В языке Паскаль нет ни одной операции, которая воспринимала бы запись как нечто целое. Однако значение записи можно пересылать в другие переменные записи с помощью операторов присваивания.

Пример:

TYPE

STUDENT= RECORD

FIO: STRING [20];

D1, D2: 2..5;

PR: INTEGER

END;

VAR

GRUPPA: ARRAY [1..25] OF STUDENT;

В данном примере был создан тип STUDENT, который представляет собой запись, включающую фамилию, оценки по двум дисциплинам и количество пропусков. Эти данные по каждому студенту объединены в группу, т.е. получен массив записей GRUPPA. Этот массив содержит 25 записей типа STUDENT. Обращение к отдельным элементам записей: GRUPPA [15]. FIO

GRUPPA [24]. PR

GRUPPA [13]. D1

При обращении к компонентам записи необходимость указывать составные имена приводит к удлинению программы и громоздкости. Для устранения этого неудобства в языке Паскаль используется оператор присоединения, который позволяет осуществлять доступ к компонентам записи, таким образом, как, если бы они были простыми переменными.

Синтаксис оператора:

WITH

имя записи DO

BEGIN

операторы, содержащие имена элементов записи

END;

Внутри этого оператора к компонентам записи можно обращаться только с помощью имени компонент.

Пример:

Для каждого студента указаны фамилия, оценки по пяти дисциплинам. Требуется вычислить средний балл каждого студента.

PROGRAM PRIMER9;

USES CRT;

LABEL 1;

TYPE

VED = RECORD

FIO: STRING[30];

B1, B2, B3, B4, B5: 2..5;

SB: REAL

END;

VAR

GRUPPA: ARRAY[1..25] OF VED;

I, K: INTEGER;

OTV: CHAR;

BEGIN

1: CLRSCR;

WRITELN('ВВЕДИТЕ КОЛИЧЕСТВО СТУДЕНТОВ В ГРУППЕ');

READLN(K);

FOR I := 1 TO K DO

BEGIN

WRITELN('ВВЕДИТЕ ДАННЫЕ ', I:2, '-ГО СТУДЕНТА:');

WITH GRUPPA[I] DO

BEGIN

WRITELN ('ВВЕДИТЕ ФАМИЛИЮ И ИМЯ СТУДЕНТА');

READLN (FIO);

WRITELN ('ВВЕДИТЕ 5 ОЦЕНОК ПО ДИСЦИПЛИНАМ');

READLN (B1);

READLN (B2);

READLN (B3);

READLN (B4);

READLN (B5);

SB:=(B1+B2+B3+B4+B5)/5

END;

END;

{ВЫВОД ВЕДОМОСТИ НА ЭКРАН}

CLRSCR;

WRITELN('----------------------------------------------------');

WRITELN('| ФИО | 1 | 2 | 3 | 4 | 5 | СР.БАЛЛ |');

WRITELN('----------------------------------------------------');

FOR I := 1 TO K DO

BEGIN

WITH GRUPPA[I] DO

BEGIN

WRITE ('|', FIO:20, '|');

WRITE (B1:2, ' |');

WRITE (B2:2, ' |');

WRITE (B3:2, ' |');

WRITE (B4:2, ' |');

WRITE(B5:2, ' |');

WRITE(SB:7:2, ' |');

WRITELN

END

END;

WRITELN('----------------------------------------------------');

WRITELN('БУДЕТЕ ВВОДИТЬ НОВЫЕ ДАННЫЕ (Y/N)?');

READLN(OTV);

IF (OTV = 'Y') OR (OTV = 'Y')

THEN GOTO 1

END.

Задачи для самостоятельного решения:

1. Дана ведомость учащихся, занимающихся в кружке по информатике, и их оценка по информатике. Определить количество учащихся, занимающихся на «5», и количество учащихся с фамилией, начинающееся на букву «А».

2. Дана ведомость учащихся, и количество их пропусков за семестр (в часах). Определить количество учащихся, не имеющих пропусков, и количество учащихся, имеющих пропусков более 20 часов.

Наши рекомендации