![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
ctpz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
Задача программы вычислять площадь 3d объекта, созданного из треугольников. По какой-то причине программа доходит только до получения информации о точке х. Дальше дело не идет.
Отладчик и компилятор ошибок не выдает. Среда разработки: Dev-cpp. Компилятор: G++
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Честно говоря, не разбирался, но первое, что бросилось в глаза, это странное условие:
Как будто координаты не могут принимать нулевого значения! У Вас есть счётчик числа вершин i, пользуйтесь им ;) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Обращение (x[i]) к пустому вектору.
|
|||
|
||||
ctpz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
Мне надо, чтобы максимально допустимая координата не являлась пустой. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Не совсем понял, что значит пустая координата. Но точка (0,0,0) вполне может являться вершиной какого либо треугольника... Да, наверное, нужен insert... Это сообщение отредактировал(а) feodorv - 20.1.2012, 19:47 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
ctpz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 27.12.2011 Репутация: нет Всего: нет |
1. Но будет как-то странно, если будет куча точек (0,0,0) 2. Что такое insert |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Достаточно одной! У Вас в векторе нет памяти для x[0] (аналогично y[0], z[0], x[1], ...), совсем нет. Её либо нужно заказать, либо воспользоваться методом insert. cplusplus.com C++ : Reference : STL Containers : vector ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Result |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 15.5.2011 Репутация: 3 Всего: 5 |
Если просто "заказать" памяти и писать в нее, будет ли вектор знать про свой состав ? К примеру if(!vect.empty()), будет работать как ожидается ? Это сообщение отредактировал(а) Result - 21.1.2012, 09:14 |
|||
|
||||
Albor |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Безусловно, контролировать количество валидных данных в векторе должен "хозяин" кода. Что касается данной задачи, то, как вариант, можно было создать минимальный вектор координат с количеством элементов равным трём (один треугольник), а ещё лучше использовать метод push_back(), тогда значение возвращённое методом size() будет определять количество правильных данных. Это сообщение отредактировал(а) Albor - 21.1.2012, 10:41 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет, конечно не будет. И вообще я погорячился с заказам памяти, потому что если потом делать перезаказ этой самой памяти (под бОльший объём данных), никто не будет копировать старые данные (а они в векторе не будут числиться существующими) в новую область памяти. Поэтому лучше всего (и корректней всего) пользоваться доступными методами класса vector. И да, vect.empty() (или соответсвующий итератор) значительно лучше чем или ![]() И было бы недурно ввести какой-нибудь класс типа triangle, который описывал бы треугольник сразу (и для задания которого нужно было бы ввести сразу 9 координат трёх его вершин).... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Result |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 15.5.2011 Репутация: 3 Всего: 5 |
а нормальная работа проги и не дойдет до распределения памяти (только если явно не ресольвить) ибо n-ый push_back потрет нелегала.
Это сообщение отредактировал(а) Result - 21.1.2012, 14:34 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |