- •Центр Компьютерного Обучения
- •Подпрограммы: процедуры.
- •1. Структурное программирование и технология нисходящего программирования.
- •2. Подпрограммы в языке Pascal. Понятие «процедура».
- •3. Формальные и фактические параметры.
- •4. Параметры-значения и параметры-переменные (входные и выходные параметры) подпрограмм, механизм передачи параметров (можно перенести на Занятие 2, если не хватит времени).
- •5. Локальные и глобальные переменные, область действия переменных
- •Подпрограммы: функции
- •Функция не имеет выходных параметров, она возвращает единственное значение (результат);
- •Рекурсия
- •Строковый тип данных – String
- •6. Для обработки строковых данных можно использовать стандартные процедуры и функции, описание которых можно найти в [1] или в любом справочнике по Pascal.
- •1. Общие сведения.
- •5. Доступ к компонентам файла.
- •Дополнительно (на усмотрение преподавателя!!!) процедуры Rename и Erase.
- •Текстовые файлы
- •1. Назначение.
- •Типизированные файлы
- •Динамические структуры данных
- •1. Статическая и динамическая память.
- •Распределение памяти.
- •2. Статические и динамические переменные.
- •Статическая переменная:
- •4. Доступ к переменной по указателю.
- •5. Управление динамической памятью (процедуры New и Dispose).
- •Формирование с помощью указателей однонаправленного списка по принципу стека, поиск элемента
- •Однонаправленный список
- •Пояснения к программе
- •Формирование с помощью указателей однонаправленного списка по принципу «очереди», поиск элемента
- •Пояснения к программе
- •Удаление элемента из линейного однонаправленного списка
Формирование с помощью указателей однонаправленного списка по принципу стека, поиск элемента
Динамическая память позволяет реализовать широко используемую в некоторых программах организацию данных в виде списков (рис. 2).
Однонаправленный список
Каждое звено списка имеет информационное поле и указатель на следующее звено. В указатель последнего звена списка записывается Nil – это является концом списка.
Списки могут быть сформированы двумя способами:
по принципу стека (звенья в списке будут следовать в порядке, обратном порядку их поступления);
по принципу «очереди» (звенья в списке будут следовать в порядке их поступления).
Использование указателей в такой организации данных позволяет достаточно просто вносить в нее изменения. Так, например, легко вставить новое звено на любое место, расширить список, удалить звено с любого места и т. д. Такие операции для элементов массива могут встретить огромные трудности.
Подобные спискам структуры данных, состоящие из динамических переменных, связанных между собой с помощью указателей, называются динамическими, поскольку их размеры могут свободно увеличиваться и уменьшаться.
Задача
Написать программу, включающую в себя подпрограммы формирования линейного списка по принципу стека, поиска в списке L звена с первым вхождением элемента Е, если такой есть, вывода списка на экран. Значения информационных полей и искомый элемент Е – значения типа Integer. Сформированный по принципу стека список
Program Primer1; Uses Crt; Type Spisok = ^ Zveno; Zveno = Record Elem : Integer; Next : Spisok; End; Var L : Spisok; E : Integer; Procedure Form(Var L1 : Spisok); Var Sym : Char; X : Spisok; Begin X:=Nil; Repeat New(L1); Writeln(‘Введите элемент звена’); Readln(L1^.Elem); L1^.Next:=X; X:=L1; Write(‘Будете вводить еще (Y/N)’); Readln(Sym); Until Upcase(Sym)=’N’; End; Procedure Search(L1: Spisok; E1: Integer); Var Flag : Boolean; Begin Flag:=False; While (L1 <> Nil) and (not Flag) Do If L1^.Elem = E Then Flag:=True; Else L1:=L1^.Next; If Flag Then Writeln(‘Е=’,E,’ найден’); Else Writeln(‘Е=’,E,’ не найден’); End; Procedure Wywod(L1 : Spisok); Var P : Spisok; Begin P:=L1; While P <> Nil Do Begin Write(P^.Elem,’ ‘); P:=P^.Next; End; Writeln; End; Begin Clrscr; Form(L); Writeln(‘Вывод исходного списка’); Wywod(L); Writeln(‘Е – искомый элемент’); Writeln(‘Введите Е>’); Readln(E); Search(L,E); Readkey; End. |
{тип – указатель на тип-запись} {тип - запись} {информационное поле записи} {указатель на следующее звено списка}
{указатель} {искомый элемент списка} {процедура формирования списка} {по принципу стека} {ответ о продолжении формирования списка} {рабочая переменная}
{см. пояснения к программе ниже}
{заем памяти из кучи}
{конец процедуры Form} {процедура поиска элемента Е}
{флаг того, что Е был найден}
{элемент Е еще не найден} {пока не конец списка и не найден Е} {если текущий элемент равен Е} {то установка флага} {иначе переход к следующему элементу} {если Е был найден} {то вывод «Элемент Е найден»} {иначе вывод «Элемент Е не найден»} {конец процедуры Search} {процедура вывода списка на экран}
{конец процедуры вывода списка} {начало основной программы} {очистка экрана} {формирование списка (стек)}
{вывод исходного списка на экран}
{ввод элемента Е для поиска} {поиск элемента Е } {ожидание нажатия любой клавиши} {конец программы} |
