КАТЕГОРИИ: Архитектура-(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; Просмотров: 314; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |