КЕМЕРОВСКИЙ ИНСТИТУТ (филиал) РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ

Скачать презентацию КЕМЕРОВСКИЙ ИНСТИТУТ (филиал) РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ Скачать презентацию КЕМЕРОВСКИЙ ИНСТИТУТ (филиал) РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ

Лекция_Информатика_9_Б.ppt

  • Количество слайдов: 32

>  КЕМЕРОВСКИЙ ИНСТИТУТ (филиал) РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ     УНИВЕРСИТЕТ КАФЕДРА КЕМЕРОВСКИЙ ИНСТИТУТ (филиал) РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТОРГОВО-ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Информатика и программирование Лебедева Т. Ф.

> 3 Основы программирования на языке Паскаль    190 Работа с переменными 3 Основы программирования на языке Паскаль 190 Работа с переменными символьного и строкового типа данных Паскаль поддерживает стандартный символьный тип Char и динамические строки, описываемые типом String или String[n]. Символьный тип данных (char). Описание: var S: char; Значение типа Char – это непустой символ из алфавита компьютера, заключенный в одиночные кавычки. Кроме этой классической формы записи Turbo Pascal вводит еще два способа: 1) представление символа его кодом ASCII (American Standart Code for Interchange Information), для этого используется префикс #, например, #97 для символа ‘a’ или #65 – ‘A’; для управляющих символов коды в диапазоне от 0 до 31: #13 – клавиша Enter, #32 -Символ «пробел» 2) представление символа его клавиатурным обозначением: ‘G’, ‘+’, ‘>’ Примечание: Символы с кодами от 0 до 127 представляют так называемую основную таблицу кодов ASCII. Эта часть идентична на всех IBM-совместимых компьютерах. Коды с символами от 128 до 255 представляют национальную часть – в России коды русских букв (кириллицу).

> 3 Основы программирования на языке Паскаль    191 Так как символы 3 Основы программирования на языке Паскаль 191 Так как символы языка упорядочены, то к символьным данным применимы операции сравнения. Операция сравнения осуществляется следующим образом: из двух символов меньше тот, который встречается в таблице ASCII раньше (т. е. код его меньше). Например: ‘B’ > ‘A’ Иногда в программах возникает необходимость по коду определить символ и, наоборот, по символу определить его код. Для этого используют функции: Функция CHR ( X: Byte) : Char Эти функция возвращают символ, соответствующий ASCII -коду числа X. Для определения кода по символу используют функцию ORD. Функция ORD ( C: Char) : Byte Функция UPCASE ( C: Char) : Char - преобразует символ из строчного в прописной. Эта функция рассчитана на обработку только одного символа. Она не преобразует символы кириллицы (русские буквы).

> 3 Основы программирования на языке Паскаль    192 Работа с переменными 3 Основы программирования на языке Паскаль 192 Работа с переменными символьного и строкового типа данных Паскаль поддерживает стандартный символьный тип Char и динамические строки, описываемые типом String или String[n]. Символьный тип данных (char). Описание: var S: char; Значение типа Char – это непустой символ из алфавита компьютера, заключенный в одиночные кавычки. Кроме этой классической формы записи Turbo Pascal вводит еще два способа: 1) представление символа его кодом ASCII (American Standart Code for Interchange Information), для этого используется префикс #, например, #97 для символа ‘a’ или #65 – ‘A’; для управляющих символов коды в диапазоне от 0 до 31: #13 – клавиша Enter, #32 -Символ «пробел» 2) представление символа его клавиатурным обозначением: ‘G’, ‘+’, ‘>’ Примечание: Символы с кодами от 0 до 127 представляют так называемую основную таблицу кодов ASCII. Эта часть идентична на всех IBM-совместимых компьютерах. Коды с символами от 128 до 255 представляют национальную часть – в России коды русских букв (кириллицу).

> 3 Основы программирования на языке Паскаль    193 Строка – это 3 Основы программирования на языке Паскаль 193 Строка – это последовательность символов, не превышающая 255 -ти символов. Строковые константы обязательно заключается в апострофы. Переменные типа STRING могут быть объявлены следующим образом: var s: string [n]; var s: string; n- максимально возможная длина строки- целое число в диапазоне 1. . 255. Переменные типа STRING объявляется, как правило, путем указания имени переменной, зарезервированного слова STRING и указания (в квадратных скобках) максимального размера (длины) строки, которая может хранится в этой переменной. Если максимальный размер строки не указан, то он автоматически принимается равным 255 - максимально возможной длине строки. Пример. Var s: string; {описание идентификатора s как строковую переменную} Begin s: =’Привет’; {задание значения строковой переменной} Writeln(s); {распечатка на экране слова "Привет"} end.

> 3 Основы программирования на языке Паскаль    194   3 Основы программирования на языке Паскаль 194 Операции со строками В Турбо Паскале существуют два пути обработки переменных типа STRING. Первый путь предполагает обработку всей строки как единого целого, т. е. единого объекта. Второй путь рассматривает строку как составной объект, состоящий из отдельных символов, т. е. элементов типа CHAR , которые при обработке доступны каждый в отдельности. Тип String -это массив символов Аrray [0. . 255] of char. В нулевом элементе строки хранится ее длина (динамическая «переменная» ). Например, var st: string i : = ord(st [0] ) ; {i – текущая длина строки} Так, первый путь предоставляет возможность присвоения значения строчной переменной за одну операцию. Строковые константы записываются как последовательности символов, ограниченные апострофами. Пример: ' Текстовая строка ' Пустой символ обозначается двумя подряд стоящими апострофами. Если апостроф входит в сроку как литера, то при записи он удваивается. В Турбо Паскале имеется простой доступ к отдельным символам строковой переменной: i-й символ переменной st записывается как st [ i ]. Например если st-это 'Строка', то st [1]-это 'С', st[2]-это 'т', st[3]-это 'р' и так далее.

> 3 Основы программирования на языке Паскаль    195 Переменные, описанные как 3 Основы программирования на языке Паскаль 195 Переменные, описанные как строковые с разными максимальными длинами, можно присваивать другу, хотя при попытке присвоить короткой переменной длинную лишние символы будут отброшены. Выражения типа CHAR можно присваивать любым строковым переменным. Над строковыми данными определена операция слияния (конкантенации), обозначаемая знаком +. Например: a : = ' Turbo'; b : = ' Pascal '; c : = a+b; В этом примере переменная c приобретет значение ' Turbo. Pascal '. Кроме слияния над строками определены операции сравнения <, >, <=, >=, =. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0. Результат выполнения операций отношения над строками имеет логический тип, т. е. принимает значения True или False. ‘папа’ > ‘мама’ ‘Иванова’ > ‘Иванов’ ‘мука’ <> ‘ мука’ При вводе переменных строкового типа рекомендуется каждую переменную вводить одним оператором Read. Ln (не Read) Например, необходимо ввести имя, фамилию и отчество Write (‘введи фамилию’); Read. Ln(Fam); Write (‘введи имя’); Read. Ln(Imya); Write (‘’введи отчество); Read. Ln(Otch);

> 3 Основы программирования на языке Паскаль    196 Стандартные функции обработки 3 Основы программирования на языке Паскаль 196 Стандартные функции обработки строк Length(s: string): integer – возвращает в качестве результата размер в символах строки S. Пример. n : = length('Pascal'); {n будет равно 6} Сору(st: string; Poz: integer; N: integer ): string– выдает подстроку, выделенную из строки St, длиной N символов начиная с позиции Poz. Пример. S : = ‘I love you!’ {длина = 11 } Sub. S : = Copy(S, 3, 4); { Sub. S = ‘love’ } Sub. S : = Copy(S, 100, 4); { Sub. S = ‘’ } Sub. S : = Copy(S, 3, 100); { Sub. S = ‘love you!’ } Pos(str 1, str 2: string): byte– обнаруживает первое появление в строке Str 2 подстроки Str 1. Результатом является номер символа в строке Str 2, с которого начинается подстрока Str 1. Если фрагмент в строке не найден, то функция возвращает нуль. Сoncat(s 1, [s 2, . . . , sn]: string): string Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция.

> 3 Основы программирования на языке Паскаль    197 Стандартные процедуры обработки 3 Основы программирования на языке Паскаль 197 Стандартные процедуры обработки строк Delete (st: string; Poz: integer; N: integer) – удаление N символов из строки St, начиная с позиции Poz. Так оператор Delete(Words, 2, 3); удаляет из строки Words фрагмент, состоящий из трех символов и начинающийся со второй позиции. Примеры: s : = 'Система Turbo Pascal'; delete(s, 8, 6); {s будет равно 'Система Pascal'} ……………………. . S : = ‘Коля’; Delete(S, 1, 1); { S = ‘оля’ } Delete(S, 100, 3); …………. Delete(‘Попробуй удали!’, 3, 8); { Ошибка! S не может быть константой } Insert (Str 1: string; Str 2: string; Poz: integer) – вставка строки Str 1 в строку Str 2, начиная с позиции Poz. Примеры: s : = 'Система Pascal'; insert('Turbo ', s, 9); {s будет равно 'Система Turbo Pascal'} …………………. . S : = ‘Начало - - Конец’; Sub. S : = ‘ Середина’; Insert(Sub. S, S, 9); { S = ‘Начало - Середина - Конец’ }

> 3 Основы программирования на языке Паскаль    198  Str ( 3 Основы программирования на языке Паскаль 198 Str ( n [: <размер>: <точность>], St) – преобразование числового значения n в строковое значение. Параметры “размер” и “точность” у числового значения имеют тот же смысл и задаются точно так же, как в операторе вывода данных. Результат преобразования данных помещается в строку St. Примеры: Str(3. 1415: 7 : 2, S ); { S = ‘_ _ _ 3. 14’ } Str(P: 7, S); { P: Word = 4433; S = ‘_ _ _ 4433’ } Val (St, n, Cod) – преобразование числового значения из строкового представления St в значение целого или вещественного типа. Результат помещается в числовую переменную n. Cod - переменная целочисленного типа, в которую заносится признак завершения операции преобразования данных. В случае успешного завершения преобразования данных переменная Cod будет содержать значение 0, в противном случае в ней будет записан номер символа строки, не соответствующий формату строкового представления числовых данных. Пример: Write(‘Введите число: ‘); Read. Ln(S); { S: String } val (S, x, Err. Code); { x: Word } if Err. Code <> 0 then Write. Ln(‘Ошибка! Повторите ввод. ’);

> 3 Основы программирования на языке Паскаль    199 Задача 1: Дана 3 Основы программирования на языке Паскаль 199 Задача 1: Дана строка, состоящая из слов, разделенных между собой одним или несколькими пробелами. Найти длину самого длинного слова. program zadacha 1; var stroka: string; n, m, dlina: byte; kv: integer; begin write(‘введи строку из слов, разделенных пробелами’); readln(stroka); n: =0; m: = 0; dlina: =0; repeat n: =n+1; if stroka[n]<>‘ ' then begin m: =m+1; if m >=dlina then dlina: =m; end; if stroka[n] =' ' then m: =0; until n = length(stroka); writeln(dlina); readln; end.

> 3 Основы программирования на языке Паскаль    200  Задача 2: 3 Основы программирования на языке Паскаль 200 Задача 2: Дана строка, преобразовать ее, заменив в ней каждую точку многоточием. program zadacha 2; var s 1, s 2: string; n, m: byte; begin write(‘введи строку текста’); readln(s 1); S 2 : = ‘’; {пустая строка} for n : =1 to length(s 1) do begin if s 1[n]='. ' then begin s 2: =s 2+‘…‘ else s 2 : =s 2+s 1[n]; end; writeln(s 2); readln; end.

> 3 Основы программирования на языке Паскаль    201  Задача 3: 3 Основы программирования на языке Паскаль 201 Задача 3: Подсчитать в строке количество знаков препинания и количество пробелов program zadacha 3; var s : string; c: char; n, m, l: integer; Begin write(‘введи строку’); readln(s); m: = 0; l : = 0; for n: =1 to length(s) do begin c : = s[n]; if (c='!') or (c=': ') or (c='; ') or (c=', ') or (c='? ') or (c='-') or (s[n]='. . . ') then m: =m+1; if c =' ' then l: =l+1; end; writeln(‘количество знаков препинания = ', m); writeln(‘ количество пробелов = ', l); readln; end.

> 3 Основы программирования на языке Паскаль    202  Задача 4: 3 Основы программирования на языке Паскаль 202 Задача 4: Определить, является ли строка "Палиндромом". Если нет, то выяснить, станет ли она "палиндромом" после удаления из нее всех пробелов program zadacha 4; var s, s 1, s 2 : string; n, m: byte; begin write(‘введи строку’); readln(s); s 1: =''; {пустая строка} for n : = length(s) downto 1 do s 1: =s 1+s[n]; if s 1=s then writeln('Palindrom') else begin s 1: =''; m : = 0; for n: =1 to length(s) do begin s 1: =s 1+s[n]; if s[n]=' ' then begin delete(s 1, n-m, 1); m: =m+1; end; s 2: =''; for n : = length(s 1) downto 1 do s 2: =s 2 + s 1[n]; if s 2=s 1 then writeln('Stala polindromom posle udaleniya probelov'); end; readln; end.

> 3 Основы программирования на языке Паскаль    203   3 Основы программирования на языке Паскаль 203 Функции и процедуры Подпрограммой (п/п) называется поименованная, логически законченная группа операторов языка, которую можно запустить на выполнение по имени любое количество раз из различных мест программы. В языке Паскаль существуют подпрограммы двух видов: процедуры и функции. Процедуры и функции дают возможность снабдить последовательность операторов именем и обращаться к ней с помощью этого имени из любых частей программы. Подпрограммы решают три важные задачи: 1) избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты; 2) улучшают структуру программы, облегчая ее понимание; 3) повышают устойчивость к ошибкам программирования и непредвидимым последствиям при модификациях программы.

> 3 Основы программирования на языке Паскаль    204 Использование п/п оправдано 3 Основы программирования на языке Паскаль 204 Использование п/п оправдано в следующих случаях: 1) Последовательность операторов повторяется в программе несколько раз с различными параметрами. 2) Большая программа разделяется на части, реализующие отдельные подзадачи, что делает эту программу более обозримой, надежной и удобной для отладки. 3) В виде п/п представляются стандартные, часто используемые алгоритмы, которые могут быть использованы в любых программах. В языке Паскаль существут стандартные процедуры и функции, используемые нами ранее, например: delete, sin, clrscr, ord, copy, odd, inc, trunc, read и т. д. Стандартная подпрограмма (процедура или функция) - подпрограмма, включенная в библиотеку программ ЭВМ, доступ к которой обеспечивается средствами языка программирования. Вызывается она по имени с заданием фактических параметров определенного типа. Стандартные процедуры и функции расположены в модулях System, Graph, Crt. Подпрограммы, определяемые пользователем, имеет такой же набор разделов, как и основная программа.

> 3 Основы программирования на языке Паскаль    205 В заголовке п/п 3 Основы программирования на языке Паскаль 205 В заголовке п/п используются формальные параметры. Формальные параметры – это список входных и выходных параметров, через которые подпрограмма осуществляет взаимодействие с основной программой. Формальные параметры удовлетворяют следующим требованиям: при вызове п/п заменяются фактическими; резервируют место под фактические параметры; при вызове фактические параметры должны совпадать с формальными параметрами по: числу, типу, месту в списке;

