|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 9, 2003 17:36:37 Люди подскажите нормальный алгоритм для поворота массива на 90 гр. в право или налево, и на 180 гр. но без использования другого массива! желательно что бы это было применительно к бэйсику :) |
|
|
Дата: Ноя 9, 2003 19:10:49 На сколько массив большой? А без друго массива довольно медленно будет работать. |
|
|
Дата: Ноя 9, 2003 19:43:35 размер неизвестный NxN, но врядли будут делать больше 5х5. преподу самому неинтересно будет забивать много чисел. да уж долго, но такое задание |
|
|
Дата: Ноя 9, 2003 20:03:12 Чего-то мне в голову кроме strrev ничего больше не приходит... Ведь a, b, c, d, e должны преобразоваться в e, d, c, b, a, так? Тогда через буфер в один элемент:
char * __cdecl _strrev (
char * string
)
{
char *start = string;
char *left = string;
char ch;
while (*string++) /* find end of string */
;
string -= 2;
while (left < string)
{
ch = *left;
*left++ = *string;
*string-- = ch;
}
return(start);
}
Тупо, медленно... |
|
|
Дата: Ноя 9, 2003 21:01:15 не-е что то не то! массив же а нет строка, должно быть так: исходный: измененный: 123 369 456 258 789 147 |
|
|
Дата: Ноя 9, 2003 21:02:22 скорость не имеет значение, это просто контрольная работа :) |
|
|
Дата: Ноя 9, 2003 21:04:35 Пока только поворот на 90 гр. вправо и с использованием другого массива: Поворот происходит по следующей формуле: [x,y] -> [N-y,x] где x - строки, y - столбцы, N - размерность. mov cx,[N] ;y m_01: mov bp,[N] ;x m_02: mov ax,cx mul [N] add ax,bp mov bx,ax ;bx=y*N+x mov al,[si+bx] push ax mov ax,bp inc ax mul [N] sub ax,cx mov bx,ax ;bx=(x*N)+(N-y) pop ax mov [di+bx],al dec bp jnz m_02 dec cx jnz m_01 si - входной массив di - выходной |
|
|
Дата: Ноя 9, 2003 21:11:58 для поворота влево надо воплотить такую формулу: [x,y] -> [y, N-x] |
|
|
Дата: Ноя 9, 2003 21:22:51 Извини, туплю. Объясни, как ты из 123 получил 369 456 -> 258 789 -> 147 Формулу преобразования можешь написать? |
|
|
Дата: Ноя 9, 2003 21:30:27 он имел ввиду следующее: элемент массива с номером 1 занимает место элемента 3, элем 2 -> 6 и т.д. |
|
|
Дата: Ноя 9, 2003 22:37:40 volodya ну типа пишешь на бумаге массив и переворачиваешь листок на 90 гр. и переписываешь индексы. я что то не думал что это сложно :) |
|
|
Дата: Ноя 9, 2003 23:24:28 он имел ввиду следующее: элемент массива с номером 1 занимает место элемента 3, элем 2 -> 6 и т.д. т.е., a b c d -> c d a b - как я и говорил. массив же а нет строка что ж тут не то? Строка - это тоже массив. Частный случай. И, насколько я понял Johnikum strrev твою проблему решает. Уж не думал я, что настолько сложно поинтерную арифметику к массиву пересобачить :) |
|
|
Дата: Ноя 9, 2003 23:50:20 А тебе надо именно поворот осуществить? Может, препод имел в виду транспонирование матрицы? |
|
|
Дата: Ноя 10, 2003 00:00:24 · Поправил: Johnikum volodya a b c d -> c d a b - как я и говорил это получается отразить относительно горизонтали, а ему повернуть надо, следуя твоему описанию надо так: a b с d -> c a d b - это поворот по часовой стрелке a b с d -> с d a b - это поворот против часовой стрелки |
|
|
Дата: Ноя 10, 2003 00:36:40 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.129 |