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

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

Протокол работы программы показан на рис. 3.4.

Рис. 3.4 Протокол работы программы

4. ЗАДАНИЕ

Задания выполняются в соответствии с условием, приведенным в таблице 3.2.

Таблица 3.2

Вариант Условие задачи

1В заданном тексте удалить символ ‘,’ и подсчитать число удаленных символов. Предусмотреть возможность задания с клавиатуры удаляемого символа.

2В заданном тексте заменить словосочетание «свернутые обороты» на словосочетание «разделенные обороты» и подсчитать число произведенных замен.

3Из заданного предложения выбрать и вывести на экран только те символы, которые встречаются в нем только один раз (в том порядке, в каком они встречаются в тексте)

4В заданном предложении найти самое длинное и самое короткое слова и подсчитать, на сколько больше символов в самом длинном слове.

5Проверить, встечается ли в заданном предложении словосочетание «Остаток счета».

6Проверить, встречается ли в заданном предложении словосочетание «Сальдо счета».

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

8Из заданного текста выбрать цифры и записать в массив N, а буквы- в массив B. Все остальные символы записать в массив S.

9Удалить из заданного текста все пробелы, подсчитать длину получившегося текста и число удаленных пробелов.

10Для каждого символа заданного текста указать, сколько раз он встре-

чается в тексте. Сообщение об одном символе должно выводиться один раз.

11Для заданного предложения указать слова, в котором доля гласных букв максимальна.

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

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

14Дана последовательность из 10 слов. Вывести слова в обратном порядке.

15Дана последовательность из 10 слов. Вывести все слова, входящие в эту последовательность по одному разу.

16Дана последовательность из 8 слов. Вывести входящие в эту последовательность слова, расположив их по алфавиту.

17Дана последовательность из 8 слов. Вывести эту последовательность, удалив из нее повторно входящие слова.

18Дана последовательность из 10 слов. Вывести слова, в которых первая буква входит в них один раз.

19Дана последовательность из 8 слов. Вывести слова, в которых нет повторяющихся букв.

20Дана последовательность из 8 слов. Вывести слова, поменяв в них первые и последние буквы.

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

1.Как можно описать в программе строковые данные?

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

3.Перечислите функции для обработки строк.

4.Какие операции можно выполнять над строковыми данными?

5.Укажите область применения строковых данных.

6.Поясните порядок работы процедуры DELETE.

7.Поясните порядок работы процедуры INSERT.

8.Поясните порядок работы процедуры STR.

9.Поясните порядок работы процедуры VAL.

10.Поясните порядок работы функции LENGTH.

11.Поясните порядок работы функции COPY.

12.Поясните порядок работы функции CONCAT.

13.Поясните порядок работы функции POS.

14.Поясните порядок работы функции UPCASE.

Лабораторная работа № 2 ЗАПИСИ

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

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

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

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

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

ЗАПИСЬ – структурированный тип данных, состоящий из фиксированного числа компонентов разного типа. Определение типа записи начинается идентификатором RECORD и заканчивается зарезервированным словом END. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.

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

Формат описания типа данных RECORD

TYPE < имя типа > = RECORD

<идентификатор поля> : <тип компонент>;

<идентификатор поля> : <тип компонент>; END;

VAR

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

Например,

TYPE

STR = RECORD

FAM: STRING [35];

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

SB: REAL

END;

VAR

ST1, ST2, ST3, ST4: STR;

В данном примере запись STR содержит семь компонент: фамилию студента, оценки по пяти предметам, средний балл. Доступ к полям записи осуществляется через переменные ST1, ST2,ST3 и ST4 типа STR (запись).

Существует возможность описывать переменные типа RECORD непосредственно в разделе описания переменных.

Например,

VAR

GRUPPA : ARRAY [1..30] OF RECORD FAM: STRING [35];

NAME: STRING [15];

