Хитрости » 19 Январь 2015 Дмитрий 22429 просмотров
Предположим, что у вас есть большая база данных. Назовем её «products». И под большая я подразумеваю порядка 3млн записей(строк) или больше. Непосредственно на один лист Excel такое количество данных точно не поместится. Можно, конечно, хранить и на разных листах.
Тогда можно воспользоваться статьей Сводная таблица из нескольких листов. Но во-первых, данный метод работает не очень стабильно и может требовать изменений в зависимости от версии Excel и так же требует разрешения выполнения макросов, а во-вторых, для такого количества записей это не лучшее решение, т.к.
хранить такое количество данных в книгах Excel не совсем правильно.
Поэтому даже если у вас есть несколько книг/листов, забитых нужными данными по полной и надо эти данные объединить для дальнейшего анализа сводной таблицей — то самое лучшее на мой взгляд решение, это объединить их через MS Access в одну таблицу и потом уже построить сводную на основании таблицы не составит труда.
Создание БД в Access из нескольких диапазонов
Для того, чтобы правильно и безболезненно собрать данные нескольких таблиц из Excel в Access необходимо эти таблицы подготовить. Что не так уж сложно. Для этого надо соблюсти следующие правила:
- все таблицы должны содержать одинаковое количество столбцов с полностью идентичными заголовками
- заголовки не должны содержать переносов строк, тире, дефисов, точек, запятых. Лучше вообще отказаться от любых знаков препинания и сомнительных символов — оставьте только пробелы между словами(и то даже их лучше заменить нижним подчеркиванием)
- если в таблицах присутствуют числовые данные, которые впоследствии необходимо будет суммировать — убедитесь, что все данные именно числовые и нет текстовых. Это поможет избежать ошибок импорта
- необходимо убедиться, что таблицы не содержат пустых строк и столбцов, а так же объединенных ячеек
Теперь, когда все таблицы готовы можно приступить к импорту данных в Access. Открываете Access и выбираете Создать (New) — Новая база данных (Blank database).
Указываете имя базы и месторасположение(папку):
После создания базы проходим несколько шагов:
- переходим на вкладку Внешние данные (External Data)-группа Импорт и связи (Import & Link)—Excel.
- Выбираем файл, данные из которого необходимо перенести в Access
- Указываем Импортировать данные источника в новую таблицу в текущей базе данных (Import the source data into a new table in the current database):
- на следующем шаге будет предложено выбрать лист или именованный диапазон для импорта (Show worksheets, Show named ranges):
я выбрал лист «products», т.к. именно так у меня называется лист с данными. Жмем Далее (Next) - на этом шаге просто убеждаемся, что галка Первая строка содержит заголовки столбцов (First Row Contains Column Heading) установлена. Если нет — устанавливаем
- жмем Готово (Finish)
Первая часть базы наполнена. Теперь необходимо дополнить созданную в Access таблицу данными других листов или книг.
Для этого повторяем все описанные выше шаги, но на 2-м шаге выбираем Добавить копию записей в конец таблицы (Append a copy of the record to the table).
Тогда данные будут дополнены в уже созданную нами таблицу из первого листа, а не будут записаны в новую(чего нам не надо).
Все, теперь можно приступать к созданию сводной таблицы.
Создание сводной на основе базы данных Access
Прежде чем создавать сводную на основе внешних источников необходимо добавить на панель быстрого доступа кнопку, которая позволит это сделать:
- Excel 2010— Файл (File)— Параметры (Options)— Панель быстрого доступа (Quick Access Toolbar)
- Excel 2007— Кнопка офис— Параметры Excel (Excel options)— Панель быстрого доступа (Quick Access Toolbar)
или непосредственно с панели быстрого доступа:
Выбрать команды из: Все команды (All Commands). Ищем там Мастер сводных таблиц и диаграмм (PivotTable and PivotChart Wizard) и переносим на панель быстрого доступа:
Теперь жмем на эту кнопку и на первом шаге появившегося окна Мастера выбираем во внешнем источнике данных (external data source):
на втором шаге жмем кнопку Получить данные (Get Data):
В появившемся окне необходимо выбрать MS Access Database или База данных MS Access.
Тут есть важный момент. Галочка Использовать мастер запросов (Use the Query Wizard to create/edit queries) должна быть включена. Жмем ОК.
Далее выбираем в правом окне папку, в которой расположена наша база данных. В левом окне выбираем сам файл Базы данных:
Подтверждаем выбор нажатием кнопки ОК.
Далее необходимо создать запрос выборки. По сути можно просто нажать на имя таблицы Базы данных и после этого на значек «>»
Но если вам необходимо будет работать только с некоторыми столбцами из всей таблицы — можно последовательно перенести их в правое поле(предварительно в левом развернув плюсик рядом с именем таблицы). Убрать лишние столбцы из правого поля можно кнопочкой «
Источник: https://www.excel-vba.ru/chto-umeet-excel/svodnaya-iz-bazy-dannyx-access/
Урок-практикум "Создание простейшей базы данных в Microsoft Access 2007"
Лабораторно-практическая работа № 1«Создание простейшей базы данных в MicrosoftAccess 2007(с помощью шаблонов и конструктора таблиц). Ввод и сортировка записей».
Выполните следующие задания.
Задание 1. Создание пустой базы данных с помощью шаблонов таблиц.
Порядок работы
-
Запустите программу СУБД Microsoft Access. Для этого выполните: Пуск — Все программы — Microsoftoffice — MicrosoftofficeAccess 2007.
-
Перед Вами откроется окно следующего вида:
-
Выберите команду Новая база данных. Затем введите имя файла –База работников и нажмите кнопку Создать. Перед Вами откроется окно следующего вида:
-
Выберите команду Создание — Шаблоны таблиц — Контакты.
Перед Вами появится таблица с заголовками:
Заполните ее следующими данными (см. таблицу).
-
У Вас должна получится таблица как на рисунке (см. рис.). Сохраните таблицу () под именем Работник.
-
В данной таблице отсортируйте столбец «Организация» по алфавиту (Главная — ).
Задание 2. Создание пустой базы данных с помощью конструктора таблиц.
Порядок работы
-
С
оздадим таблицу под именем «Студент» с помощью конструктора таблиц.
Для этого выполните команду: Создание – конструктор таблиц.
Перед Вами откроется окно:
-
Заполните Имя поля следующими данными (заголовками столбцов):
- КодСтудент, Фамилия, Имя, Отчество, Адрес, Номер телефона, Специализация.
- И соответственно Тип данных:
- КодСтудент – СЧЕТЧИК,
- Фамилия, Имя, Отчество, Должность, Адрес, Специализация – ТЕКСТОВЫЙ,
- Номер телефона – ЧИСЛОВОЙ.
У Вас должно получиться как на рисунке (см. рис.)
-
Далее Нажмите сохранить () и назовите таблицу «Студент». Он автоматически запросит создать ключевое поле, нажмите кнопку ДА (КодСтудент будет Ключевое поле
).
-
Затем двойным щелчком левой кнопкой мыши щелкните слева на таблицу Студент: таблица, перед Вами откроется таблица для заполнения (см. рис.).
-
Заполните эту таблицу следующими данными (см. таблицу) и сохраните.
- КодСтудент
- Фамилия
- Имя
- Отчество
- Адрес
- Номер телефона
- Специализация
- 1
- Иванов
- Сергей
- Александрович
- г. Новороссийск
- 457896
- технолог
- 2
- Петров
- Сергей
- Петрович
- г. Москва
- 7458962
- технолог
- 3
- Гаврелеева
- Ольга
- Ивановна
- г. Москва
- 3698521
- бухгалтер
- 4
- Соколова
- Инна
- Олеговна
- г. Новороссийск
- 852967
- бухгалтер
- 5
- Мухина
- Олеся
- Петровна
- г. Москва
- 8625471
- технолог
- 6
- Апареева
- Анна
- Романовна
- г. Люберцы
- 748596
- технолог
- 7
- Глинкина
- Дина
- Евгеньевна
- г. Люберцы
- 919597
- технолог
- 8
- Сорина
- Ольга
- Сергеевна
- г. Москва
- 9191954
- бухгалтер
-
Результаты покажите учителю.
Задания для самостоятельной работы
Задание 1. Создайте таблицу в MicrosoftofficeAccess 2007 на основе шаблона «События». (В той же базе данных «База работников» создайте таблицу №3 под именем «Проведение выставок», выбрав команду Создание — Шаблоны таблиц — События). И заполните таблицу 5-6 записями (название выставок и дат придумайте сами). Сохраните.
Задание 2. Создайте таблицу в MicrosoftofficeAccess 2007 с помощью конструктора таблиц. (В той же базе данных «База работников» создайте таблицу №4 под именем «Студенты и задания»).
- Заполните Имя поля следующими данными (заголовками столбцов):
- КодСтудент, Фамилия, Описание задания, Начальная дата, Конечная дата, Замечания.
- И соответственно Тип данных:
- КодСтудент – СЧЕТЧИК,
- Фамилия, Описание задания, Замечания – ТЕКСТОВЫЙ,
- Начальная дата, Конечная дата – ДАТА/ВРЕМЯ.
- И заполните эту таблицу следующими данными (см. таблицу)
- КодСтудент
- Фамилия
- Описание задания
- Начальная дата
- Конечная дата
- Замечания
- 1
- Иванов
- Электронная почта
21.03.09
Источник: https://infourok.ru/urokpraktikum-sozdanie-prosteyshey-bazi-dannih-v-microsoft-access-634167.html
Базы данных. лекции
В широком смысле слова база данных – это совокупность сведений о конкретных объектах реального мира в какой-либо области.
Создавая базу данных, пользователь стремится упорядочить информацию по различным признакам и быстро извлекать выборку с произвольным сочетанием признаков. Сделать это возможно, только если данные структурированы.
Структурирование – это введение соглашений о способах представления данных. Неструктурированными называют данные, записанные, например, в текстовом файле.
Итак, база данных (БД) – это поименованная совокупность структурированных данных, относящихся к определенной предметной области.
Система управления базами данных (СУБД) – это комплекс программных и языковых средств, необходимых для создания баз данных, поддержания их в актуальном состоянии и организации поиска в них необходимой информации.
Модели данных
В СУБД происходит процесс логического представления данных, с которыми имеет дело пользователь, в язык ЭВМ и обратно. Общая логическая структура БД называется моделью данных. Различают три основные модели данных: иерархическую, сетевую и реляционную.
Иерархическая модель данных
Иерархическая структура представляет совокупность элементов, образующих граф (дерево).
К основным понятиям иерархической структуры относятся: уровень, элемент (узел), связь. Узел – это совокупность атрибутов данных, описывающих некоторые объекты. На схеме иерархического дерева узлы представляются вершинами графа.
Каждый узел на более низком уровне связан только с одним узлом, находящемся на более высоком уровне. Иерархическое дерево имеет только одну вершину (корень дерева), не подчиненную никакой другой вершине и находящуюся на самом верхнем (первом) уровне. Зависимые (подчиненные) узлы находятся на втором, третьем и т.д.
уровнях. Количество деревьев в базе данных определяется числом корневых записей.
К каждой записи базы данных существует только один (иерархический) путь от корневой записи. Например, как видно из рисунка 1, для записи С4 путь проходит через записи А и В3.
Рис.1. Иерархическая модель данных
Рис. 2. Фрагмент иерархическая базы данных «Структура института»
Сетевая модель данных
В сетевой структуре при тех же основных понятиях (уровень, узел, связь) каждый элемент может быть связан с любым другим элементом (рис. 3).
Рис. 3. Сетевая модель данных
Рассмотрим фрагмент сетевой БД «Курсовые работы студентов» (рис. 4). Много студентов, много предметов. Любой элемент структуры может быть связан с другими.
Рис. 4. Фрагмент сетевой БД «Курсовые работы студентов»
Реляционная модель данных
- Реляционные модели характеризуются простотой структуры данных, удобным для пользователя табличным представлением данных и возможностью использования формального аппарата алгебры отношений и реляционного исчисления для обработки данных.
- Реляционная модель ориентирована на организацию данных в виде двумерных таблиц. Каждая реляционная таблица представляет собой двумерный массив и обладает следующими свойствами:
- · Каждый элемент таблицы – один элемент данных;
· Все столбцы в таблице однородные, т.е.
все элементы в столбце имеют одинаковый тип (числовой, символьный и т.д.);
· Каждый столбец имеет уникальное имя.
Примером реляционной БД может служить БД «Студент» (табл. 1).
Таблица 1
№ личного дела | Фамилия | Имя | Отчество | Дата рождения |
34876 | Кондратьев | Алексей | Иванович | 02.12.78 |
34877 | Лаптев | Михаил | Петрович |
Источник: http://kursak.net/bazy-dannyx-lekcii/
Проектирование и создание базы данных в MS Access
Тема урока: «Проектирование и создание базы данных в MS Access»
Цель урока:
- приобретение навыков работы с приложением Microsoft Access;
- усвоить понятие базы данных и способы их создания в Microsoft Access.
Для достижения цели перед учащимися ставятся и решаются следующие задачи:
- Знакомство с интерфейсом Microsoft Access;
- Создание БД с помощью мастера;
- Занесение информации в таблицу БД;
- Добавление и редактирование записей;
- Внесение изменений в структуру таблицы.
-
Развивающие — развитие приемов умственной деятельности, формирование и развитие функционального мышления учащихся, развитие познавательных потребностей учащихся, создание условий для приобретения опыта работы учащихся в среде ИКТ;
-
Воспитательные — достижение сознательного усвоения учебного материала учащимися, формирование умения работать в коллективе, работа над повышением грамотности устной речи, правильного использования компьютерных терминов.
Тип урока: урок изучения нового материала и совершенствования знаний и умений.
Формы организации работы на уроке: фронтальная форма познавательной деятельности учащихся. Индивидуальная работа по предложенным вариантам.
Программное обеспечение: Windows XP, MS Office. Программа для работы с базами данных MS Access.
Оборудование, наглядные пособия: компьютеры, раздаточный материал, плакаты и кроссворды.
Новые понятия:
- База данных;
- Структурирование данных;
- Поле;
- Запись;
- Таблица;
- Структура базы данных.
Ход урока:
Приветствие, проверка присутствующих, заполнение журнала, объявление новой темы и ее цели.
-
Повторение материала предыдущего занятия.
Повторение защищается в виде презентаций, выступают 2 уч-ся.
-
Объяснение нового материала:
Существуют три типа базы данных: иерархические, сетевые, табличные или реляционные. Иерархические базы графически могут быть представлены как перевернутое дерево, состоящие из объектов различных уровней (например, иерархической БД является каталог папок Windows).
Табличные или реляционные базы представлены в виде таблиц, состоящую из вертикальных столбцов и горизонтальных строк. Вертикальные столбцы принято называть — полями, а горизонтальные строки – записями. Единицей хранимой информации является горизонтальная строка – запись, которая хранит информацию.
Сетевая база данных является обобщением иерархической за счет допущения объектов, имеющих более одного предка. Вообще, на связи между объектами в сетевых моделях не накладывается никаких ограничений (сетевой базой данных является Интернет).
- MS Access – это система управления базами данных под управлением Windows.
- MS Access входит в пакет Microsoft Office.
- Запуск MS Access.
- Пуск àПрограммы àMicrosoft Access
- или щелкнуть по значку в панели Microsoft Office.
- Объектом обработки MS Access является файл базы данных, имеющий произвольное имя и расширение .MDB
- В этот файл входят основные объекты MS Access: таблицы, формы, запросы, отчеты, макросы и модули.
- Объекты MS Access.
- MS Access работает со следующими объектами:
- — таблицами
- — формами
- — запросами
- — отчетами
- Кроме того, квалифицированные пользователи могут работать еще с двумя объектами: макросами и модулями.
- Макрос – набор специальных макрокоманд (открыть форму, напечатать отчет).
- Модуль – это программа, написанная на специальном языке.
Таблица является базовым объектом MS Access. Все остальные объекты являются производными и создаются только на базе ранее подготовленных таблиц.
Таблица – это объект предназначенный для хранения данных в виде записей (строк) и полей (столбцов). Обычно каждая таблица используется для хранения сведений по одному конкретному вопросу.
- Форма не является самостоятельным объектом MS Access, она просто помогает вводить, просматривать и модифицировать информацию в таблице или запросе.
- Запросы и отчеты выполняют самостоятельные функции.
- Запрос – объект БД , позволяющий получить нужные данные из одной или нескольких таблиц.
- Отчет – объект БД предназначенный для печати данных.
Каждый объект MS Access имеет имя. Длина имени не более 64 символов, включая русские буквы и пробел (исключение – точка и некоторые специальные символы).
- Поле – элемент таблицы, столбец или ячейка.
- Запись – полный набор данных об определенном объекте, в режиме таблицы это строка.
- С каждым объектом работают в отдельном окне, причем предусмотрено два режима работы:
- 1)оперативный режим – когда просматривается, изменяется, выбирается информация;
- 2)режим конструктора – когда создается, изменяется макет, структура объекта.
Кроме того в файл БД входит еще один документ, имеющий собственное окно – Схема данных. В этом окне создают, просматривают, изменяют и разрывают связи между таблицами. Эти связи помогают контролировать данные, создавать запросы и отчеты.
- Окно приложения MS Access и окно БД.
- 1)Заголовок приложения MS Access;
- 2)Горизонтальное меню;
- 3)Панель инструментов;
- 4)Окно базы данных:
- а)заголовок окна;
- б)три командные кнопки: Открыть, Конструктор, Создать;
- в)шесть вкладок по числу объектов: Таблицы, Запросы, Формулы, Отчеты, Макросы, Модули.
- Если выбрана вкладка Таблицы, в окне этой вкладки отображается список существующих таблиц данной БД.
- — Чтобы открыть существующую таблицу, надо выделить ее имя в этом списке и нажать кнопку Открыть.
- — Чтобы включить в БД новую таблицу, надо нажать кнопку Создать.
- — Чтобы исправить макет существующей таблицы, надо выделить ее имя и нажать кнопку Конструктор.
- Существует несколько способов создания таблиц в Access:
- Создание таблицы в режиме таблицы (или путем ввода данных);*
- Создание таблицы в режиме конструктора таблиц;
- Создание таблиц с помощью мастера таблиц.
- Создание таблицы с помощью мастера.
Любой объект можно создавать либо вручную (Новая таблица), либо с помощью мастера. Итак, создадим на диске С: каталог BAZA.
- 1)Запустим MS Access.
- 2)В окне MS Access выбрать Новая база данных и ОК.
- 3)Откроется диалоговое окно Файл новой базы данных, куда следует внести имя файла БД и указать имя каталога для сохранения БД.
- 1)В окне База данных нажмите кнопку Таблица, затем кнопку Создать.
- 2)В окне Новая таблица выберите Мастер таблиц и ОК.
- 3)В окне Разработка таблицы выберите образец таблицы, например Сотрудники.
4)Определите перечень полей. Для этого поочередно выделяйте мышью имя поля в списке образцов полей и нажимайте кнопку чтобы образец поля попал в список полей новой таблицы.
5)Нажимайте кнопку Далее пока она активна и потом один раз Готово.
6)Появится таблица Сотрудники с выбранными полями. В качестве ключа MS Access сама выбрала Код сотрудников.
Ключ – одно или несколько полей, значения которых однозначно определяет любую запись таблицы. Это поле – счетчик нумерует записи в порядке ввода.
7)Заполним таблицу.
-
Практическая работа на тему: «Основные приемы работы с данным».
Задание: Создание базы данных. Знакомство с основными объектами базы данных. Создание и заполнение таблицы. Режимы представления таблицы. Типы данных. Маска ввода. Изменение структуры таблицы в режиме конструктора.
Создание базы данных
Заранее создайте каталог (папку) с названием BAZA.
Запустите MS Access
Нажмите кнопку Создать базу данных на панели инструментов или в меню Файл – Создать. Будет открыто окно диалога Создание базы данных, в которое следует ввести имя базы, например Adress и выбрать каталог BAZA. В результате вы увидите окно базы данных.
Создание таблицы с помощью Мастера
В окне База данных нажмите кнопку Таблицы, а затем кнопку Создание таблицы с помощью мастера В окне Создание таблицы выберите образец Список рассылки (самый первый в списке).
Далее нужно определить перечень полей, которые вы хотите включить в таблицу. Для этого поочередно выделяйте мышью поля в списке Образцов полей и нажимайте кнопку чтобы образец поля попал в список полей создаваемой таблицы.
Выберите следующие поля: КодСпискаРассылки, Фамилия, Имя, Адрес, Домашний телефон, Сотовый телефон
Переименуем названия некоторых полей, выбранных из шаблона. Для этого установите курсор в окне Поля новой таблицы на строке КодСпискаРассылки и щелкните кнопку Переименовать поле и нажмите кнопку Далее. До тех пор, пока кнопка Далее активна, пользуйтесь ею, кнопку Готово нажимайте только в последнем случае!!!
В следующем окне диалога введите имя таблицы Адреса и разрешите MS Access самостоятельно определить ключ и нажмите кнопку Далее
В последнем окне диалога согласитесь на Непосредственный ввод данных в таблицу. И нажмите кнопку Готово.
Таблица создана. В строке заголовков таблицы можно найти ее название. Все имена полей представлены в виде заголовков таблицы.
- Измените заголовок первого поля КодСпискаРассылки на Адресат.
- Заполнение таблицы
- В процессе создания таблицы, вы встретились с понятием ключа.
- Первичный ключ (в последующем будем называть просто ключом) – одно или несколько полей, совокупность которых однозначно определяет любую запись таблицы.
В нашем варианте ключевым является поле Адресат. В таблице видно, что это поле – счетчик, т.е. нумерует записи в порядке ввода. Заполнять поле Адресат не нужно, счетчик срабатывает автоматически, как только заполнена хоть одна ячейка строки таблицы.
Заполните только поля Фамилия и Имя, остальные поля оставьте незаполненными.
Попробуйте заполнить поле Телефон.
- Любая таблица Microsoft Access может быть представлена в двух режимах:
- режиме таблицы, предназначенном для ввода данных, их просмотра и редактирования;
- режиме конструктора, предназначенном для создания и изменения таблицы.
- Если внимательно рассмотреть содержимое ячейки, то можно увидеть некоторую разметку — маску ввода.
Маска ввода — это шаблон, позволяющий вводить в поле значения, имеющие одинаковый формат. Маска ввода автоматически изображает в поле постоянные символы.
При вводе данных в поле нет необходимости набирать эти постоянные символы, даже если они должны быть включены в значение поля; достаточно заполнить пустые позиции в маске ввода.
Кроме того, Microsoft Access не позволит ввести в поле значения, не вписывающиеся в определенную для этого поля маску ввода.
Для того чтобы изменить маску ввода для телефона, следует переключиться в режим конструктора таблицы. Это можно сделать, выбрав команду Конструктор меню Вид или при помощи кнопки панели инструментов.
Окно конструктора содержит таблицу, в первом столбце которой перечислены поля, а во втором типы данных (форматы).
Зададим маску ввода для полей ДомашнийТелефон и СотовыйТелефон. Установите текстовый курсор в имя поля Домашний телефон в нижнем поле Общие напротив Маски ввода и создайте шаблон в окне Создание масок ввода щелкните Cписок
Источник: https://videouroki.net/razrabotki/proektirovanie-i-sozdanie-bazy-dannykh-v-ms-access.html
Двоичное дерево поиска: базовые операции [итеративное решение]
Теги: Двоичное дерево поиска. БДП. Итреативные алгоритмы работы с двоичным деревом поиска.
Двоичные деревья – это структуры данных, состоящие из узлов, которые хранят значение, а также ссылку на свою левую и правую ветвь. Каждая ветвь, в свою очередь, является деревом.
Узел, который находится в самой вершине дерева принято называть корнем (root), узлы, находящиеся в самом низу дерева и не имеющие потомков называют листьями (leaves).
Ветви узла называют потомками (descendants). По отношению к своим потомкам узел является родителем (parent) или предком (ancestor). Также, развивая аналогию, имеются сестринские узлы (siblings – родные братья или сёстры) – узлы с общим родителем. Аналогично, у узла могут быть дяди (uncle nodes) и дедушки и бабушки (grandparent nodes).
Такие названия помогают понимать различные алгоритмы.
Двоичное дерево. На этом рисунке узел 10 корень, 7 и 12 его наследники. 6, 9, 11, 14 — листья. 7 и 12, также как и 6 и 9 являются сестринскими узлами, 10 — это дедушка узла 6, а 12 — дядя узла 6 и узла 9
Двоичные деревья одна из самых простых структур (по сравнению, например, с другими деревьями). Они обычно реализуют самый базовый и самый естественный способ классификации элементов – делят их по определённому признаку, размещая одну группу в левом поддереве, а другую группу в правом. В поддеревьях рекурсивно поддерживается такой же порядок, за счёт чего узлы дерева упорядочиваются.
Двоичное дерево поиска (далее ДДП) – это несбалансированное двоичное дерево, в котором элементы БОЛЬШЕ корневого размещаются справа, а элементы, которые МЕНЬШЕ размещаются слева.
Такое размещение – слева меньше, справа больше – не обязательно, можно располагать элементы, которые меньше, справа. Отношение БОЛЬШЕ и МЕНЬШЕ – это не обязательно естественная сортировка по величине, это некоторая бинарная операция, которая позволяет разбить элементы на две группы.
Для реализации бинарного дерева поиска будем использовать структуру Node, которая содержит значение, ссылку на правое и левое поддерево, а также ссылку на родителя. Ссылка на родительский узел, в принципе, не является обязательной, однако сильно упрощает и ускоряет все алгоритмы. Далее, ради тренировки, мы ещё рассмотрим реализацию без ссылки на родителя.
ЗАМЕЧАНИЕ: мы рассматриваем случай, когда в дереве все значения разные и не равны NULL. Деревья с повторяющимися узлами рассмотрим позднее.
Обычно в качестве типа данных мы используем void* и далее передаём функции сравнения через указатели. В этот раз будем использовать пользовательский тип и макросы.
typedef int T;
#define CMP_EQ(a, b) ((a) == (b))
#define CMP_LT(a, b) ((a) < (b))
#define CMP_GT(a, b) ((a) > (b))
typedef struct Node {
T data;
struct Node *left;
struct Node *right;
struct Node *parent;
} Node;
Сначала, как обычно, напишем функцию, которая создаёт новый узел. Она принимает в качестве аргументов значение и указатель на своего родителя. Корневой элемент не имеет родителя, значение указателя parent равно NULL.
Node* getFreeNode(T value, Node *parent) {
Node* tmp = (Node*) malloc(sizeof(Node));
tmp->left = tmp->right = NULL;
tmp->data = value;
tmp->parent = parent;
return tmp;
}
Разберёмся со вставкой. Возможны следующие ситуации
- 1) Дерево пустое. В этом случае новый узел становится корнем ДДП.
- 2) Новое значение меньше корневого. В этом случае значение должно быть вставлено слева. Если слева уже стоит элемент, то повторяем эту же операцию, только в качестве корневого узла рассматриваем левый узел. Если слева нет элемента, то добавляем новый узел.
- 3) Новое значение больше корневого. В этом случае новое значение должно быть вставлено справа. Если справа уже стоит элемент, то повторяем операцию, только в качестве корневого рассматриваем правый узел. Если справа узла нет, то вставляем новый узел.
Пусть нам необходимо поместить в ДДП следующие значения
10 7 9 12 6 14 11 3 4
Первое значение становится корнем.
Дерево с одним узлом. Равных NULL потомков не рисуем
Второе значение меньше десяти, так что оно помещается слева.
Если значение меньше, то помещаем его слева
Число 9 меньше 10, так что узел должен располагаться слева, но слева уже стоит значение. 9 больше 7, так что новый узел становится правым потомком семи.
Двоичное дерево поиска после добавления узлов 10, 7, 9
Число 12 помещается справа от 10.
6 меньше 10 и меньше 7…
Добавляем оставшиеся узлы 14, 3, 4, 11
Добавили последовательно 10, 7, 9, 12, 6, 14, 3, 11, 4
Функция, добавляющая узел в дерево
Два узла. Первый – вспомогательная переменная, чтобы уменьшить писанину, второй – тот узел, который будем вставлять.
Node *tmp = NULL;
Node *ins = NULL;
Проверяем, если дерево пустое, то вставляем корень
if (*head == NULL) {
*head = getFreeNode(value, NULL);
return;
}
Проходим по дереву и ищем место для вставки
tmp = *head;
Пока не дошли до пустого узла
while (tmp) {
Если значение больше, чем значение текущего узла
if (CMP_GT(value, tmp->data)) {
Если при этом правый узел не пустой, то за корень теперь считаем правую ветвь и начинаем цикл сначала
if (tmp->right) {
tmp = tmp->right;
continue;
Если правой ветви нет, то вставляем узел справа
} else {
tmp->right = getFreeNode(value, tmp);
return;
}
Также обрабатываем левую ветвь
} else if (CMP_LT(value, tmp->data)) {
if (tmp->left) {
tmp = tmp->left;
continue;
} else {
tmp->left = getFreeNode(value, tmp);
return;
}
} else {
exit(2);
}
}
Весь код
void insert(Node **head, int value) {
Node *tmp = NULL;
Node *ins = NULL;
if (*head == NULL) {
*head = getFreeNode(value, NULL);
return;
}
tmp = *head;
while (tmp) {
if (CMP_GT(value, tmp->data)) {
if (tmp->right) {
tmp = tmp->right;
continue;
} else {
tmp->right = getFreeNode(value, tmp);
return;
}
} else if (CMP_LT(value, tmp->data)) {
if (tmp->left) {
tmp = tmp->left;
continue;
} else {
tmp->left = getFreeNode(value, tmp);
return;
}
} else {
exit(2);
}
}
}
Рассмотрим результат вставки узлов в дерево. Очевидно, что структура дерева будет зависеть от порядка вставки элементов. Иными словами, форма дерева зависит от порядка вставки элементов.
Если элементы не упорядочены и их значения распределены равномерно, то дерево будет достаточно сбалансированным, то есть путь от вершины до всех листьев будет одинаковый. В таком случае максимальное время доступа до листа равно log(n), где n – это число узлов, то есть равно высоте дерева.
Но это только в самом благоприятном случае. Если же элементы упорядочены, то дерево не будет сбалансировано и растянется в одну сторону, как список; тогда время доступа до последнего узла будет порядка n. Это слабая сторона ДДП, из-за чего применение этой структуры ограничено.
Дерево, которое получили вставкой чередующихся возрастающей и убывающей последовательностей (слева) и полученное при вставке упорядоченной последовательности (справа)
Для решения этой проблемы можно производить балансировку дерева, или использовать структуры, которые автоматически проводят самобалансировку во время вставки и удаления.
Поиск в дереве
Известно, что слева от узла располагается элемент, который меньше чем текущий узел. Из чего следует, что если у узла нет левого наследника, то он является минимумом в дереве.
Таким образом, можно найти минимальный элемент дерева
Node* getMinNode(Node *root) {
while (root->left) {
root = root->left;
}
return root;
}
Аналогично, можно найти максимальный элемент
Node* getMaxNode(Node *root) {
while (root->right) {
root = root->right;
}
return root;
}
Опять же, если дерево хорошо сбалансировано, то поиск минимума и максимума будет иметь сложность порядка log(n), а в случае плохой балансировки стремится к n.
Поиск нужного узла по значению похож на алгоритм бинарного поиска в отсортированном массиве. Если значения больше узла, то продолжаем поиск в правом поддереве, если меньше, то продолжаем в левом. Если узлов уже нет, то элемент не содержится в дереве.
Node *getNodeByValue(Node *root, T value) {
while (root) {
if (CMP_GT(root->data, value)) {
root = root->left;
continue;
} else if (CMP_LT(root->data, value)) {
root = root->right;
continue;
} else {
return root;
}
}
return NULL;
}
Удаление узла
Существует три возможных ситуации.
- 1) У узла нет наследников (удаляем лист). Тогда он просто удаляется, а его родитель обнуляет указатель на него. Просто исключаем его из дерева
- 2) У узла один наследник. В этом случае узел подменяется своим наследником.
- 3) У узла оба наследника. В этом случае узел не удаляем, а заменяем его значение на максимум левого поддерева. После этого удаляем максимум левого поддерева. (Напомню, что мы условились, что слева элементы меньше корневого).
У узла 7 два наследника. Находим максимум его левого поддерева (это 6)
Узел не удаляем, а копируем на его место значение максимума левого поддерева и удаляем этот узел
Копируем на его место единственного наследника
Максимум левого поддерева имеет не более одного наследника, так что он удаляется просто. Известно, что все значения слева от корня меньше корня. Соответственно, максимум левого поддерева будет, с одной стороны, больше всех элементов левого поддерева, с другой стороны меньше всех значений правого поддерева.
Наша функция будет принимать в качестве аргумента узел, который необходимо удалить.
if (target->left && target->right) {
//Оба наследника есть
} else if (target->left) {
//Есть только левый наследник
} else if (target->right) {
//Есть только правый наследник
} else {
//Нет наследников
}
free(target);
Если нет наследников, то нужно узнать, каким поддеревом относительно родителя является узел
if (target == target->parent->left) {
target->parent->left = NULL;
} else {
target->parent->right = NULL;
}
Если есть только правый или только левый наследник, подменяем наследником удаляемый узел. Перед этим нужно узнать, правым или левым наследником является удаляемый узел.
if (target == target->parent->left) {
target->parent->left = target->left;
} else {
target->parent->right = target->left;
}
или
if (target == target->parent->right) {
target->parent->right = target->right;
} else {
target->parent->left = target->right;
}
Если оба наследника, то сначала находим максимум левого поддерева
Node *localMax = findMaxNode(target->left);
Затем подменяем значение удаляемого узла на него
target->data = localMax->data;
После чего удаляем этот узел
removeNodeByPtr(localMax);
return;
Здесь мы использовали рекурсию, хотя я обещал этого не делать. Вызов будет всего один, так как известно, что максимум не содержит обоих наследников и является правым наследником своего родителя. Если хотите заменить вызов функции, то придётся скопировать оставшийся код.
Весь код
void removeNodeByPtr(Node *target) {
if (target->left && target->right) {
Node *localMax = findMaxNode(target->left);
target->data = localMax->data;
removeNodeByPtr(localMax);
return;
} else if (target->left) {
if (target == target->parent->left) {
target->parent->left = target->left;
} else {
target->parent->right = target->left;
}
} else if (target->right) {
if (target == target->parent->right) {
target->parent->right = target->right;
} else {
target->parent->left = target->right;
}
} else {
if (target == target->parent->left) {
target->parent->left = NULL;
} else {
target->parent->right = NULL;
}
}
free(target);
}
Упростим работу и сделаем обёртку вокруг функции, чтобы она удаляла узел по значению
void deleteValue(Node *root, T value) {
Node *target = getNodeByValue(root, value);
removeNodeByPtr(target);
}
Для проверки можно ввести функцию печати дерева. Так как мы ещё не научились обходить деревья, вывод осавляет желать лучшего.
void printTree(Node *root, const char *dir, int level) {
if (root) {
printf(«lvl %d %s = %d
«, level, dir, root->data);
printTree(root->left, «left», level+1);
printTree(root->right, «right», level+1);
}
}
Проверка
void main() {
Node *root = NULL;
insert(&root, 10);
insert(&root, 12);
insert(&root, 8);
insert(&root, 9);
insert(&root, 7);
insert(&root, 3);
insert(&root, 4);
printTree(root, «root», 0);
printf(«max = %d
«, findMaxNode(root)->data);
printf(«min = %d
«, findMinNode(root)->data);
deleteValue(root, 4);
printf(«parent of 7 is %d
«, getNodeByValue(root, 7)->parent->data);
printTree(root, «root», 0);
deleteValue(root, 8);
printTree(root, «root», 0);
printf(«——————
«);
deleteValue(root, 10);
printTree(root, «root», 0);
getch();
}
ru-Cyrl 18- tutorial Sypachev S.S. 1989-04-14 sypachev_s_s@mail.ru Stepan Sypachev students
Q&A
Всё ещё не понятно? – пиши вопросы на ящик Кольцевой двусвязный список
Источник: https://learnc.info/adt/binary_search_tree.html
MS Access — Работа с таблицами, создание, удаление, настройка внешнего вида
Хотя в Access 2010 существует четыре типа объектов базы данных, таблицы, возможно, являются наиболее важными. Даже когда вы используете формы, запросы и отчеты, вы все еще работаете с таблицами, потому что там хранятся ваши данные. Таблицы лежат в основе любой базы данных, поэтому важно понять, как их использовать.
В этой статье вы узнаете, как открывать таблицы, создавать и редактировать записи, а также изменять внешний вид вашей таблицы, чтобы упростить просмотр и работу.
Основы таблиц
Если вы новичок в Microsoft Access, вам необходимо изучить основы работы с таблицами, чтобы вы могли открывать, перемещаться, добавлять информацию и редактировать их.
Чтобы открыть существующую таблицу:
- 1. Откройте свою базу данных и найдите область навигации.
- 2. В области переходов найдите таблицу, которую вы хотите открыть. Таблицы отмечены значком.
- 3. Дважды щелкните имя таблицы. Он откроется и появится как вкладка в панели вкладок документов.
Понимание таблиц
Все таблицы состоят из горизонтальных строк и вертикальных столбцов с небольшими прямоугольниками, называемыми ячейками в местах пересечения строк и столбцов. В Access строки и столбцы называются записями и полями.
Поле — это способ организации информации по типу. Подумайте о названии поля как о вопросе и каждой ячейке в этом поле в качестве ответа на этот вопрос.
Запись — это одна единица информации. Каждая ячейка в данной строке является частью записи этой строки. Каждая запись имеет свой идентификационный номер. В таблице каждый идентификационный номер уникален для своей записи и относится ко всей информации в этой записи. Идентификационный номер для записи не может быть изменен.
Каждая ячейка данных в вашей таблице является частью как поля, так и записи. Например, если у вас есть таблица имен и контактная информация, каждый человек будет представлен записью, и каждый фрагмент информации о каждом имени человека, номере телефона, адресе и т. Д. Будет содержаться в отдельном поле в строке этой записи.
Навигация по столам
Чтобы перемещаться по записям в таблице, вы можете использовать клавиши со стрелками вверх и вниз, прокручивать вверх и вниз или использовать стрелки на панели навигации записи, расположенной в нижней части таблицы.
Вы также можете найти любую запись в текущей открытой таблице, выполнив ее поиск, используя окно поиска записей. Просто поместите курсор в поле поиска, введите любое слово, которое появляется в записи, которую вы хотите найти, и нажмите Enter.
Чтобы просмотреть дополнительные записи, соответствующие вашему поиску, нажмите Enter еще раз.
Чтобы перемещаться между полями, вы можете использовать клавиши со стрелками влево и вправо или прокручивать влево и вправо.
Добавление записей и ввод данных
Ввод данных в таблицы в Access аналогичен вводу данных в Excel. Для работы с записями вам нужно будет ввести данные в ячейки.
Чтобы добавить новую запись:
Существует три способа добавления новой записи в таблицу:
- В группе «Запись» на вкладке «Главная» щелкните команду «Создать».
- На панели навигации «Запись» в нижней части окна нажмите кнопку «Новая запись».
- Просто начните печатать в строке ниже вашей последней добавленной записи.
Иногда, когда вы вводите информацию в запись, выдается всплывающее окно, чтобы сообщить вам, что введенная вами информация недействительна. Это означает, что в поле, в котором вы работаете, есть правило проверки, которое является правилом о типе данных, которые могут отображаться в этом поле. Нажмите «ОК», затем следуйте инструкциям во всплывающем окне, чтобы повторно ввести свои данные.
Чтобы сохранить запись:
- 1. Выберите вкладку «Главная» и найдите группу «Записи».
- 2. Нажмите кнопку «Сохранить».
Перед закрытием таблицы обязательно сохраните несохраненные записи. При закрытии таблицы Access не будет запрашивать сохранение.
Редактирование записей
Чтобы быстро отредактировать любую запись в таблице, просто нажмите ее и введите свои изменения. Тем не менее, Access также предлагает вам возможность находить и заменять слово в нескольких записях, а также полностью удалять записи.
Чтобы заменить слово в записи:
Вы можете редактировать несколько вхождений одного и того же слова, используя Find и Replace, который ищет термин и заменяет его другим термином.
- 1. Выберите вкладку «Главная» и найдите группу «Найти».
- 2. Выберите команду «Заменить». Появится диалоговое окно «Найти и заменить».
- 3. Нажмите поле «Найти»: и введите слово, которое вы хотите найти.
- 4. Нажмите кнопку «Заменить с» и введите слово, которое вы хотите заменить оригинальным словом.
- 5. Нажмите стрелку «Вниз»: выберите область, которую вы хотите найти.
- Выберите «Текущее поле», чтобы ограничить поиск выбранным в данный момент полем.
- Выберите текущий документ для поиска по всей таблице.
- 6. Нажмите стрелку раскрывающегося списка Match: выберите, насколько близко вы хотите, чтобы результаты соответствовали вашему поиску.
- Выберите любую часть поля для поиска поискового запроса в любой части ячейки.
- Выберите «Всего полей» для поиска только для ячеек, которые соответствуют вашему поисковому запросу.
- Выберите «Начало поля» для поиска только для ячеек, которые начинаются с вашего поискового запроса.
- 7. Нажмите «Найти далее», чтобы найти следующее вхождение поискового запроса.
- 8. Нажмите «Заменить», чтобы заменить исходное слово на новое.
Хотя вы можете использовать Replace All для замены каждого экземпляра термина, заменяя его по одному, вы можете быть абсолютно уверены, что редактируете только нужные вам данные. Замена данных непреднамеренно может негативно повлиять на вашу базу данных.
Чтобы удалить запись:
- 1. Выберите всю запись, нажав серая рамка в левой части записи.
- 2. Выберите вкладку «Главная» и найдите группу «Записи».
- 3. Нажмите команду Удалить. Запись будет удалена навсегда.
Идентификационные номера, присвоенные записям, остаются неизменными даже после удаления записи. Например, если вы удалите 34-ю запись в таблице, последовательность идентификационных номеров записей будет читать … 32, 33, 35, 36 … а не … 32, 33, 34, 35, 36 .. ,
Изменение внешнего вида таблицы
Access 2010 предлагает несколько способов изменить внешний вид таблиц. Эти изменения касаются не только того, чтобы ваш стол выглядел красиво; они могут облегчить чтение таблицы.
Изменение размеров полей и строк
Если ваши поля и строки слишком малы или велики для данных, содержащихся в них, вы всегда можете изменить их размер, чтобы отображался весь текст.
Чтобы изменить размер поля:
- 1. Поместите курсор над правой сеткой в заголовке поля. Ваша мышь станет двойной стрелкой.
- 2. Нажмите и перетащите линию сетки вправо, чтобы увеличить ширину поля или влево, чтобы уменьшить ширину поля.
- 3. Отпустите мышь. Ширина поля будет изменена.
Чтобы изменить размер строки:
- 1. Поместите курсор на нижнюю линию сетки в серой области слева от строки. Ваша мышь станет двойной стрелкой.
- 2. Нажмите и перетащите линию сетки вниз, чтобы увеличить высоту строки или вверх, чтобы уменьшить высоту строки.
- 3. Отпустите мышь. Высота строки будет изменена.
Скрытие полей
Если у вас есть поле, которое вы не планируете редактировать или не хотите, чтобы другие люди редактировали, вы можете скрыть его. Скрытое поле невидимо, но все еще является частью вашей базы данных. Данные в скрытом поле могут быть доступны из форм, запросов, отчетов и любых связанных таблиц.
Чтобы скрыть поле:
- 1. Щелкните правой кнопкой мыши заголовок поля.
- 2. В раскрывающемся меню выберите Скрыть поля.
Параметры форматирования таблиц
Цвет чередующихся строк
По умолчанию фон любой другой строки в таблице Access представляет собой несколько оттенков, более темных, чем фон остальной части таблицы. Этот более темный цвет чередующихся строк упрощает чтение вашей таблицы, предлагая визуальное различие между каждой записью и записями непосредственно выше и ниже нее.
Чтобы изменить цвет другой строки:
- 1. Выберите вкладку «Главная» и найдите группу форматирования текста.
- 2. Нажмите стрелку раскрывающегося списка «Альтернативный ряд».
- 3. Выберите цвет в раскрывающемся меню или выберите «Нет цвета», чтобы удалить цвет другой строки.
- 4. Цвет вашей альтернативной строки будет обновлен.
Изменение линий сетки
Другим способом Access упрощает чтение ваших таблиц путем добавления линий сетки, которые отмечают границы каждой ячейки. Gridlines(линии сетки) — это тонкие линии, которые появляются между каждой ячейкой, строкой и столбцом таблицы. По умолчанию сетчатые линии темно-серого цвета и появляются со всех сторон ячейки, но вы можете изменить их цвет или скрыть нежелательные линии сетки.
Чтобы настроить отображение линий сетки:
- 1. Выберите вкладку «Главная» и найдите группу форматирования текста.
- 2. Щелкните стрелку раскрывающегося списка Gridlines.
- 3. Выберите линии сетки, которые вы хотите отобразить. Вы можете выбрать горизонтальные линии сетки между строками, вертикальными градиентами между столбцами, обоими типами линий сетки или вообще ничем.
- 4. Строки сетки на вашем столе будут обновлены.
Дополнительные параметры форматирования
Чтобы просмотреть дополнительные параметры форматирования, нажмите стрелку форматирования Datasheet в нижнем правом углу группы форматирования текста.
Диалоговое окно «Форматирование таблицы данных» предлагает несколько дополнительных параметров форматирования, в том числе возможность изменять цвет фона, цвет сетки и стиль границы и линии.
Он даже включает возможность просмотра таблицы образцов с вашими вариантами форматирования, поэтому поиграйте с различными вариантами форматирования, пока не получите таблицу, выглядящую так, как вы этого хотите.
- В конечном итоге у Вас изменится вид таблицы и станет напоминать Excel.
- С уважением, авторы сайта Компьютерапия
Источник: https://maxfad.ru/ofis/ms-access/385-ms-access-rabota-s-tablitsami-sozdanie-udalenie-nastrojka-vneshnego-vida.html