- •35 Жегуло а.И. Компьютерные науки 2010-2011 гг. Компьютерные науки Лекции для студентов 1 курса, 2010-2011 уч. Г., семестр 1
- •1. Основные понятия 3
- •2. Введение в язык программирования Pascal 3
- •7. Массивы 16
- •8. Сортировки массивов 22
- •9. Рекурсия 25
- •1. Символьные и строковые типы данных 31
- •Основные понятия
- •Способы описания алгоритма:
- •Введение в язык программирования Pascal
- •Структура программы на языке Pascal
- •Правила записи программ
- •Стиль программирования
- •Переменные и константы. Понятие типа данных
- •Классификация типов данных
- •Стандартные простые типы данных
- •Целые типы
- •Вещественные типы
- •Логические (булевские) типы
- •Перечисляемые типы
- •Интервальные типы
- •Порядковые типы
- •Описание данных
- •Описание переменных
- •Описание констант
- •Описание типизированных констант
- •Выражения
- •Операции отношения
- •Приоритеты операций
- •Арифметические выражения
- •Логические выражения
- •Операторы
- •Оператор присваивания
- •Оператор ввода с клавиатуры
- •Оператор вывода на экран монитора
- •Форматный вывод
- •Условный оператор (оператор альтернативы)
- •Составной оператор
- •Оператор выбора
- •Оператор цикла с предусловием while
- •Оператор цикла с постусловием repeat
- •Оператор цикла for с параметром
- •Вложенные циклы
- •Взаимозаменяемость циклов различных видов
- •Дополнительные конструкции переходов для циклов
- •«Вечные» циклы
- •Простейшие алгоритмы
- •Вычисление суммы и произведения
- •Организация счетчика
- •Нахождение наибольшего и наименьшего значений
- •Рекуррентные последовательности
- •Итерационные алгоритмы
- •Подпрограммы (процедуры и функции)
- •Понятие подпрограммы, ее описания и вызова
- •Цели введения подпрограмм
- •Способы передачи параметров. Виды параметров
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Корректность передачи параметров
- •Досрочное завершение работы программы и подпрограммы
- •Реализация вызова подпрограммы
- •Область действия и время жизни идентификаторов
- •Правила видимости
- •Время жизни идентификаторов
- •Побочный эффект функции
- •Массивы
- •Описание переменных-массивов
- •Обозначение элементов массива
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Типизированные константы-массивы
- •Операции над массивами
- •Именная эквивалентность типов
- •Передача массива в качестве параметра
- •Открытые массивы
- •Типичные задачи для одномерных массивов
- •Поиск заданного элемента в массиве
- •Анализ методов поиска по количеству операций сравнения
- •Двумерные массивы – матрицы
- •Трехмерные массивы
- •Сортировки массивов
- •Понятие сортировки
- •Параметры оценки алгоритмов
- •Сортировка простым включением (простыми вставками) Принцип сортировки включением
- •Сортировка простым выбором Принцип сортировки выбором
- •Сортировка простым обменом (метод пузырька) Принцип сортировки обменом
- •Сравнение эффективности базовых методов сортировки
- •Использование индексных массивов при сортировке
- •Рекурсия
- •Что такое рекурсия
- •Рекурсивные подпрограммы
- •Прямая и косвенная рекурсия
- •Предварительное (опережающее) описание подпрограммы
- •Опасности рекурсии
- •Бесконечная рекурсия
- •Итерация и рекурсия. Необоснованное применение рекурсии
- •Глубокая рекурсия
- •Когда использовать рекурсию
- •Формы рекурсивных подпрограмм
- •Примеры рекурсивных программ
- •Ввод последовательности целых чисел, заканчивающейся нулем, вывод в обратном порядке
- •Поиск максимального элемента массива
- •Задача о Ханойских башнях
- •Символьные и строковые типы данных
- •Символьные типы данных
- •Представление символов в памяти компьютера
- •Символьные константы и переменные Неименованные символьные константы
- •Стандартные функции над символами
- •Строковые типы данных
- •Строковые типы. Представление строк в памяти компьютера
- •Стандартные функции и процедуры для строк
- •Выделение слов из строки
-
Стандартные функции и процедуры для строк
Стандартные подпрограммы позволяют:
-
узнать текущую длину строки;
-
установить новую длину строки;
-
объединить несколько строк в одну строку;
-
скопировать или удалить из строки часть строки, начиная с указанной позиции;
-
отыскать в строке заданную подстроку;
-
вставить в строку подстроку в указанную позицию;
-
преобразовать вещественное или целое число в строковое представление и обратно.
Функции и процедуры |
Значение функции или результат вызова процедуры |
function Concat(S1, S2 [,...,Sn]):string |
Возвращает строку, полученную конкатенацией строк S1, S2, ... , Sn. Равносильно выражению S1+ S2 + ... +Sn |
function Copy(S,i,cnt):string |
Возвращает подстроку строки S, начиная с позиции i, и состоящую из cnt символов , . Например, S:=’Pascal’; Функция Copy(S,1,3) выдает строку 'Pas'. Если i больше, чем длина S, функция возвращает пустую строку. |
function Length(S):integer |
Возвращает текущую длину строки S. Например, S:=’Pascal’; Функция Length(S) выдает значение 6 |
Procedure SetLength(S,new) |
Устанавливает длину, равную new, строки S (для строк типа ShortString это равносильно S[0]:=Chr(new)). Если новая длина меньше текущей, то строка отсекается. Если больше, то добавленная часть строки (в некоторых системах программирования) инициализируется пробелами. |
function Pos(subs,S):integer |
Находит первое вхождение подстроки subs в строку S, возвращая номер позиции, где находится первый символ подстроки. Если подстрока не найдена, функция возвращает 0. Например, S:=’Pascal’. Функция Pos(‘a’, S) выдает значение 2 |
procedure Delete(S,i,cnt) |
Удаляет из строки S, начиная с позиции i, подстроку из cnt символов. Здесь S – только строковая переменная, не константа. Например, S:=’Pascal’; Процедура Delete(S,4,3) возвратит строку S=’Pas’, удалив 3 символа, начиная со 4-го. Если i больше длины строки S, символы не удаляются. Если количество удаляемых символовДля удаления «хвоста» строки указать позицию i первого его символа, а в качестве длины «хвоста» достаточно указать длину исходной строки, не подсчитывая длину «хвоста». Например, S:=’Object Pascal’; Процедура Delete(S,4,Length(S)) возвратит строку S=’Obj’, удалив 3 символа, начиная со 4-го. |
procedure Insert(subs,S,i) |
Вставляет подстроку subs в строку S, начиная с позиции i. Здесь subs – любое строковое выражение, S – строковая переменная. Например, S:=’ac’; subs:='bbb'; Процедура Insert(subs,S,2) возвратит строку S=’abbbc’, вставив подстроку 'bbb' в строку’ac’, начиная с позиции номер 2. Полученная строка при необходимости усекается до объявленной длины переменной S. |
Procedure Str(x[:width[:dec]],S) |
Преобразует число x любого вещественного или целого типа в строковый формат (аналогично процедуре write). Здесь x – любое числовое выражение, S – строковая переменная, width – общее количество знаков в числе x, dec – количество знаков после точки (указывается только для вещественных). Например, x:=123.45; str(x:8:3,S); – строка-переменная S получит значение ' 123.450' |
Procedure Val(S, x, code) |
Преобразует строку символов S во внутреннее представление целого или вещественного x. Здесь S – строковое выражение, x – числовая переменная, в которую помещается результат. Целочисленная переменная code на выходе содержит либо 0 (если преобразование успешно), либо номер позиции в строке S, начиная с которой произошла ошибка преобразования. Например, S:=’123,45’; val(S,x,code) – Преобразование не произойдет. Параметр code получит значение 4, т.к. 4-ый символ – запятая, а не точка. |
-
Строковые выражения
Основной способ образования строки с нужным значением – построение и вычисление строкового выражения с последующим присваиванием полученного значения переменной-строке.
Операндами строкового выражения могут быть символьные и строковые константы и переменные (с индексами или без), а также символьные и строковые функции.
-
Типичные задачи символьной обработки
Усечение строки
Текущая длина строки становится равной указанному числу:
SetLength(S, число)
S[0]:=Chr(число) {для строк типа ShortString}
Дополнение строки заданным символом до заданной длины
ch:=’.’ {Заданный символ C, например, точка}
L:=80; {Заданная длина строки, например, 80}
for i:=1 to (L - Length(S)) do
S:=S+ch;
Подсчет количества вхождений заданного символа ch в строку S
k:=0; {k - счетчик} for i:=1 to Length(S) do if S[i]=ch then k:=k+1;
«Перевертывание» строки с использованием вспомогательной строки
X:=’’; {X – вспомогательная строка, изначально пустая} for i:=1 to Length(S) do X:=S[i]+X; S:=X;
Замена всех вхождений одного символа chA на другой символ chB
for i:=1 to Length(S) do if S[i]=chA
then S:=concat(copy(S,1,i-1),chB, copy(S,i+1,length(S)-i));
Удаление всех вхождений заданного символа chA
i:=1;
while i<=Length(S) do
if S[i]=chA
then Delete(S,i,1) {удаление одного символа}
else i:=i+1; {продвижение по строке}
Подсчет количества вхождений подстроки Subs в строку S
k:=0; {счетчик}
n:=Length(Subs);
i:=1;
while i<=Length(S) do
if Pos(Subs, Copy(S,i,n))) <>0
then begin k:=k+1; i:=i+n end
else i:=i+1;
Замена в строке S подстроки Sold на новую подстроку Snew с использованием вспомогательной строки
В строке X накапливаются части исходной строки S, не требующие замены, и фрагменты Snew, которые заменили фрагменты Sold. Из строки S обработанная часть строки удаляется вместе с найденным вхождением Sold.
X:=’’; {Вспомогательная строка сначала пустая}
n:=Length(S);
repeat
P:=Pos(Sold,S);
if P<>0 then
begin X:=X+Copy(S,1,P-1)+Snew;
Delete(S,1,P+n-1) end
until P=0;
S:=X+S; {К полученной строке X добавляем то, что осталось от S}