Similar presentations:
Сложные типы данных языка Паскаль
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. Пример: описание массива
TypeDiapazon = 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. Свойства строк
Работа со строками в DelphiDelphi поддерживает старый строковый тип языка 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
61Var 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.