Сложные типы данных языка Паскаль (Pascal)
Производные (структурные) типы
Структурные типы данных
МАССИВЫ
Массивы
Описание массива
Пример: описание массива
Пример: описание массива
Пример: Доступ к элементам массива
Пример: Объявление многомерного массива
Пример: Объявление многомерного массива
Массивы в Оперативной Памяти
Директива компилятора Delphi
Массивы в оперативной памяти
Работа с массивами
Работа с массивами
Пример работы с массивом
Пример работы с массивом
Присвоение значения одного массива другому:
Типизованные константы типа массив
Пример: Работа с константами-массивами
Пример: Работа с константами-массивами
Программа на языке Паскаль: 
Самостоятельная работа по теме МАССИВЫ
Самостоятельная работа по теме МАССИВЫ
Алгоритм и особенности решения задачи
Программа на языке Паскаль: 
строки
Структурные типы данных
Строковые данные
Строковые данные
СТРОКОВЫЕ КОНСТАНТЫ – это последовательность любых символов, допускаемых для представления в компьютере, заключенная в апострофы.
ПРАВИЛА записи строковых констант в программе:
ПРАВИЛА записи строковых констант в программе:
Например
Строковый тип данных
Строковые переменные
1-ый способ задания строковых переменных
Пример. Работа со строковыми переменными постоянной длины.
Пример. Работа со строковыми переменными постоянной длины.
Пример. Особенности строковых переменных в виде массива
Пример. Особенности строковых переменных в виде массива
2-ой способ задания строковых переменных
2-ой способ задания строковых переменных
Свойства строк
Свойства строк
Работа со строками в Delphi
Работа со строками в Delphi
Работа со строками в Delphi
Работа со строками в Delphi
Операции над строками
Слияние строк - конкатенация
Слияние строк - конкатенация
Сравнение строк
Сравнение строк
Примеры сравнения строк
Встроенные функции, определенные над данными типа String
Встроенные функции, определенные над данными типа String
Встроенные функции, определенные над данными типа String
Процедуры обработки строк
Процедуры обработки строк
Самостоятельная работа по теме СТРОКИ
Самостоятельная работа по теме СТРОКИ
Самостоятельная работа по теме СТРОКИ
Самостоятельная работа по теме СТРОКИ
1.23M
Category: databasedatabase

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

1. Сложные типы данных языка Паскаль (Pascal)

СЛОЖНЫЕ ТИПЫ ДАННЫХ
ЯЗЫКА ПАСКАЛЬ (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

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

14. Массивы в оперативной памяти

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

15. Работа с массивами

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

16. Работа с массивами

Пример работы с массивом
Описание двумерного массива.
Type
Mas = Array [1 .. 10, 1 .. 20] Of
Var
J, I : Integer;
Mas1, Mas2 : Mas;
----------------------------------
Integer;
И н и ц и а л и з а ц и я д ву м е р н о го м а с с и в а .
{ установка начального
For I := 1 To 10
For J := 1 To
Mas1[I, J]
значения, равного 0 }
Do
20 Do
:= 0;

17. Пример работы с массивом

Ввод исходных значений в массив.
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]);

18. Пример работы с массивом

Присвоение значения одного массива другому:
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 уже должен быть определен,
Т.Е. всем его элементам должны быть присвоены значения.

19. Присвоение значения одного массива другому:

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

20. Типизованные константы типа массив

Пример: Работа с константами-массивами
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)));

21. Пример: Работа с константами-массивами

{ Инициализация массива с помощью структурной константы-массива }
-----------------Var
M1: Mas;
MM: Mas3;
-----------------
Begin
M1 := M;
MM := M3;
...
End.

22. Пример: Работа с константами-массивами

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

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;

24. Программа на языке Паскаль: 

Самостоятельная работа по теме МАССИВЫ
ЗАДАЧА:
Задан массив случайных целых чисел,
величина которых, по модулю, не
превышает 300 (-300 ... 300).
Число элементов массива равно 10.
Найти максимальное и минимальное числа
в массиве и вывести на экран.

25. Самостоятельная работа по теме МАССИВЫ

Program 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.

26.

27.

Самостоятельная работа по теме МАССИВЫ
ЗАДАЧА:
Имеются два упорядоченных по возрастанию массива
(т.е. предыдущий элемент меньше последующего).
Требуется получить третий упорядоченный по
возрастанию массив, путем слияния первых двух.
Длина каждого массива не превышает 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

28. Самостоятельная работа по теме МАССИВЫ

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

29. Алгоритм и особенности решения задачи

Программа на языке Паскаль:
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.

30. Программа на языке Паскаль: 

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

31. строки

Структурные типы данных
строки

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

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

33. Строковые данные

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

34. Строковые данные

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

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

ПРАВИЛА записи строковых констант в программе:
1) Если в строке необходимо поместить
апостроф, то его повторяют дважды.
При подсчете длины строки два рядом
стоящих апострофа считаются одним
символом.
2) При подсчете длины строки учитываются
пробелы.

36. ПРАВИЛА записи строковых констант в программе:

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

37. ПРАВИЛА записи строковых констант в программе:

Например
‘TURBO’#13#10’TEKST’
Здесь #13#10 – это управляющие символы,
осуществляющие переход к началу следующей строки.
#7#7’MAKE’#7#7
Здесь #7 – это управляющий символ «Звонок».
#13#10
Эта строковая константа состоит только из управляющих символов.
Управляющие символы пишутся вне апострофа.

38. Например

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

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

Строковые переменные
В языке Паскаль существует
два способа задания строковых переменных:
1. Строковая переменная определяется как
одномерный массив символов
Array [1 .. N] Of
Char
2. Способом задания строковых переменных
является использование типа String.

40. Строковые переменные

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

41. 1-ый способ задания строковых переменных

Пример. Работа со строковыми
переменными постоянной длины.
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 = ‘Программа’;

42. Пример. Работа со строковыми переменными постоянной длины.

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

43. Пример. Работа со строковыми переменными постоянной длины.

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

44. Пример. Особенности строковых переменных в виде массива

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

45. Пример. Особенности строковых переменных в виде массива

2-ой способ задания строковых переменных
Определение типа
Var S : String[n];
где n - длина строки (целое число без знака из интервала 1..255).

46. 2-ой способ задания строковых переменных

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

47. 2-ой способ задания строковых переменных

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

48. Свойства строк

Доступ к отдельным символам строки типа String:
возможен путем использования индексных переменных.
Правила индексации аналогичны массиву символов с
диапазоном индексов
1 .. <Текущая_длина_строки>
Обращение к отдельным символам строки за пределами
текущей длины строки, считанные символы будут
случайными;
Присваивание элементам строки, находящимся вне длины,
не повлияет на значение строковой переменной.

49. Свойства строк

Работа со строками в Delphi
Delphi поддерживает старый строковый тип языка Pascal, но
этот строковый тип называется ShortString.
Тип ShortString может содержать не более 255 символов.
Первый символ (индекс которого равен 0) содержит длину строки
– действительное количество символов в типе ShortString
Для объявления строки с явно указанной длиной используется
зарезервированное слово string, которое обычно служит для
объявления переменных типа AnsiString (длинная строка).
По умолчанию зарезервированное слово string может
содержать до 2 Гбайт символов.

50. Работа со строками в Delphi

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

51. Работа со строками в Delphi

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

52. Работа со строками в Delphi

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

53. Работа со строками в Delphi

Операции над строками
Строковым выражением называется выражение,
результатом вычисления которого является
строковое значение.
Строковые выражения состоят из строковых
констант, строковых переменных, имен функций
и знаков операций.
Над данными типа String определены 2 операции:
операция конкатенации (сцепления);
операции сравнения (=, <>, >, <, >=, <=).

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

Слияние строк - конкатенация
Операция сцепления обозначается
символом «+».
При ее выполнении строки соединяются в
одну результирующую строку.
Длина результирующей строки не должна
превышать 255 символов.

55. Слияние строк - конкатенация

Пример:
Var
S1,S2,S3: string;
...
S1:= ’-PASCAL’;
S2:= ’FREE’;
S3:= S2+S1;
Writeln(S3);
{ результат: FREE-PASCAL }

56. Слияние строк - конкатенация

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

57. Сравнение строк

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

58. Сравнение строк

Примеры сравнения строк
59
Строки равны,
если они одинаковой
длины
и посимвольно
эквивалентны
Если при очередном сравнении
окажется, что код одного
символа больше кода другого,
то строка его содержащая также
считается большей
‘abcd’ = ‘abcd’
‘abcs’ <> ‘abcd’
‘abcd’ <> ‘ABCD’
‘abcd’ > ‘abca’
т.к. ASCII-коды
‘a’<’b’<’c’<...<’z’
‘abcd’ > ‘aBcb’
т.к. ‘b’>’B’

59. Примеры сравнения строк

Встроенные функции, определенные над
данными типа String
60
Var S1,S2,S3: string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;
Length(S:string):byte K:= Length(S1);
{5}
Write(K);
Write(Length(S2)); {5}
Concat(S1[,S2,…,SN]:
string) :string
S3:= Concat(S1,S2);
Writeln(S3);
{1234567890}
Writeln(Concat(S1,S2));
{1234567890}

60. Встроенные функции, определенные над данными типа String

61
Var S1,S2,S3: string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;
Pos(SubS,S:string): S3:=’1234567890’;
byte
K:= Pos(S1,S3);
Writeln(K);
{1}
Write(Pos(S2,S3)); {6}
Copy(S:string;
START,LEN:integer):
string
S3:= Copy(S1,2,3);
Writeln(S3);
{234}
Writeln(Copy(S2,3,3));
Writeln(Copy(S2,3,3));{890}

61. Встроенные функции, определенные над данными типа String

Var S1,STR1: string;
K:byte;
...
S1:= ’12345’;
STR1:= ’minsk, bsuir’;
UpCase (Ch:char):char
For I := 1 To Length(S1) Do
S1[I]:=UpCase(S1[I]);
{‘12345’}
STR1[1] := UpCase(STR1[1]);
UpCase (STR1[1]);
For I := 8 To Length(STR1) Do
STR1[I]:=UpCase(STR1[I]); {‘Minsk, BSUIR’}

62. Встроенные функции, определенные над данными типа String

Процедуры обработки строк
63
Var S1,S2,S3:string;
K:byte;
...
S1:=’12345’;
S2:=’67890’;
Delete( Var S:string;
START,LEN:integer );
S3:=S1+S2;
{1234567890}
Delete(S3,5,4);
Writeln(S3);
{123490}
Insert( SubS:string; Var
S:string; START:integer );
S1:=’END’;
Insert(‘START-‘, S1, 1);
Writeln(S1);
{START-END}
Insert(‘BLOCK-‘, S1,
7);
S1,6);
Writeln(S1);
{START-BLOCK-END}

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

Var S1,S2,S3 : string;
K, Cod : byte;
X : real;
Str( X[:Width[:Decimals]];
I[:Width[:Decimals]];
Var S:string );
Val( S:string;
X:<тип>;
Var I:<тип>;
Var ECode:integer );
...
X:= 3.1415926;
K:= 47;
Str(K, S3);
Writeln(S3);
{‘47’}
Str(X:8:4,S3);
Writeln(’X=‘+S3); {‘X=
3.1416’}
‘12345’;
S1 := ‘123’;
S2 := ‘two’;
S3 := ’48a’;
‘48a’;
Val(S3, K, Cod);
{K неопределено, Cod = 3}
Val(S2, K, Cod);
{K неопределено, Cod = 1}
Val(S1, K, Cod);
{K = 123, Cod = 0}

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

Самостоятельная работа по теме СТРОКИ
Задача:
Удалить половину строки, введенной с клавиатуры.
1.
2.
3.
4.
5.
6.
7.
8.
Program _sample;
Var s: string;
Begin
Writeln(‘введите строку _’);
Readln(s);
Delete(s, length(s) div 2 + 1,
length(s) div 2);
Writeln(‘новая строка = ’, s);
End.

65. Самостоятельная работа по теме СТРОКИ

Задача:
В предложении произвольной длины (строке,
введенной с клавиатуры) все цифры заменить на «*».
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.

66. Самостоятельная работа по теме СТРОКИ

Задача:
Посчитать сумму всех целых чисел,
встречающихся в строке,
введенной с клавиатуры.

67. Самостоятельная работа по теме СТРОКИ

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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.
English     Русский Rules