Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 413
от 28.11.2003, 18:40

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1274
Отправлено ответов: 2829
Активность: 222.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

vitya
Статус: Профессиональный
Общий рейтинг: 108.05
[Подробней >>]
Avl2k
Статус: Профессиональный
Общий рейтинг: 124.81
[Подробней >>]
Александр
Статус: Начальный
Общий рейтинг: 102.27
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1267. Здравствуйте эксперты!!! Особенно Avl2k! :) Я задавал вопрос №1266 по поводу динамического выделения... (ответов: 2)
Вопрос № 1268. Podskazhite plz gospoda Proffesionali kakim obrazom upakovat' saozdanie TREUGOL'NIKA ( ili KRUGA - n... (ответов: 2)

Вопросов: 2, ответов: 4


 Вопрос № 1267

Здравствуйте эксперты!!!
Особенно Avl2k! :)
Я задавал вопрос №1266 по поводу динамического выделения памяти под 2-х мерный массив!
Это что же получается, что товарищь Архангельский обманывает народ, говоря то, что можно динамически выделить память 2-х мерный массив?
В его книжке написано:
"Можно создавать и многомерные массивы. Например, оператор:
double *M = new double [100][100];
создает динаически и размещает в памяти двумерный массив. При размещении многомерных массивов надо иметь в виду, что первый размер можно задавать переменной, но остальные размеры задаются только константами. Например:
double *M = new double [n][100];"
Кстати, вот что говорит мне компилятор на запись double *M = new double [n][100]; :
E2034 Cannot convert 'double ( *)[4]' to 'double *'.
А не может ли быть дело в компиляторе? У меня просто C++Builder4, а книжка про 5.
С уважением, ILYA D.



Вопрос отправлен: 24.11.2003, 23:46
Отправитель: ILYA D.

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Добрый день, ILYA D.!
Я не ответил на первый вопрос так как уже немного поднадоело на этот вопрос отвечать. Что пишет Архангельский я не знаю. Но решения следующие:


Приложение:

Ответ отправлен: 25.11.2003, 12:11
Отправитель: vitya


Отвечает Avl2k

Здравствуйте, ILYA D.!
Нет, Архангельский не обманывает народ. Под многомерный массив можно выделить память по new, если первая его размерность задана выражением, а остальные _константы_. Если же многомерный массив имеет _динамический_ :) (т.е. не константный) размер по всем измерениям, то под такой массив память по new выделить нельзя.
Пример:
double (*d)[7][8] = new double[n][7][8]; // ok
аналогично
typedef X[7][8];
X *d = new X[n]; // ok
а вот так нельзя:
new double[n][n][n]; // так нельзя
А я понял, что в вопросе №1266 Вам надо было создать по new двумерный массив с переменными размерами по обоим измерениям, или это не так?
С уважением, Avl2k.


Ответ отправлен: 25.11.2003, 12:55
Отправитель: Avl2k


 Вопрос № 1268

Podskazhite plz gospoda Proffesionali kakim obrazom upakovat' saozdanie TREUGOL'NIKA ( ili KRUGA - nevazhno )
v klass "OBJECT"?
Esli vse pisat' v main() - to nema problem:
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
A kak v sluchae s klassom?
chego pisat' v xxx.h?
Ps. Ne so4tite za glupost', prosto tol'ko na4al isuchat' OOP. Zaranee blagodarstvuju.



Вопрос отправлен: 25.11.2003, 14:13
Отправитель: ar43r (qwert_a@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Avl2k

Добрый день, ar43r!
Если Вы хотите сделать классы-обертки для рисования фигур, то можно примерно так:
struct sPoint3D
{
sPoint3D( GLfloat x, GLfloat y, GLfloat z ): m_x( x ), m_y( y ), m_z( z ) {}
GLfloat m_x;
GLfloat m_y;
GLfloat m_z;
};
class cGeomFigure
{
public:
virtual void Draw() = 0;
};
class cTriangle: public cGeomFigure
{
public:
cTriangle( sPoint3D v1, sPoint3D v2, sPoint3D v3 );
virtual void Draw();
protected:
sPoint3D m_v1, m_v2, m_v3;
};
class cSphere: public cGeomFigure
{
public:
cSphere( sPoint3D c, GLfloat r );
virtual void Draw();
};
void cTriangle::Draw()
{
glBegin(GL_TRIANGLES);
glVertex3f(m_v1.m_x, m_v1.m_y, m_v1.m_z);
glVertex3f(m_v2.m_x, m_v2.m_y, m_v2.m_z);
glVertex3f(m_v3.m_x, m_v3.m_y, m_v3.m_z);
glEnd();
}
void cSphere::Draw()
{ /* здесь рисование сферы */ }
// использование
void f()
{
cTriangle t1(sPoint3D(0, 1, 0), sPoint3D(-1,-1, 0), sPoint3D(1,-1, 0));
cSphere s1(sPoint3D(1, 2, 0), 3), s2(sPoint3D(0, 3, 4), 2);
cGeomFigure* a[] = { &t1, &s1, &s2 };
for( int i = 0; i < 3; ++i )
a[i]->Draw();
}
С уважением, Avl2k.

Ответ отправлен: 25.11.2003, 17:33
Отправитель: Avl2k


Отвечает Александр

Доброе время суток, ar43r!
Ne znayu.
Rzberisy sam (sama)!


Ответ отправлен: 26.11.2003, 09:48
Отправитель: Александр



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (28)
C / C++ (22)
Perl (3)
Builder / Delphi (16)
Pascal (18)
Basic / VBA (6)
Java / JavaScript (10)
PHP (12)
Криптография (6)
WinAPI (10)
Пользователю
Windows 95/98/Me (42)
Windows NT/2000/XP (57)
"Железо" (35)
Поиск информации (20)
Администратору
Windows NT/2000/XP (34)
Linux / Unix (14)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (9)
КоАП (6)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное