Лекція № 17 Тема: Операції над динамічними рядками План заняття: Пошук заданого елементу Вилучення заданого елемента з рядка Пошук заданого елемента. Розглянемо процедуру шукання заданого елемента. Попередньо опишемо тип, який відображає рядок символів як динамічну структуру. Складемо логічну функцію виявлення заданого символу в заданому динамічному рядку. Передбачимо як побічний ефект логічної функції шукання елемента вказівку на ланку, яка відповідає першому входженню заданого символу. program Form2; type Link=^LRiad; LRiad=Record Elem: Char; Next: Link; end; function SeekElem(Rjad:Link; Elm:char; var Res:Link): Boolean; var Rb: Link; begin SeekElem:=False; Res:=nil; Rb:=Rjad^.Next; while (Res=nil) and (Rb<>nil) do if Rb^.EIem=Elm then begin SeekElem:=True; Res:=Rb; end else Rb:=Rb^.next; end; begin end. Параметрами функції SeekElem є: вказівна змінна Rjad, що вказує на рядок символів; Elm, що містить шуканий елемент -символ; Res - вказівна змінна-результат, вказує на ланку, що містить шуканий елемент; Rb - робоча змінна вказівного типу. Вилучення заданого елемента з рядка. Описуючи цю процедуру, будемо задавати елемент, який треба вилучити, за допомогою вказівки на ту ланку ланцюга, після якої є елемент, що його потрібно вилучити. Схематично процедуру вилучення зобразимо так. Нехай вихідний ланцюг є (опишемо фрагмент) таким, як показано на рис. 1. Рис. 1. Фрагмент динамічного рядка. Вилучення елемента В треба організувати так, щоб вказівка з ланки А була на ланку С. оминаючи ланку з елементом В (рис. 2). Рис. 2. Вилучення ланки динамічного рядка. Описуючи процедуру вилучення заданого елемента з рядка, передбачимо знищення всієї ланки, що містить цей елемент: program Form3; type Link=^LRiad; LRiad=record Elem: Char; Next: Link; end; procedure DelElem(Lanka: Link); var Rb: Link; begin Rb:=Lanka^.Next; Lanka^.Next:=Lanka^.Next^.Next; dispose(Rb); end; begin end. Знищуємо ланку, що містить шуканий елемент, для економії пам'яті.