R2D2, ну засунь это дело в IC и всё
Этот топик читают: Гость
Ответов: 1528
Рейтинг: 57
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
R2D2 писал(а): Массив A - это массив строк. Мой недочет. |
|||
карма: 25 |
|
Ответов: 8926
Рейтинг: 823
|
|||
Tad, от соревнования отказываюсь, но полагаю, что с MTStrTbl внешних компонентов и совсем не надо
[flood]Только что увидел: оказывается в названии этой таблицы нет большой русской буквы Ы, а есть латынские b и l [/flood] |
|||
карма: 19 |
|
Ответов: 80
Рейтинг: 4
|
|||
Tad писал(а): А фантомный массив Z ?строки с названиями, получаются с парсера xml. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
|
|||
карма: 25 |
|
Ответов: 80
Рейтинг: 4
|
|||
Черт! Куда я смотрел. k я перенес. заместо m - m/(6*rings)
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
R2D2 писал(а): заместо m - m/(6*rings) |
|||
карма: 25 |
|
Ответов: 80
Рейтинг: 4
|
|||
Последняя (на текущий момент) версия кода:
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
R2D2 писал(а): Последняя (на текущий момент) версия кода:
code_30790.txt |
|||
карма: 25 |
|
Ответов: 80
Рейтинг: 4
|
|||
Tad писал(а): Неправда, всё то же.ок |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
и будет k всё время
|
|||
карма: 25 |
|
Ответов: 80
Рейтинг: 4
|
|||
исправил
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Вот примерно так :
И не забывай, что нумерация динамических массивов начинается с 0. |
|||
карма: 25 |
|
Ответов: 80
Рейтинг: 4
|
|||
Хм. Вот ошибку нашел. Сейчас исправлю и напишу вам.
------------ Дoбавленo в 01.10: Tad писал(а): Вот тут НЕ ВЕРЮа зря) что смущает? конкретно в этой программе значения массивов начинаются с 1. Комментарии это конечно хорошо для кого-то, но я в своем коде все прекрасно понимаю, поэтому и не пишу лишний раз "конец цикла WHILE". Если же комментарии нужны для того, чтобы объяснить, как работает программа, то это легко. Tad писал(а): FOR ring:=1 to rings doЦикл колец. Проходит все кольца. Tad писал(а): k:=3*ring*ring-3*ring;количество систем обсчитанных ДО кольца. нужны для полного списка систем и индекса каждой системы (координаты). Tad писал(а): while (m/(6*ring))<=0.25 doтут я заметил интересную закономерность. что бы у меня совпадало с таблицей, системы отсчитываются от правого верхнего края. по сути дела, что бы узнать координаты всех систем необходим только верхний треугольник и левый. количество систем в треугольники, на уровне кольца равно ring+1, а в левом треугольнике - просто число кольца. в этом легко убедиться. затем. стоп, вы что то не то писать начали... правильно: if m<=ring+1 определяется принадлежность к треугольникам. begin; a[k+m]:=z[k+m]; //присваивает имя из списка строк элементу массива. может и не нужно, но пока пусть будет. y[k+m]:=-15-24*ring; //расчет y координаты для элемента верхнего треугольника. в индексе глобальный номер относительно всех систем вообще. формула - чистая геометрия. y координата - высота, прорисовка начинается сверху, значит ставим (-), а значения подбираются исходя из высоты элемента + расстояния между хексами + закономерностей. игрек одна на весь треугольник. x[k+m]:=14+14*(ring-m); //расчет x координаты точно так же. но она уже изменяется для каждого конкретного элемента, поэтому существует привязка к номеру системы. RETROGRADE! Я же говорил, что остальные параметры не нужны... Строим симметрично (не забывая об индексах) нижний треугольник. y[k+3*ring+m]:=-y[k+m]; x[k+3*ring+m]:=-x[k+m]; a[k+3*ring+m]:=z[k+3*ring+m]; else; Теперь что и как будем строить, если элемент принадлежит 2 треугольнику... a[k+m]:=z[k+m]; y[k+m]:=-15-24*(2*ring-m+1); x[k+m]:=14+14*(ring-m); опять волшебные формулы. стоит обратить внимание на игрек. там приходится высчитывать псевдо-номер. делается, опять же, нехитрым путем M-номера верхнего треугольника... затем идет прибавка псевдо-номера, помноженного на постоянную. y[k+3*ring+m]:=-y[k+m]; x[k+3*ring+m]:=-x[k+m]; a[k+3*ring+m]:=z[k+3*ring+m]; находим симметричный треугольник (сим-трия относительно точки О); y[k+3*ring-m]:=-y[k+m]; x[k+3*ring-m]:=x[k+m]; a[k+3*ring-m]:=z[k+3*ring-m]; треугольник, расположенный ниже. не забываем про индексы. y[k+6*ring-m]:=y[k+m]; x[k+6*ring-m]:=-x[k+m]; a[k+6*ring-m]:=z[k+6*ring-m]; И наконец, координаты последнего треугольника. Tad писал(а): inc(m)Все. Теперь нужно вывести эти массивы или значения, без разницы: главное собрать работающую схему. Критикуйте) Мог допустить ошибку. ------------ Дoбавленo в 01.13: Вот как то так... ------------ Дoбавленo в 01.16: Да, и еще. Все координаты строятся относительно центра. Центр вычисляется теми самыми X,Y max, которые были в другом коде. ------------ Дoбавленo в 02.15: Вот, сам же ошибку и нашел. X неправильно определяет. Там две формулы будет. Для четного и нечетного кольца. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
R2D2 писал(а): стоп, вы что то не то писать начали... правильно:
if m<=ring+1 R2D2 писал(а): конкретно в этой программе значения массивов начинаются с 1.Конкретно Delphi писал(а): Все динамические массивы начинаются с индекса = 0. Парядок работ (алгоритм): 1. Получаем число колец. 2. Расчитываем и объявляем размеры массивов. 3. Расчитываем данные и заполняем массивы. 4. Выводим данные 5. Уничтожаем массивы и освобождаем память. |
|||
карма: 25 |
|