Здравствуйте! Есть такая задача, нарисуйте квадрат на листе бумаги, этот квадрат поделите на 4-ре части и в каждом квадратике проведите по диагонали линию, получится 8-треугольников (это Элементы). У каждого элемента (треугольника) есть три угла, каждый угол (это узел). Пронумеруйте каждый элемент и узел с лева на право постепенно поднимаясь вверх. Теперь нам нужно заполнить таблицу номерами узлов в определенном порядке, заполнение происходит следующим образом, берется 1-й элемент и его узлы, первая колонка таблицы это i, вторая j, третья m. Этим буквам присваиваем номера узлов начиная начиная с тупого угла треугольника против часовой стрелки!!! И так у первого элемента номера узлов в таблице будут вот такие (i=4; j=1; m=5), у второго элемента (i=2; j=5; m=1) и так далее.
Количество Элементов не постоянно а задается пользователем, но должно быть всегда четным, вот в этм и проблема. Программа пишется на си++ Builder 6.0. Я распределил динамически память (куча), но запутался с массивом и циклом!
Здравствуйте, McZim, Вы писали:
Редкостное соответствие темы и текста....
Попробуй
а) нарисовать картинку (в gif или символами(тогда не забудь обрамить тегами [code]!!!)), чтобы стало понятно как и что ты нумеруешь
б) сформулировать задачу нормально. Задай вопрос!
Я совершенно не понимаю, в чем твоя проблема. Не можешь получить четное количество элементов? Возьми произвольное целое n и умножь его на 2.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, McZim, Вы писали: S>Редкостное соответствие темы и текста.... S>Попробуй S>а) нарисовать картинку (в gif или символами(тогда не забудь обрамить тегами [code]!!!)), чтобы стало понятно как и что ты нумеруешь S>б) сформулировать задачу нормально. Задай вопрос! S>Я совершенно не понимаю, в чем твоя проблема. Не можешь получить четное количество элементов? Возьми произвольное целое n и умножь его на 2.
Я не знаю как правильно организовать массив и цикл, какой массив делать 2-х мерный или нет!!! сколько вообще массивов!!!
Re[3]: Тепловой поток через брус квадратного сечения
Здравствуйте, McZim, Вы писали: MZ>Я не знаю как правильно организовать массив и цикл, какой массив делать 2-х мерный или нет!!! сколько вообще массивов!!!
Ну, судя по тому, что тебе надо получить, нужен банальный одномерный массив структур. Пока что я не могу понять, что ты собрался туда записывать, поэтому при циклы ничего сказать не могу. Опиши задачу более внятно.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, McZim, Вы писали: MZ>>Я не знаю как правильно организовать массив и цикл, какой массив делать 2-х мерный или нет!!! сколько вообще массивов!!! S>Ну, судя по тому, что тебе надо получить, нужен банальный одномерный массив структур. Пока что я не могу понять, что ты собрался туда записывать, поэтому при циклы ничего сказать не могу. Опиши задачу более внятно.
Здравствуйте, McZim, Вы писали: Z>Я не знаю как правильно организовать массив и цикл, какой массив делать 2-х мерный или нет!!! сколько вообще массивов!!!
А, все понятно. Если бы ты сразу привел картинку, то это бы упростило дело:
Так?
Тогда смотри:
Составление таблицы состоит из обхода элементов и обработке каждого. Обход выполняется снизу вверх слева направо. (Цифры в треугольниках обозначают порядок их обработки)
Рассмотрим первую пару элементов:
4--5
|1/|
|/2|
1--2
Что мы можем увидеть? Что в углах стоят числа
[n+N+1]-[n+N+2]
| |
| |
[n]---[n+1]
Где n — это число в левом нижнем углу (у нас 1), а N — количество квадратов в ряду. Соотношение между номерами узлов сохраняется для всех элементов в картинке (домашнее задание: доказать это утверждение) Отметим это и пойдем дальше.
При записи этих чисел в соответствии с правилами обхода узлов мы получим две тройки:
(n+N+1, n, n+N+2)
(n+1, n+N+2, n)
Таким образом, нам осталось понять, какими могут быть эти n. На нашем рисунке видно, что левыми нижними углами квадратов являются числа 1, 2, 4 и 5. Иначе говоря, у нас M (где М — количество строк, на которые мы разрезали базовый прямоугольник) серий по N узлов. Полное количество элементов равно, очевидно, N*M*2.
Оформим это дело в виде цикла:
typedef struct
int i, j, k;
} Elem;
Elem* elements(int N, int M)
{
Elem[] ret = new Elem[N*M*2];
Elem* current= ret;
for(int row=0; row<M; row++)
for(int col=0; col<N; col++)
{
int n=1+row*M+col;
// номер элемента
// заполняем первый элемент из пары:
current->i = n+N+1;
current->j = n;
current->k = n+N+2;
// заполняем второй элемент из пары:
current++;
current->i = n+1;
current->j = n+N+2;
current->k = n;
}
}
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, McZim, Вы писали: Z>>Я не знаю как правильно организовать массив и цикл, какой массив делать 2-х мерный или нет!!! сколько вообще массивов!!! S>А, все понятно. Если бы ты сразу привел картинку, то это бы упростило дело:
Спасибо будем пробовать, я выделил память вот таким образом:
int i=0; int j=0;
int ch;
int k=StrToInt(Edit1->Text);
int quad=k/2;
int m=sqrt(quad);
int n=quad/m;
m++; n++;
HANDLE hHeap=GetProcessHeap();
int **massE=(int **)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,m*n*sizeof(int));
ch=1;
здесь должен идти тот самый массив и циклы в которых я запутался!
Здравствуйте, McZim, Вы писали:
MZ>Спасибо будем пробовать, я выделил память вот таким образом:
Ужас какой. Во-первых, нафига запрашивать квадрат числа, а потом мучительно его раскладывать на множители??? Во-вторых, почему выделяем память под инты, да еще под вдвое меньше интов, чем элементов? В третьих, за каким тебе потребовался вдруг хип процесса, вместо выделения через new?
В общем, советую выкинуть этот код и начать все сначала. Стараясь в каждый момент понимать, что ты делаешь.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, McZim, Вы писали:
MZ>>Спасибо будем пробовать, я выделил память вот таким образом: S>Ужас какой. Во-первых, нафига запрашивать квадрат числа, а потом мучительно его раскладывать на множители??? Во-вторых, почему выделяем память под инты, да еще под вдвое меньше интов, чем элементов? В третьих, за каким тебе потребовался вдруг хип процесса, вместо выделения через new? S>В общем, советую выкинуть этот код и начать все сначала. Стараясь в каждый момент понимать, что ты делаешь.
Во-первых разложение квадрата числа делается для того что-бы посичтать какой у нас будет матрица (стольцы, колонки).
Во-вторых почему в двое меншь, потому что после расчетов получается что мы объединяем треугольники по парно, опять же по расчетам.
В-третьих повторяю еще раз количество элементов не константа, а будет вводиться пользователем, а он может захотеть например 20-элементов, и пожтому здесь нужен динамический массив, память под такой массив выделяьб лучше через "Кучу"!
Re[7]: Тепловой поток через брус квадратного сечения
Здравствуйте, McZim, Вы писали:
MZ>Во-первых разложение квадрата числа делается для того что-бы посичтать какой у нас будет матрица (стольцы, колонки).
Это-то я понял MZ>Во-вторых почему в двое меншь, потому что после расчетов получается что мы объединяем треугольники по парно, опять же по расчетам.
Очень смешно. Как ты собрался хранить шесть узлов (по три на каждый из элементов) в одном инте? MZ>В-третьих повторяю еще раз количество элементов не константа, а будет вводиться пользователем, а он может захотеть например 20-элементов
ага. И сколько будет строк, сколько столпцов если пользователь указал, к примеру, 19? Бесплатный совет: спрашивай строки/столбцы по отдельности и напрямую. Иначе ты рискуешь сильно удивить пользователя. MZ>, и пожтому здесь нужен динамический массив, память под такой массив выделяьб лучше через "Кучу"!
Нда. Настоятельно рекомендую срочно обратиться в ближайший книжный магазин за книжкой по С++. Динамический массив не выделяют через HeapAlloс, кроме тех случаев, когда ты точно знаешь что тебе нужно. Это явно не тот случай.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, McZim, Вы писали:
MZ>>Во-первых разложение квадрата числа делается для того что-бы посичтать какой у нас будет матрица (стольцы, колонки). S>Это-то я понял MZ>>Во-вторых почему в двое меншь, потому что после расчетов получается что мы объединяем треугольники по парно, опять же по расчетам. S>Очень смешно. Как ты собрался хранить шесть узлов (по три на каждый из элементов) в одном инте? MZ>>В-третьих повторяю еще раз количество элементов не константа, а будет вводиться пользователем, а он может захотеть например 20-элементов S>ага. И сколько будет строк, сколько столпцов если пользователь указал, к примеру, 19? Бесплатный совет: спрашивай строки/столбцы по отдельности и напрямую. Иначе ты рискуешь сильно удивить пользователя. MZ>>, и пожтому здесь нужен динамический массив, память под такой массив выделяьб лучше через "Кучу"! S>Нда. Настоятельно рекомендую срочно обратиться в ближайший книжный магазин за книжкой по С++. Динамический массив не выделяют через HeapAlloс, кроме тех случаев, когда ты точно знаешь что тебе нужно. Это явно не тот случай.
Мне интересен вопрос. А где по вашему мнению NEW размещает переменные? (очевидно не в куче, а на бумажном блокнотике у вас в кармане)
Вообщето new это С++ функция которая резервирует в КУЧЕ блок памяти под вашу переменную, смотрит является ли она классом и при необходимости вызывает конструктор. Если вы точно знаете что будете работать со структурами, то HeapAlloc идеальный вариант. Можете для подтверждения почитать на досуге книжечку "Windows 2000 для профессионалов".
Могу ее вам выслать в электронном виде. Там четко рассматривается вопрос с динамическим выделением памяти.
и мне интересно если надо кменьшить массив?
Re[7]: Тепловой поток через брус квадратного сечения
Здравствуйте, McZim, Вы писали:
MZ>Здравствуйте, Sinclair, Вы писали:
S>>Здравствуйте, McZim, Вы писали:
MZ>>>Спасибо будем пробовать, я выделил память вот таким образом: S>>Ужас какой. Во-первых, нафига запрашивать квадрат числа, а потом мучительно его раскладывать на множители??? Во-вторых, почему выделяем память под инты, да еще под вдвое меньше интов, чем элементов? В третьих, за каким тебе потребовался вдруг хип процесса, вместо выделения через new? S>>В общем, советую выкинуть этот код и начать все сначала. Стараясь в каждый момент понимать, что ты делаешь.
MZ>Во-первых разложение квадрата числа делается для того что-бы посичтать какой у нас будет матрица (стольцы, колонки). MZ>Во-вторых почему в двое меншь, потому что после расчетов получается что мы объединяем треугольники по парно, опять же по расчетам. MZ>В-третьих повторяю еще раз количество элементов не константа, а будет вводиться пользователем, а он может захотеть например 20-элементов, и пожтому здесь нужен динамический массив, память под такой массив выделяьб лучше через "Кучу"!
Действительно, ужас.
Если я правильно понял, то Вы пытаетесь реализовать метод конечных элементов для расчета теплового потока через брус. Ну что тут сказать, кроме как RTFM. Теория на что? Где в МКЭ размерность матрицы вычисляется как корень из какого-то числа?!! Это квадратная матрица размерности N x N, где N -- общее количество узлов сетки. Элемент матрицы (i, j) определяет взаимное влияние i-го и j-го элементов друг на друга.
Читайте книги...
Re[9]: Тепловой поток через брус квадратного сечения
Здравствуйте, rulik, Вы писали: R>Вообщето new это С++ функция которая резервирует в КУЧЕ блок памяти под вашу переменную, смотрит является ли она классом и при необходимости вызывает конструктор.
Спасибо, не надо обучать меня основам программирования. R>Если вы точно знаете что будете работать со структурами, то HeapAlloc идеальный вариант. Можете для подтверждения почитать на досуге книжечку "Windows 2000 для профессионалов".
Название книги точно отражает аудиторию, для которой она предназначена. Это профессионалы, работающие под Windows 2000. В данном случае неизвестно, под какой платформой должна работать программа МакЗима, и он совершенно точно не профессионал. Не стоит применять advanced техники программирования, когда еще основные не освоены.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Тепловой поток через брус квадратного сечения
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, rulik, Вы писали: R>>Вообщето new это С++ функция которая резервирует в КУЧЕ блок памяти под вашу переменную, смотрит является ли она классом и при необходимости вызывает конструктор. S>Спасибо, не надо обучать меня основам программирования. R>>Если вы точно знаете что будете работать со структурами, то HeapAlloc идеальный вариант. Можете для подтверждения почитать на досуге книжечку "Windows 2000 для профессионалов". S>Название книги точно отражает аудиторию, для которой она предназначена. Это профессионалы, работающие под Windows 2000. В данном случае неизвестно, под какой платформой должна работать программа МакЗима, и он совершенно точно не профессионал. Не стоит применять advanced техники программирования, когда еще основные не освоены.
Спасибо!
Re[8]: Тепловой поток через брус квадратного сечения
Здравствуйте, PowRTocH, Вы писали:
PRT>Здравствуйте, McZim, Вы писали:
MZ>>Здравствуйте, Sinclair, Вы писали:
S>>>Здравствуйте, McZim, Вы писали:
MZ>>>>Спасибо будем пробовать, я выделил память вот таким образом: S>>>Ужас какой. Во-первых, нафига запрашивать квадрат числа, а потом мучительно его раскладывать на множители??? Во-вторых, почему выделяем память под инты, да еще под вдвое меньше интов, чем элементов? В третьих, за каким тебе потребовался вдруг хип процесса, вместо выделения через new? S>>>В общем, советую выкинуть этот код и начать все сначала. Стараясь в каждый момент понимать, что ты делаешь.
MZ>>Во-первых разложение квадрата числа делается для того что-бы посичтать какой у нас будет матрица (стольцы, колонки). MZ>>Во-вторых почему в двое меншь, потому что после расчетов получается что мы объединяем треугольники по парно, опять же по расчетам. MZ>>В-третьих повторяю еще раз количество элементов не константа, а будет вводиться пользователем, а он может захотеть например 20-элементов, и пожтому здесь нужен динамический массив, память под такой массив выделяьб лучше через "Кучу"!
PRT>Действительно, ужас. PRT>Если я правильно понял, то Вы пытаетесь реализовать метод конечных элементов для расчета теплового потока через брус. Ну что тут сказать, кроме как RTFM. Теория на что? Где в МКЭ размерность матрицы вычисляется как корень из какого-то числа?!! Это квадратная матрица размерности N x N, где N -- общее количество узлов сетки. Элемент матрицы (i, j) определяет взаимное влияние i-го и j-го элементов друг на друга.
PRT>Читайте книги...
Заметьте, если ВЫ правильно поняли
Re[10]: Тепловой поток через брус квадратного сечения
S>Название книги точно отражает аудиторию, для которой она предназначена. Это профессионалы, работающие под Windows 2000. В данном случае неизвестно, под какой платформой должна работать программа МакЗима, и он совершенно точно не профессионал. Не стоит применять advanced техники программирования, когда еще основные не освоены.
Значит вы хотите сказать, что раз я не профессионал, то не должен (не достоен) читать такие книги???
Вы знаете, я не совсем уверен что вы профессионал, потому как очень долго меня пытались убедить что, Heap, к данному виду задачи не подходит, но как только появился человек каторый смог вас довольно веско переубедить, как вы сразу переключились на слабую сторону этой дискусси, т.е. МЕНЯ... Я не считаю что так поступают профессионалы!!!
А дядьку RULIK'а я знаю не по нескольким его проэктам...СПАСИБО за поддержку, вечный тебе Recpect!!!
Re[11]: Тепловой поток через брус квадратного сечения
Здравствуйте, McZim, Вы писали:
MZ>Значит вы хотите сказать, что раз я не профессионал, то не должен (не достоен) читать такие книги???
Я хочу сказать, что раз уж ты не можешь построить цикл перебора квадратной матрицы и не знаешь, какого размера элементы выделять, то вряд ли ты сможешь принять решение об уместности HeapAlloc. MZ>Вы знаете, я не совсем уверен что вы профессионал, потому как очень долго меня пытались убедить что, Heap, к данному виду задачи не подходит,
Я пытался тебя убедить не в этом. Я пытался убедить тебя в том, что в Process Heap в данном случае необходимости нет.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.