Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Тема 5. Структурированные типы данных.

        

    Вопросы темы:

 

1. Массивы.

2. Строковый тип данных.

3. Множества.

4. Записи.

 

Массивы.

Массивом называют упорядоченный набор однотипных переменных (элементов). Каждый элемент имеет порядковый номер, называемый индексом. Тип индекса представляет собой интервальный тип и задается в виде a.. b, где a и b – константные выражения целого, символьного или перечисляемого типа. Число элементов в массиве называют его размером. Массивы используются там, где нужно обработать сразу несколько переменных одного типа.

    Объявление переменной массива происходит в разделе var. При этом используется зарезервированное слово array, указывается размер массива перечислением значений индексов, а также объявляется тип данных элементов в массиве.

Опишем несколько массивов разного назначения.

 

var a: array [1..20] of integer;

 

здесь мы описали массив с именем A, состоящий из 20 целочисленных элементов;

 

var x,y: array [1..10] of real;

 

описаны 2 массива с именами x и y, содержащие по 10 вещественных элементов;

 

Массивы бывают одномерные и многомерные. Массив называется одномерным (линейным), если у каждого из его элементов имеется только один индекс. В двумерном массиве у каждого элемента имеются два индекса.

В математике такие массивы называют матрицами.

              Пример.

Const

N=100;

M=5;

Var

X:Array[1..N] Of Real;               {массив вещественных чисел}

A:Array[1..M,1..M] Of Integer;  {мaтрица целых чисел}.

 

Для обращения к элементу массива в Pascal-программе указывается имя массива и в квадратных скобках индексы элемента.

Пример:

A [2,4]

а) ввести значение:

read (A[2,4]);

б) изменить значение:

A[2,4]:=5;

в) вывести значение:

write (A[2,4]);

 

Программа ввода элементов одномерного массива:

 

program vvod 1;

var A: array [1..10] of integer;

i:integer;

begin

for i:=1 to 10 do

read (A[i]);

end.

 

Программа ввода элементов двумерного массива:

 

program vvod 2;

const n=5; m=7;

var A: array [1..n,1..m] of real;

i,j: integer;

begin

for i:=1 to n do

for j:=1 to m do

read (A[i,j]);

end.

 

    Программа для поиска минимального элемента в массиве:

 

program minim;

const n=10;

var i: byte;

a: array [1..n] of real;

min: real;

begin

for i:=1 to n do read (A[i]);

min:=A[1];

for i:=2 to n do

if min>A[i] then min:=A[i];

write (min);

end.

 

Строковый тип данных.

Переменная типа строка предназначена для обработки последовательностей символов. Каждый символ является элементом типа char. Строки могут вводиться с помощью стандартных операторов read/readln и выводиться стандартными операторами write/writeln.

Объявляются переменные типа строка в разделе var. При объявлении указываются идентификатор переменной, зарезервированное слово string и, в квадратных скобках, целое число - максимально возможная длина строки. Наибольшая длина строки составляет 255 символов. Если переменная имеет значение с максимальной длиной строки, то при объявлении переменной ограничиваются зарезервированным словом.

 

Пример:

var

identificator_1: string;

identificator_2: string[20];

identificator _3: string [155];

 

Значение строкового типа также как и значение типа char при записи внутри программы заключаются в апострофы.

 

Пример:

identificator _1:='это - компьютер';

identificator _1[1]:='э';

 

Простейшая операция, которую Pascal позволяет выполнить со строками - это операция конкатенации, или сцепления, или объединения строк в операторе присваивания. Операция записывается с помощью знака "+".

 

Пример:

identificator_1:='это' + '-' + 'компьютер';

 

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

 

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

 

 

Пример 1:

var

L: string[15];

A: byte;

Begin

L:=' Урок ';

A:=length(L);

Write(A)

End.

 

Пример 2:

Begin

write(length(' Урок '));

End.

 

2) Copy (L, A, B) - позволяет копировать фрагмент строки являющейся значением переменной L, начиная с позиции A в количестве B, где A и B - целые числа.

3) Pos (L, M) - возвращает результат целочисленного типа, являющийся номером позиции, с которой строка L входит в строку M. Если строки L нет в строке M, то результат - 0.

4) Insert (L, M, A) - вставляет строку L в строку M, начиная с позиции с номером A. Фактически, вставка производится перед указанной позицией.

5) Delete (L, A, B) - удаляет из строки L B символов, начиная с позиции A.

 

Пример. Разобрать предложение на слова и вывести каждое слово на новой строке экрана.

Алгоритм работы этой программы очень прост - до тех пор, пока в исходной строке предложения s есть хотя бы один пробел, вся часть строки до пробела копируется в строковую переменную w (слово). Если пробелов уже нет (или не было изначально), то вся строка - это одно слово. После обработки очередного слова (в нашем случае - это вывод его на новую строку экрана оператором writeln) обработанная часть строки вместе с пробелом удаляются из s - чтобы следующий шаг цикла не нашел то же самое слово.

 

var s,w: string;   {предложение и слово}

p: integer;  {позиция пробела}

begin

 writeln ('Введите текст');

 readln (s);

 repeat

p:=pos (' ',s);

if p>0 then w:=copy (s,1,p-1)

else w:=s;

writeln (w);

delete (s,1,p);

 until p=0;

end.

 

        Множества.

Множество - это совокупность элементов одного и того же перечисляемого типа. Оно задается перечислением элементов. Например, множество четных чисел от 0 до 10 в математике записывается так:

{ 0,2,4,6,8,10 }.

В Паскале оно представляется аналогично, только заключается в квадратные скобки:

[0,2,4,6,8,10].

Для объявления множеств используется зарезервированное слово set, за которым указывается тип элемента множества или сами элементы.

 

Пример:

type A: 5..9;

var

B: set of A;

C: set of char;

D: set of '1'..'5';

 

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

 

Пример:

e:=['A'..'Q', 'T', 'x'..'z'].

    Множества нельзя вводить с клавиатуры и выводить стандартными операторами.

Мощность множества - это максимальное количество элементов в нем. В Паскале оно ограничивается числом 256. Множество может не содержать ни одного элемента. Оно называется пустым и обозначается следующим образом: [ ]. По определению пустое множество является компонентой любого множества.

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

Объединение (+). Результатом будет множество, состоящее из всех элементов первого и второго множеств без повтора:

Пример:

[1..3, 6, 9..11] + [2..4, 7, 10..12] = [1, 2, 3, 4, 6, 7, 9, 10, 11, 12] = [1..4, 6, 7, 9..12].

 

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

Пример:

[1..3, 6, 9..11] * [2..4, 7, 10..12] = [2, 3, 10, 11].

 

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

Пример:

[1..3, 6, 9..11] - [2..4, 7, 10..12] = [1, 6, 9].

 

Операция in - проверяет принадлежность элемента множеству. Результатом операции будет логическое значение (true или false).

Пример:

2 in [1..4]       (true);

8 in [1..7]       (false).

 

    Пример программы с использованием множеств.

Сформировать и вывести на экран множество из n символов латинского алфавита (n<20). Если вводимая буква уже есть в множестве, выдать соответствующее сообщение.

 

Program Mnog_Sim;

Const

N=20;

Var

S: Set Of Char;

B: Char;

I: Integer;

Begin

S:= [];

For I:=1 To N Do

Begin

Writeln (’Введите букву’);

Readln(B);

If B In S Then

Writeln(’Буква ’,B,’ уже есть’)

Else

S:=S+[B];

End;

Writeln(’Буквы, входящие в множество’);

For B:=’A’ To ’z’ Do

If B In S Then

Write(B:2);

End.

    Записи.

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

 

В общем случае в разделе Type запись описывается так:

 

Type

    Имя _ записи = Record

Описания полей;

end;                {конец описания записи}

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

 

  Пример. Запись, характеризующая адрес человека, очевидно, должна содержать сведения о городе, улице, № дома, № квартиры. Структура соответствующей записи в разделе Type может быть описана следующим образом.

 

Type

Adres = Record

Gorod: String [20];

Ul: String [20];

Dom: Integer;

Kv: Integer

End;

 

Пример. Запись, описывающая студента, может иметь следующую структуру: ФИО, номер зачетки, оценки по 5 предметам.

 

Type

Stud = Record

Fam: String[15];

 Im: String[10]

 Ot: String[15];

Numz: Integer;

O:Array[1..5] Of Integer

End;

 

 

Используя этот тип, сведения о 25 студентах группы можно поместить в массив, описав его так:

 

Var

Grup: Array[1..25] Of Stud;

RabAnk: Stud; { Рабочая переменная }

 

При обращении к записи в программе указывается имя записи и через точку имя поля.

Пример.

 RabAnk.NumZ:=2100756; {Поле номера зачетки в переменной RabAnk}

 RabAnk.Fam:=’Иванов’; {Поле фамилии в переменной RabAnk}

 

Для массивов записей:

 Grup[1].Fam:= ’Смирнова’; {Фамилия первого студента в группе}

 Writeln(Grup[i].Numz); {Номер зачетки i–го студента в группе}

 Write(Grup[10].O[1]);{оценка по первому предмету 10-го студента}.

 

Для упрощения обращения к записи может быть использован оператор работы со структурой with. Например, если задана переменная karta типа запись c тремя полями (family, name и age), то вместо присваивания

karta.family:=' Иванов ';

karta.name:=' Иван ';

karta.age:=20;   

 

можно записать

 

with karta do

begin

family:=' Иванов ';

name:=' Иван ';

age:=20;

end;

 



<== предыдущая лекция | следующая лекция ==>
Цикл с известным количеством повторений. | Тема 6. Процедуры и функции
Поделиться с друзьями:


Дата добавления: 2018-10-18; Мы поможем в написании ваших работ!; просмотров: 362 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2240 - | 2159 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.