Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нестеров.docx
Скачиваний:
3
Добавлен:
22.09.2019
Размер:
267.49 Кб
Скачать

Вопрос 11.Рекурсия: понятие, пример использования.

Рекурсия — это такой способ организации вспомогательного алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения ее операторов обращается сама к себе. Объект называется рекурсивным, если он частично или полностью описывается через самого себя.

Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Рекурсия существует только при выполнении двух условий:

- наличие рекурсивного вызова;

-ограничение глубины.

Факториал — это классический пример рекурсивного объекта. Факториал числа п равен произведению числа п на факториал числа (п - 1). В свою очередь, факториал числа (n-1)! — это произведение числа (п - 1) на факториал числа (п - 2) и т. д. Таким образом, если вычисление факториала п реализовать как функцию, то в теле этой функции будет инструкция вызова функции вычисления факториала числа (п - 1), т. е. функция будет вызывать сама себя. Такой способ вызова называется рекурсией, а функция, которая обращается сама к себе, называется рекурсивной функцией.

function factorial(n: integer): integer;

begin

if n > 1

then factorial := n * factorial(n-1) // функция вызывает сама себя

else factorial:= 1; // факториал 1 равен 1

end;

Второе, хорошо известное рекуррентное соотношение - соотношение определяющее числа Фибоначчи. Числа Фибоначчи - это элементы числовой последовательности 1,1, 2, 3, 5, 8 ..., в которых каждый последующий элемент равен сумме предыдущих.

function f ( N : integer ) : integer; begin     if N<=1 then        Result := 1     else       Result := f ( N-1 ) + f ( N-2 ); end;

var A:array[1..10] of integer;

Procedure nomer(i:integer; var max,imax:integer);

begin

if i<=10 then

begin

if a[i]>max then

begin

max:=a[i];

imax:=i;

end;

nomer(i+1,max,imax);

end;

end;

Вопрос 12. Строки в Delphi. Способы реализации строк. Основные процедуры и функции.

Строка – одномерный массив символов.

Строки могут быть представлены следующими типами: shortstring, Longstring и widestring. Различаются эти типы предельно допустимой длиной строки, способом выделения памяти для переменных и методом кодировки символов. Переменной типа shortstring память выделяется статически, т. е. до начала выполнения программы, и количество символов такой строки не может превышать 255. Переменным типа Longstring и widestring память выделяется динамически — во время работы программы, поэтому длина таких строк практически не ограничена. Помимо перечисленных выше типов можно применять универсальный cтроковый тип String. Тип String эквивалентен типу Shortstring. Переменная строкового типа должна быть объявлена в разделе объявления переменных. Инструкция объявления в общем виде выглядит так: Имя: String; или Имя: String [длина]

где имя — имя переменной; string — ключевое слово обозначения строкового типа; длина — константа целого типа, которая задает максимально допустимую длину строки.

Если в объявлении строковой переменной длина строки не указана, то ее длина задается равной 255 символам, т. е. объявления stroka: string [255]; stroka: string; эквивалентны.

В тексте программы последовательность символов, являющаяся строкой (строковой константой), заключается в одинарные кавычки. parol:= 'Большой секрет';

Используя операции =, <, >, <=, >= и о, переменную типа string можно сравнить с другой переменной типа string или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом. Кроме операции сравнения, к строковым переменным и константам можно применить операцию сложения, в результате выполнения которой получается новая строка.

В языке Delphi есть несколько полезных при работе со строками функций и процедур.

Функция length возвращает длину строки. У этой функции один параметр — выражение строкового типа.

n:=length('Иванов');

Процедура delete позволяет удалить часть строки. В общем виде обращение к этой процедуре выглядит так:

delete(Строка, р, п) где: Строка — переменная или константа строкового типа; р — номер символа, с которого начинается удаляемая подстрока; п — длина удаляемой подстроки.

Функция роs позволяет определить положение подстроки в строке. В общем виде обращение к функции выглядит так:

pos (Подстрока,Строка) ; где Подстрока — строковая константа или переменная, которую надо найти в строковой константе или переменной строка. Если в строке нет искомой подстроки, то значение функции роs будет равно нулю.

Функция сору позволяет выделить фрагмент строки. В общем виде обращение к функции сору выглядит так:

сору( Строка, р, п ) где: строка — выражение строкового типа, содержащее строку, фрагмент которой надо получить; р — номер первого символа, с которого начинается выделяемая подстрока; n — длина выделяемой подстроки.

Процедура Insert вставляет одну строку (S1) в другую строку (S) в заданной позиции

Insert(S1,S,n); Insert(‘A’,S,1); Insert(‘A’,S,length(S)+1);