- •Тема №1 Типы данных, преобразование типов
- •Тема №2 Массивы, как параметры функций и процедур
- •Тема №з Условный оператор. Логические выражения
- •Тема №4 Функции и их использование
- •Тема №5 Оператор альтернативного выбора
- •Тема №6 Оператор цикла со счетчиком
- •Тема№7-8
- •Тема №9 Логические операторы и логические выражения. Тип boolean
- •Тема№10 Одномерные и двумерные массивы
- •Тема №11 Условный оператор
- •Тема№12 Процедуры. Глобальные и локальные переменные
- •Тема№13 Строковые переменные. Процедуры и функции для работы со строками
- •Тема№14 Двумерные массивы и вложенные циклы
- •Тема№15 Структура программы в языке Pascal
- •Тема№16 Операторы присваивания, ввода, вывода. Соответствие типов
- •Тема№17 Записи. Синтаксис описания записей
- •Тема№18 Сравнение массивов и записей. Работа с полями записей
- •Тема№19 Символьные переменные Операции и функции для работы с ними.
- •Тема №20 Арифметические выражения. Стандартные математические функции
- •Тема№21 Типизированные файлы. Процедуры и функции для работы с ними
- •Тема№22 Типы файлов. Процедуры и функции для работы с ними
- •Тема№23 Текстовые файлы. Процедуры и функции для работы с ними
- •Тема№24 Арифметические и логические операции и их приоритет
- •Тема№25 Область видимости переменных
- •Тема№ 26 Механизмы передачи параметров процедурам
- •Тема№ 27 Запись и чтение файлов. Открытие и закрытие файлов
- •Тема№28 Понятие алгоритма. Линейный, разветвляющийся, циклический алгоритмы.
- •Тема№29 Структурированные типы: массивы, строки, записи, файлы.
Тема№13 Строковые переменные. Процедуры и функции для работы со строками
При работе со строками, как правило, возникает необходимость выполнять их копирование, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции. Они кратко описаны ниже.
Функция Concat (s1, s2, ..., sn) возвращает строку, являющуюся слиянием строк s1, s2, ..., sn.
Функция Copy (s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s.
Процедура Delete (s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len.
Процедура Insert (subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start.
Функция Length (s) возвращает фактическую длину строки s, результат имеет тип byte.
Функция Pos (subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s.
Процедуры преобразования типов
Процедура Str (x, s) преобразует числовое значение x в строку s, при этом для x может быть задан формат, как в процедурах вывода write и writeln. Например:
x := 123;
s := str(x:6,s);
Результат: s = ' 123'.
Процедура Val (s, x, errcode) преобразует строку s в значение числовой переменной x, при этом строка s должна содержать символьное представление числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибочного символа, а значение x не определено.
Тема№14 Двумерные массивы и вложенные циклы
Двумерные массивы
Описание
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим матрицу А размерностью 2*3, то есть в ней будет две строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел - номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a12 - это элемент, стоящий в первой строке и во втором столбце.
Существуют несколько способов объявления двумерного массива.
Способ 1. В Паскале двумерный массив можно описать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, приведённой выше:
Const n = 2; m = 3;
Type omyarray = Array[1..m] Of <тип элементов >;
dmyarray = Array[1..n] Of omyarray;
Var v : omyarray;
a : dmyarray;
В данном случае переменная v объявлена как одномерный массив из трёх элементов вещественного типа. Переменная а описана как двумерный массив из двух строк, каждую из которых включено по три элемента.
Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:
Const n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип элементов>;
Var a : dmyarray.
Способ 3. Ещё более краткое описание массива А можно получить, указывая имя массива и диапазоны изменения индексов для каждой размерности массива:
Const n = 2; m = 3;
Type dmyarray = Array[1..n, 1..m] Of <тип элементов >;
Var a : dmyarray.
Если указанный тип используется для определения одного массива в программе, то удобно объявление массива в разделе описания переменных:
Var a: Array [1..n, 1..m] Of < тип элементов >.
Рассмотренные выше методы решения задач обработки одномерных массивов могут применяться для обработки двумерных массивов. Поскольку положение элемента в двумерном массиве описывается двумя индексами [первый - номер строки, второй - номер столбца], программы большинства матричных задач строятся на основе вложенных циклов. Обычно внешний цикл работает по строкам матрицы, то есть с его помощью выбирается требуемая строка матрицы, а внутренний цикл - по столбцам матрицы, то есть здесь выбирается нужный элемент из выбранной уже строки. Для задания значений элементам массива могут быть использованы операторы присваивания и операторы ввода данных.
Пример 1
В приведённом ниже примере осуществляется ввод и вывод двумерного массива А размерностью 10*15. Формирование и вывод массива описаны в виде двух процедур, которые вызываются последовательно из основной программы. Надо заметить, что формирование двумерного массива можно осуществлять всеми тремя способами, описанными для одномерных массивов, то есть: ввод с клавиатуры, через генератор случайных чисел или с помощью файла. Пусть в нашем примере элементы задаются генератором случайных чисел.
Program Example_45;
Const n = 2; m = 15;
Type dmyarray = Array[1..n., 1..m] Of Integer;
Var A : dmyarray;
Procedure Init(Var x: dmyarray); {процедура формирования массива}
Var i, j : Integer;
Begin
For i:=1 To n Do
For j:=1 To m Do
x[i,j]:=-25+Random(51);
End;
Procedure Print(x: dmyarray); {процедура вывода массива на экран}
Var i, j : Integer;
Begin
For i:=1 To n Do
Begin {ввод i-ой строки массива}
For j:=1 To n Do Write(x[i,j]:5);
Writeln; {переход на начало следующей строки}
End;
Begin{основная программа}
Init(A); {вызов процедуры формирования массива}
Writeln('Массив А:');
Print(A); {вызов процедуры вывода}
Readln;
End.