GOD_R: INTEGER; END;

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

Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется СОСТАВНЫМ ИМЕНЕМ. Например, чтобы получить доступ к полям записи STR из приведенного выше примера, надо записать

ST1.FAM, ST1.B1, ST1.B2, ST1.B3, ST1.B4, ST1.B5, ST1.SB.

Составное имя можно использовать везде, где допустимо применение типа соответствующего поля. Например,

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

Составные имена можно использовать в операторах ввода-вывода. Например,

READ (ST1.FAM, ST1.B1, ST1.B2, ST1.B3, ST1.B4, ST1.B5); WRITELN (ST2.FAM, ST2.SB);

Для присваивания полям значений используется оператор присваивания.

Например,

ST1.FAM := ‘Сидоров’;

ST2.FAM := ‘Петров’;

Допускается применение оператора присваивания к записям в целом, если они имеют один и тот же тип. Например,

ST3 : = ST2;

После выполнения этого оператора значения полей записи ST3 станут равны значениям соответствующих полей записи ST2. Следовательно, оператор присваивания ST3 : = ST2 эквивалентен следующей группе операторов:

ST3.FAM : = ST2.FAM; ST3.B1 : = ST2.B1; ST3.B2 : = ST2.B2; ST3.B3 : = ST2.B3;

ST3.B4 : = ST2.B4; ST3.B5 : = ST2.B5; ST3.SB : = ST2.SB;

При решении ряда задач удобно оперировать массивами из записей. Например, приведенную выше запись STR необходимо использовать для хранения информации по всей группе из 30 студентов. Это можно сделать следующим образом:

TYPE

STR = RECORD

FAM: STRING [35]; B1, B2, B3, B4, B5: 2..5; SB: REAL

END;

VAR

GRUPPA : ARRAY [1..30] OF STR;

(Еще один возможный вариант описания массива, содержащего данные типа RECORD, был рассмотрен ранее.)

Составное имя в случае работы с массивом записей будет иметь вид

GRUPPA[1].FAM; GRUPPA[1].B3; GRUPPA[25].FAM;

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

Обращение к отдельным компонентам записи при помощи составных имен приводит к удлинению текста программы и к ее излишней громоздкости (особенно при использовании идентификаторов из 5 и более символов). Для устранения этого неудобства в языке Турбо Паскаль используется оператор присоединения WITH, который позволяет осуществлять доступ к компонентам записи таким образом, как если бы они были обычными переменными, т.е от-

падает необходимость указывать при обращении к отдельному полю записи кроме его собственного идентификатора еще и идентификатор записи.

Формат оператора присоединения

WITH < переменная типа запись > DO < оператор >;

Внутри оператора WITH можно обращаться к компонентам записи по именам полей без указания перед идентификаторами поля имени переменной, определяющей запись. Так, ввод данных для хранения информации по группе студентов из предыдущего примера можно осуществить следующим образом:

FOR I := 1 TO 30 DO

WITH GRUPPA [I] DO

READLN (FAM, B1, B2, B3, B4, B5);

Язык Турбо Паскаль допускает вложение записей друг в друга (т.е. поле в записи может в свою очередь быть тоже записью и т.д.), соответственно и оператор WITH тоже может быть вложенным:

WITH R1 DO

WITH R2 DO

WITH R3 DO

что эквивалентно записи

WITH R1R2R3 DO …

Замечание. Так как в языке Турбо Паскаль нет специальных средств для описания комплексных чисел, то для решения этой задачи могут быть использованы записи. В этом случае действительная и мнимая части комплексного числа представляются в виде полей записи

TYPE

COMPLEX = RECORD

DEYSTV : REAL; (* действительная часть числа *) MNIM: REAL; (* мнимая часть числа *)

END;

VAR

A,B,C1,D2:COMPLEX; BEGIN

A.DEYSTV := 73.8; A.MNIM := 43.5;

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

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

ЗАПИСИ С ВАРИАНТАМИ – состоят из необязательной фиксированной общей части (не отличается от рассмотренных выше записей) и вариантной части, отличающейся в различных записях.

Вариантная часть формируется с помощью оператора CASE, который задает особое поле записи – поле признака, определяющее, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.

Формат объявления записи с вариантами:

TYPE

ZAP = RECORD

CASE <поле признака >: <имя типа > OF <константа выбора 1 > : (поле, …: тип); < константа выбора 2 >: (поле, …: тип);

END;

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

TYPE

ПОЛ = (муж, жен);

ЧЕЛ = RECORD

ФАМ : SRRING [35]; ГОДРОЖД: 1970..2000;

МЖ: ПОЛ; CASE МЖ: ПОЛ OF

МУЖ: (ВОЕН: BOOLEAN; СПЕЦ: STRING [30]); ЖЕН: (ЗАМУЖ: BOOLEAN; ДЕТИ: BYTE)

END;

VAR

ST1, ST2, ST3, ST4: ЧЕЛ;

Поля ВОЕН и СПЕЦ используются только в том случае, если значение поля МЖ равно МУЖ, поля ЗАМУЖ и ДЕТИ – при значении поля МЖ – ЖЕН.

Замечание:

-Все имена полей должны отличаться друг от друга, даже если они встречаются в разных вариантах;

-Запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце записи;

-Если поле, соответствующее какой-либо метке, является пустым, то оно записывается так

<метка > : ( ) ;

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

3.1Задание

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

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

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

Табл. 3.3

Обозначения

Тип данных

Примечание

STR

RECORD

Запись сведений о студенте

FAM

STRING [30]

Поле записи STR – фамилия

B1,B2,B3,B4,B5

INTEGER

Поля записи STR – оценки

SB

REAL

Средний балл

Y

RECORD

Промежуточная запись

TBL

ARRAY [1…30]

Массив, содержащий записи сведений о

 

OF STR

студентах группы

J

INTEGER

 

I

INTEGER

 

K

INTEGER

 

M

INTEGER

 

X

REAL

 

PR

INTEGER

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

 

 

работой программы

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

PROGRAM PRIM2; USES CRT; TYPE

STR=RECORD

FAM: STRING [30]; B1,B2,B3,B4,B5: 2..5;

SB: REAL

END;

VAR

TBL: ARRAY [1..25] OF STR; Y:STR;

I,J,K,M:INTEGER;

X,R:REAL;

PR:BYTE;

BEGIN

CLRSCR; REPEAT

WRITELN ('Введите число студентов'); READLN (M);

FOR I:= 1 TO M DO

WITH TBL[I] DO BEGIN

WRITELN('Введите фамилию'); READLN (FAM);

WRITELN('Введите пять оценок студента'); READLN (B1,B2,B3,B4,B5);

END;

FOR I:= 1 TO M DO WITH TBL[I] DO

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

FOR I:= 1 TO M DO BEGIN

K:=1;

X:=TBL[I].SB;

FOR J:=I TO M DO

IF TBL[J].SB >=X THEN

BEGIN

K:=J;

X:=TBL[J].SB;

Y:=TBL[K];

TBL[K]:=TBL[I];

TBL[I]:=Y

END;

END;

WRITELN ('Список студентов');

FOR I:=1 TO M DO WITH TBL[I] DO

WRITELN (FAM, SB:4:2); WRITELN ('Обработать еще один список? 1-да 0-нет');

READLN(PR);

UNTIL PR=0 END.

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

Ввод исходных данных показан на рис. 3.7.

Рис. 3.7 Исходные данные для примера

Результат работы программы показан на рис 3.8

Рис. 3.8 Результат работы программы

4. ЗАДАНИЕ

Составить список, содержащий сведения об N студентах. Для каждого учащегося указать:

-фамилия;

-ИНН (идентификационный номер налогоплательщика);

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