Сложные типы данных языка Паскаль презентация

Содержание

Производные (структурные) типы В Паскале производные типы данных делятся на: – стандартные (предопределенные) например, типы String, Text и др. – описанные например, массивы, записи и др. Значения производных

Слайд 1СЛОЖНЫЕ ТИПЫ ДАННЫХ ЯЗЫКА ПАСКАЛЬ (PASCAL)
Парамонов А.И.
2015


Слайд 2Производные (структурные) типы
В Паскале производные типы данных делятся на:
– стандартные (предопределенные)

например, типы String, Text и др.
– описанные например, массивы, записи и др.

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

Слайд 3Структурные типы данных


массивы


Слайд 4МАССИВЫ
Массив – это упорядоченная совокупность фиксированного количества (конечного числа) компонентов (элементов)

одного и того же типа, имеющих общее имя.

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

Слайд 5Массивы
Количество индексных выражений определяется количеством измерений массива.
Количество элементов массива, их

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

Слайд 6Описание массива
Форма объявления массива:
ТYРЕ Т = ARRAY [ T1 ] OF

T2;

Массивы можно определить в разделах Type или Var.

Слайд 7Пример: описание массива
TYPE
ТА = ARRAY [1 .. 10] OF INTEGER; {Тип

массива А }
MN = SET OF 2 ..100; {Тип множества }
VAR
{ Массивы данных : }
А : ТА; {А - целого типа }
В : ARRAY [1 .. 20] OF REAL; {В - вещественного}
С : ARRAY [1..10,1..20] OF REAL; {С - двумерный, веществ.}
D : ARRAY [-10 .. 10] OF BOOLEAN; {D - логического }
E : ARRAY [0 .. 30] OF CHAR; {E - символьного }
F : ARRAY [1 .. 15] OF STRING[30]; {F - строковых данных }
G : ARRAY [1 .. 20] OF MN; {G - множеств }

Тип индексов – любой простой порядковый (ординальный) тип данных, кроме стандартного типа Longint и его диапазона.

Слайд 8Пример: описание массива
Type
Diapazon = 1 .. 20;
Vector = Array [Diapazon] Of

