Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Паскаль_для_студентов.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
356.35 Кб
Скачать

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

VAR

STR1,STR2:STRING;

I,J:INTEGER;

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

LENGTH (STR1);

Результат: целого типа.

2. Копирование строки.

COPY (STR1, I, J);

Копирование из строки STR1 строки длиной J символов, начиная с символа I.

Результат: типа STRING.

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

DELETE (STR1, I, J);

Удаление из строки STR1 J символов, начиная с позиции I.

Результат: типа STRING.

  1. Вставка строки.

INSERT (STR1, STR2, I);

Вставка строки STR1 в строку STR2, начиная с позиции I.

Результат: строка STR2 (если она содержит символов больше, чем объявлено, то лишние символы отбрасываются).

Пример:

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

PROGRAM PRIMER8;

USES CRT;

LABEL

1;

VAR

S:STRING [100];

K,KP,I:INTEGER;

OTV: CHAR;

BEGIN

1:CLRSCR;

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

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.

Записи (комбинированный тип)

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

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

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

Все компоненты записи в отличие от массива:

  • необязательно должны принадлежать одному и тому же типу;

  • обращение к компонентам записи происходит по имени.

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

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

TYPE

имя типа=RECORD

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

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

…..

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

END;

VAR

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

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

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

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

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

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

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

WITH

имя записи DO

BEGIN

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

END;

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

Пример:

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

PROGRAM PRIMER9;

USES CRT;

LABEL

1;

TYPE

VED=RECORD

FIO: STRING [20];

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

SB:REAL

END;

VAR

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

I,J:INTEGER;

OTV:CHAR;

BEGIN

1: CLRSCR;

FOR I:=1 TO 25 DO

BEGIN

WRITELN (‘Введите данные ‘,I:2,‘-го студента:’);

READLN (GR11P[I].FIO);

READLN (GR11P[I].B1,GR11P[I].B2,GR11P[I].B3,GR11P[I].B4,GR11P[I].B5)

END ;

FOR I:=1 TO 25 DO

BEGIN

GR11P[I].SB:=(GR11P[I].B1+GR11P[I].B2+GR11P[I].B3+GR11P[I].B4+

GR11P[I].B5)/5;

WRITELN (‘Средний балл ‘,I:2,‘-го студента равен’, GR11P[I].SB:6:3)

END;

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

READLN (OTV);

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

THEN GOTO 1

END.