Разработка программы, реализующей алгоритм бинарного дерева

Исследование особенностей основных файловых менеджеров, разработанных под операционную систему Windows. Изучение порядка заполнения элементов бинарного дерева. Обзор приложения, реализующего графический интерфейс доступа пользователя к папкам и файлам.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.07.2012
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru/

СОДЕРЖАНИЕ

  • ВВЕДЕНИЕ
    • ТЕОРЕТИЧЕСКИЙ ВОПРОС
  • Directory Opus
  • DOS Navigator
  • FAR Manager
  • FreeCommander
  • Nomad
  • Nomad.NET
  • Total Commander
  • Unreal Commander
  • ViewFD
  • ViewFD - очень легкий и компактный файловый менеджер
  • Проводник Windows
  • Q-Dir
    • ПОСТАНОВКА ЗАДАЧИ
    • ОПИСАНИЕ ПРОГРАММЫ
    • РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
    • ТЕСТИРОВАНИЕ
    • ВЫВОДЫ
    • ЛИТЕРАТУРА
    • ПРИЛОЖЕНИЕ
    • ВВЕДЕНИЕ
    • Теоретический вопрос - Обзор файловых менеджеров для Windows.
    • Следует рассмотреть: что представляет собой файловый менеджер, какие бывают файловые менеджеры, и основные файловые менеджеры разработанные под ОС Windows.
    • Практический вопрос - Разработать программу, реализующую алгоритм бинарного дерева (20 элементов). При заполнении дерева элементы должны располагаться в отсортированном порядке согласно ключу.
    • Для выполнения задачи понадобится структура для бинарного дерева, а также функции для добавления, удаления, поиска и вывода на экран.
    • ТЕОРЕТИЧЕСКИЙ ВОПРОС
    • Файловый менеджер (англ. file manager) -- компьютерная программа, которая предоставляет интерфейс пользователя для работы с файлами и файловой системой. Как правило данные программы позволяют выполнять следящие операции над файлами -- создание, копирование, удаление, открытие/ просмотр/ проигрывание, редактирование, переименование, изменение свойств и атрибутов, назначение прав, перемещение и поиск. Помимо этих, так называемых, основных функций, многие файловые менеджеры также включают ряд дополнительных возможностей, таких как резервное копирование, работа с сетью (через NFS, FTP и т. п.), управление принтерами и пр.
    • Файловые менеджеры делятся на:
    • · Двупанельные
    • · Пространственные и навигационные

Наиболее известные двупанельные файловые менеджеры

· Directory Opus

· DOS Navigator

· FAR Manager

· FreeCommander

· Nomad и Nomad.NET

· Total Commander

· Unreal Commander

· ViewFD

Навигационные файловые менеджеры

· Проводник Windows

· Q-Dir

Directory Opus

Directory Opus был впервые выпущен для компьютеров Commodore AMIGA в 1990 году. Разработчик программы -- компания GPSoftware. Последняя версия программы совместима со всеми версиями Windows .

Рисунок 1 - Directory Opus

Данный файловый менеджер сочетает в себе простую работу с файлами и гибкостью настроек. Он также обладает полностью настраиваемым интерфейсом, встроенным ftp-клиентом с поддержкой SSL и SSH/SFTP, встроенный SMTP-клиентом, внутренней поддержкой архивов, просмотром мультимедиа, конвертацией графических файлов, встроенным командным языком, расширенными функциями поиска и переименования файлов, настраиваемыми горячими клавишами для управления.

Directory Opus может встраиваться в систему, в том числе полностью заменять собой Проводник...

DOS Navigator

DOS Navigator -- консольный файловый менеджер для OS/2 и DOS. Разработчик программы -- молдавская компания RITLabs. Основная идея заимствована у Norton Commander. Программа имеет две панели с директориями, верхнее меню с набором всех команд и нижнее меню, где располагаются наиболее часто используемые команды.

Среди преимуществ -- при удалении файлов в «корзину» используется EMS-память, создание ссылок на объекты файловой системы, неограниченное количество панелей, поддержка большого числа архиваторов, а также встроенные приложения.

В числе встроенных приложений можно отметить редактор электронных таблиц, дисков, терминал, калькулятор, просмотр баз данных, расширенная утилита форматирования дисков.

UU-кодер/декодер, а также телефонную книжку.

Отдельно стоит отметить реализацию подобия многозадачности -- можно свободно переключаться между встроенными приложениями выполняя при этом, например, операции форматирования и копирования в «фоновом» режиме.

Рисунок 2 - DOS Navigator

На сегодняшний день распространяется в открытых исходных кодах. Имеет несколько веток развития. Портирован под платформы Windows и Linux.

FAR Manager

Первая общедоступная версия FAR Manager была выпущена 10 сентября 1996 года и ориентирована на платформу Windows. На данный момент распространяется под лицензией BSD (модифицированной). Автор программы -- Евгений Рошал.

Рисунок 3 - FAR Manager

FAR Manager как и многие другие менеджеры также наследует две панели, стандартную расцветку и систему команд (управление с клавиатуры) у известного файлового менеджера Norton Commander.

Программа может работать как в полноэкранном, так и в оконном режиме. Однако имеет недостатки интерфейса оконном режиме, схожие с DOS-программами (проблемы с закрытием при выключении системы, невозможность произвольного изменения текстового разрешения окон), которые проявляются в Windows 9x, но отсутствуют в семействе

Windows NT.

FAR поддерживает различные кодировки текстов, атрибуты файлов файловой системы NTFS, длинные имена файлов, может использовать системные функции для копирования файлов, имеет систему помощи и многоязычный интерфейс.

Рисунок 4 - Редактор FAR с плагином Colorer

Возможности FAR существенно расширяются благодаря плагинам различного назначения, например: подсветка синтаксиса в исходных текстах программ, управление принтерами, работа с FTP- и SFTP-серверами, поиск и замена символов во множестве файлов одновременно, редактирование системного реестра

Windows, симметричное и асимметричное шифрование файлов, подготовка каталога сменных накопителей и многое другое.

Некоторые важные плагины (например, для работы с FTP, печати, сравнения файлов, работы с архивами, сетью) входят в поставку FAR, а остальные доступны для скачивания в интернете. Большинство плагинов написаны на Си/С++ и Паскале с использованием оригинального FAR API.

FreeCommander

FreeCommander обладает всеми необходимыми функциями для управления данными: удаление, перемещение, копирование, переименование папок и файлов, работа с архивами (ZIP, CAB, RAR), а также просматривание файлов в текстовом, бинарном и шестнадцатеричном виде. Интерфейс FreeCommander представляет собой двухпанельное окно (горизонтальное или вертикальное), программа полностью настраивается, а также поддерживает технологию Drag&Drop.

Рисунок 5 - FreeCommander

К основным возможности FreeCommander можно отнести опциональное дерево папок для каждой панели, вкладочный интерфейс, встроенный FTP клиент, легкий доступ к рабочему столу, системным папкам, панели управления и меню Пуск, затирание файлов, пакетное переименование, создание и проверка контрольных сумм MD5, а также мультиязычная поддержка.

Из дополнительных функций можно отметить поиск файлов внутри архивов, соединение и разделение больших файлов, синхронизацию и сравнение папок, просмотр и редактирование свойств файлов, подключение к удалённым серверам и работу с командной строкой.

Nomad

Nomad это мощный файловый менеджер написанный на языке Delphi. Впервые выпущен в 1998 году.

Рисунок 6 - Nomad

Программа имеет мощную систему фильтрации файлов, поддерживает поиск файла по множеству параметров, функцию Drag and Drop, копирование и вставку файлов из буфера обмена. Обладает полной настройкой клавиатурной раскладки и цветовой схемы, а также возможностью создавать свои панели инструментов. Nomad имеет мощный встроенный просмотрщик файлов и редактор текстовых файлов, который поддерживает различные кодовые таблицы (включая Unicode и UTF-8), и легко конфигурируемое меню утилит.

Достоинством Nomad является то, что все операции над файлами, открытие архивов, а также поиск в панели выполняются в отдельных потоках и не мешают работать с программой. На момент выхода Nomad был первым менеджером, в котором был реализован подобный функционал.

Nomad.NET

Работа над проектом началась 2008 году. Программа была полностью переписана (не включает в себя строк кода из предыдущего Nomad) и как следствие реализована совершенно по новому.

Рисунок 7 - Nomad.NET

Новый Nomad разработан изначально многопоточным, а значит почти все долгие операции выигрывают время при использовании многоядерного процессора.

Среди достоинств: полная поддержка Unicod, поддержка вкладок (которые в отличие от других менеджеров, не привязаны к панели), мощные системы закладок, поиска и фильтрации, многофункциональная панель управления, поддержка большого количества форматов архивов, FTP папок и плагинов Total Commander.

Total Commander

Первая версия программы стала доступна 25 сентября 1993 года и до 29 октября 2002 года называлась Windows Commander.

Рисунок 8 - Total Commander

К возможностям программы относятся многоязычный двухпанельный вкладочный графический интерфейс, полностью настраиваемые сочетания клавиш, меню и панель инструментов. Поддержка Drag&Drop, встроенный FTP-клиент, с поддержкой SSL/TLS, работа с архивами, как с подкаталогами, групповое переименование файлов, подсчёт и проверка контрольных сумм файлов (SHA1, MD5, CRC32), встроенный просмотрщик файлов, расширенный поиск, поддержка параллельного фонового выполнения и последовательной очереди операций над файлами.

Функциональность программы можно расширить с помощью следующих групп плагинов: архиваторные плагины (Packer Plugins, WCX), плагины внутренней программы просмотра (Lister Plugins, WLX), информационные плагины (Content plugins, WDX) и плагины быстрого поиска.

Unreal Commander

Внешним видом, функциональными возможностями и внутренней работой похож на Total Commander.

Рисунок 9 - Unreal Commander

Файловый менеджер имеет встроенный FTP-клиент, медиа-проигрыватель и просмотрщик графических файлов, отображает системные и скрытые файлы, может изменять их атрибуты, умеет разбирать/собирать файлы

на части. Поддерживает работу с популярными архивами, drag-and-drop, юникод, табы, плагины (написанные, например, для Total Commander), настройку внутренних и внешних редакторов, синхронизацию каталогов, хранитель паролей и игнор-список. А также настройку горячих клавиш меню, цветовые схемы и темы оформления, интерфейс командной строки и интернациональную поддержку.

ViewFD

ViewFD - очень легкий и компактный файловый менеджер.

Рисунок 10 - ViewFD

Он содержит аудио- и видеопроигрыватели (DirectShow, MCI), которые работают со своими списками (M3U, PLS), быстрый просмотр и слайд-шоу для файлов графики, редактирование изображений (с использованием геометрических эффектов, цветовых эффектов и настройки освещенности), группы изображений. Создание AVI файлов и HTML альбомов, калькулятор формул (с возможность построения графиков), просмотр и редактирование таблиц баз данных, выбор окон и заголовков, нажатия клавиш и содержимого экрана. Управление автозагрузкой и контроль запуска процессов, резервное копирование просмотр реестра (с возможностью расширенного поиска). Очистка дисков, директорий и файлов, предотвращающая накопление мусора и обеспечивающая конфиденциальность данных. Кодирование файлов, без контрольной суммы и заголовка (что значительно затрудняет несанкционированное обнаружение и декодирование). Просмотр дисков с возможностью создания образов и копирования фрагментов.

Проводник Windows

Проводник Windows -- это приложение, реализующее графический интерфейс доступа пользователя к папкам и файлам в ОС Microsoft Windows. Проводник в настоящее время является фактически основой графической оболочки пользователя Windows.

Проводник впервые появился в Windows 95, в качестве замены диспетчера файлов и диспетчера программ Windows 3.x. Всё, что после загрузки Windows видит пользователь (пиктограммы рабочего стола, меню «Пуск», панель задач, -- кроме «обоев») -- это Проводник Windows.

В проводнике для Windows 95 каждый каталог открывался в новом окне, в следующих версиях предпочтение было отдано однооконному режиму. В версии Windows 98 появились стрелочки навигации, панель ввода адреса, возможность добавлять дополнительные панели в панель задач, «активный рабочий стол» (фон рабочего стола, как интернет-страница) и возможность запускать приложения по одним щелчком. В Windows NT 4 появилась функция работы проводника в разных процессах. В Windows 2000 и Windows MЕ был добавлен поиск документов и файлов.

В Windows XP Проводник подвергся значительным изменениям, как визуального представления, так и функциональности. В левой части окна появилась панель список задач, для предпросмотра изображений ввёден режим Диафильм и Плитка, для поиска появился анимированный персонаж Microsoft Agent. Для пользователя стало возможным загрузить выбранные папки или изображения в Интернет, без использования FTP и других интернет-интерфейсов, после подключения интернет сайта к Проводнику. Проводник стал способен понимать метаданные многих типов файлов и может записывать DVD-RAM и CD-R диски без помощи сторонних программ.

Панель списка задач и помощник поиска в Windows Server 2003 по умолчанию выключены. В Windows Vista правом верхнем углу появилась панель поиска (вместо Меню «Поиск»), а также стало возможным просматривать эскизы документов Microsoft Office Word, презентаций Microsoft Office PowerPoint, таблиц Microsoft Office Excel и документов PDF.

В Windows 7 произошли кардинальные изменения с панелью задач. Панель быстрого запуска скрыта по умолчанию (программы можно закреплять на панели задач, как в меню пуск). В правом конце панели появилась кнопка, которой можно мвернуть все окна. Меню пуск собирает информацию о доступных действиях для каждой программы и последних открытых файлах. Классический вид меню Пуск не предусмотрен. Изменилась структура дерева проводника.

Q-Dir

Q-Dir -- файловый менеджер, с уникальным четырехпанельным интерфейсом.

Рисунок 11 - Q-Dir

Первый Q-Dir был тесно интегрирован с Проводником. Например, в нём использовались стандартные варианты просмотра панелей. Миниатюры, таблицы, списки, - все было взято из Проводника Windows.

Главными особенностями являются четырехпанельный интерфейс (есть возможность выбора другого количества панелей), мощный файловый фильтр, цветной фильтр (позволяет выбрать различные цвета для разных типов файлов), поддержка технологии Drag-and-drop, встроенная экранная лупа и размер исполняемого файла (около 1 МБ).

ПОСТАНОВКА ЗАДАЧИ

Разработать программу, реализующую алгоритм бинарного дерева (20 элементов). Элементом дерева служит структура факультет. При заполнении дерева элементы должны располагаться в отсортированном порядке согласно ключу. Предусмотреть заполнение дерева из файла (подготовить файл на 20 элементов).

Предусмотреть многоуровневое меню:

1) Заполнение дерева с начала

a) с консоли (циклически)

b) из файла (выбор файла, тек. папка, любая папка)

2) Вставка элемента (с консоли) в дерево вслед за указанным элементом

3) Удаление элемента по ключу

4) Очистка дерева (с выводом удаляемых элементов)

a) безвозвратно

b) с сохранением в файл

5) Вывод дерева

a) на экран

b) в файл

6) Вывод количества элементов

7) Выход

Реализовать алгоритм обработки исключений.

Продемонстрировать работу всех пунктов меню. Продемонстрировать обработку ошибочных ситуаций (ввод данных другого типа, ввод пустых данных, пустое дерево).

Структура “Факультет” имеет следующие поля: “Код факультета” (ключ), “Название факультета”, “Фамилия декана”, ”Количество кафедр” и “ Количество преподавателей”.

Бинарное дерево в отсортированном состоянии позволяет достаточно быстро выполнить вставку, удаление и поиск. Каждый элемент бинарного дерева состоит из информационной части и указателей на левый и правый элементы.

Для выполнения задачи понадобится структура для бинарного дерева, основная функция-меню, которая будет вызывать соответствующие функции в зависимости от выбора пользователя, и собственно сами функции для добавления, удаления, поиска и вывода.

бинарный файловый графический интерфейс

ОПИСАНИЕ ПРОГРАММЫ

На рисунке 1 представлен алгоритм работы функции-меню.

Рисунок 1 - Алгоритм работы функции menu().

Функция menu() представляет собой бесконечный цикл, в котором пользователь производит вызов нужной ему функции. При вводе пользователем символа `A' - будет вызвана функция а(), предназначенная для заполнения дерева; `F' - функция f(), предназначенная для поиска; `L' - функция l(), предназначенная для вывода; `D' - функция d(), предназначенная для удаления; `K' - функция k(), предназначенная для отображения количества введённых элементов; при нажатии `Q' происходит выход из программы; при чего-либо иного на экран выведется сообщение об ошибке и цикл повторится.

При вводе пользователем в любом из пунктов меню некорректной строки учитывается только первый введённый символ (Например, если пользователь вместо символа ввёл слово начинающееся с символа `a' будет вызвана функция a().).

Функции используемые в программе:

void main();

void menu();

void a();

void f();

void l();

void d();

void k();

tree*add(tree*,tree*, int);

tree*find(tree*,int);

tree*del(tree*,int, bool);

void view(tree*,bool);

int mist(bool);

void inorder(tree*);

void preorder(tree*);

void postorder(tree*);

void print(tree*,int);

void finorder(tree*);

- функция "main" : вызывает функцию "menu"

- функция "menu" может вызывать функции a(), f(), l(), d() и k()

- функция "a" - предназначена для заполнения дерева, может использовать функции "add", "find" и "mist"

- функция "f" - предназначена для поиска узла дерева, может использовать функции "find", "view" и "mist"

- функция "l" - предназначена для вывода дерева, может использовать функции "print", "inorder", "preorder", "postorder" и "finorder"

- функция "d" - предназначена для удаления, может

использовать функции "find", "del", "finorder" и "mist"

- функция "k" - вывод колличества элементов дерева

- функция "add" - добавление элемента

- функция "find" - поиск элемента по ключу

- функция "del" - удаление узла дерева, может использовать функцию "view"

- функция "view" - вывод на экран содержимого узла дерева

- функция "mist" - проверка ввода на корректность

- функция "inorder" - предназначена для вывода

дерева в симметричном порядке (на экран),

использует функцию "view"

- функция "preorder" - предназначена для вывода дерева в прямом порядке (на экран), использует функцию "view"

- функция "postorder" - предназначена для вывода дерева в обратном порядке (на экран), использует функцию "view"

- функция "print" - предназначена для вывода дерева боком(на экран)

- функция "finorder" - предназначена для записи в файл всего дерева либо его узла

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

При выборе пользователем в любого из пунктов меню, при вводе некорректной строки учитывается только первый введённый символ, при вводе имени файла первые сто символов, при вводе полей дерева - первые десять.

ТЕСТИРОВАНИЕ

На рисунках 12 - 14 представлена обработка, при вводе ошибочных данных.

Рисунок 12

Рисунок 13

Рисунок 14

На рисунке 15 показан вывод дерева на экран “боком”. На рисунке 16 - ввод элементов из файла и удаление с сохранением в файл, а также отбражение количества элементов. На рисунке 17 - функция поиска и удаление элемента с выводом на экран.

Рисунок 15

Рисунок 16

Рисунок 17

ВЫВОДЫ

В результате тестирования программы ошибок не обнаружено, программа работает корректно. Для программы разработаны и показаны функция меню и специализированные функции, а также продумана обработка ошибочных данных. Поставленная цель достигнута.

ЛИТЕРАТУРА

1. Уолтер Сэвитч. С++ в примерах. Москва: Эком, 1997.

2. В.А. Скляров. Язык С++ и объектно-ориентированное программирование. -Мн.: Выш. шк.,1997.

3. Язык программирования Си. Москва: Производственно-внедренческий кооператив "И Н Т Е Р Ф Е Й С", 1988.

4. Б.В. Керниган,Д.М. Ричи. ЯЗЫК С.

5. В.А. Скляров. Программирование на языках Си и Си++. Мн.: Выш. шк.,1997.

6. Страуструп Бьерн. Язык программирования Си++. М.: Софт,1999. (10 шт.).

7. Шилд Герберт. - Самоучитель C++ / Герберт Шилдт . - СПб : BHV - Санкт-Петербург, 1997. - 511 с.

8. Как программировать на С++ . Дж. Дейтел. Пер. В. Кузьменко . - М. : ЗАО "Издательство БИНОМ", 1998. - 1021 с. : ил.

9. Visual C++ 6 Новые возможности для программистов. Ю. Тихомиров.- СПб.:БХВ-Санкт-Петербург,1998.-496 с.

10. Основы алгоритмизации и программирования. Язык СИ. Е.М.Демидович.Мн.: “Бестпринт” 2003 г.

11.Использование Visual C++ 6. Специальное издание. Грегори К.: Пер. с англ.-М.;СПб.;К.: Издательский дом “Вильямс”, 2001.-864 с.

ПРИЛОЖЕНИЕ

#include<stdio.h>

#include<math.h>

#include<ctype.h>

#include<string.h>

#include<stdlib.h>

#include <windows.h>

char buf[256];

char *rus(char *s) {CharToOem(s,buf); return buf;}

struct tree//структура : содержание полей

{

int info;//код факультета (ключ)

int kaf;//количество кафедр

int pre;// количество преподавателей

char name[10]; //название факультета

char fam[10];// фамилия декана

tree *left;// указатель на левого потомка

tree *right;// указатель на правого потомка

};

//глобальные переменныые:

tree *rt=NULL; //указатель на корень дерева

int count=0; //счётчик элементов

char ss[100]; //строка имени файла вывода для функций

char sss[10]; //строка для функции “mist” (проверки корректности ввода)

int zn; //переменная для функции “mist”

char nam[10],fa[10]; //переменные для передачи данных в функцию “add”

int ka,pr; //

tree *add(tree *root,tree *r, int c) //функция "add" - добавление

//элемента

{if(!r)

{r=new tree;

if(!r){printf(rus("Нет памяти\n")); exit(100);}

r->left=NULL;

r->right=NULL;

r->info=c;

strcpy(r->name,nam);

strcpy(r->fam,fa);

r->kaf=ka;

r->pre=pr;

if(!root) return r;

if(c<root->info) root->left=r;

else root->right=r;

return r;

}

if(c<r->info) add(r,r->left,c);

else add(r,r->right,c);

return root;

}

tree *find(tree *root,int key) //функция "find" - поиск элемента по ключу

{if(root==NULL) return root;

while(root->info!=key)

{if(key<root->info) root=root->left;

else root=root->right;

if (root==NULL) break;

}

return root;

}

void view(tree *r,bool b) //функция "view" - вывод на экран

//содержимого узла дерева

{if(b)

{printf(rus("номер факультета : %d\n"),r->info);

printf(rus("название факультета : %s\n"),r->name);

printf(rus("фамилия декана : %s\n"),r->fam);

printf(rus("количество кафедр : %d\n"),r->kaf);

printf(rus("количество преподавателей: %d\n"),r->pre);

}

}

tree *del(tree *root,int key,bool b) //функция "del" - удаление узла дерева,

// может использовать функцию "view"

{tree *p,*p2;

if(!root) return root;

if(root->info==key)

{if(root->left==root->right)

{printf(rus("Этот элемент удалён\n"));

view(root,b);

count--;

delete root;

return NULL;

}

if(root->left==NULL)

{p=root->right;

printf(rus("Этот элемент удалён\n"));

view(root,b);

count--;

delete root;

return p;

}

if(root->right==NULL)

{p=root->left;

printf(rus("Этот элемент удалён\n"));

view(root,b);

count--;

delete root;

return p;

}

//else

{p2=root->right;

p=p2;

while(p->left) p=p->left;

p->left=root->left;

printf(rus("Этот элемент удалён\n"));

view(root,b);

count--;

delete root;

return p2;

}

}

if(root->info<key) root->right=del(root->right,key,b);

else root->left=del(root->left,key,b);

return root;

}

int mist(bool b) //функция "mist" - проверка ввода на корректность

{zn=0;

int le=strlen(sss);

int k=0;

if(b)

{for(int i=0;i<le;i++)

{

if(!isdigit(sss[i])) k++;

else zn+=(sss[i]-48)*pow(10,le-i-1);

}

return k;

}

else

for(int i=0;i<le;i++)

{

if(!isalpha(sss[i])) k++;

}

return k;

}

void a() //функция "a" - предназначена для заполнения дерева, может

// использовать функции "add", "find" и "mist"

{int inf;

int c;

int z;

int v=1;

do

{z=2;

printf(rus("Ввод\n1 - с клавиатуры\n0 - из файла\n"));

scanf("%s",&sss);

sss[1]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else z=zn;

}while((v)&&((z<0)||(z>1)));

if(z)

{while(1)

{

int v=1;

do

{c=2;

printf(rus("Выбери\n1 - ввод\n0 - стоп\n"));

scanf("%s",&sss);

sss[1]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else c=zn;

}while((v)&&((c<0)||(c>1)));

if(c)

{

int v;

tree *r=NULL;

do

{do

{v=1;

printf(rus("Введите \nномер

факультета \n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка

ввода\n"));

else inf=zn;

}while(v);

r=find(rt,inf);

if(r) printf(rus("Такой элемент уже

есть\n"));

else break;

}while(1);

do

{v=1;

printf(rus("название факультета \n"));

scanf(rus("%s"),&sss);

sss[9]='\0';

v=mist(0);

if(v) printf(rus("Ошибка ввода\n"));

else strcpy(nam,sss);

}while(v);

do

{v=1;

printf(rus("фамилия декана \n"));

scanf(rus("%s"),&sss);

sss[9]='\0';

v=mist(0);

if(v) printf(rus("Ошибка ввода\n"));

else strcpy(fa,sss);

}while(v);

do

{v=1;

printf(rus("количество кафедр \n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else ka=zn;

}while(v);

do

{v=1;

printf(rus("количество

преподавателей \n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else pr=zn;

}while(v);

rt=add(rt,rt,inf);

if(rt)count++; return;

}

else return;

}

}

else

{

FILE*f;

while(true)

{char s[100];

printf(rus("Введите имя файла\n"));

scanf("%s",&s);

s[99]='\0';

f=fopen(s,"r");

if(!f) {printf(rus("Ошибка чтения файла,

введите другое имя\n"));return;}

else break;

}

do

{fscanf(f,"%d",&inf);

fscanf(f,rus("%s"),&nam);

fscanf(f,rus("%s"),&fa);

fscanf(f,"%d",&ka);

fscanf(f,"%d",&pr);

rt=add(rt,rt,inf);

if(rt)count++;

}while(!feof(f));

fclose(f);

}

}

void f() //функция "f" - предназначена для поиска узла дерева, может

// использовать функции "find", "view" и "mist"

{if(!rt){printf(rus("Пусто\n")); return;}

tree *r;

int key;

int v=1;

do

{printf(rus("Введите число (номер факультета)\n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else key=zn;

}while(v);

r=find(rt,key);

if(r)

{

view(r,1);

}

else printf(rus("Элемент не найден\n"));

}

void inorder(tree *root) //функция "inorder" - предназначена для вывода //дерева в симметричном порядке (на экран),

//использует функцию "view"

{if(!root)return;

inorder(root->left);

if(root->info)

{

view(root,1);

printf(rus("\n"));

}

inorder(root->right);

}

void preorder(tree *root) //функция "preorder" - предназначена для вывода//дерева в прямом порядке (на экран),//использует функцию "view"

{if(!root)return;

if(root->info)

{

view(root,1);

printf(rus("\n"));

}

preorder(root->left);

preorder(root->right);

}

void postorder(tree *root) //функция "postorder" - предназначена для вывода //дерева в обратном порядке (на экран),

//использует функцию "view"

{if(!root)return;

postorder(root->left);

postorder(root->right);

if(root->info)

{

view(root,1);

printf(rus("\n"));

}

}

void print(tree *root,int level) //функция "print" - предназначена для

//вывода дерева боком(на экран)

{

if(root->right!=NULL) print(root->right,level+1);

for(int i=0;i<level;i++) printf(rus(" "));

printf(rus("%d\n"),root->info);

if(root->left!=NULL) print(root->left,level+1);

}

void finorder(tree *root) //функция "finorder" - предназначена для записи // в файл всего дерева либо его узла

{if(!root)return;

FILE*e;

e=fopen(ss,"a");

finorder(root->left);

if(root->info)

{fprintf(e,rus("%d\n"),root->info);

fprintf(e,rus("%s\n"),root->name);

fprintf(e,rus("%s\n"),root->fam);

fprintf(e,rus("%d\n"),root->kaf);

fprintf(e,rus("%d\n"),root->pre);

}

finorder(root->right);

fclose(e);

}

void l() //функция "l" - предназначена для вывода дерева, может использовать

// функции "print", "inorder", "preorder", "postorder" и "finorder"

{char s[2];

if(!rt){printf(rus("Пусто\n")); return;}

while(true)

{printf(rus("Введите \nВывод на экран\nB - боком,\nS - симметрично,\nW - сверху,\nH - снизу\nF - Вывод в файл\n"));

fscanf(stdin,"%s",&s);

s[1]='\0';

*s=toupper(*s);

switch(*s)

{case 'B':{printf(rus("\n")); print(rt,0);

printf(rus("\n")); return;}

case 'S':{inorder(rt); printf(rus("\n")); return;}

case 'W':{preorder(rt); printf(rus("\n"));return;}

case 'H':{postorder(rt);printf(rus("\n"));return;}

case 'F':

{printf(rus("Введите имя файла\n"));

scanf("%s",&ss);

ss[99]='\0';

finorder(rt);

return;

}

default : printf(rus("Ошибка ввода\n"));

}

}

}

void d() //функция "d" - предназначена для удаления, может

//использовать функции "find", "del", "finorder" и "mist"

{if(!rt){printf(rus("Пусто\n")); return;}

tree *r=NULL;

int z;

int v=1;

do

{z=2;

printf(rus("Вывод\n1 - на экран\n0 - в файл\n"));

scanf("%s",&sss);

sss[1]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else z=zn;

}while((v)&&((z<0)||(z>1)));

if(z)

{int key;

int v=1;

do

{printf(rus("Введите число (номер факультета)\n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else key=zn;

}while(v);

r=find(rt,key);

if(!r) {printf(rus("Элемент не найден\n"));return;}

if(rt->info==key) { rt=NULL; count=0;

printf(rus("Все элементы удалены\n")); }

else rt=del(rt,key,1);

}

else

{

tree *r=NULL;

int key;

printf(rus("Введите имя файла\n"));

scanf("%s",&ss);

ss[99]='\0';

int v=1;

do

{printf(rus("Введите число (номер факультета)\n"));

scanf("%s",&sss);

sss[9]='\0';

v=mist(1);

if(v) printf(rus("Ошибка ввода\n"));

else key=zn;

}while(v);

r=find(rt,key);

if(!r) {printf(rus("Элемент не найден\n"));return;}

if(rt->info==key)

{

finorder(rt);

rt=NULL; count=0;

printf(rus("Все элементы удалены\n"));

}

else

{

FILE*e;

e=fopen(ss,"a");

fprintf(e,rus("%d\n"),r->info);

fprintf(e,rus("%s\n"),r->name);

fprintf(e,rus("%s\n"),r->fam);

fprintf(e,rus("%d\n"),r->kaf);

fprintf(e,rus("%d\n"),r->pre);

rt=del(rt,key,0);

fclose(e);

}

}

}

void k() //функция "k" - вывод колличества элементов дерева

{if(!count) printf(rus("Пусто\n"));

else printf(rus("Количество элементов = %d\n"),count);

}

void menu()//функция "menu"

{

while(true)

{

char s[2];

printf(rus("Введите \nA - добавить,\nF - найти,\nD - удалить,\nL - вывод дерева,\nK - количество элементов, \nQ - выход\n"));

fscanf(stdin,"%s",&s);

s[1]='\0';

*s=toupper(*s);

switch(*s)

{case'A': a();break;

case'F': f();break;

case'L': l();break;

case'D': d();break;

case'K': k();break;

case'Q': exit(100);

default: printf(rus("Ошибка ввода\n"));break;

}

}

}

void main()//функция "main" : вызывает функцию "menu"

{menu();}

Размещено на Allbest.ru


Подобные документы

  • Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.

    курсовая работа [796,9 K], добавлен 22.02.2016

  • Организация бинарного дерева. Порядок размещения данных в нелинейных структурах. Организация пользовательского интерфейса. Симметричный обход дерева. Параллельная работа обработчиков исключений. Расширенный графический интерфейс и его возможности.

    курсовая работа [426,0 K], добавлен 24.06.2013

  • Рассмотрение нелинейных динамических структур данных в виде бинарного дерева. Построение дерева двоичного поиска. Реализация трех обходов дерева, выведение обходов на экран компьютера. Разработка текста программы. Симметричноправая прошивка дерева.

    контрольная работа [81,6 K], добавлен 14.12.2011

  • Описание структуры бинарного дерева поиска на языке C# среды Visual Studio. Требования к интерфейсу пользователя, структуре данных и программным средствам. Компоненты программных средств, результаты тестирования, диаграммы вариантов использования классов.

    курсовая работа [968,2 K], добавлен 26.01.2013

  • Обзор и комплексный анализ операционной системы Windows Vista, оценка ее преимуществ и недостатков. Разработка программы, которая реализует алгоритм очереди на 20 элементов. Построение блок-схемы и листинг алгоритма, контрольный пример его работы.

    курсовая работа [4,2 M], добавлен 20.11.2013

  • Классификация методов оптимизации. Обзор и выбор языка C#. Алгоритмический анализ задачи, описание алгоритма решения. Графические схемы разработанных алгоритмов. Разработка приложения и результаты тестовых испытаний. Интерфейс пользователя, тестирование.

    курсовая работа [1,6 M], добавлен 08.03.2016

  • Обоснование выбора языка и среды программирования. Обзор и анализ существующих программных решений. Разработка графического и пользовательского интерфейса. Алгоритм бинарного поиска. Методы добавления, удаления элемента из дерева и вывода на экран.

    курсовая работа [1,3 M], добавлен 31.05.2016

  • Составление программы lab3.exe, реализующей удаление элемента из списка перед указанным методом и его сортировку по возрастанию. Описание предикатов, используемых в программе. Проверка на корректный вывод информации. Программа для обхода бинарного дерева.

    контрольная работа [559,3 K], добавлен 20.05.2012

  • Организация таблицы идентификаторов, ее содержание и назначение. Метод бинарного дерева и цепочек. Проектирование лексического анализатора и схема распознавателя. Построение дерева вывода, синтаксический анализатор. Анализ результатов работы программы.

    курсовая работа [1,0 M], добавлен 25.12.2014

  • Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.

    практическая работа [850,0 K], добавлен 16.04.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.