|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 10, 2003 10:32:18 · Поправил: masquer Я как-то так транспонировал матрицу 4х4, строчки последовательно расположены. Не знаю, правда, как это к бейсику можно привязать и размер должен быть одинаковым и кратным 4 movq mm0, a movq mm1, b movq mm2, mm0 punpcklbw mm0, mm1 punpckhbw mm2, mm1 movq mm1, mm0 movq mm3, mm2 punpcklbw mm0, mm2 punpckhbw mm1, mm3 movq mm2, mm0 psrld mm2, 16 pslld mm0, 16 por mm0, mm2 movq mm2, mm1 psrld mm2, 16 pslld mm1, 16 por mm1, mm2 movq qword ptr [tm], mm1 movq qword ptr [tm+8], mm0 |
|
|
Дата: Ноя 10, 2003 19:10:41 · Поправил: h0kum Toxic А тебе надо именно поворот осуществить? Может, препод имел в виду транспонирование матрицы? Да именно поворот, вот задание: Матрицу NхN повернуть (без использования вспомогательного массива) на: а) на 90 гр. вправо б) на 180 гр. вправо в) на 90 влево |
|
|
Дата: Ноя 10, 2003 19:17:34 volodya http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4 7 9&lngWId=3 там через массив :( |
|
|
Дата: Ноя 10, 2003 21:40:45 h0kum Есть у меня в голове один вариантик без доп массивов, но он довольно сложный, счас попробую додумать и изложу.. |
|
|
Дата: Ноя 11, 2003 01:44:57 Это поворот на 90:
rotate90:;(array +4, size +8)
mov ebx,[esp+4]
mov edx,[esp+8]
dec edx
lea ecx,[ebx+edx]
imul edx,[esp+8]
lea esi,[ebx+edx]
add edx,ecx
mov ebp,[esp+8]
jmp .l0
.l1:
mov edi,ebp
jmp .l2
.l3:
inc ebx
dec edx
add ecx,[esp+8]
sub esi,[esp+8]
.l2:
mov al,[ebx]
xchg al,[ecx]
xchg al,[edx]
xchg al,[esi]
mov [ebx],al
dec edi
jg .l3
xchg esi,edx
xchg edx,ecx
xchg ecx,ebx
inc ebx
dec edx
add ecx,[esp+8]
sub esi,[esp+8]
dec ebp
.l0:
dec ebp
jg .l1
ret 8
А для поворота на 180 нужно внести такие изменения:
.l2:
mov al,[ebx]
xchg al,[edx]
mov [ebx],al
mov al,[ecx]
xchg al,[esi]
mov [ecx],al
dec edi
jg .l3
|
|
|
Дата: Ноя 13, 2003 22:29:01 вот оно решение, на басике :) рекурсивная. у меня такой же алгоритм был, но без рекурсивности, элементы массива не туда становились. SUB move (i, k, c) IF c <= 4 THEN t = mas(i, k) c = c + 1 IF op >= 0 THEN CALL move(k, m + 1 - i, c) mas(k, m + 1 - i) = t ELSE CALL move(m + 1 - k, i, c) mas(m + 1 - k, i) = t END IF END IF END SUB |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.045 |