Разделы презентаций


Основы программирования на языке Паскаль

Содержание

3 Основы программирования на языке Паскаль 190Работа с переменными символьного и строкового типа данныхПаскаль поддерживает стандартный символьный тип Char

Слайды и текст этой презентации

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

ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

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

Слайд 2 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 Основы программирования на языке Паскаль

Слайд 3 3 Основы программирования на языке Паскаль

191
Так как

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

Слайд 4 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 Основы программирования на языке Паскаль

Слайд 5 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 Основы программирования на языке Паскаль

Слайд 6 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 Основы программирования на языке Паскаль

Слайд 7 3 Основы программирования на языке Паскаль

195
Переменные, описанные

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

Слайд 8 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 }
SubS := Copy(S,3,4); { SubS = ‘love’ }
SubS := Copy(S,100,4); { SubS = ‘’ }
SubS := Copy(S,3,100); { SubS = ‘love you!’ }
Pos(str1,str2:string):byte– обнаруживает первое появление в строке Str2 подстроки Str1. Результатом является номер символа в строке Str2, с которого начинается подстрока Str1. Если фрагмент в строке  не найден, то функция возвращает нуль. 
Сoncat(s1,[s2,...,sn]:string):string Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция.
3 Основы программирования на языке Паскаль

Слайд 9 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 (Str1:string; Str2:string; Poz: integer) – вставка строки Str1 в строку Str2, начиная с позиции Poz.
Примеры:
s := 'Система Pascal'; insert('Turbo ',s,9); {s будет равно 'Система Turbo Pascal'}
…………………..
S := ‘Начало - - Конец’;
SubS := ‘ Середина’;
Insert(SubS, S, 9); { S = ‘Начало - Середина - Конец’ }

3 Основы программирования на языке Паскаль

Слайд 10 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(‘Введите число: ‘);
ReadLn(S); { S: String }
val (S, x, ErrCode); { x: Word }
if ErrCode <> 0 then WriteLn(‘Ошибка! Повторите ввод.’);
3 Основы программирования на языке Паскаль

Слайд 11 3 Основы программирования на языке Паскаль

199
Задача 1:

Дана строка, состоящая из слов, разделенных между собой  одним или несколькими пробелами. Найти длину самого длинного слова.
program zadacha1;
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 Основы программирования на языке Паскаль

Слайд 12 3 Основы программирования на языке Паскаль

200
 Задача 2:

Дана строка, преобразовать ее, заменив в ней каждую точку многоточием.
program zadacha2;
var s1,s2:string; n, m:byte;
begin
write(‘введи строку текста’); readln(s1);
S2 : = ‘’; {пустая строка}
for n : =1 to length(s1) do begin
if s1[n]='.' then begin s2:=s2+‘…‘ else s2 : =s2+s1[n];
end;
writeln(s2);
readln;
end.

3 Основы программирования на языке Паскаль

Слайд 13 3 Основы программирования на языке Паскаль

201
 Задача 3:

Подсчитать в строке количество знаков препинания и количество пробелов
program zadacha3;
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 (c='-') or (s[n]='...') then m:=m+1;
if c =' ' then l:=l+1; end;
writeln(‘количество знаков препинания = ',m);
writeln(‘ количество пробелов = ',l);
readln;
end.
3 Основы программирования на языке Паскаль

Слайд 14 3 Основы программирования на языке Паскаль

202
 Задача 4:

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

Слайд 15 3 Основы программирования на языке Паскаль

203
 

Функции и процедуры

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

3 Основы программирования на языке Паскаль

Слайд 16 3 Основы программирования на языке Паскаль

204
Использование п/п

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

Слайд 17 3 Основы программирования на языке Паскаль

205
В заголовке

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




3 Основы программирования на языке Паскаль

Слайд 18 3 Основы программирования на языке Паскаль

206
Функции
Функция –

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

Слайд 19 3 Основы программирования на языке Паскаль

207
При работе

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

Слайд 20 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 Основы программирования на языке Паскаль

Слайд 21 3 Основы программирования на языке Паскаль

209
 Пример 3

объявления функции, вычисляющей степень xa
Function Step1 (a, x: real) : real; begin step1:=exp(a*ln(x));
end;
Пример вызова функции step1 для вычисления выражения (a + b)-3x :
y := Step1 ((-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;
end;


3 Основы программирования на языке Паскаль

Слайд 22 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(max_2(a, b), c), d);
writeln(m);
End.
3 Основы программирования на языке Паскаль

Слайд 23 3 Основы программирования на языке Паскаль

211

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

3 Основы программирования на языке Паскаль

Слайд 24 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 Основы программирования на языке Паскаль

Слайд 25 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 Основы программирования на языке Паскаль

Слайд 26 3 Основы программирования на языке Паскаль

214
Локальные и

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

Слайд 27 4 Программирование алгоритмов обработки сложных данных

215
Функции и процедуры: Рекурсия
Рекурсия — это такой способ организации вспомогательного

алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения ее операторов обращается сама к себе.
Вообще, рекурсивным называется любой объект, который частично определяется через себя.
Для того чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшее обращение к подпрограмме не происходит.
Приведём примеры рекурсивных определений.
Пример 1. Классический пример, без которого не обходятся ни в одном рассказе о рекурсии, — определение факториала.
С одной стороны, факториал определяется так:
n! = 1 * 2 * 3 *...* n.
  

4 Программирование алгоритмов обработки сложных данных     215Функции и процедуры: РекурсияРекурсия — это такой

Слайд 284 Программирование алгоритмов обработки сложных данных

216


С другой стороны,

Граничным условием в данном случае является n<=1.

Пример 1 рекурсивной функции вычисления факториала
Function factorial(N: integer) : longint;  Begin     If N= 0 then     Factorial := 1     Else Factorial := factorial(N-1) * N  End;

4 Программирование алгоритмов обработки сложных данных           216

Слайд 29 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 Программирование алгоритмов обработки сложных данных     217Пример 2. Выдать на печать в

Слайд 30 4 Программирование алгоритмов обработки сложных данных

218
Функции и процедуры: Рекурсия
Рекурсивные процедуры и функции (подпрограммы) имеют

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

4 Программирование алгоритмов обработки сложных данных     218Функции и процедуры: РекурсияРекурсивные процедуры и

Слайд 31 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) перед текстом функции В содержит только имя функции, а список формальных параметров и тип функции не указываются.

4 Программирование алгоритмов обработки сложных данных     219Функции и процедуры: РекурсияPROCEDURE P(); FORWARD;

Слайд 32Вопросы?

Вопросы?

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика