- •Оглавление
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические
- •1. Понятия алгоритма: рекурсивные функции системы текстовых замен
- •2. Системы счисления, переводы чисел из одной позиционной системы счисления в другую
- •4. Понятие подпрограммы, функции, не возвращающие значения, описание и использование
- •5. Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу
- •6. Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры
- •8. Статистические и динамические переменные, динамическая память, работа с динамическими переменными
- •10. Использование динамических переменных для представления и работы со стеком
- •Int pop(tstack *&sp) { // удаление элемента из стека
- •11. Очередь, реализация очереди массивом
- •Добавить элемент в очередь:
- •12. Очередь, представление и реализация основных операций с помощью динамических переменных
- •14. Деревья, основные операции над деревьями, представление дерева массивом Деревья.
- •2. Обход бинарного дерева:
- •If(!t) { //такого элемента нет, включаем его
- •Void Del_node (int X, tnode *&t) { //удаление из дерева поиска
- •Матрица инциденции
- •Матрица смежности
- •Список инцидентности 4) список списков
- •18. Представление графа списком инцидентности, алгоритм обхода графа в глубину
- •2) Обход графа в ширину.
- •If (not b) then //добавляем новую вершину в стек
- •19. Представление графа списком списка, алгоритм обхода графа в ширину
- •21. Основные понятия ооп: абстракция, инкапсуляция, полиморфизм
- •22. Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса
- •23. Статические, дружественные и виртуальные поля и методы, особенности их использования
- •Void DisplayMoney(); // вывод на экран
- •Понятие области видимости: общие, личные, защищённые поля и методы
- •Указатель this и перегрузка методов
- •Использование классов, различные способы инициализации
- •Int CompareMoney(const Tmoney &b); //сравнение сумм
- •Void ReadMoney(); void DisplayMoney(); // ввод и вывод
- •Использование классов, работа с массивами и указателями на объекты
- •Наследование, пример использования наследования
- •Конструкторы и деструкторы, их назначение и использование
- •Архитектура пк, основные функциональные устройства и их назначение
- •Мп с точки зрения программиста, регистры общего назначения
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры
- •Регистр флажков, его назначение и использование
- •Форматы данных и форматы команд
If (not b) then //добавляем новую вершину в стек
begin u -> stack; просмотреть u; Nov[u] = false; end; else //вершина t использована
stack -> t //удалить из стека верхний элемент end;
end;
Посмотрим нерекурсивный обход, если граф представлен списком инцидентности или смежности:
function DFS1 (v);
begin
stack = 0; v -> stack; просмотреть v; Nov[v] = false;
while (stack <> 0) do begin t = stack[sp]; b = true;
while (Nach[t]<>Null and b) do // поиск 1-й новой вершины в spiske(t)
if (Nov[Nach[t]->k])
then b = false // найдена новая вершина
else Nach[t]=Nach[t]->next
if (not b)
then //добавляем новую вершину в стек begin t = Nach[t]->k; t -> stack;
просмотреть t; Nov[t] = false;
end;
else //вершина t использована
stack -> t //удалить из стека верхний элемент end;
end;
Здесь граф представлен списком инцидентности Nach[t], и k – определяет информационную часть – номера вершин, а next – поле, указующее на следующий элемент в списке, b – логическая вспомогательная величина.
19. Представление графа списком списка, алгоритм обхода графа в ширину
Четвертый способ представления – список списков снимает ограничение и на количество вершин в графе:
Список списков снимает ограничение и на количество вершин в графе. Вершину можно представить величиной типа:
struct Tgraf {
int k;
Tgraf *left;
Tnode *right;
};
Здесь указатель left указывает на следующую вершину в графе, а right - на список вершин смежных с к –ой struct Tnode { int k;
next *Tnode;
};
Обход графа в ширину (Breadth First Search)
Поиск (обход) в графе в ширину, отличается от поиска в глубину заменой стека на очередь. При поиске в глубину, чем позднее будет просмотрена вершина, тем раньше она будет использована, а это и есть принцип стека – мы помещаем вершину в стек как только в нее попали (нашли, просмотрели), а удаляем ее из стека, когда просмотрели все смежные с ней вершины. При обходе в ширину, чем раньше просматривается вершина – добавляется в очередь, тем она раньше используется – удаляется из очереди. Т. е. использование вершины происходит с помощью просмотра сразу всех смежных с ней вершин. Графически это можно представить так:
Алгоритм обхода в ширину на псевдокоде можно записать так:
function BFS(v)
begin Queue = 0; v ->Queue; Nov[v] = false;
while (queue <> 0) do begin
Queue -> p; просмотреть p; for ( u є Spisok[p]) do
if (Nov[u])
then
begin Nov[u] = false; u -> Queue; end; end;
end;
Оба алгоритма могут использоваться для нахождения пути между данными вершинами u и v. Для этого достаточно начать обход, например, с вершины u и продолжать его до тех пор пока не будет просмотрена вершина v.
Этого недостатка лишен алгоритм поиска в ширину. Для нахождения кратчайшего пути из u в v необходимо ввести в рассмотрение глобальный массив, назовем его Pred и будем заполнять его во внутреннем цикле при просмотре очередной вершины, добавив строку Pred[u] = p;
………………………… for ( u є Spisok[p]) do
if (Nov[u]) then
begin Nov[u] = false;
u -> Queue; Pred[u]=p;
end;
20. Технологии программирования, концепции, заложенные в ООП Введение в ООП
ООП – это один из подходов к разработке и созданию программ. Исторически:
1. процедурное структурирование программ, программирование «снизу-вверх»; 2. структурное программирование, программирование «сверху – вниз»;
3. ООП - Object Oriented Programming.
Структурное программирование – это структурирование на уровне действий, а ООП – это структурирование на уровне моделируемых объектов.
ООП – это результат 40 летнего опыта и практики программирования, начиная с Simula 67, затем Smalltalk, Lisp, Clu, и далее Actor, Eiffel, Objective C, Object Pascal, Java, C++, C# и т.д.
Концепции, заложенные в ООП, это:
Моделирование объектов и действий реального мира
Наличие типов данных, определяемых пользователем
Сокрытие деталей реализации (инкапсуляция)
Возможность многократного использования программного кода, благодаря наследованию Интерпретация вызовов функций на этапе выполнения программы – полиморфизм.