> 3 Основы программирования на языке Паскаль    206   3 Основы программирования на языке Паскаль 206 Функции Функция – это подпрограмма, вызываемая в выражениях в качестве операнда и вычисляющая значение данных простого типа. Функция может содержать параметры, осуществляющие ее взаимодействие с основной программой. Формат объявления функции: Function <имя функции> [(формальные параметры)] : <тип результата>; [<разделы объявления локальных данных>] begin <исполняемый раздел> end; где тип результата – тип данных возвращаемого результата, один из простых типов. В точке вызова функции происходит неявное присваивание фактических значений формальным переменным, имена которых перечислены в заголовке функции при ее описании. В разделе операторов функции обязательно должен присутствовать оператор присваивания вида: <имя функции>: =<выражение>; Этот оператор определяет значение, которое будет возвращено функцией в точку ее вызова. Пример 1 объявления функции, вычисляющей сумму трех чисел: Function Summa (x, y, z: real) : real;

> 3 Основы программирования на языке Паскаль    207 При работе с 3 Основы программирования на языке Паскаль 207 При работе с п/п рекомендуется использовать инструкцию, которую обычно размещают в виде комментариев Инструкция при работе с подпрограммами 1) Назначение подпрограммы, используемые методы 2) Классификация параметров: а) входные параметры б) выходные параметры в) внутренние параметры 3) Другие подпрограммы, вызываемые данной подпрограммой

> 3 Основы программирования на языке Паскаль    208 Запуск функции на 3 Основы программирования на языке Паскаль 208 Запуск функции на исполнение осуществляется указанием имени функции и списка фактических параметров, отделенных друг от друга запятыми и заключенных в круглые скобки. Формат вызова функции: <имя функции> [(фактические параметры)] Пример вызова функции Summa: k : = Summa (a, b, 7) / Sin (a – b); В качестве фактических параметров могут быть выражения. Пример 2 объявления функции, вычисляющий десятичный логарифм Function Lg(z: real) : real; {вычисление десятичного логарифма} begin {z – входной параметр; lg – выходной параметр} lg : = ln(z)/ln(10); end; Пример вызова функции lg: y : = (lg(3*x)+2*lg(a))/ (lg(a+b) – lg(sqr(x)));

> 3 Основы программирования на языке Паскаль    209 Пример 3 объявления 3 Основы программирования на языке Паскаль 209 Пример 3 объявления функции, вычисляющей степень xa Function Step 1 (a, x: real) : real; begin step 1: =exp(a*ln(x)); end; Пример вызова функции step 1 для вычисления выражения (a + b)-3 x : y : = Step 1 ((-3*x), (a+b)); Пример 4 объявления функции arcsin: Function arcsin (x: real) : real; var a: real; Begin If abs(x)=1 then a: =0 else a: = ( x / sqrt(1 - x*x)); arcsin: =a; end; Пример 5 объявления функции, которая возводит вещественное число в целую степень Function power (x: real; n: integer) : real; {возведение вещественного числа в целую степень} var t: real; c : integer {вх. параметры: x - основание, n- показатель, вых. параметр – power, внут. параметры – t, с} begin if n = 0 then power : =1 else begin t : =x; For c: = 2 to abs(n) do t: = t * x; if n < 0 then power : = 1/t else power : = t; end;

> 3 Основы программирования на языке Паскаль    210 Пример 6. Найти 3 Основы программирования на языке Паскаль 210 Пример 6. Найти максимальное из 4 -х чисел. Program max_4; uses crt; var a, b, c, d, m: integer; function max_2(x, y: integer): integer; {нахождение максимального из двух чисел} var max: integer; {в. параметры -x, y; вых. параметр - max_2; внутр. - max} begin if x>y then max: =x else max: =y; max_2: =max; end; Begin clrscr; readln(a, b, c, d); m: =max_2(max_2(a, b), c), d); writeln(m); End.

> 3 Основы программирования на языке Паскаль    211   3 Основы программирования на языке Паскаль 211 Процедуры Процедура – это подпрограмма, запускаемая на выполнение из программы оператором вызова процедуры и осуществляющая связь с основной программой через параметры. Формат объявления процедуры: Procedure <имя процедуры> [(<список входных параметров>[; var <выходные параметры>])]; [<разделы объявления локальных данных>] begin <исполняемый раздел> end; где <имя> - идентификатор процедуры (те же ограничения, что и для функции); <список параметров> - список аргументов процедуры с указанием их типов (список параметров- значений); var <выходные параметры>- имя параметров- переменных, т. е. тех переменных, значение которых будет возвращено в точку вызова процедуры. Процедура может не содержать никаких параметров. В этом случае выполняются операторы, стоящие в теле процедуры. Если же в заголовке процедуры указаны параметры, то в точке вызова процедуры происходит неявное присваивание фактических значений параметрам-значениям (входным параметрам), а по окончании действия процедуры в точку вызова возвращаются значения параметров-переменных (выходных параметров). Формальные параметры в заголовке процедуры отделяются друг от друга точкой с запятой. Каждый формальный параметр задаются в формате:

> 3 Основы программирования на языке Паскаль    212 Разделы объявления данных 3 Основы программирования на языке Паскаль 212 Разделы объявления данных и исполняемый раздел имеют такой же смысл и формат, как и в программе. Пример объявления процедуры: Procedure proc (a : integer; var b, c : integer); begin if a > 5 then b : = a else c : = a end; В процедуре proc объявлен параметр-значение а и параметры- переменные b и с целого типа. Запуск процедуры на исполнение осуществляется оператором вызова процедуры. Он состоит из имени процедуры и списка фактических параметров, отделенных друг от друга запятыми и заключенных в круглые скобки. Формат оператора вызова процедуры: <имя процедуры> [(фактические параметры)]; Пример вызова процедуры proc: proc (10, y, z); Список фактических параметров должен отсутствовать, если в заголовке объявления процедуры отсутствовал список формальных параметров. Каждый фактический параметр должен соответствовать (в порядке следования) формальному параметру, указанному в заголовке, и иметь тот же тип.

> 3 Основы программирования на языке Паскаль    213 Пример 2. 3 Основы программирования на языке Паскаль 213 Пример 2. Найти максимальное из 4 -х чисел. Program max_4; uses crt; var a, b, c, d, m: integer; {в процедуре находится максимальное из 2 -х чисел x, y. Результат - max } procedure max_2(x, y: integer; var max: integer); begin if x>y then max: =x else max: =y; end; Begin clrscr; readln(a, b, c, d); max_2(a, b, m); max_2(m, c, m); max_2(m, d, m); writeln(m); End.

> 3 Основы программирования на языке Паскаль    214 Локальные и глобальные 3 Основы программирования на языке Паскаль 214 Локальные и глобальные переменные. Переменные описываются в программе в разделе описания переменных. Если же программа содержит описание процедуры или функции, то некоторые переменные могут быть описаны в этой процедуре или функции в разделе локальных описаний. Глобальными называются переменные, объявленные в основной программе и доступные как программе, так и всем ее подпрограммам. Ими можно пользоваться и в главной программе, и в процедуре или функции. Локальными называются переменные, объявленные внутри подпрограммы и доступные только ей самой. Ими можно пользоваться только в той процедуре или функции, где они описаны. Вне тела процедуры или функции значения таких переменных не определены. Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных. При использовании локальных переменных необходимо следить за тем, чтобы их идентификаторы не совпадали с именами глобальных переменных. Если процедура или функция изменяет значение глобальной переменной, то говорят, что она имеет побочный эффект.

> 4 Программирование алгоритмов обработки сложных данных   215 Функции и процедуры: 4 Программирование алгоритмов обработки сложных данных 215 Функции и процедуры: Рекурсия — это такой способ организации вспомогательного алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения ее операторов обращается сама к себе. Вообще, рекурсивным называется любой объект, который частично определяется через себя. Для того чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшее обращение к подпрограмме не происходит. Приведём примеры рекурсивных определений. Пример 1. Классический пример, без которого не обходятся ни в одном рассказе о рекурсии, — определение факториала.