Real;
{Явное задание типа. Одномерный массив из 20 элементов вещественного типа}
Matritca = Array [–5 .. 40, Diapazon] Of 0 .. 100;
{Явное задание типа. Двумерный массив из 46 строк и 20 столбцов, содержащий элементы ограниченного типа}
Var
I: Diapazon;
A, B: Vector;
E, F: Matritca;
C, D: Array [1 .. 20] Of Char;
{Неявное задание типа. Одномерный массив из 20 элементов типа Char}
Mes: Array [1 .. 4] Of (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
{Неявное задание типа. Одномерный массив из 4 элементов перечислимого типа}

Слайд 9Пример: Доступ к элементам массива
Примеры обращений к элементам массивов, объявленных в

примере: 
A [1] – 1-ый элемент массива А.
E [–1, 18] – обращение к элементу с номером строки «–1» и номером столбца «18» матрицы Е.
C [2 * I – 5] – использование индексного выражения.

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

Слайд 10Пример: Объявление многомерного массива
1-й способ

Type
arrM2 = Array [1 .. 10] Of

Array [1 .. 20] Of Integer;
Var
A: arrM2;

2-й способ
 
Type
arrM1 = Array [1 .. 20] Of Integer;
arrM2 = Array [1 .. 10] Of arrM1;
Var
A: arrM2;

Слайд 11Пример: Объявление многомерного массива
ВАРИАНТ 1:
Type
Den = 1 .. 31;
Mes = (Yan,

Feb, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Okt, Nob, Dec);
God = 1900 .. 2000;
Data = Array [Den, Mes, God] Of (Pn, Vt, Sr, Ch, Pt, Sb, Vs);

ВАРИАНТ 2:
Type
Data = Array [1 .. 31, (Yan, Feb, Mar, Apr, May, Iyn, Iyl, Avg, Sen, Okt, Nob, Dec), 1900 .. 2000] Of (Pn, Vt, Sr, Ch, Pt, Sb, Vs);
ВАРИАНТ 3: ?

Слайд 12Массивы в Оперативной Памяти
Размерность (мерность) массива синтаксисом языка Паскаль не

ограничена.
Ограничение только в объеме памяти.
Максимально допустимый размер массива равен 65 520 байт (размер сегмента данных).

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

Например, для 20-ти элементов типа REAL необходимо
??? байт памяти.

20 * 6 = 120 байт


Слайд 13Директива компилятора Delphi
{SREALCOMPATIBILITY ON}


Устанавливает размер типа данных Real в 6 байт.


Слайд 14Массивы в оперативной памяти
Компилятор размещает массив (в том числе и многомерный)

в сплошной области памяти «линейно»
Например: Пусть есть массив А – двухмерный целых чисел (типа Integer).

Слайд 15Работа с массивами
НЕЛЬЗЯ в Паскале использовать массивы с переменными границами.
ЗАПРЕЩЕНЫ

в Паскале операции над массивами. Нельзя, также и сравнивать массивы.
ЕСЛИ массивы однотипные, то можно скопировать все элементы одного массива в другой с помощью одного оператора присваивания.

Слайд 16Работа с массивами
Над элементами массивов допускаются операции те же, что и

над простыми переменными его базового типа.
ВВОД-ВЫВОД элементов массивов можно производить только поэлементно, т. е. с помощью циклов.
Инициализация массива – это присвоение всем элементам массива исходного значения.

Слайд 17Пример работы с массивом
Описание двумерного массива.
Type
Mas = Array [1 .. 10,

1 .. 20] Of Integer;
Var
J, I : Integer;
Mas1, Mas2 : Mas;
----------------------------------
Инициализация двумерного массива.

{ установка начального значения, равного 0 }
For I := 1 To 10 Do
For J := 1 To 20 Do
Mas1[I, J] := 0;

Слайд 18Пример работы с массивом
Ввод исходных значений в массив.

For I := 1

To 10 Do
For J := 1 To 20 Do
Read (Mas1[I, J]);
----------------------------------
Вывод значений элементов массива.

For I := 1 To 10 Do
For J := 1 To 20 Do
Writeln (Mas2[I, J]);

Слайд 19Присвоение значения одного массива другому:
For I := 1 To 10 Do
For

J := 1 To 20 Do
Mas2[I, J] := Mas1[I, J];
----------------------------------
For I := 1 To 10 Do
Mas2[I] := Mas1[I];
----------------------------------
Mas2 := Mas1;
----------------------------------
(!) к этому моменту массив Mas1 уже должен быть определен,
Т.Е. всем его элементам должны быть присвоены значения.

Слайд 20Типизованные константы типа массив
Для инициализации массива в языке Паскаль могут быть

использованы типизованные константы типа массив.
Типизованные константы-массив объявляются в разделе констант.
С помощью структурной константы-массив может производиться инициализация массива.

Слайд 21Пример: Работа с константами-массивами
Type
Mas = Array [1..10] Of Integer;
Mas3 = Array

[1..2, 1..2, 1..2] Of Integer;
Const
{ Для присваивания типа типизованной константе-массив используется имя типа }
M: Mas = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
M3: Mas3 = (((0,1), (2,3)), ((4,5), (6,7)));

Слайд 22Пример: Работа с константами-массивами
{ Инициализация массива с помощью структурной константы-массива }
------------------
Var
M1:

Mas;
MM: Mas3;
-----------------
Begin
M1 := M;
MM := M3;
...
End.

Слайд 23
В задачах по программированию очень часто встречается необходимость заполнить массив данными

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

Слайд 24Программа на языке Паскаль: 
Const N = 10;  
Type myArr =

array[1..N] of integer;  
Var a, b: myArr;

Procedure arr_rand (k: Integer; var arr: myArr );
Var i: byte;
Begin
writeln ('Заполнение массива случайными числами.');
randomize;
for i := 1 to k do arr[i] := random (100);
End;

Procedure arr_user (k: Integer; var arr: myArr );
Var i: byte;
Begin
write ('Введите ', k, ' чисел через пробел: ');
for i := 1 to k do
read(arr[i]);
End;

Слайд 25Самостоятельная работа по теме МАССИВЫ
ЗАДАЧА:
Задан массив случайных целых чисел, величина которых,

по модулю, не превышает 300 (-300 ... 300).
Число элементов массива равно 10.
Найти максимальное и минимальное числа в массиве и вывести на экран.

Слайд 26Program sampleTask; {$APPTYPE CONSOLE} Uses SysUtils;

Var   ar: array [1..10] of integer; {Объявляем массив}
min,

max, c, x: integer; 
Begin   Randomize; {включаем генератор случайных чисел}  For z := 1 to 10 Do begin
    x:= random(600);      If (x > 300) Then x:= (x * -1) + 300;
ar[z]:= x; {Заполняем значениями массив}     writeln(z, '= ', ar[z]);   end;
min:= ar[1]; max:= ar[1];
For z:= 2 to 10 Do begin      if min > ar[z] then min:= ar[z];      if max < ar[z] then max:= ar[z];    end;
Writeln('Minimum = ', min);   Writeln('Maximum = ', max);
End.

Слайд 28Самостоятельная работа по теме МАССИВЫ
ЗАДАЧА:
Имеются два упорядоченных по возрастанию массива (т.е.

предыдущий элемент меньше последующего).
Требуется получить третий упорядоченный по возрастанию массив, путем слияния первых двух.
Длина каждого массива не превышает 7.
Например:
Если 1-й массив: 4, 8, 12, 14, 23, 85 2-й массив: 2, 4, 8, 9, 12, 16
тогда 3-й массив будет:
2, 4, 4, 8, 8, 9, 12, 12, 14, 16, 23, 85

Слайд 29Алгоритм и особенности решения задачи
Определяем и задаем длину третьего массива.
Она равна

сумме двух первых.
Далее определимся, как будут формироваться первые два массива.
Использование Random нам не подходит, т.к. массивы должны быть упорядоченными. Будем вводить данные с клавиатуры (пример есть).
Элементы под текущими для каждого массива индексами сравниваются, и меньший по значению записывается в третий массив. При этом индекс массива, из которого элемент был скопирован в третий массив, должен увеличиться.
Может возникнуть ситуация, когда один массив закончился, а второй еще нет.
Для этого в программе должен быть организован цикл записи возможного окончания (копирования остатка) как первого, так и второго массива.

Слайд 30Программа на языке Паскаль: 
Const N = 7;
Var arr1, arr2 :

array [1..N] of Integer;
arr3 : array [1..N+N] of Integer;
i, j, k : byte;
Begin
… {ввод массивов}
i:= 1; j:= 1; k:= 1;
while (i <= N) and (j <= N) do
begin
if arr1[i] < arr2[j] then
begin arr3[k]:=arr1[i]; i:=i+1 end
else begin arr3[k]:=arr2[j]; j:=j+1 end;
k := k + 1;
end;
while i<=N do begin arr3[k]:=arr1[i]; i:=i+1; k:=k+1 end;  
while j<=N do begin arr3[k]:=arr2[j]; j:=j+1; k:=k+1 end;
… {вывод массива}
End.

Слайд 31СТРОКИ
Парамонов А.И.
2015


Слайд 32Структурные типы данных


строки


Слайд 33Строковые данные
Для обработки группы символов в среде Pascal используется структурированный тип

String.
Строковый тип данных используется для обработки текстов.

СТРОКА – это последовательность любых символов кода обмена информацией (в компьютерах – это код ASCII).
Строка наряду со знаками алфавита языка Паскаль может содержать русские буквы.

Слайд 34
Строковые данные
СТРОКОВЫЕ СТРОКОВЫЕ
КОНСТАНТЫ ПЕРЕМЕННЫЕ
Строка хранится в поле основной памяти,

состоящем из смежных байтов.
Каждый байт содержит один символ.
Максимальная длина строки, допускаемая компилятором Pascal
= 255 байт.
СТРОКИ

Слайд 35СТРОКОВЫЕ КОНСТАНТЫ – это последовательность любых символов, допускаемых для представления в

компьютере, заключенная в апострофы.

Слайд 36ПРАВИЛА записи строковых констант в программе:
1)    Если в строке необходимо поместить

апостроф, то его повторяют дважды. При подсчете длины строки два рядом стоящих апострофа считаются одним символом.
2)    При подсчете длины строки учитываются пробелы.

Слайд 37ПРАВИЛА записи строковых констант в программе:
3)    Допускаются пустые символьные константы, т.е.

константы, не содержащие ни одного символа.
‘’ – это пустая строка нулевой длины.
4)    Паскаль разрешает вставлять в строку символов управляющие символы. Символ # с целой константой без знака (от 0 до 255) обозначает соответствующий этому значению символ в коде ASCII. Между # и целой константой не должно быть никаких разделителей. Если несколько управляющих символов входят в строковую константу, то между ними не должно быть разделителей.

Слайд 38Например
‘TURBO’#13#10’TEKST’
 Здесь #13#10 – это управляющие символы, осуществляющие переход к началу следующей

строки.
 
#7#7’MAKE’#7#7
 Здесь #7 – это управляющий символ «Звонок».
 
#13#10
 Эта строковая константа состоит только из управляющих символов.

Управляющие символы пишутся вне апострофа.

Слайд 39Строковый тип данных
Строка – это последовательность символов.

Ее можно рассматривать как

скалярное значение (простой тип) или как совокупность символов - массив (сложный тип)

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

Слайд 40Строковые переменные
В языке Паскаль существует два способа задания строковых переменных:

Строковая переменная определяется

как одномерный массив символов
Array [1 .. N] Of Char

Способом задания строковых переменных является использование типа String.


Слайд 411-ый способ задания строковых переменных
Array [1 .. N] Of Char

где N

– длина строки (N ≥ 1), определяемая как целое число без знака.
<Тип_индекса> может быть задан только с помощью типа диапазон
При таком способе объявления строка обладает всеми свойствами массивов.
Например:
строковой переменной можно присвоить значение другой строковой переменной той же длины;
возможно обращение к отдельным символам строковой переменной, используя индексные переменные.

Слайд 42Пример. Работа со строковыми переменными постоянной длины.
Type
{Одномерный массив символов (строка)}
Stroka =

Array [1 .. 9] Of Char;
{Двумерный массив символов (одномерный массив строк)}
myPage = Array [1 .. 30] Of Stroka;
Var
Stroka1, Stroka2: Stroka;
Page1, Page2: myPage;
I, K, J: 1..30;
X, Y: Boolean;
Const
Literal = ‘Программа’;

Слайд 43Пример. Работа со строковыми переменными постоянной длины.
Begin
------------------------------------
{K этому моменту Stroka2 должна

быть определена:}
Stroka1 := Stroka2;
{Одной строке может быть присвоено значение другой строки той же длины. Здесь К-ой строке страницы присваивается значение строки:}
Page1[K] := Stroka2;
{Обращение к отдельным символам строковой переменной:}
Stroka1[I] := ‘A’;
Stroka1[J] := Stroka2[I];
{J-ому символу I-ой строки страницы присваивается значение К-ого
символа строки:}
Page1[I, J] := Stroka1[K];

Слайд 44Пример. Особенности строковых переменных в виде массива
Строковым переменным могут быть присвоены

значения строковых констант (литералов), если длина строки равна длине литерала.
 
Stroka1 := Literal;
Page1[I] := Literal;
Stroka1 := ‘ПРОГРАММА’;


Слайд 45Пример. Особенности строковых переменных в виде массива
Над значениями строковых переменных одинаковой

длины можно выполнять операции сравнения (=, <>, >, <, >=, <=) ..
 
X := Stroka1 = Stroka2;
Y := Page1[I] >= Stroka2;

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


Слайд 462-ой способ задания строковых переменных
Определение типа
Var S : String[n];

где n -

длина строки (целое число без знака из интервала 1..255).


Слайд 472-ой способ задания строковых переменных
С помощью типа String определяются строки переменной

длины.
Текущая длина строки может изменяться в процессе выполнения программы, но не должна превышать указанной в описании.
Если длина строки не указана в описании, то по умолчанию она принимается равной 255 символов.

Слайд 48Свойства строк
Переменной типа String может быть присвоено значение другой строки любой

длины.
Текущая длина строки определяется длиной последнего занесенного в нее значения.

Переменной типа String выделяется количество байтов памяти на единицу превышающее максимальную длину, указанную в определении типа.
В левом байте (с номером 0) хранится текущая длина строки в двоичном коде.


Слайд 49Свойства строк
Доступ к отдельным символам строки типа String: возможен путем использования индексных

переменных.
Правила индексации аналогичны массиву символов с диапазоном индексов
1 .. <Текущая_длина_строки>

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

Слайд 50Работа со строками в Delphi
Delphi поддерживает старый строковый тип языка Pascal, но

этот строковый тип называется ShortString.
Тип ShortString может содержать не более 255 символов.
Первый символ (индекс которого равен 0) содержит длину строки – действительное количество символов в типе ShortString

Для объявления строки с явно указанной длиной используется зарезервированное слово string, которое обычно служит для объявления переменных типа AnsiString (длинная строка).
По умолчанию зарезервированное слово string может содержать до 2 Гбайт символов.

Слайд 51Работа со строками в Delphi
Значение зарезервированного слова string можно изменять директивами

компилятора $Н и SLONGSTRINGS.

Различие между ShortString и string состоит в том, что память для строк динамически резервируется в куче.
Для выяснения количества байтов, занимаемых переменной, можно использовать функцию SizeOf().
Следует помнить: При каждом присваивании строки типа ShortString другой строке типа ShortString компилятор копирует все 256 байт.

Слайд 52Работа со строками в Delphi
При присваивании строки типа string другой строке

типа string строка не копируется.
После выполнения операции присваивания целевая строка только указывает на первый символ исходной строки, а значение «счетчика ссылок» исходной строки увеличивается на 1.
т.е., в памяти хранится только одна копия строкового значения, но ее используют несколько переменных.

Слайд 53Работа со строками в Delphi
Delphi создает реальную копию строки только при изменении

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


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

значение.

Строковые выражения состоят из строковых констант, строковых переменных, имен функций и знаков операций.

Над данными типа String определены 2 операции:
операция конкатенации (сцепления);
операции сравнения (=, <>, >, <, >=, <=).

Слайд 55Слияние строк - конкатенация
Операция сцепления обозначается символом «+».
При ее выполнении

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

Слайд 56Слияние строк - конкатенация
Пример:
Var
S1,S2,S3: string;
...
S1:= ’-PASCAL’;
S2:= ’FREE’;
S3:= S2+S1;
Writeln(S3);
{ результат: FREE-PASCAL

}


Слайд 57Сравнение строк
Сравнение производится в соответствии с упорядочением символов в коде ASCII.
Сравниваются

символы строк начиная с первого символа последовательно слева направо до первого несовпадающего символа.

Слайд 58Сравнение строк
Большей считается строка, у которой первый несовпадающий символ имеет больший

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

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

Слайд 59Примеры сравнения строк


Слайд 60Встроенные функции, определенные над данными типа String
Var S1,S2,S3: string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;



Слайд 61Встроенные функции, определенные над данными типа String
Var S1,S2,S3: string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;


Слайд 62Встроенные функции, определенные над данными типа String
Var S1,STR1: string;
K:byte;
...
S1:= ’12345’;
STR1:= ’minsk,

bsuir’;

Слайд 63Процедуры обработки строк
Var S1,S2,S3:string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;



Слайд 64Процедуры обработки строк
Var S1,S2,S3 : string;
K, Cod : byte;

X : real;

...
X:= 3.1415926;
K:= 47;


Слайд 65Самостоятельная работа по теме СТРОКИ
Задача:
Удалить половину строки, введенной с клавиатуры.

Program _sample;
Var

s: string;
Begin
Writeln(‘введите строку _’);
Readln(s);
Delete(s, length(s) div 2 + 1, length(s) div 2);
Writeln(‘новая строка = ’, s);
End.

Слайд 66Самостоятельная работа по теме СТРОКИ
Задача:
В предложении произвольной длины (строке, введенной с

клавиатуры) все цифры заменить на «*».

Program _sample2;
Var s: string; i: integer;
Begin
Writeln(‘введите строку _’);
Readln(s);
For i:= 1 to length(s) Do
If (ord(s[i])>=ord(’0’)) and (ord(s[i])<=ord(’9’)) Then s[i]:= ’*’;
Writeln(‘новая строка = ’, s);
End.

Слайд 67Самостоятельная работа по теме СТРОКИ
Задача:
Посчитать сумму всех целых чисел, встречающихся в

строке, введенной с клавиатуры.


Слайд 68Самостоятельная работа по теме СТРОКИ
Program _sample3;
Var s : string; sum, x,

I : integer;
Begin
Writeln(‘введите строку _’); Readln(s);
sum:=0; x:=0;
For i:= 1 to length(s) Do
If (ord(s[i]) >= 48) and (ord(s[i]) <= 57) Then x:= x*10 + (ord(s[i]) - 48)
Else If (x>0) Then begin sum:=sum + x; x:=0; end;
Writeln(‘сумма = ’, sum);
End.

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика