Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
02.05.2014
Размер:
508.9 Кб
Скачать

Министерство образования и науки Российской Федерации Государственное образовательное учреждение

высшего профессионального образования Уфимский государственный авиационный технический университет

ПАСКАЛЬ (СТРОКИ И ЗАПИСИ)

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к лабораторным работам по курсу «Информатика»

Составитель Гельштейн Я.М.

Уфа 2004

 

СОДЕРЖАНИЕ

 

Лабораторная работа № 1...................................................................................

3

СТРОКИ......................................................................................................................

3

1.ЦЕЛЬ РАБОТЫ......................................................................................................

3

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ...............................................................................

3

2.1

Основные понятия и определения...............................................................

3

2.2

Операции со строками ...................................................................................

4

2.3

Процедуры для обработки строк..............................................................

7

2.4

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

8

3. ПРИМЕР РЕШЕНИЯ ЗАДАЧИ ОБРАБОТКИ СТРОКОВЫХ

 

ДАННЫХ....................................................................................................................

8

3.1

Задание ..............................................................................................................

8

3.2

Блок-схема алгоритма....................................................................................

9

3.3

Текст программы..........................................................................................

10

3.4

Протокол работы программы ....................................................................

11

4. ЗАДАНИЕ...........................................................................................................

11

5.КОНТРОЛЬНЫЕ ВОПРОСЫ...........................................................................

12

Лабораторная работа № 2......................................................................................

13

ЗАПИСИ....................................................................................................................

13

1.ЦЕЛЬ РАБОТЫ....................................................................................................

13

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ.............................................................................

13

2.1

Основные понятия и определения.............................................................

13

2.2

Оператор присоединения WITH ................................................................

15

2.3

Записи с вариантами....................................................................................

17

3. ПРИМЕР РЕШЕНИЯ ЗАДАЧИ С ИСПОЛЬЗОВАНИЕМ ДАННЫХ

 

ТИПА «ЗАПИСЬ» ...................................................................................................

18

3.1

Задание ............................................................................................................

18

3.2

Блок-схема алгоритма..................................................................................

18

3.3

Текст программы.........................................................................................

19

3.4

Протокол работы программы.................................................................

20

4. ЗАДАНИЕ...........................................................................................................

20

5.КОНТРОЛЬНЫЕ ВОПРОСЫ...........................................................................

22

ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ ОТЧЕТА .................................................

22

ЛИТЕРАТУРА.........................................................................................................

23

Приложение. Таблица обмена информацией (фрагмент) ASCII CODE

 

CARD..........................................................................................................................

23

Лабораторная работа № 1

СТРОКИ

1.ЦЕЛЬ РАБОТЫ

Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих строковыми типами данных:

-ввод и вывод строковых данных;

-обработка строковых данных;

-использование стандартных процедур и функций языка Pascal для обработки строковых данных.

2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

2.1Основные понятия и определения

ВПаскале существует тип данных STRING (строка), специально предназначенный для обработки строк (цепочек символов). Этот тип данных занимает промежуточное положение между простыми типами данных (целочисленные, вещественные, логические, символьные, интервальные, перечисляемые) и структурированными типами данных (массивы, записи, множества).

Обработка строковых данных является необходимым элементом программ, работающих с текстами. К таким программам относятся программы лингвистического анализа текстов, текстовые редакторы, программы, работающие в диалоговом (интерактивном) режиме, программы, содержащие текстовые пояснения результатов своей работы.

Строка – последовательность символов (от 0 до 255), заключенная в апострофы. При составлении программ используются строковые константы и строковые переменные.

Строковые константы – элементы данных, значения которых известны заранее, описаны в разделе описания констант и в ходе выполнения программы не изменяются. Формат описания строковых констант

CONST

<идентификатор> = <значение>;

Например,

CONST

ZAG = `Результат расчета`;

VAR1 = ` Вариант №1 `;

VAR2 = ` Вариант № 2`;

KNIGA = `Паскаль 7.0`;

Строковые переменные – элементы данных, которые по ходу выполнения программы могут изменять значение и количество символов в пределах от 0 до

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

1. Определение через описание типа в разделе описания типов. Формат

TYPE

<имя типа> = STRING [максимальная длина строки];

VAR

<идентификатор1, идентификатор2,…> : <имя типа>;

где

STRING – зарезервированное слова (строка); максимальная

длина строки – наибольшее допустимое количество символов переменной данного типа ( 255).

Например,

TYPE

FLO = STRING [130];

FTK = STRING; {По умолчанию длина строки равна 255}

VAR

ST1 : FLO;

ST2, ST3 : FTK;

2. Определение непосредственно в разделе описания переменных

Формат

VAR

ST4, ST5 : STRING [60]; ST6,ST7 : STRING;

2.2 Операции со строками

Выражения, в которых операндами служат данные строкового типа, называются строковыми выражениями. Они могут состоять из:

-строковых констант;

-строковых переменных;

-знаков операций;

-указателей процедур;

-указателей функций.

Над строковыми данными допустимо выполнять операции сцепления и операции отношения.

Операции сцепления (+) применяются для сцепления нескольких строк в одну результирующую строку, длина которой не должна превышать 250 символов. Например, выражение

`Процессор ` + ` Intel ` + ` Celeron ` + ` 1.7/20 GHz`

дает результат

`Процессор Intel Celeron 1.7/20 GHz`,

а выполнение операторов

STR1 := `Группа студентов `; STR2 := `ФК418`;

STR3:= STR1+STR2;

дает строку `Группа студентов ФК418`. Такой же результат можно получить и так

STR3:= STR1+`ФК418`.

Операции отношения (=, <> , < , > , >= , <=) проводят сравнение двух строковых операндов и имеют приоритете более низкий, чем операции сцепления. Это значит, что сначала выполняются все операции сцепления (если они присутствуют в данном строковом выражении), а затем операции отношения.

Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией (см. Приложение).

Результат выполнения операций отношения над строковыми данными всегда имеет булевский тип (boolean), и равен TRUE, если выражение истинно, и FALSE, если выражение ложно.

Например,

 

Выражение

Результат

`COM1` < `KOM2`

TRUE

`DOS1.0` > `DOC1.0`

TRUE

`АККОРД` < `AKKORD`

FALSE

Строки считаются равными, если они равны по длине и содержат одни и те же символы.

Если строки имеют различную длину. Но в общей части символы полностью совпадают, считается, что более короткая строка меньше.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

Например,

STR10:= `Название факультета`;

STR11:= STR10 + `ФЭМФ`;

Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую величину, указанную при описании этой переменной, то все лишние символы справа отбрасываются.

Например,

 

 

Описание

Строковое выражение

Получаемое значение

переменной А

 

переменной А

A : STRING [14]; A : STRING [9]; A : STRING [6];

A := `Группа ФК-418`; A := `Группа ФК-418`; A := `Группа ФК-418`;

`Группа ФК-418` `Группа ФК` `Группа`

В одно выражение допускается включать операнды строкового и литерного (CHAR) типа. Если при этом литерной переменной присваивается значение строкового типа, фактическая длина строки должна быть равна единице, иначе возникает ошибка выполнения. Например,

VAR

LITERA : CHAR;

ST1, ST2: STRING [12]; BEGIN

LITERA := `A`; ST1 := ‘КЛАСС ’;

ST2 := ST1 + LITERA; {Дает результат « КЛАСС А»} ST1 := ‘B’;

LITERA := ST1; ST2 := ‘B2’;

LITERA := ST2; {Ошибка, т.к. литерной переменной нельзя присваивать значения длиной более одного символа}

К отдельным символам строки можно обращаться по номеру (индексу) данного символа в строке. Индекс определяется выражением целочисленного типа, которое записывается в квадратных скобках. Например, после выполнения присваивания

STR5 := ‘Специальность ФК’;

выражение STR5[1] дает обращение к первому символу, а выражение

STR5[15] + STR5[16]

дает значение «ФК».

Запись STR5[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Это значение не должно превышать число 255.

Замечание.

При вводе и обработке строковых данных кроме непосредственного указания входящих в эти строки символов для обозначения символов можно использовать соответствующие им ASCII коды. В этом случае перед числом, обозначающим код ASCII символа, необходимо поставить знак #. Таким образом можно в качестве элементов строк задавать и символы, не обозначенные на клавиатуре.

Например

VAR

ST1: STRING [32]; BEGIN

ST1:= ‘TEKST’ + ‘ ‘ + #3;

Переменной ST1 будет присвоено значение

‘TEKST ♥’

Фрагмент таблицы обмена информацией ASCII CARACTER CODE CARD приведен в Приложении.

2.3 Процедуры для обработки строк

Рассмотрим ряд процедур, используемых для обработки строк.

DELETE (ST, POZ, N) – удаление N символов строки ST, начиная с пози ции POZ.

Например, для значения ST ’ АБВГДЕ’ выражение DELETE (ST, 4,2) дает результат ‘АБВГ’.

 

INSERT (ST1, ST2, POZ) – вставка строки ST1 в строку ST2 начиная с

по-

зиции POZ.

 

Например,

 

VAR

 

ST1, ST2, ST3: STRING;

 

BEGIN

 

ST2:= ‘Компьютер 2.0 GHz’;

 

ST1:= ‘Celeron’;

 

ST3:= INSERT (ST1, ST2, 11);

 

В результате получается строка ST3, равная

 

‘Компьютер Celeron 2.0 GHz’

STR (IBR, ST) – преобразование числового типа (integer, byte, real) значе ния величины IBR и помещение результата в строку ST. После имени переменной IBR может быть указан формат вывода.

Например, при значении переменной IBR, равном 2680, выражение

STR (IBR:7, ST) дает результат ‘ 2680’.

VAL (ST, IBR, COD) - преобразование значения ST в величину типа integer, byte, real и помещение результата в IBR. Значение ST не должно содержать незначащих про белов в начале и конце.

COD - целочисленная переменная.

Если при выполнении операции преобразования ошибки не обнаружено, рации преобразования ошибки не обнаружено, COD = 0. Если обнаружена ошибка, то COD будет содержать номер позиции первого ошибочного символа в ST, значение IBR будет неопределенно.

Например, при ST равном ‘1526’ выражение VAL (ST,IBR,COD) дает результат 1526, COD=0.

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

Рассмотрим ряд функций, используемых для обработки строк.

LENGTH (ST) - вычисляет длину в символах строки ST. Результат – целочисленного типа.

Например, при ST, равном ‘длина строки’, выражение LENGTH (ST) дает результат 12.

COPY (ST, POZ, N) – выделяет из строки ST подстроку длиной N символов, начиная с позиции POZ. POZ, N – целочисленные выражения.

Если POZ > LENGTH (ST), то результатом будет пробел;

Если POZ > 255, возникнет ошибка при выполнении.

Например, при значении ST= ‘ABCDEFG’, выражение COPY (ST,2,3) дает результат ‘BCD’.

CONCAT (STR1, STR2,…, STRN) – выполняет конкатенацию (сцепление)

строк STR1,STR2,…,STRN в том по рядке, в каком они указаны в списке параметров. Сумма символов всех сцепляемых строк должна быть не более 255.

Например, выражение CONCAT (‘AA’, ’BB’, ’CC’) дает результат

‘AABBCC’.

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

Например, для значения ST2 ‘ABCDEFGH’ выражение POS (‘DE’,ST2) дает результат, равный 4.

UPCASE (CH) - преобразует строчную букву в прописную. Параметр и результат имеют тип CHAR. Обрабатывает только буквы латинского алфавита.

Например, для значения CH = ‘f’, выражение UPCASE (CH) дает резуль-

тат ‘F’.

3.ПРИМЕР РЕШЕНИЯ ЗАДАЧИ ОБРАБОТКИ СТРОКОВЫХ ДАННЫХ

3.1Задание

Разработать программу, удаляющую из вводимой с клавиатуры строки пробелы между словами и записывающую в массив N длину (число символов) каждого слова. Длина текста – не более 80 символов. Число слов – не более 10.

Наличие более одного символа ‘пробел’ подряд свидетельствует о конце строки.

3.2 Блок-схема алгоритма

На рис. 3.1 представлена блок-схема алгоритма. Используемые в блоксхеме и программе идентификаторы приведены в таблице 3.1.

 

 

Табл. 3.1

Обозначения

Тип данных

Примечание

A

STRING

Исходный текст, символьные данные

K

INTEGER

Количество символов в слове

L

INTEGER

Порядковый номер слова

I

INTEGER

Параметр цикла

A[I]

 

Текущий символ исходного текста

N

ARRAY

Массив, содержащий значения длины каждого

 

[1…10] OF

слова исходного текста

 

INTEGER

 

N[L]

 

Значение длины слова номер L

J

INTEGER

Параметр цикла, используемого для перемеще-

 

 

ния всех следующих символов исходного текста

 

 

на одну позицию влево после того, как обрабо-

 

 

тано очередное слова.

PR

INTEGER

Переменная для управления повторной работой

 

 

программы

OTVET

BYTE

Переменная для управления началом обработки

 

 

введенной строки

3.3 Текст программы

Program Prim1;

Uses Crt;

Label 4; VAR

N: ARRAY [1..10] OF INTEGER; I, J, K, L: INTEGER;

A: STRING [80]; PR, OTVET:BYTE;

BEGIN CLRSCR;

REPEAT REPEAT

WRITELN (' Введите через пробел'); READLN (A);

WRITELN('Исходная строка'); WRITELN(A);

WRITELN ('Работаем дальше? 1 -да,0 -нет'); READLN (OTVET);

UNTIL OTVET=1; K:=0;

L:=0;

PR:=0;

FOR I:=1 TO length(a) DO IF (A[I]= ' ') THEN

BEGIN L:=L+1; N[L]:=K;

IF (A[I+1]=' ')THEN GOTO 4; FOR J:=i TO length(a) DO

A[J]:= A[J+1]; K:=1

 

END

ELSE

 

 

 

 

 

 

begin

 

 

 

K:=K+1;

 

 

 

N[L+1]:= K-l;

4:WRITELN

 

end;

 

('Результирующая строка');

WRITELN

(A);

 

число букв');

WRITELN

('№ слова

WRITELN

('

FOR I:=1 TO L+1 DO

N[',I,'] =',N[I]:6);

WRITELN('Обработать еще одну строку? 1 –да 0 -нет'); READLN(PR);

UNTIL PR=0

END.

Соседние файлы в папке Методичка - Borland Pascal 7.0