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

Вопрос №21 Рекурсия. Рекурсивные алгоритмы и подпрограммы

Рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Преимущество рекурсивного определения объекта заключается в том, что такое конечное определение теоретически способно описывать бесконечно большое число объектов. С помощью рекурсивной программы же возможно описать бесконечное вычисление, причём без явных повторений частей программы.

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

Program Arsac; Var first: word; Procedure posledov (i: word);  Begin     Writeln (i);     If i=1 then exit;     If odd(i) then posledov(3*i+1) else posledov(i div 2);  End;  Begin     Write (‘ введите первое значение ’); readln (first);     Posledov (first);     Readln ;  End

Пример рекурсивного алгоритма

N! = ( N-1)!* N, если N=0, то N!= 1

Пример рекурсивной функции вычисления факториала

Function factorial(N: integer) : longint;  Begin     If N= 0 then     Factorial := 1     Else Factorial := factorial(N-1) * N  End;

Вопрос №22 Строковый тип данных. Основные операции для работы со строками

Строковый тип  — тип данных, значениями которого является произвольная последовательность символов алфавита. Каждая переменная такого типа может быть представлена фиксированным количеством байтов или иметь произвольную длину

Процедуры- Str(v,s), Val(s,v)

Функции- Concat(s1,s2,…sm), Length(s),

Функция Pos(S1, S) - обнаруживает позицию подстроки S1 в строке S

Функция copy(S, Pos, N) – выделяет из строки S, начиная с позиции Pos, подстроку длиной n символов

Процедура delete(S, pos, N) – удаляет N символов из строки S, начиная с позиции pos

Процедура insert(S1, S, pos) – вставляет подстроку S1 в строку S, начиная с позиции pos

Вопрос №23 Множественный тип данных. Основные операции над множествами.

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

Множество-это тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые рассматриваются как единое целое.

Type digit= set of 1..5;(of char, of 100. . 120)

Var s:digit;

Объединением двух множеств называется третье множество, включающее все элементы, которые принадлежат хотя бы одному из множеств-операндов, при этом каждый элемент входит в объединение множеств только один раз.- [1,2]+[2,3]=[1,2,3]

 Пересечением множеств называется множество, содержащее все элементы, одновременно входящие в оба множества-операнда. Операция обозначается знаком умножения- [1,2]*[2,3]=[2]

Разностью двух множеств является третье множество, которое содержит все элементы 1-го множества, не входящие во 2-е множество- [1,2]-[2,3]=[1]

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]