>4 Программирование алгоритмов обработки сложных данных   216     4 Программирование алгоритмов обработки сложных данных 216 С другой стороны, Граничным условием в данном случае является n<=1. Пример 1 рекурсивной функции вычисления факториала Function factorial(N: integer) : longint; Begin If N= 0 then Factorial : = 1 Else Factorial : = factorial(N-1) * N End;

> 4 Программирование алгоритмов обработки сложных данных   217   Функции и 4 Программирование алгоритмов обработки сложных данных 217 Функции и процедуры: Рекурсия Пример 2. Выдать на печать в обратном порядке цифры целого положительного числа N. Составим процедуру REVERSE. PROCEDURE REVERSE (N: integer); Begin Write (N mod 10); If (N Div 10)<>0 Then REVERSE (N Div 10) END; Рассмотрим работу этой процедуры для числа N = 153. Оператор Write(N mod 10) выведет на экран остаток от деления 153 на 10, то есть 3. Оператор IF (N DIV 10)<>0 Then REVERSE (N DIV 10) проверяет целую часть частного 153/10 = 15 на ноль. Если целая часть не ноль, то с этим значением (15) идет вновь обращение к процедуре REVERSE. Оператор Write (N MOD 10) выводит на экран остаток от деления 15 на 10, т. е. 5; затем со значением 15/10 = 1 идет обращение к REVERSE. После вывода цифры 1 оператором Write (N MOD 10) проба N DIV 10 на ноль передает управление на конец процедуры. На экране будет записано число 351. Таким образом, однократное обращение извне к процедуре REVERSE вызвало ее трехкратное срабатывание. Условие полного окончания должно находиться в самой процедуре, иначе произойдет зацикливание.

> 4 Программирование алгоритмов обработки сложных данных   218  Функции и процедуры: 4 Программирование алгоритмов обработки сложных данных 218 Функции и процедуры: Рекурсия Рекурсивные процедуры и функции (подпрограммы) имеют одну из двух форм: прямую рекурсию и косвенную рекурсию. В первом случае подпрограмма содержит оператор вызова этой же подпрограммы (как в примере с процедурой REVERSE). Во втором случае одна подпрограмма вызывает другую подпрограмму, которая либо сама, либо посредством других процедур или функций вызывает исходную подпрограмму. Если А, В - имена подпрограмм, то схема вызова может быть такой: А-В-А. В случае косвенной рекурсии возникает проблема: как и где описать вызываемую подпрограмму. По правилам языка Паскаль каждая подпрограмма должна быть описана до её вызова. Но если подпрограмма А вызывает В, а В вызывает А, то получается замкнутый круг. Для подобных ситуаций принято следующее правило: одна из рекурсивных подпрограмм, вызывающих друга, описывается предварительно следующим образом:

> 4 Программирование алгоритмов обработки сложных данных   219  Функции и процедуры: 4 Программирование алгоритмов обработки сложных данных 219 Функции и процедуры: Рекурсия PROCEDURE P(<Список формальных параметров>); FORWARD; Здесь P - имя процедуры, FORWARD - ключевое слово. Это описание указывает транслятору, что текст процедуры Р помещен ниже. Подобным же образом описывается функция: к оператору FUNCTION добавляется слово FORWARD. Список формальных параметров и тип результата (для FUNCTION) включается только в это предварительное описание и опускается в заголовке соответствующей функции. Пример3. Пусть функция В при работе вызывает функцию А которая, в свою очередь, вызывает функцию В. Тогда эти модули можно описать так: FUNCTION B(X: INTEGER): REAL; FORWARD; FUNCTOIN A(Y: INTEGER): REAL; BEGIN…………. A: =B(I)+3. 5; END; FUNCTION B; BEGIN. . B: =A(D)-1. 8; END; Заголовок (FUNCTON B) перед текстом функции В содержит только имя функции, а список формальных параметров и тип функции не указываются.

>Вопросы? Вопросы?