Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457

объекты класса TREE

03.11.2012, 22:12. Показов 2450. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в общем, есть класс TREE с кучей переменных и несколькими методами. суть в том, что если в main() создать разные объекты данного класса любым способом, в частности например, созданием в цикле динамического объекта TREE * ps = new TREE, в конце итерации высвобождая динамическую память delete ps, или обычный массив объектов TREE obj[R] и работая с ними в цикле (или как в данный момент у меня - динамический массив объектов), то РЕЗУЛЬТАТ ОДИН во всех случаях: первый объект - нормальный, остальные - кривые. Например (не вдаваясь в подробности работы), метод int TREE::create_tree_reg() должен перед "return P" вывести cout<<"количество выпавших чисел: "<<Q<<endl; для первого всё нормально, а для второго и остальных объектов это происходит в одном случае из чёрт знает скольки. В общем, помогите, без понятия, в чём косяк (main.cpp, строка 95, писал на dev-cpp 4.9.9.2)
Вложения
Тип файла: rar tree.rar (5.0 Кб, 21 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2012, 22:12
Ответы с готовыми решениями:

Поместить в динамически расширяемый массив объекты класса, производные от базового абстрактного класса
Помогите пожалуйста новичку! (мне). Я хочу создать динамически расширяющийся массив указателей на базовый абстрактный класс,...

Классы и объекты в С++, компонента класса и экземпляр класса
Вариант 8. ИЗДЕЛИЕ наименование– char* шифр– char* тип упаковки– char* количество– int 1. Определить пользовательский ...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

12
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
03.11.2012, 22:34  [ТС]
З.Ы. Ещё раскомментируйте там
sprintf(tmpchr, "%d", ps->P);
if (pFile1 != NULL) {fputs(tmpchr,pFile1); fputs(" ",pFile1);}

sprintf(tmpchr, "%f", ps->alpha);
if (pFile2 != NULL) {fputs(tmpchr,pFile2); fputs(" ",pFile2);}

программа вылетит на этом моменте. что не так с дозаписью в текстовый файл?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.11.2012, 21:37
У вас это компилируется?
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
05.11.2012, 01:46  [ТС]
да. чем компилируйте?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 01:53
Разным. А вы Dev-cpp?
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
05.11.2012, 01:58  [ТС]
dev-cpp 4.9.9.2. компилировать надо main.

Добавлено через 3 минуты
а что пишет-то?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 02:03
Цитата Сообщение от Max_92 Посмотреть сообщение
компилировать надо main.
А остальное что - не надо? И в чём смысл тогда? Пишет много чего. И оно ещё у вас и работает?
Миниатюры
объекты класса TREE  
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
05.11.2012, 02:20  [ТС]
смысл в том, что остальные два файла просто подключаются. с main'ом они тоже компилируются. у меня ошибок, предупреждений не выдаёт. версия другая. и project.exe никакой, объектные файлы в процессе не создаются, только main.exe. не первый раз так пишу.

Добавлено через 2 минуты
не вижу если честно никаких повторных объявлений, например.

Добавлено через 5 минут
а подключается всё просто: в файле с вынесенными за класс методами делаем инклюд файла с самим классом (помимо него там ещё разные вещи могут быть, не запрещается), а в файле с функцией main инклюд methods. нажимаем, находясь на нём F9. и никаких прожектов создавать не надо.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 04:09
Цитата Сообщение от Max_92 Посмотреть сообщение
не вижу если честно никаких повторных объявлений
Там не объявления, а определения повторные, из-за того, что methods.cpp подключен в main.cpp. Подключать файлы .cpp - дурной тон.

Добавлено через 3 минуты
Да. Без проекта работает.

Добавлено через 42 минуты
В куске, где запись в файл, что за указатель ps?

Добавлено через 16 минут
char* tmpchr; //временная строковая переменная
А память выделить? Потом попытка записи:
C++
1
sprintf(tmpchr, "%d", ps ->P);
Добавлено через 33 минуты
После записи в файл сразу сделайте:
C++
1
2
fflush(pFile1);
fflush(pFile2);
иначе записанные данные из буфера в файл не попадут, а закрытие файла (с очисткой буфера) произойдёт только после выхода из цикла.
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
05.11.2012, 11:19  [ТС]
alsav22, ps был, когда каждый раз создавался и потом удалялся динамический объект, забыл исправить. теперь там будет "obj[i]."

char * tmpchr = new char[10]. так?

а что по поводу кривости самих объектов? заметили, что нормально работает только obj1, в остальных, например, вместо нормального количества узлов функция возвращает 6-ти значное число с потолка.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 12:10
Цитата Сообщение от Max_92 Посмотреть сообщение
теперь там будет "obj[i]."
&obj[i].
И это не забудьте.
Цитата Сообщение от alsav22 Посмотреть сообщение
После записи в файл сразу сделайте:
fflush(pFile1);
fflush(pFile2);
После этих исправлений запись в файл нормально работает.

Добавлено через 54 секунды
Цитата Сообщение от Max_92 Посмотреть сообщение
а что по поводу кривости самих объектов?
Для этого нужно в код вникать. Уверены, что дело в объектах, а не в функциях?

Добавлено через 5 минут
В dev-cpp при отладке можно как-то следить за значениями переменных? Среда для меня незнакомая, а в Студии, номер с такой компиляцией (без проекта) не проходит.

Добавлено через 23 минуты
У вас в трёх функциях возврат значения не при всех путях происходит: int create_tree_nereg_debug(), int create_tree_nereg(), int create_tree_reg(). Возврат там прописан в конце: else if (z > Nmax) {cout<<"количество выпавших чисел: "<<Q<<endl; return P;}, а если z <= Nmax, то вообще ничего не возвращается.
1
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
05.11.2012, 12:34  [ТС]
alsav22, там два случая: выпавшее второе по счёту число оказалось равным нулю - return 0; z стало больше Nmax (а такое рано или поздно будет, т.к. инкрементируется P на каждой итерации) - return P; дело в том что первый объект, каким бы он ни был, работает всегда нормально, а остальные при выполнении тех же самых действий - ненормально. дело в самих объектах, как мне кажется.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.11.2012, 22:55
Цитата Сообщение от Max_92 Посмотреть сообщение
а такое рано или поздно будет
Весь вопрос в том: рано или поздно? Количество итераций в цикле for (в функциях) у вас ограничено величиной Nmax. Что будет, если за это количество итераций значение z не станет больше Nmax, но произойдёт выход из цикла for()? Тут есть кривизна кода и это, в любом случае, нужно исправить, а потом уже дальше разбираться.

Добавлено через 17 минут
Провёл несложный эксперимент. В функции create_tree_nereg() поставил точку останова перед return, а на входе в функцию сделал cout, чтобы сравнить количество заходов в функцию с количеством выходов по return. При пяти заходах в функцию - только два выхода по return.

Добавлено через 9 часов 40 минут
Цитата Сообщение от Max_92 Посмотреть сообщение
дело в том что первый объект, каким бы он ни был, работает всегда нормально
Только потому, что у вас последовательность псевдослучайных чисел всегда одинакова. Сделайте в main(): #include <ctime> и srand(time(NULL)), и увидите, что и с первым будет то правильно, то неправильно.
заметили, что нормально работает только obj1, в остальных, например, вместо нормального количества узлов функция возвращает 6-ти значное число с потолка.
Что возвращает вы не знаете. Вы видите, что выводит cout, как возвращаемое значение. Когда возврат происходи не через return, то возвращаемого значения для cout просто нет, и cout выводит мусор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2012, 22:55
Помогаю со студенческими работами здесь

Объекты класса
Приветствую вас) Подскажите пожалуйста какая структура у класса и его объектов в c++bilder К примеру создание класса и 3-х...

Объекты абстрактного класса
Разбираю пример. В программе задается сразу 6 объектов. А нужно, чтобы количество объектов вводилось пользователем с клавиатуры. ...

Объекты класса. Наследование
Помогите написать программу которая подсчитывает объекты класса используя наследование.

Указатели на объекты класса
Здравствуйте. помогите новичку. есть проблема с освоением программирования на VC++. пытаюсь скомпилировать вот этот пример из книги: ...

Vector ссылок на объекты класса
У меня есть свой класс объекта. И при создании новых экземпляров данного объекта, мне нужно чтобы в vector заносилась ссылка на него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru