составить прогамму, помогите пожалуйста
|
|
Арсик | Дата: Суббота, 18.02.2012, 15:09 | Сообщение # 1 |
Арсик
Ранг: Дошколенок (?)
Группа: Пользователи
|
Сообщений: |
19 |
Награды: |
0 |
Статус: |
Offline |
|
составить программу , которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах включают: -номер УДК; -фамилию и инициалы автора; -название; -год издания; -количества экземпяров данной книги в библиотеке; Программа должна обеспечивать: -начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева; добавление данных о книгах, вновь поступающих в библиотеку; -удаление данных о списываемых книгах; -по запросу выдаются сведения о наличии книг в библиотеке, упорядоченных по годам издания
18.02.2012
|
|
|
| |
|
tjulen | Дата: Понедельник, 20.02.2012, 05:25 | Сообщение # 2 |
tjulen
Ранг: Первоклашка (?)
Группа: Пользователи
|
Сообщений: |
35 |
Награды: |
1 |
Статус: |
Offline |
|
Программа - это закодированный алгоритм если что:) Если по Вашему то берете текстовый редактор и тупо вбиваете в константы вашу информацию.
PS: Вообще-то ужасно когда так матерятся, давайте называть вещи своими именами!!! А то "программа может"( да ни чего не может текст по определению), программа содержит информацию о книгах. Караулл!!!!!!!!
20.02.2012
|
|
|
| |
|
alex_edu | Дата: Понедельник, 20.02.2012, 09:52 | Сообщение # 3 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Арсик, как и раньше: что вы уже сделали и что у вас не получилось? Что конкретно не понятно?
20.02.2012
|
|
|
| |
|
AYuD | Дата: Понедельник, 20.02.2012, 10:21 | Сообщение # 4 |
AYuD
Ранг: Магистр (?)
Группа: Пользователи
Должность: информатика, математика
|
Сообщений: |
352 |
Награды: |
4 |
Статус: |
Offline |
|
Quote (Арсик) начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева; Это место поподробнее, пожалуйста.
20.02.2012
|
|
|
| |
|
Маня58 | Дата: Вторник, 21.02.2012, 20:24 | Сообщение # 5 |
Маня58
Ранг: Студент (?)
Группа: Я - учитель
Должность: информатика
|
Сообщений: |
165 |
Награды: |
2 |
Статус: |
Offline |
|
Обычно такие задачи идут в разделе ЗАПИСИ. А вот с двоичным деревом действительно хотелось бы поподробнее. Если не секрет - откуда задача?
21.02.2012
Сообщение отредактировал Маня58 - Вторник, 21.02.2012, 20:24
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 00:36 | Сообщение # 6 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Наверняка имеется ввиду двоичное дерево поиска
22.02.2012
Сообщение отредактировал alex_edu - Среда, 22.02.2012, 00:42
|
|
|
| |
|
AYuD | Дата: Среда, 22.02.2012, 09:27 | Сообщение # 7 |
AYuD
Ранг: Магистр (?)
Группа: Пользователи
Должность: информатика, математика
|
Сообщений: |
352 |
Награды: |
4 |
Статус: |
Offline |
|
Если поиска, то при чём тут начальное формирование данных? Это подошло бы к хранению данных в деревянной структуре. Тогда почему бинарной?
Прикольная опечатка. Древовидной.
22.02.2012
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 11:08 | Сообщение # 8 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Так, что б на стадии "формирования данных" это самое дерево и строилось. Возможно, чтоб обозначить, что нужен не просто, например, связанный список по которому будет потом осуществляться поиск, а именно сразу построение дерева.
А "бинарное", полагаю потому, что положение в дереве определяется двумя состояниями: меньше или иначе. Иначе говоря каждый узел имеет не более двух "детей". Code if (A >= C ) идем направо else идем налево
22.02.2012
Сообщение отредактировал alex_edu - Среда, 22.02.2012, 11:08
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 11:20 | Сообщение # 9 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Если это все задание полностью и исходя их пункта Quote -по запросу выдаются сведения о наличии книг в библиотеке, упорядоченных по годам издания Условие сравнения должно работать по году. Тогда этот последний пункт можно реализовать следующий функцией Code ФункцияВыводаСпискаПоГодам (УказательНаУзел) { Если ЛеваяВетка заполнена то ФункцияВыводаСпискаПоГодам (УказательНаУзел.ЛеваяВетка); Вывод Информации о Книге в текущем узле; Если ПраваяВетка заполнена то ФункцияВыводаСпискаПоГодам (УказательНаУзел.ПраваяВетка); }
22.02.2012
Сообщение отредактировал alex_edu - Среда, 22.02.2012, 11:23
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 11:22 | Сообщение # 10 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Т.е. на стадии вывод никакой сортировки или сравнения годов не будет - все будет сделано на стадии заполнения
22.02.2012
|
|
|
| |
|
AYuD | Дата: Среда, 22.02.2012, 11:25 | Сообщение # 11 |
AYuD
Ранг: Магистр (?)
Группа: Пользователи
Должность: информатика, математика
|
Сообщений: |
352 |
Награды: |
4 |
Статус: |
Offline |
|
Ну вот его данные: -номер УДК; -фамилию и инициалы автора; -название; -год издания; -количества экземпяров данной книги в библиотеке.
Дерево, видимо, такое: Ф. И. Автора --Первая книга ----1900г ----2000г ----2100г --Вторая книга ----1950г --Третья книга ----1800
УДК и количество экземпляров взаимно однозначно связаны с каждой книгой. Кода тут бинарность воткнуть? Странное требование.
22.02.2012
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 12:32 | Сообщение # 12 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Нет. Не путайте. Вы смешали понятия.... Здесь не логическое дерево. А исключительно бинарное. Этому бинарному дереву (согласно задания) важен только год книги. (хотя можно сконструировать сложное условие сравнения где будут учтены хоть все поля). По сути в рамках данной задачи вся информация о книге, кроме года издания - шум, дополнительная ненужная инфа.
Вы создали дерево именно по иерархии: автор, книга, год издания. Это логическое дерево.... Поскольку Арсих до сих пор не ответил - значит ему не очень нужны знания. Поэтому публикую код. Но ориентир не на его задание, а именно на само дерево. Собственно отклонение от задания: там по запросу должен формироваться список, у меня он всегда работает после заполнения библиотеки. (возможно Арсику еще все в файл надо сохранять/читать) Code #include <stdio.h> #include <stdlib.h>
typedef struct sBookInfo { char UDK[10]; char autor[80]; char name[200]; uint year; uint count; sBookInfo *left; sBookInfo *right; } BookInfo;
BookInfo* getBookInfo() { BookInfo *result = (BookInfo*)malloc(sizeof(BookInfo)); printf("Enter UDK: "); scanf("%f",&result->UDK); printf("Enter autor: "); scanf("%80s",&result->autor); printf("Enter name: "); scanf("%200s",&result->name); printf("Enter year: "); scanf("%d",&result->year); printf("Enter books count: "); scanf("%d",&result->count); result->left = NULL; result->right = NULL; return result; } int compareBook(BookInfo *book1, BookInfo *book2) { return (book1->year > book2->year); } void addBook(BookInfo *&parent, BookInfo *newBook) { if (parent == NULL) parent = newBook; else { if (compareBook(parent,newBook)) addBook(parent->left,newBook); else addBook(parent->right,newBook); } } void freeLibrary(BookInfo *book) { if (book == NULL) return; freeLibrary(book->left); freeLibrary(book->right); free(book); } void printLibrary(BookInfo *book) { if (book == NULL) return; printLibrary(book->left); printf("%s\t%d\t%d\t%s\t\%s\n",book->UDK,book->year, book->count, book->autor, book->name); printLibrary(book->right); } int main() { int answer = 1; BookInfo *first = NULL; while (answer == 1) { addBook(first,getBookInfo()); printf("\nAdd another book? (1 - Yes, 0 - No)"); scanf("%d",&answer); } printf("\n"); printLibrary(first); freeLibrary(first); }
22.02.2012
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 12:34 | Сообщение # 13 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
собственно, если усложнить compareBook() то можно учесть все поля
22.02.2012
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 12:36 | Сообщение # 14 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Собственно в вике все нормально объяснено: Бинарное дерево поиска
22.02.2012
|
|
|
| |
|
alex_edu | Дата: Среда, 22.02.2012, 12:52 | Сообщение # 15 |
alex_edu
Ранг: Магистр (?)
Группа: Пользователи
|
Сообщений: |
607 |
Награды: |
7 |
Статус: |
Offline |
|
Перечитал задание ТС: возможно необходимо добавить обработку ситуации когда добавляется книга которая уже есть (т.е. надо просто увеличить количество книг); добавить возможность удаление книги (возможно так же с учетом количества);
Так, что ТС осталось над чем подумать
22.02.2012
|
|
|
| |
|