Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
202106_C4466_otvety_k_gosekzamenu_po_programmir....doc
Скачиваний:
3
Добавлен:
15.04.2019
Размер:
146.94 Кб
Скачать
  1. Комбинированный тип данных. Работа с файлами записей. Прямой доступ к записям

Разбор на примере

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

Пример

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

В данном случае фамилия может быть представлена строкой из 15 символов, оценка - это целое число, а средний балл должен быть представлен вещественным (действительным) числом. В Паскале для описания комбинаций объектов разных типов используются записи.

Запись - это структурированный тип, содержащий набор объектов разных типов. Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя. Чтобы описать запись, необходимо указать ее имя, имена объектов, составляющих запись и их типы. Общий вид такой:

Type "имя записи" = Record

"поле 1" : "тип 1";...

"поле n" : "тип n"

End;

Данные для решения рассматриваемой задачи можно описать как запись следующим образом:

Type

pupil = Record

fam: String[15]; {поле фамилии ученика}

b1, b2, b3, b4, b5 : 2...5; {поля баллов по дисциплинам}

sb : Real {поле среднего балла}

End;

Переменная типа puple будет иметь смысл структуры, содержащий информацию, характеризующую одного ученика. Организация этой структуры показана на рис.1.

Чтобы хранить в памяти ЭВМ информацию о всех 25 учениках класса, необходимо ввести массив klass, представляющий массив записей:

Var klass : Array[1.25] Of pupil;

Примечания

1.Имена полей, составляющих запись, не должны повторяться.

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

Доступ к полям записи

Его можно осуществить двумя способами.

1.Указанием имени переменной и имени поля. Например, klass[2].fam, klass[3].sb, klass[1].b4. Поэтому ввод фамилий и оценок учащихся, то есть элементов массива klass, можно задать так:

For i: = 1 To 25 Do

Begin

Readln(klass[i].fam); Readln(klass[i].b1);

Readln(klass[i].b2); Readln(klass[i].b3);

Readln(klass[i].b4); Readln(klass[i].b5);

End;

2.Использованием оператора присоединения, который позволяет осуществлять доступ к полям записи, таким образом, как если бы они были простыми переменными. Его общий вид:

 With <имя записи> Do <оператор>.

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

Пример

For i : = 1 To 25 Do

With klass [i] Do

Begin

Readln (fam);

ReadLn (b1,b2,b3,b4,b5);

End;

  1. Строковый тип данных в turbo- pascal 7.0. Стандартные функции по работе со строками.

Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255 . Турбо Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255 .

Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [0..N] OF CHAR.

LENGTH(st) - текущая длина строки.

CONCAT(S1 [S1, ... , SN] ) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров S1, S2, ..., SN.

COPY(ST, POS, n) - функция типа STRING; копирует из строки ST n символов, начиная с символа с номером POS.

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

INSERT (S, ST, POS) - процедура; вставляет подстроку S в строку ST, начиная с символа с номером POS.

LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.

POS (S, ST) - функция типа INTEGER; отыскивает в строке ST первое вхождение подстроки S и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

STR(X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST

VAL(ST, X, CODE) - процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется. Примеры:

var х : Real;  у : Integer;  st,st1: String[15]; 

begin

st := concat('12','345'); {строка st содержит 12345} 

st1 := copy(st,3,Length(st)-2); {st1 содержит 345}

insert('-',st1,2); {строка st1 содержит 3-45} 

delete(st,pos('2',at),3); {строка st содержит 15} 

str(pi:6:2,st); {строка st содержит 3.14} 

val(''3,1415' ,x,y) ; {у содержит 2, х остался без изменения}

end.

Операции отношения =, о, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов (см. табл.4.1 и прил.2). Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0) .