Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Рекурсивные функции и процедуры

Case number of

While true do begin

Else begin

Begin

Then begin

Begin

While not eof(f) and not found do

While true do

Begin

Var

Begin

While not eof(f) do

Begin

Procedure print_file

Begin

Begin

Begin

Var

Begin

While true do

Begin

Var

Type

Uses

crt;

person=record

FIO:string[15];

Year:integer;

Salary:real;

end;

f: file of person;

Elem1, Elem2:person; { два элемента файла типа запись }

number: integer;

{ создание файла }

procedure Create_File;

{ Устанавливаем указатель в позицию, определяемую размером файла. Если создается новый файл, то в начало. Если записи добавляются в существующий файл, то в конец }

seek(f, filesize(f));

writeln(‘ Вводите данные о сотрудниках. ’);

writeln(‘ * - выход ’);

write(‘ Фамилия и инициалы ’);

readln(elem1.fio);

if elem1.fio = ‘*’ then break; { выход, если введена * }

write(‘Введите год рождения’);

readln(elem1.year);

write(‘ Введите оклад’ );

readln(elem1.salary);

write(f,elem1);

end;

end;

{ сортировка файла методом пузырька }

procedure sort_file;

i, j: integer;

seek(f,0);

for i:=filesize(f) – 1 downto 1 do { цикл, задающий число проходов }

for j:=0 to i – 1 do

seek(f,j); { указатель на позицию j }

read(f, Elem1, Elem2); { Прочитать две записи }

if elem1.salary > elem2.salary then

seek(f,j); { вернуть указатель }

write(f,elem2,elem1); { поменять местами записи }

end;

end;

{ вывод содержимого файла }

seek(f, 0);

writeln(‘ Фамилия ’:15, ‘ Год’ :5, ‘ Зарплата’ :10);

read(f, Elem1);

writeln(elem1.fio:15,elem1.year:5,elem1.salary:10:2);

end;

readln; { Ожидание нажатия Enter }

end;

{ поиск сотрудников и вычисление среднего оклада }

procedure search_person;

found: boolean; { признак успеха поиска }

s: string[15];

N_persons: integer;

summasalary:real;

N_persons:=0;

Summasalary:=0;

readln(s)’

if s = ‘*’ then break;

found:= false;

seek(f, 0); { Указатель в начало файла }

{ пока не найден сотрудник с введенной фамилией продолжать поиск }

read(f, Elem1);

if (pos(s,elem1.fio) <> 0) and { есть ли в FIO фамилия? }

(elem.fio[length(s) + 1]=’ ‘) { есть ли после нее пробел? }

writeln(elem1.fio:15,elem1.year:5,elem1.salary:10:2);

N_persons:=N_persons + 1;

summasalary:=summasalary + elem1.salary;

found:=true;

end;

end;

if not found then writeln(‘ Такого сотрудника нет ’);

end;

if n_persons<>0 then writeln(‘средний оклад ‘, summasalary/N-persons);

readln;

end;

assign(f,’persons.dat’);

{$I-}

reset(f);

{$I+}

If IOResult=0 then writeln(‘ Добавление записей в существующий файл ’);

rewrite(f);

writeln(‘ Запись в новый файл ’);

end;

readln;

{ бесконечный цикл, обеспечивающий вывод на экран пунктов меню }

clrscr;

writeln(‘ 1 – создание файла ’);

writeln(‘ 2 – сортировка файла ’);

writeln(‘ 3 – вывод содержимого файла ’);

writeln(‘ 4 – Поиск сотрудников и вычисление среднего оклада ’);

writeln(‘ 5 – создание файла ’);

readln(Number);

1:create_file;

2:sort_file;

3:print_file;

4:search_persons;

5:exit;

end;

end;


ЛЕКЦИЯ №18

Рекурсивной называется функция или процедура, в тексте которой имеется обращение к самой себе.

Рассмотрим вычисление факториала целого числа

factorial:=1;

for i:=2 to n do factorial:=factorial * i;

Здесь сначала вычисляется 1!=1, потом 2!=1!*2, потом 3!=2!*3 и т.д. Таким образом вычисление факториала сводится к многократному применению формулы n!=(n-1)!*n. Эта формула является рекурсивной, т.к. определяет факториал. Однако способ вычисления не является рекурсивным и представлен восходящим вычислительным процессом, т.е. вычисляется 1!, потом 2! И т.д.

Рекурсивное вариант можно получить, используя нисходящий вычислительный процесс, т.е. «вычислим (n-1)! И полученное значение умножим на n» При вычислениее (n-1)! Применим тоже правило «вычислим (n-2)! И полученное значение умножим на n-1». Условие завершения рекурсии n=0 и факториал 0!=1

function factorial(n:integer):longint;

<== предыдущая лекция | следующая лекция ==>
Примеры. Прямой доступ к бинарным файлам | Предмет и задачи психологии
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 286; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.