![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
sincendia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Здравствуйте, очень прошу помочь разобраться в коде программы.
Я заказала готовый код программы (turbo C++ 3) для решения задачи (описываю ниже), но некоторые вещи мне в нем непонятны (мне нужно делать структурные схемы алгоритмов). Пожалуйста, помогите перевести код с С++ на русский язык или хотя бы сделать его схему) Особенно интересно понять для чего нужны все функции, использованные в программе (incer, printT...), как они работают, для чего нужны некоторые переменные. А тот мальчик, который мне это всё прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры двоичного дерева. Задача В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают: • Номер УДК • Фамилию и инициалы автора • Название книги • Год издания • Количество экземпляров Программа должна обеспечивать: • Начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева • Добавление данных о книгах, вновь поступающих в библиотеку • Удаление данных о списанных книгах • По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам Вот собственно код:
Модератор: не забываем пользоваться кнопочкой "Код" Это сообщение отредактировал(а) bsa - 10.1.2010, 17:35 |
|||
|
||||
fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Сначала лучше синтаксис понять. Половина вопросов по функциям сразу отпадут сами собой.
Для этого нужен самоучитель с названием по типу "С++ для чайников", "с++ за 1 день" и т.д. и денек времени. Если чего не понятно в алгоритме попробуй нарисовать его на бумаге, т.е. посмотреть как он работает описав каждый шаг в "ручном режиме". Понимание не заставит себя долго ждать. Это сообщение отредактировал(а) fry - 8.1.2010, 05:03 |
|||
|
||||
sincendia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Я синтаксис понимаю на уровне "все, что не касается структур и классов". Всякие там циклы, условия и самое простое я в курсе. Я читала книжки, но в общем виде не понимаю. Тем более код чужой, вдвойне сложнее, что вот он имел ввиду под переменными l, r, p, v, pv? Это вообще непонятно... Может поможете хотя бы в этом? Понять, для чего какая переменная хотя бы, исходя из логики программы. Очень прошу, помогите! или хотя бы как пример объясните вот этот кусок, как можно подробнее:
Добавлено @ 05:15 и что означает запись (в начале): node *first(int udk,char fio[25],char naz[25],int god,int kol); и далее в главной функции: node *root=first(123,"Petrov I. G","cxemotexnika",2000,55); ? Это сообщение отредактировал(а) bsa - 10.1.2010, 17:36 |
|||
|
||||
andrew_121 |
|
||||||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
это рекорд! Добавлено @ 05:30
декларация функции.
вызов этой же функции. Добавлено @ 05:35
Это сообщение отредактировал(а) andrew_121 - 8.1.2010, 05:37 -------------------- Удалил аккаунт. Прощайте! |
||||||
|
|||||||
sincendia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Простите за глупый вопрос, но что значит "инициализация поля?"
Это сообщение отредактировал(а) sincendia - 8.1.2010, 05:45 |
|||
|
||||
fry |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Объявление функции.
создание корневого узла. Из него "растет" дерево.
end line вестимо. Это перевод строки. ЗЫ Код как с бодуна написан. Вывод: мальчика, точнее код, побоку. Это сообщение отредактировал(а) fry - 8.1.2010, 05:48 |
||||||||||
|
|||||||||||
sincendia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Большое спасибо за разъяснение! Код мне самое не нравится, нет бы каждое действие по функциям расписать.. а тут все попросту не по порядку (компилятору то на это пофигу, а вот мне нет).
fry, Было бы так здорово если бы Вы смогли также прокомментировать и остальной код. Времени разбираться совсем нет, а для составления схемы пойдет (да и для оптимизации методом копи-паст) |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
нод - это некая структура. у нее есть поля(данные). присваивание им значений = инициализация(гуру, прошу не придираться! в контексте ТС, такой ответ весьма точен). -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
fry |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Это уже хорошо.
От этой мысли меня бросает в дрожь. ![]() Если серьезно, то лучше отвечать на конкретные вопросы. На самом деле алгоритм весьма прост. Прокомментированная мной функция "смотрит" есть ли в целевом узле информация, другими словами он вообще существует или нет, если нет, то создает там объект с информацией о книге, если существует, то рекурсивно вызывает ту же функцию для левой и правой ветки. Функция удаления работает точно также, только вместо создания организует рекурсивное удаление объектов дерева. Функция first создает объект типа node (чем должен заниматься, по хорошему его конструктор). PrintT выводит данные обходя дерево также как и описанные выше функции. Смысл printT c level'ом я ч-то не очень понял. DelAll вообще штука, по моему, непонятная (читай не нужная). Эта функция просто приравнивает все указатели на объекты значению NULL (или 0 если так легче), но никак не "удаляет все". Это сообщение отредактировал(а) fry - 8.1.2010, 06:27 |
||||
|
|||||
sincendia |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Тогда я попробую сформулировать вопросы
1. Зачем два раза инициализируется одна и та же функция в двух вариантах. Что здесь означает level?
2. Первую часть кода функцию incer я из объяснений поняла, а что делает вторая (после else)?
3. Кусок с удалением дерева и списания книги для меня вообще темный лес=(((
4. Как работает функция incer после введения данных о книгею Что значит cin.getline(fio, 255) и cin.get();? Не проще ли было заполнять данные прямо в функции, а не до нее?
5. И если можно какие нибудь советы по составлению схемы и\или оптимизации кода. Заранее спасибо |
||||||||
|
|||||||||
fry |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Рекурсивно ищет пустое место для того, чтобы записать информацию.
результат гугления: http://programmersclub.ru/33/
Единственный реальный совет: когда разберешься как это работает, перепиши сама и поймешь, что написанное ни есть гуд. ЗЫ алгоритм работы всей программы в кратце расписал в предыдущем посте. Это сообщение отредактировал(а) fry - 8.1.2010, 06:24 |
||||||
|
|||||||
sincendia |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Еще вопросики. Только не ругайтесь... Для чего в описании incer исползуется двойной указатель (на root)
и как следствие в ее выполнении берется адрес root. я вот не совсем понимаю самого приципа с этими чертовыми указателями.
что означают void или node в описании функций? (понимаю, что node это структура. а void это че то пустое). почему если исп-ся node, перед названием функции используется указатель?
Добавлено через 5 минут и 11 секунд Зачем нужны указатели на l и r?
Добавлено через 7 минут и 31 секунду или даже не знаю.. я так то изначально сама программу хотела писать, но не нашла, как строить двоичное дерево и как с ним работать. Не объясните как? Или мб какие-нибудь ссылки Добавлено через 10 минут и 3 секунды Хотя и на этом огромное спасибо. Много стало более понятным! :-* Еще бы чуть чуть разобраться... Хотела задать еще один глупый вопрос: Что делает оператор ->? Только попроще Это сообщение отредактировал(а) sincendia - 8.1.2010, 06:28 |
||||||||
|
|||||||||
fry |
|
||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Даже и не думал. ![]()
"Двойной указатель": - Если объект передается не через указатель, то создается его копия, т.е. все изменения не затрагивают исходный объект, который "передавался" в функцию. - Если передается указатель на объект, то функция "работает" не с копией объекта, а с самим объектом. - Если используется указатель на указатель, то это означает, что функция может изменять как сам объект, так и указатель, который на него указывает, т.е. это просто вариант передачи указателя с целью его изменения. Конкретно в incer он используется для инициализации (создания) объекта node при условии, что переданный в нее указатель на объект ссылается на NULL, т.е. сам объект не существует.
При том, что
, то - да, указатель на root.
гугл, гугл и еще раз гугл.
Неопределенный тип или "ничего". Если функция возвращает void, то считай, что она вообще ничего не возвращает. node - это структура, описанная в начале, содержит данные о книге и указатели на два других объекта node.
object->something тоже что и (*object).something *object Если проще, то "указатель на объект --> объект" Это все написано в самоучителях, все просто, а печатать долго. В гугле инфы про это тоже море. Это сообщение отредактировал(а) fry - 8.1.2010, 06:41 |
||||||||||||||
|
|||||||||||||||
sincendia |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
В том то и дело, что я не совсем понимаю, что написано в этих самоучителях. Это все проще некуда, я знаю, но не понимаю.. Проще говоря мое непонимание от самых азов начинается. Вот например я не понимаю значение слова "возвращать" в фразе" Если функция возвращает void, то считай, что она вообще ничего не возвращает". Что значит "возвратить значение"? Ну не понимаю, да я дурочка))
Не понимаю что в общем должно быть в скобках после названия функции.
Void - ясно (если пойму значеник слова возващать), printT - ясно, а в скобках это для чего?
Это да. я видела в книжке, но опять же не понимаю((( Можно как то более по-русски это выразить?)) Добавлено через 1 минуту и 36 секунд И все таки для чего нужны указатели на l r в описании стуктуры:
и для чего ";" после скобки? Добавлено через 10 минут и 21 секунду
Вообще не поняла почему эти строки идут до функции main.... Добавлено через 12 минут и 59 секунд Простите за предыдущую глупость |
||||||||
|
|||||||||
sincendia |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.1.2010 Репутация: нет Всего: нет |
Все. Я почти во всем разобралась, кроме функции delet. Вы не могли бы ее прокомментировать что да как?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |