Связанное представление списков.
Обычно список реализуется в виде множества структур, содержащих элемент списка и один (для однонаправленного) или два (для двунаправленного) указателя на следующий и предыдущий элемент соответственно
13.Что такое "рекурсия", "база рекурсии"? Пример.
Рекурсивный тип данных (РТД) – это СД, которая определяется как некоторая известная СД (она считается порождающей СД для этого РТД), некоторые или все элементы которой относятся к определяемой СД.
Например: РТД «генеалогическое древо» определяется как СД запись с полями «ФИО», «отец» и «мать», где поля «отец» и «мать» - тоже являются генеалогическими древами.
Очевидно, что РТД по определению всегда должне быть бесконечен, поэтому всегда неявно предполагается, что специальное значение «неопределено» тоже является правильным РТД (независимо от его описания). Это значение используется для обрыва бесконечной рекурсии (например, в генеалогическом древе «неопределено» указывается, когда предок неизвестен и это значение обрывает «рост» древа). Рекурсивная подпрограмма- использует (вызывает) сама себя. Следствия: Рекурсивная подпрограмма обычно выполняется многократно
Рекурсивная подпрограмма напоминает цикл, следовательнод.б. аналогичные понятия инварианта для рекурсивной подпрограммы, но после конца тела цикла, всегда следует его начало, поэтому постусловие тела цикла должны совпадать с его предусловием (это и есть инвариант). Для рекурсивной подпрограммы это не так (вызовы РП делаются в произвольном месте, а не после конца тел подпрограммы), следовательно, для РП надо задать № инварианта: прединвариант и постинвариант, т.е. условие, которое верно перед каждым и после каждого вызова РП. Прединвариант и постинвариант для подпрограммы напоминает условия контракта: если перед вызовом подпрограммы веренпрединвариант, то подпрограмма гарантирует выполнение постинварианта. При каком-нибудь выполнении подпрограммы она не должна вызывать саму себя, т.е. должна быть сикурсия, не требующая рекурсивного вызова (база рекурсий).
Для решения задачи РП вызывается несколько раз – каждый вызов решает некоторую часть. Первый вызов включает в себя все остальные, т.е. решает всю задачу, следовательно, формулировка задачи должна подходить и к исходной задаче, и к ее частям. Но каждому вызовы РП надо сообщить, какую именно задачу из обобщенного класса она решает. Это сообщается через параметры, следовательно, РП практически всегда имеет параметры.
При составлении рекурсивного алгоритм, исходят из того, что уже есть решение упрощенных задач такого же типа и вместо этого решения пишется его краткое обозначение, т.е. вызов самой РП с соответствующими параметрами.
Пример: Разменять произвольную сумму S «укороченным» списком купюр, т.е. купюрами начиная с номера N1. S и N1 являются параметрами алгоритма.
База рекурсии: если N1>KKK,
то результат <- нет
Иначе если N1=KKK, то
Осталось одна купюра
Результат <- (DX(N1)=S)
U(N1) <- (DX(N1)=S)
Иначе если можно разменять S купюр начиная с (N1 + 1),
То задача решена (купюра N1 не потребовалась)
U(N1) <-нет
Результат <- да
Иначе без купюр N1 невозможно разменять S, следовательно, купюру надо использовать
U(N1) <-да
Результат <- можно разменять S – DK(N1) купюр начиная с (N1+1)
14.Что такое "диалоговая форма"? Что такое "элемент управления"? Как поместить его на форму? Что такое "программное имя объекта"? Как его задать?
При работе в Excel, как и в большинстве, других приложениях,приходиться сталкиваться с такими элементами интерфейса, как диалоговые окна. Диалоговые окна используются повсеместно для получения информации для ввода и вывода сообщений и данных. Одним из объектов VBA, объектом визуализации являются UserForm - пользовательские формы.
Пользовательские формы UserForm - это диалоговые окна интерфейса процедур VBA. С их помощью пользователь может эффективно передавать данные в процедуры и получать результаты
их работы.
Пользовательские формы дают возможность пользователю создавать диалоговые окна в разрабатываемых приложениях и размещать в окнах элементы управления.
Модуль формы– это разновидность модуля класса. Но:
1) Предполагается, что обычно будет существовать единственный объект этого класса. Поэтому, он автоматически создается с именем, указанным в свойстве "(name)" в соответствующей форме (в этом случае имя ссылки на объект и имя класса совпадают, во всех остальных случаях VB это запрещает).
Тем не менее, могут быть созданы другие объекты этого класса обычным образом.
2) Некоторая часть программы для формы генерируется системой по визуальному описанию. А именно:
а) все значения свойств формы, записанные программистом в редакторе форм, неявно присваиваются свойствам соответствующего объекта.
б) размеры формы, определенные визуально, тоже присваиваются свойствам Height и Width (высота и ширина) соответствующего объекта.
в) когда программист помещает на форму в редакторе элемент управления с палитры (кнопку, картинку…) в текст соответствующего класса неявно помещаются операторы описания свойства с именем, указанным в свойстве "(name)" соответствующего элемента управления. Этот элемент управления создаётся, и всем его свойствам присваиваются значения, указанные в редакторе форм.
г) в частности свойствам Top и Left присваиваются значения отступа от верхней и соответственно левой границей формы, определенные визуально. Height и Width аналогично.
3) Все элементы формы, описанные визуально, описываются неявно со словом WithEvents, т.е. к ним могут быть привязаны обработчики событий.